Skip to content
OpenAppPhysical access, fully managed
Login

Billing

The Billing OpenAPI tag covers the plan catalog and, per organization, the current plan and quota usage. Shapes include PlansResponse, BillingPlanResponse, and QuotaReport — see the API reference.

Changing plans, the customer billing portal, and over-capacity remediation are done in the dashboard (Settings → Billing). Those operations are not part of the public API, and an API key gets 403 api_surface_not_available on them.

Org context: Org-scoped billing routes encode the organization id in the path (/orgs/{id}/billing/...); they do not use X-Org.

ConcernHTTPoperationIdNotes
Plan catalogGET /plansget_plansPlansResponse.
Current planGET /orgs/{id}/billing/planget_org_billing_planBillingPlanResponse.
Usage / quotasGET /orgs/{id}/billing/usageget_org_billing_usageQuotaReport. Each QuotaUsage carries a machine-readable unit (count or seconds); the response also includes an optional degradation block when the org is over capacity.
SurfacePython / Rust (openapp_sdk)GoTypeScript (AsyncClient)
Billing sub-clientclient.billing.plan(org_id), client.billing.usage(org_id)BillingAPIServiceclient.billing.plan(orgId), client.billing.usage(orgId)

401 / 403 when the caller lacks billing or org permissions. Errors follow ApiErrorResponse — see Errors & retries.

There is no client.billing yet — use the internal JSON dispatcher on AsyncClient (same transport as sub-clients):

plans = await client._request("GET", "/plans")
plan = await client._request("GET", f"/orgs/{org_id}/billing/plan")

Org billing usage (GET /orgs/{id}/billing/usage)

Section titled “Org billing usage (GET /orgs/{id}/billing/usage)”

Returns a QuotaReport (per-key usage vs limits for the org).

usage = await client._request("GET", f"/orgs/{org_id}/billing/usage")

Org CRUD and membership are documented under Organizations. For quota keys referenced in usage reports, see QuotaKey in OpenAPI (for example scripting_executions on Scripting).