Docs › Operator API
Operator API
Programmatic access to your FosterFlow Cloud operator data for external dashboards and integrations.
Authentication
All endpoints require an API key passed via the x-api-key header or as a Bearer token.
curl -H "x-api-key: YOUR_API_KEY" https://fosterflow.app/operator/api/statsSet OPERATOR_API_KEY in your .env file. All endpoints return 401 if the key is missing or invalid.
Base URL
https://fosterflow.app/operator/api/stats
Returns a summary of your FosterFlow Cloud instance — tenant counts, revenue, signups, and waitlist.
Response
{
"product": "fosterflow",
"pendingSignups": 2,
"waitlistCount": 15,
"tenants": {
"total": 12,
"active": 8,
"trial": 3,
"suspended": 1
},
"revenue": {
"mrr": 18400,
"arr": 220800
}
}Revenue values are in cents (USD). Divide by 100 for dollars.
/tenants
Returns all non-deleted tenants with plan, status, and billing info.
Response
{
"tenants": [
{
"id": 1,
"orgName": "Sunny Paws Rescue",
"slug": "demo",
"subdomain": "demo",
"plan": "cloud",
"billingInterval": "monthly",
"hasApiAccess": false,
"status": "active",
"trialEndsAt": null,
"createdAt": "2026-03-26T..."
}
]
}/signups
Returns signup applications. Defaults to pending, filterable by status.
Query Parameters
pending (default), approved, or rejectedExample
GET /operator/api/signups?status=pendingResponse
{
"signups": [
{
"id": 1,
"orgName": "Happy Tails Rescue",
"adminName": "Jane Smith",
"adminEmail": "jane@happytails.org",
"slug": "happytails",
"websiteUrl": "https://happytails.org",
"requestedPlan": "cloud",
"billingInterval": "annual",
"status": "pending",
"createdAt": "2026-03-27T..."
}
]
}/waitlist
Returns all waitlist entries (people who signed up for early access).
Response
{
"waitlist": [
{
"id": 1,
"email": "justin@reiners.io",
"orgName": "justins rescue",
"createdAt": "2026-03-27T01:09:37.000Z"
}
]
}Integration Example
Fetch FosterFlow stats from a unified dashboard:
const res = await fetch('https://fosterflow.app/operator/api/stats', {
headers: { 'x-api-key': process.env.FOSTERFLOW_API_KEY }
});
const data = await res.json();
console.log(`FosterFlow: ${data.tenants.active} active tenants, $${(data.revenue.mrr / 100).toFixed(2)} MRR`);Rate Limits
No rate limits on operator API endpoints. These are for your own internal use only — don't expose your API key to clients.