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 organization key (signal_…) created under Organization Settings → API Keys.

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*
Example Request
curl -X GET 'https://app.signal.metricshive.com/api/v1/organizations/string/billing'
Example Response
{
  "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
  }
}