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/stats

Set 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
GET

/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.

GET

/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..."
    }
  ]
}
GET

/signups

Returns signup applications. Defaults to pending, filterable by status.

Query Parameters

status pending (default), approved, or rejected

Example

GET /operator/api/signups?status=pending

Response

{
  "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..."
    }
  ]
}
GET

/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.