Get billing state

GET
/organizations/{organizationId}/billing

The organization's plan, its limits, and how much of each limit is already spent — enough for an integration to know a write will be rejected before attempting it.

This endpoint is read-only by construction. No API key of any kind can change a subscription, an add-on quantity, or a payment method; there is no billing write endpoint and no billing write scope. Stripe identifiers, invoices, and payment methods are never returned.

Deployments without billing answer 200 with billingEnabled: false, a null plan, and null limits, so callers need no special case.

Authorization

BearerAuth
headerAuthorizationBearer <token>

An instance admin key from ADMIN_API_KEYS, or an organization key (elmo_…) issued from the dashboard.

Path Parameters

organizationId*string

Response Body

Get billing state

application/json
  1. response

Read-only view of an organization's subscription, limits, and usage. The API has no way to change any of it: there is no billing write endpoint and no billing write scope. Stripe identifiers, payment methods, and invoices are deliberately not exposed — those live in the Stripe customer portal.

organizationId*string
billingEnabled*boolean

False on self-hosted deployments, where nothing is metered.

plan*|

Null when the organization has no subscription, or when billing is disabled.

limits*|null
usage*
curl -X GET 'https://app.elmohq.com/api/v1/organizations/string/billing'
{  "organizationId": "string",  "billingEnabled": true,  "plan": {    "key": "string",    "name": "string",    "standing": "active",    "interval": "monthly",    "periodEnd": "2019-08-24T14:15:22Z",    "cancelAtPeriodEnd": true,    "trackingActive": true  },  "limits": {    "maxBrands": 0,    "maxPrompts": 0,    "modelPicks": 0,    "modelMenu": [      "string"    ],    "standardRunsPerDay": 0,    "premiumPool": 0,    "premiumRunsPerDay": 0  },  "usage": {    "brands": 0,    "enabledPrompts": 0,    "premiumPairingsAssigned": 0  }}