# Get the organization's Ownrecord plan

> The platform_billing.get operation: GET /api/v1/platform_billing in the REST API and the platform_billing_get tool in the MCP server.

Returns the organization's own Ownrecord subscription, as Organization → Billing shows it: the current plan,
its status and period, the effective entitlements (an active override merged over the plan), usage against
each limit (`limits`, with `over` after a downgrade: nothing is deleted, creating more is blocked), the metered
volume of the current period with its volume fee so far, the cheapest plan for the last three months of volume,
the plans you can choose, and the escalation of an unpaid subscription (`escalation`: restricted after 14 days,
suspended after 30, unless a platform admin holds it).

Ownrecord bills organizations through its own platform brand: the plan is a subscription of the organization's
billing account there (`platformCustomerId`). Change the plan with `platform_billing.change_plan`; manage
payment methods, billing details and invoices in the billing portal (`platform_billing.portal_sessions.create`).

## At a glance

- **REST:** `GET /api/v1/platform_billing`
- **MCP tool:** `platform_billing_get`
- **Operation ID:** `platform_billing.get`
- **Scope:** Organization
- **Permission:** `platform_plan:read`
- **Risk tier:** `read`
- **Dry run:** Not supported
- **Idempotency:** Not needed (read only)
- **Modes:** Test and live
- **Authentication:** API key with the `platform_plan:read` scope
- **Since:** M12

## Request

### Query parameters

This operation takes no query parameters.

## Response

`200 OK` with a JSON object:

| Field                                     | Type                                                                  | Description                                                       |
| ----------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------- |
| `object`                                  | `"platform_billing"`                                                  |                                                                   |
| `orgId`                                   | string                                                                |                                                                   |
| `status`                                  | one of `active`, `restricted`, `suspended`, `closing`, `closed`       |                                                                   |
| `livemode`                                | boolean                                                               |                                                                   |
| `provisioning`                            | one of `ready`, `pending`, `unavailable`                              |                                                                   |
| `platformCustomerId`                      | string or null                                                        |                                                                   |
| `plan`                                    | object                                                                |                                                                   |
| `plan.key`                                | string or null                                                        |                                                                   |
| `plan.name`                               | string or null                                                        |                                                                   |
| `plan.status`                             | one of `trialing`, `active`, `past_due`, `unpaid`, `canceled`, `none` |                                                                   |
| `plan.subscriptionId`                     | string or null                                                        |                                                                   |
| `plan.interval`                           | one of `day`, `week`, `month`, `year` or null                         |                                                                   |
| `plan.currentPeriodEnd`                   | date-time or null                                                     |                                                                   |
| `plan.cancelAtPeriodEnd`                  | boolean                                                               |                                                                   |
| `plan.scheduledChange`                    | object or null                                                        |                                                                   |
| `plan.hasPaymentMethod`                   | boolean                                                               |                                                                   |
| `override`                                | object or null                                                        |                                                                   |
| `entitlements`                            | object                                                                |                                                                   |
| `limits`                                  | array of object                                                       |                                                                   |
| `limits[].feature`                        | string                                                                |                                                                   |
| `limits[].limit`                          | integer                                                               |                                                                   |
| `limits[].used`                           | integer                                                               |                                                                   |
| `limits[].atLimit`                        | boolean                                                               |                                                                   |
| `limits[].over`                           | boolean                                                               |                                                                   |
| `escalation`                              | object                                                                |                                                                   |
| `escalation.unpaidSince`                  | date-time or null                                                     |                                                                   |
| `escalation.stage`                        | one of `active`, `restricted`, `suspended` or null                    |                                                                   |
| `escalation.next`                         | object or null                                                        |                                                                   |
| `escalation.hold`                         | object or null                                                        |                                                                   |
| `escalation.thresholds`                   | object                                                                |                                                                   |
| `escalation.thresholds.restrictAfterDays` | integer                                                               |                                                                   |
| `escalation.thresholds.suspendAfterDays`  | integer                                                               |                                                                   |
| `usage`                                   | object or null                                                        |                                                                   |
| `recommendation`                          | object or null                                                        |                                                                   |
| `plans`                                   | array of object                                                       |                                                                   |
| `plans[].key`                             | string                                                                |                                                                   |
| `plans[].name`                            | string                                                                |                                                                   |
| `plans[].highlighted`                     | boolean                                                               |                                                                   |
| `plans[].contactSales`                    | boolean                                                               |                                                                   |
| `plans[].current`                         | boolean                                                               |                                                                   |
| `plans[].trialDays`                       | integer or null                                                       |                                                                   |
| `plans[].prices`                          | array of object                                                       |                                                                   |
| `plans[].prices[].lookupKey`              | string                                                                |                                                                   |
| `plans[].prices[].currency`               | string                                                                | The price's currency: EUR, CHF or USD.                            |
| `plans[].prices[].interval`               | one of `day`, `week`, `month`, `year`                                 |                                                                   |
| `plans[].prices[].kind`                   | one of `licensed`, `metered`                                          |                                                                   |
| `plans[].prices[].amount`                 | money or null                                                         | Licensed prices: the fee per period.                              |
| `plans[].prices[].ratePpm`                | string or null                                                        | Metered prices: the volume fee in parts per million (1% = 10000). |
| `plans[].entitlements`                    | object                                                                |                                                                   |
| `currency`                                | object                                                                |                                                                   |
| `currency.options`                        | array of string                                                       |                                                                   |
| `currency.current`                        | string or null                                                        |                                                                   |
| `currency.suggested`                      | string                                                                |                                                                   |
| `currency.changeable`                     | boolean                                                               |                                                                   |
| `pendingUpgrade`                          | object or null                                                        |                                                                   |

## Examples

### An organization on Growth

```http
GET /api/v1/platform_billing
Authorization: Bearer or_test_…
```

Response (`200`):

```json
{
  "object": "platform_billing",
  "orgId": "org_01jbz3m4k5n6p7q8r9s0t1v2w3",
  "status": "active",
  "livemode": true,
  "provisioning": "ready",
  "platformCustomerId": "cus_01jbz3m4k5n6p7q8r9s0t1v2w4",
  "plan": {
    "key": "growth",
    "name": "Growth",
    "status": "active",
    "subscriptionId": "sub_01jbz3m4k5n6p7q8r9s0t1v2w5",
    "interval": "month",
    "currentPeriodEnd": "2026-11-01T00:00:00.000Z",
    "cancelAtPeriodEnd": false,
    "scheduledChange": null,
    "hasPaymentMethod": true
  },
  "override": null,
  "entitlements": {
    "api.rate_limit_rps": 100,
    "assistant.enabled": true,
    "assistant.messages_per_month": 1000,
    "audit.retention_days": 90,
    "brands.max": 3,
    "custom_domains.max": 2,
    "einvoicing.enabled": true,
    "entities.max": 2,
    "filing.reports": "full",
    "jurisdictions.registered.max": 10,
    "livemode": true,
    "members.max": 10,
    "processors.secondary": false,
    "sso.enabled": false,
    "subscriptions.enabled": true,
    "support.level": "email",
    "usage_billing.enabled": true
  },
  "limits": [
    {
      "feature": "entities.max",
      "limit": 2,
      "used": 1,
      "atLimit": false,
      "over": false
    },
    {
      "feature": "brands.max",
      "limit": 3,
      "used": 3,
      "atLimit": true,
      "over": false
    },
    {
      "feature": "members.max",
      "limit": 10,
      "used": 4,
      "atLimit": false,
      "over": false
    },
    {
      "feature": "jurisdictions.registered.max",
      "limit": 10,
      "used": 2,
      "atLimit": false,
      "over": false
    },
    {
      "feature": "custom_domains.max",
      "limit": 2,
      "used": 0,
      "atLimit": false,
      "over": false
    }
  ],
  "escalation": {
    "unpaidSince": null,
    "stage": null,
    "next": null,
    "hold": null,
    "thresholds": {
      "restrictAfterDays": 14,
      "suspendAfterDays": 30
    }
  },
  "usage": {
    "periodStart": "2026-10-01T00:00:00.000Z",
    "periodEnd": "2026-11-01T00:00:00.000Z",
    "volume": {
      "amount": "41250000000",
      "currency": "EUR"
    },
    "transactions": 1375,
    "estimatedVolumeFee": {
      "amount": "206250000",
      "currency": "EUR"
    }
  },
  "recommendation": {
    "cheapest": "growth",
    "averageMonthlyVolume": {
      "amount": "48000000000",
      "currency": "EUR"
    },
    "costs": [
      {
        "plan": "starter",
        "cost": {
          "amount": "480000000",
          "currency": "EUR"
        }
      },
      {
        "plan": "growth",
        "cost": {
          "amount": "389000000",
          "currency": "EUR"
        }
      },
      {
        "plan": "scale",
        "cost": {
          "amount": "643000000",
          "currency": "EUR"
        }
      }
    ]
  },
  "plans": [
    {
      "key": "growth",
      "name": "Growth",
      "highlighted": true,
      "contactSales": false,
      "current": true,
      "trialDays": 14,
      "prices": [
        {
          "lookupKey": "growth_monthly",
          "currency": "EUR",
          "interval": "month",
          "kind": "licensed",
          "amount": {
            "amount": "149000000",
            "currency": "EUR"
          },
          "ratePpm": null
        },
        {
          "lookupKey": "growth_yearly",
          "currency": "EUR",
          "interval": "year",
          "kind": "licensed",
          "amount": {
            "amount": "1430000000",
            "currency": "EUR"
          },
          "ratePpm": null
        },
        {
          "lookupKey": "growth_volume",
          "currency": "EUR",
          "interval": "month",
          "kind": "metered",
          "amount": null,
          "ratePpm": "5000"
        },
        {
          "lookupKey": "growth_monthly_chf",
          "currency": "CHF",
          "interval": "month",
          "kind": "licensed",
          "amount": {
            "amount": "149000000",
            "currency": "CHF"
          },
          "ratePpm": null
        },
        {
          "lookupKey": "growth_volume_chf",
          "currency": "CHF",
          "interval": "month",
          "kind": "metered",
          "amount": null,
          "ratePpm": "5000"
        }
      ],
      "entitlements": {
        "api.rate_limit_rps": 100,
        "assistant.enabled": true,
        "assistant.messages_per_month": 1000,
        "audit.retention_days": 90,
        "brands.max": 3,
        "custom_domains.max": 2,
        "einvoicing.enabled": true,
        "entities.max": 2,
        "filing.reports": "full",
        "jurisdictions.registered.max": 10,
        "livemode": true,
        "members.max": 10,
        "processors.secondary": false,
        "sso.enabled": false,
        "subscriptions.enabled": true,
        "support.level": "email",
        "usage_billing.enabled": true
      }
    }
  ],
  "currency": {
    "options": ["EUR", "CHF", "USD"],
    "current": "EUR",
    "suggested": "EUR",
    "changeable": false
  },
  "pendingUpgrade": null
}
```

## Errors

| Code                                                                                     | HTTP status | When                                                                                  | What to do                                                                                           |
| ---------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied)   | 403         | Only an org_owner, org_admin or billing_admin sees the organization's Ownrecord plan. | Ask an organization owner or admin for a role or scope that allows this action.                      |
| [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#resource_not_found) | 404         | No such organization is visible to you.                                               | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |

It can also return these [common errors](https://ownrecord.io/docs/reference.md#common-errors): [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed), [`api_version_unsupported`](https://ownrecord.io/docs/reference/errors.md#api_version_unsupported), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`dry_run_not_supported`](https://ownrecord.io/docs/reference/errors.md#dry_run_not_supported), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
