Connect FlutterFlow to StatusCake using a FlutterFlow API Group pointing at the StatusCake API v1 (api.statuscake.com/v1) with a Bearer token Authorization header. Fetch your uptime tests and their up/down status into a mobile dashboard ListView. For alerting when a site goes down, route StatusCake webhooks through a Cloud Function into Firestore — FlutterFlow apps cannot receive incoming webhooks directly.
| Fact | Value |
|---|---|
| Tool | StatusCake |
| Category | DevOps & Tools |
| Method | FlutterFlow API Call |
| Difficulty | Beginner |
| Time required | 30 minutes |
| Last updated | July 2026 |
Why connect FlutterFlow to StatusCake?
StatusCake monitors your websites and APIs from data centers worldwide, checking whether each site returns a successful response within a timeout threshold. When a monitored site goes down, StatusCake triggers alert notifications. The service offers a free tier with limited uptime tests and paid plans from around $20 per month for additional tests and shorter check intervals — verify current pricing and tier limits at statuscake.com. For founders managing multiple client sites or products, a StatusCake mobile dashboard built in FlutterFlow provides instant visibility into which sites are up or down without opening a laptop or navigating to the StatusCake web app.
The StatusCake API v1 at https://api.statuscake.com/v1 uses straightforward Bearer token authentication — just set the Authorization header to 'Bearer YOUR_API_KEY' and every call authenticates. Compared to other tools in the DevOps category (Zabbix needs JSON-RPC, Travis CI needs a special header pair, Vultr's token can destroy servers), StatusCake is genuinely the simplest auth model: one header, one key. The downside is that the same key can also delete your monitoring tests, so shared apps should still proxy it.
The most important architectural clarification for founders building a StatusCake FlutterFlow integration is about alerting: you cannot build a downtime notification system by having the FlutterFlow app poll the StatusCake API every few seconds. FlutterFlow apps only run when a user has the app open — they cannot run background tasks or receive incoming HTTP requests (webhooks). The right alerting pattern is: StatusCake fires a webhook to a Firebase Cloud Function → the function writes the alert to a Firestore collection → the FlutterFlow app reads from Firestore with a real-time listener, and optionally Firebase Cloud Messaging delivers a push notification to the device. This tutorial covers the basic read dashboard in detail and the alerting pattern in the optional final step.
Integration method
FlutterFlow connects to StatusCake through an API Group pointing at https://api.statuscake.com/v1 with a Bearer Authorization header using the StatusCake API key. The GET /uptime endpoint returns all monitoring tests as a data[] array — each item includes test name, status, and uptime percentage. Because the StatusCake API key can also delete or create monitoring tests, any app shared with multiple users should proxy the key through a Firebase Cloud Function rather than shipping it in the FlutterFlow client binary.
Prerequisites
- A StatusCake account at statuscake.com with at least one uptime test configured
- A StatusCake API key generated from your account settings (User Menu → User Details → API Key)
- A FlutterFlow project with the API Calls panel accessible
- For alerting features: a Firebase project with Firestore enabled and Cloud Functions (Blaze plan)
- For push notifications: Firebase Cloud Messaging configured and the OneSignal or Firebase native integration enabled in FlutterFlow
Step-by-step guide
Generate your StatusCake API key
Sign in to your StatusCake account at app.statuscake.com. Click your profile name or avatar in the top-right corner to open the account menu. Select User Details from the dropdown. On the User Details page, scroll to the API section. Click Generate New API Key if none exists, or copy your existing API key using the copy button. The key is a long alphanumeric string (typically 40+ characters). Understand what this API key can do before deciding where to store it. The StatusCake API key is account-scoped: it can read all your monitoring tests, but it can also create new tests, delete existing tests, and modify alert contacts. For a personal app only you install on your own phone, placing the key directly in the FlutterFlow API Group header is acceptable — the risk is low when only one person uses the app and it is never published. For any app you share with colleagues or distribute via an app store, the key must be proxied through a Cloud Function as described in Step 3. Keep the API key copied to your clipboard or note it in your password manager. You will use it in the next step when configuring the FlutterFlow API Group.
Pro tip: StatusCake API keys do not have expiration dates by default. If you revoke and regenerate a key (for security rotation), you will need to update it in all places it is stored — in the FlutterFlow API Group for personal apps, or in your Cloud Function environment configuration for proxied apps.
Expected result: You have a StatusCake API key copied to your password manager. You have decided whether to use it directly in FlutterFlow (personal app) or proxy it through a Cloud Function (shared or published app).
Create the FlutterFlow API Group with the StatusCake Bearer header
In FlutterFlow, click API Calls in the left navigation panel. Click + Add → Create API Group. In the Group Name field, type 'StatusCake'. In the Base URL field enter https://api.statuscake.com/v1 — no trailing slash. This is the only version of the API currently in use; older API v2 URLs are deprecated and return different response shapes. In the Headers section, click Add Header. Set the Key to Authorization and the Value to Bearer YOUR_API_KEY — replace YOUR_API_KEY with your actual key string, keeping the word 'Bearer ' (capital B, followed by a space) before it. The full header value should look like: Bearer abcdef1234567890abcdef1234567890abcdefgh. Click Save Group. Now add the main API Call: click + Add inside the StatusCake group → Create API Call. Name it 'Get Uptime Tests'. Set method to GET and path to /uptime. Click the Variables tab — no variables needed for this call since it returns all tests for the account. Click Save. In the Response & Test tab, click Test API Call. After a successful test, you should see a JSON response with a data[] array at the top level. Each item in data[] represents one monitoring test. Click Generate JSON Paths to create path bindings from the response. The key JSON paths to note are: $.data[*].id, $.data[*].name, $.data[*].website_url, $.data[*].status (returns 'up' or 'down'), $.data[*].uptime (a float representing uptime percentage), $.data[*].check_rate (seconds between checks), $.data[*].last_tested_at (ISO timestamp of the last check). If you are building a shared app, skip to Step 3 before proceeding with widget binding. For a personal app, continue directly to Step 4.
1{2 "group_name": "StatusCake",3 "base_url": "https://api.statuscake.com/v1",4 "headers": [5 { "key": "Authorization", "value": "Bearer YOUR_STATUSCAKE_API_KEY" }6 ],7 "calls": [8 {9 "name": "Get Uptime Tests",10 "method": "GET",11 "path": "/uptime",12 "json_paths": [13 "$.data[*].id",14 "$.data[*].name",15 "$.data[*].website_url",16 "$.data[*].status",17 "$.data[*].uptime",18 "$.data[*].check_rate",19 "$.data[*].last_tested_at"20 ]21 }22 ]23}Pro tip: StatusCake's API key goes in the Authorization header as 'Bearer KEY' — not in a query parameter and not in a custom 'API-Key' header. Using the wrong format returns a 401 Unauthorized response.
Expected result: The StatusCake API Group is saved. The Get Uptime Tests call is configured, and a test returns the data[] array with your monitoring tests and their status fields. JSON Paths are generated and visible in FlutterFlow's response mapping panel.
(Shared apps) Optional Cloud Function proxy for the StatusCake API key
Skip this step if you are building a personal app only you will use on your own device. For any app shared with team members, clients, or published to the app store, deploy a Firebase Cloud Function proxy to keep the StatusCake API key server-side. The proxy for StatusCake is simpler than the Vultr proxy because StatusCake's API is read-heavy for dashboard use — you only need to proxy GET calls. Create a new Firebase Cloud Function. In the Firebase Console, navigate to your project → Functions → Create Function, or add it to an existing functions project. Paste the proxy code shown in the Code field below. Set the StatusCake API key using Firebase Functions environment configuration: 'firebase functions:config:set statuscake.key="YOUR_API_KEY"' from the Firebase CLI. Deploy the function and copy its HTTPS trigger URL. Back in FlutterFlow, update the StatusCake API Group's Base URL to the proxy URL instead of https://api.statuscake.com/v1. Remove the Authorization header from the FlutterFlow API Group — the proxy adds it server-side. From this point forward, all StatusCake calls route through the proxy and the API key never leaves your Cloud Function environment.
1// Firebase Cloud Function: statusCakeProxy/index.js2const functions = require('firebase-functions');3const fetch = require('node-fetch');45// Set key: firebase functions:config:set statuscake.key="YOUR_KEY"6const SC_KEY = functions.config().statuscake.key;7const SC_BASE = 'https://api.statuscake.com/v1';89exports.statusCakeProxy = functions.https.onRequest(async (req, res) => {10 // CORS for FlutterFlow web builds11 res.set('Access-Control-Allow-Origin', '*');12 res.set('Access-Control-Allow-Methods', 'GET, OPTIONS');13 res.set('Access-Control-Allow-Headers', 'Content-Type');14 if (req.method === 'OPTIONS') { res.status(204).send(''); return; }1516 // Only allow GET requests (read-only for dashboard)17 if (req.method !== 'GET') {18 res.status(403).json({ error: 'Only GET requests are permitted' });19 return;20 }2122 // Whitelist safe read paths23 const path = req.path || '/';24 const allowed = ['/uptime', '/pagespeed', '/ssl', '/contact-groups'];25 if (!allowed.some(p => path.startsWith(p))) {26 res.status(403).json({ error: 'Path not in whitelist' });27 return;28 }2930 const qs = Object.keys(req.query).length31 ? '?' + new URLSearchParams(req.query).toString()32 : '';33 const url = `${SC_BASE}${path}${qs}`;3435 const scRes = await fetch(url, {36 headers: { 'Authorization': `Bearer ${SC_KEY}` }37 });38 const data = await scRes.json();39 res.status(scRes.status).json(data);40});41Pro tip: This proxy only allows GET requests and whitelists only read-only StatusCake endpoints. Write operations (POST /uptime to create a test, DELETE /uptime/{id} to delete one) are blocked at the proxy level — add them to the whitelist only if your app genuinely needs to manage tests.
Expected result: The Cloud Function is deployed and the StatusCake API Group in FlutterFlow points at the proxy URL. Testing the Get Uptime Tests call through the proxy returns the same data[] array as the direct call. The StatusCake API key is no longer visible in any FlutterFlow field.
Build the uptime dashboard ListView with green/red status coloring
Open the FlutterFlow page where you want the uptime dashboard. Select the page itself and in the Backend Query panel, click + Add → select the StatusCake API Group → Get Uptime Tests. Set this as a page-level query so the list loads immediately when the page opens. Add a ListView to the page. Inside it, create a list item template — a Container containing a Row with three areas: a status chip on the left, a Column with the test name and URL in the center, and the uptime percentage on the right. For the status chip: add a Container (small, roughly 60×28 dp) with a Text widget inside showing 'UP' or 'DOWN'. Select the Container and open Conditional Logic. Set the condition: if the JSON Path value $.data[*].status equals 'up' (lowercase), set the background color to green (#22C55E) and the text to 'UP'. Otherwise (status is 'down' or any other value), set the background to red (#EF4444) and text to 'DOWN'. Bind the test name Text widget to $.data[*].name. Bind the URL Text widget to $.data[*].website_url (truncate it at 30 characters using a FlutterFlow Custom Function if needed). Bind the uptime percentage Text to $.data[*].uptime — format it as '99.98%' using a Custom Function that appends the percent sign. Add a Pull To Refresh action on the ListView: open the ListView's Actions panel, add a Refresh action that re-runs the page Backend Query. Users swipe down to get the latest status. For the test detail screen: add a FlutterFlow page named 'Test Detail'. Add page parameters for id (String), name (String), and status (String). On the ListView item Container, add an On Tap action → Navigate → Test Detail, passing the bound values from the list item. On the Test Detail page, add a second Backend Query: GET /uptime/{{ id }} (add this API Call to the StatusCake group with an id variable). This returns fuller detail for a single test including check_rate, locations[], and contact_groups[]. If you need help wiring the response bindings and conditional status logic, RapidDev's team builds FlutterFlow integrations like this every week — free scoping call at rapidevelopers.com/contact.
Pro tip: StatusCake's status field values are lowercase strings: 'up' and 'down'. Build your conditional logic with these exact lowercase values. The uptime field is a float (e.g., 99.98) — bind it to Text and append '%' rather than trying to format it as a percentage inside the JSON Path.
Expected result: The page loads a ListView of StatusCake monitoring tests. Each row shows a green 'UP' or red 'DOWN' chip, the test name, URL, and uptime percentage. Pull-to-refresh re-fetches the list. Tapping a test navigates to a detail screen showing full test configuration.
Set up StatusCake down alerts via Cloud Function webhook, Firestore, and push notifications
This step is optional for founders who want real-time push notifications when a site goes down — not just a manual refresh-based dashboard. It requires a Firebase project with Firestore and Cloud Functions (Blaze plan). FlutterFlow apps cannot receive incoming webhook requests — a mobile app runs only when the user has it open. The alerting chain is: StatusCake detects a site is down → StatusCake fires a webhook HTTP POST to a Cloud Function URL → the function writes a down-alert document to a Firestore collection → FlutterFlow listens to that Firestore collection in real time → an alert appears in the app without the user pulling to refresh → optionally, Firebase Cloud Messaging delivers a push notification to all subscribed devices even when the app is closed. To configure the webhook in StatusCake: log into your StatusCake account and navigate to Alerting → Contact Groups. Create a new Contact Group (or edit an existing one) and add a Webhook alert type. Paste your Cloud Function's HTTPS trigger URL as the webhook destination. StatusCake will POST a JSON payload to this URL when a test transitions from up to down (and optionally when it recovers). Create a Firebase Cloud Function that receives the StatusCake webhook POST, parses the payload (which includes fields like TestID, TestName, Status, URL, and Down timestamp), and writes a new document to a Firestore collection called 'statuscake_alerts'. In FlutterFlow, add a real-time Backend Query on the page using Firestore → read the 'statuscake_alerts' collection sorted by timestamp descending. Bind a separate alerts section or a Notification badge to this query — when a new document appears, the ListView updates automatically. For push notifications: in FlutterFlow's Settings → Integrations → Firebase Cloud Messaging, enable push notifications. The Cloud Function can use the Firebase Admin SDK to send a push notification to subscribed device tokens whenever a down-alert document is created in Firestore.
1// Firebase Cloud Function: statusCakeWebhook/index.js2const functions = require('firebase-functions');3const admin = require('firebase-admin');4admin.initializeApp();56exports.statusCakeWebhook = functions.https.onRequest(async (req, res) => {7 if (req.method !== 'POST') { res.status(405).send('Method Not Allowed'); return; }89 const payload = req.body;10 // StatusCake webhook payload fields (verify field names in SC docs)11 const alert = {12 test_id: payload.TestID || payload.test_id || '',13 test_name: payload.TestName || payload.test_name || '',14 url: payload.URL || payload.url || '',15 status: payload.Status || payload.status || '',16 down_at: payload.DownTime || payload.down_at || new Date().toISOString(),17 received_at: admin.firestore.FieldValue.serverTimestamp()18 };1920 // Write alert to Firestore21 await admin.firestore()22 .collection('statuscake_alerts')23 .add(alert);2425 // Optional: send FCM push notification to subscribed devices26 // const message = {27 // notification: { title: `${alert.test_name} is DOWN`, body: alert.url },28 // topic: 'statuscake_alerts'29 // };30 // await admin.messaging().send(message);3132 res.status(200).send('OK');33});34Pro tip: StatusCake webhook payloads include both down-event and recovery-event calls. The Status field will be 'Down' for alerts and 'Up' for recoveries. Store both in Firestore with a status field so the FlutterFlow app can show active outages vs resolved ones in separate lists.
Expected result: StatusCake is configured to POST webhook alerts to the Cloud Function. A test downtime event creates a new document in the Firestore 'statuscake_alerts' collection. The FlutterFlow app's Firestore real-time query shows the alert immediately without a manual refresh. If push notifications are configured, a device notification appears even when the app is closed.
Common use cases
Personal uptime dashboard for a solo founder managing multiple websites
A FlutterFlow home screen showing all StatusCake monitoring tests with green 'Up' or red 'Down' status chips, the uptime percentage for the last 7 days, and the time of the last status check. The StatusCake API key lives directly in the API Group for this personal-use-only app since no other users see it. A pull-to-refresh gesture fetches the latest status and takes about one second. This replaces checking the StatusCake web app every morning.
A home screen ListView where each item shows a website name, a green 'Up' or red 'Down' chip based on current status, the uptime percentage, and the last check time. Tapping an item opens a detail screen showing the test URL, check interval, and a 7-day uptime history. Pull-to-refresh updates all statuses.
Copy this prompt to try it in FlutterFlow
Client site health monitor for a web agency
A FlutterFlow app used by an agency's account managers to monitor client websites without needing StatusCake login credentials. The StatusCake API key is stored in a Cloud Function proxy so it never ships in the app. The home screen shows all monitored sites grouped by client (using StatusCake test tags as group labels), with an aggregate uptime score per client. When a site is detected as down through the Firestore alerting chain, a push notification fires to the account manager's device.
An agency uptime monitor app. Group StatusCake tests by their tags (used as client names). Show a summary card per client with the number of sites monitored and overall status. Tapping a client card expands to show individual sites with their up/down status. Sites marked as Down get a red card background and a 'Down Since' timestamp from the Firestore alerts collection.
Copy this prompt to try it in FlutterFlow
On-call status board embedded in an existing ops app
Add an 'Uptime' tab to an existing FlutterFlow operations app alongside Vultr server status, Travis CI build results, or on-call schedules. The tab shows only the sites currently failing — empty state when everything is green. This focused view means an on-call engineer sees only what needs attention at 2am without scrolling through healthy monitors. Alerts from StatusCake land in Firestore via a Cloud Function webhook and update the list in real time.
An 'Alerts' tab in an existing ops FlutterFlow app. Query StatusCake API via Cloud Function proxy and Firestore. Show only tests where status is 'down'. Each item shows the site name, how long it has been down, and the last HTTP response code. Empty state: a green checkmark with 'All sites are up'. Real-time updates from Firestore without manual refresh.
Copy this prompt to try it in FlutterFlow
Troubleshooting
Get Uptime Tests returns 401 Unauthorized
Cause: The StatusCake API key in the Authorization header is incorrect, has been revoked, or the header format is wrong — the value must start with 'Bearer ' (capital B, space after it) followed by the key string.
Solution: Open the StatusCake API Group in FlutterFlow's API Calls panel. Check the Authorization header value starts with 'Bearer ' and is followed immediately by the API key with no extra spaces or line breaks. Go to your StatusCake account → User Details → API Key and confirm the key matches exactly. If you are unsure, generate a new API key from StatusCake and update the FlutterFlow header value.
The response JSON exists but the data[] array is empty even though StatusCake shows monitoring tests in the web interface
Cause: The StatusCake account has tests but they may be on a paused state, or the API key belongs to a sub-account that does not have visibility into the tests shown in the web UI. Some StatusCake features are team-account-scoped.
Solution: In the StatusCake web interface, verify the tests you want to see are in 'Active' state and not paused. Also check the test's settings to confirm it is visible to the API key's account level. If you use StatusCake team features, confirm the API key belongs to the account that owns the tests (not a read-only sub-user that has no tests assigned). Try calling /uptime/{id} directly with a known test ID from the web interface to confirm individual test retrieval works.
StatusCake webhook is not firing to the Cloud Function — the function never receives a POST when a test goes down
Cause: The webhook URL in StatusCake's Contact Group is not correctly configured, or the Cloud Function URL is wrong. StatusCake requires the webhook to be set in a Contact Group that is then assigned to each test.
Solution: In StatusCake, go to Alerting → Contact Groups. Find the Contact Group with your webhook URL and confirm the URL is correct (copied exactly from the Firebase Functions dashboard with no extra characters). Check that the Contact Group is assigned to the test that went down: edit the test → Alert Settings → Contact Group should show your webhook-enabled group. Test the webhook from StatusCake's interface (some versions have a 'Send Test Alert' button on the Contact Group page). Check the Firebase Functions logs for any incoming requests to confirm the function is being called at all.
Uptime percentage shows as '0' or 'null' in the FlutterFlow widget even though the JSON response includes an uptime field
Cause: StatusCake's uptime field for newly created tests may be null or 0.0 until enough monitoring data has been collected (typically after 24 hours of active monitoring). The JSON Path binding may also be mapping to the wrong field name.
Solution: Verify the test has been running for at least 24 hours — newly added tests will have a null or zero uptime until the first full day of data is collected. In the FlutterFlow Response & Test tab, inspect the raw JSON response and confirm the field name is exactly 'uptime' (lowercase). Confirm your JSON Path is $.data[*].uptime. Add a null check in your widget conditional: if the uptime value is null or 0, display 'New' or 'Calculating…' instead of a percentage.
Best practices
- For shared or published apps, always proxy the StatusCake API key through a Cloud Function — while StatusCake is primarily a read tool for a dashboard, the same key can delete monitoring tests, making it write-capable and worth protecting.
- Use pull-to-refresh instead of an auto-polling timer for the uptime list — polling every few seconds from multiple devices on the same API key is wasteful and may approach StatusCake's per-plan rate limits; cache the last result and refresh only on user gesture.
- Build the down-alert notification chain using StatusCake webhook → Cloud Function → Firestore → FlutterFlow real-time listener — never try to detect downtime by polling from the FlutterFlow app itself, since the app only runs when a user has it open.
- Store the last-seen list of tests in Firestore or App State so the dashboard displays immediately on open from cache, then refreshes the data in the background — avoiding a blank screen while the API call loads.
- Add a color-coded uptime percentage indicator (green > 99.9%, amber 99–99.9%, red < 99%) in addition to the binary up/down chip so founders can distinguish degraded-but-up monitors from perfectly healthy ones.
- Watch rate limits: StatusCake documents per-plan API limits on their pricing page — check current limits before adding aggressive refresh behavior. Debounce the pull-to-refresh gesture with a minimum 10-second cooldown between calls.
- When using the Firestore alerting chain, write both down-event and recovery-event documents with a status field so the FlutterFlow app can show active incidents separately from resolved ones rather than treating every alert as ongoing.
Alternatives
Zabbix is a self-hosted infrastructure monitor using a complex JSON-RPC API over a private network, best when you need deep server-level metrics and host management — StatusCake is better for external 'is my website up?' checks with zero infrastructure to maintain.
Raygun monitors application crashes and real-user performance from inside your app using a pub.dev SDK, complementing StatusCake's external uptime checks rather than replacing them — combine both for full stack visibility.
UptimeRobot is a direct StatusCake alternative with a free tier of 50 monitors and 5-minute check intervals, offering a similar REST API structure that FlutterFlow can call with the same Bearer token pattern.
Frequently asked questions
Can the FlutterFlow app automatically detect and alert me when a site goes down without anyone opening the app?
No — a FlutterFlow app only runs when a user has it open and cannot receive incoming data or execute code in the background. For downtime alerts to reach a device even when the app is closed, you need the StatusCake webhook → Cloud Function → Firebase Cloud Messaging push notification chain described in Step 5. The push notification wakes the device even when the app is not running, and the Firestore real-time listener updates the in-app list when the user opens it.
Is it safe to put the StatusCake API key directly in the FlutterFlow API Group header?
For a personal app installed only on your own device and never published to an app store, the risk is low enough to accept. StatusCake's API key can delete your monitoring tests, but that is a far lower impact than a key that can provision infrastructure. For any app shared with others or published, use the Cloud Function proxy — compiled Flutter apps distributed to users can have their headers extracted with standard tools.
The StatusCake API returns a 'data' array — why does my JSON Path $.data[*].status return empty in FlutterFlow?
Confirm the JSON Path is referencing the exact field name from the live API response. Open the Response & Test tab for the Get Uptime Tests call, click Test API Call, and inspect the raw JSON to verify the field is named 'status' and not 'current_status' or another variant. Then click Generate JSON Paths and use the auto-generated paths rather than typing them manually to avoid typos.
Does StatusCake have a free tier that includes API access?
StatusCake offers a free plan with a limited number of uptime tests — verify the exact count and check interval on statuscake.com as limits change. API access is included on free and paid plans. The main limitations on the free tier are the number of monitoring tests allowed and the minimum check interval (free plans check less frequently than paid plans). For a personal dashboard monitoring a handful of sites, the free tier is typically sufficient.
What is the difference between the 'status' and 'uptime' fields in the StatusCake API response?
The 'status' field ('up' or 'down') reflects the current live state of the test — whether the most recent check found the site responding correctly. The 'uptime' field is a float percentage (0.00 to 100.00) representing the percentage of all checks over the test's history that returned a successful response. A site can currently be 'up' but have a low uptime percentage if it was down frequently in the past, or currently show 'down' but still have a high uptime percentage if it just recently failed for the first time.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation