Skip to content

billing

llms.txtAsk agent

Tenant usage, quota and provider-intent lifecycle.

Method Path Operation ID
GET /v1/billing/account getBillingAccount
GET /v1/billing/charges listBillingCharges
POST /v1/billing/checkout-intents createBillingCheckoutIntent
GET /v1/billing/plans getBillingPlans
POST /v1/billing/portal-intents createBillingPortalIntent
GET /v1/billing/pricing getBillingPricing
POST /v1/billing/quotes createBillingQuote
GET /v1/billing/wallet getBillingWallet
PUT /v1/billing/wallet/settings setBillingWalletSettings
GET /v1/usage getUsage

Operation ID: getBillingAccount

Read the system-owned commercial account projection.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Status Description Body
200 Successful Response application/json BillingAccountResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 A verified email is unavailable for account provisioning. application/json HttpErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. application/json HttpErrorResponse
Field Type Required Description
cancel_at_period_end boolean yes
caps object yes
current_period_end string or null yes
current_service_period_end string or null yes
current_service_period_start string or null yes
id string yes
plan string yes
plan_display_name string or null yes
portal_available boolean yes
provider_customer_provisioned boolean yes
renewal_at string or null yes
status string yes

Operation ID: listBillingCharges

Read immutable processing charges for explicitly enrolled tenant pricing.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Name In Type Required Description
limit query integer no Minimum 1. Maximum 100. Default 50.
before query string or null no
Status Description Body
200 Successful Response application/json ProcessingChargesResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 The pagination limit or before identifier is invalid, or account provisioning lacks a verified email. application/json HttpErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. application/json HttpErrorResponse
Field Type Required Description
currency const “USD” no Default "USD".
items array of ProcessingChargeResponse yes
next_before string or null yes
provider_charge_created const false no Default false.

Operation ID: createBillingCheckoutIntent

Create a short-lived provider checkout redirect intent.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

application/json: CheckoutIntentRequest (required)

Field Type Required Description
amount_usd number or string or null no A wallet_top_up amount in whole cents, USD 10 to 10,000.
cancel_url string yes
plan BillingPlanId or null no The plan a subscription checkout buys, from GET /v1/billing/plans. Required whenever the provider returns a real checkout redirect.
purpose enum no What the checkout buys. subscription starts a plan; wallet_top_up adds amount_usd to the prepaid wallet (the account must have opted in). One of: subscription, wallet_top_up. Default "subscription".
success_url string yes
Status Description Body
201 Successful Response application/json BillingIntentResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 The request failed validation, a redirect URL is not on a configured console origin (redirect_url_not_allowed), or a verified email is unavailable for account provisioning. application/json HttpErrorResponse
429 BILLING_INTENT_RATE_LIMITED: the account created checkout and portal sessions faster than 10 a minute. Or API_KEY_RATE_LIMITED: the API key’s own request rate limit was exceeded. Retryable after Retry-After seconds; a refused request creates nothing. application/json ErrorResponse
502 The configured billing provider rejected its credentials or response. application/json HttpErrorResponse
503 Credential verification is unavailable, no production billing-provider capability is composed, the provider is temporarily unreachable, or the requested plan has no matching provider price. The stable detail distinguishes these cases. Retryable. Restore the unavailable capability before retrying. application/json HttpErrorResponse
Field Type Required Description
actionable boolean yes
expires_at string yes
id string yes
mode enum yes One of: simulation, sandbox, provider.
url string or null yes

Operation ID: getBillingPlans

List the plans a checkout can buy and whether checkout is actionable.

Plans a checkout can buy, from the current catalog; a read with no provider call.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Status Description Body
200 Successful Response application/json BillingPlansResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 A verified email is unavailable for account provisioning. application/json HttpErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. application/json HttpErrorResponse
Field Type Required Description
currency const “USD” no Default "USD".
plans array of BillingPlanResponse yes
pricing_version string yes
provider_mode enum or null yes The composed billing provider: provider is live Stripe (real money), sandbox is Stripe test mode, simulation the inert local adapter, null when none is composed.

Operation ID: createBillingPortalIntent

Create a short-lived provider billing-portal redirect intent.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

application/json: PortalIntentRequest (required)

Field Type Required Description
return_url string yes
Status Description Body
201 Successful Response application/json BillingIntentResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 The request failed validation, a redirect URL is not on a configured console origin (redirect_url_not_allowed), or a verified email is unavailable for account provisioning. application/json HttpErrorResponse
429 BILLING_INTENT_RATE_LIMITED: the account created checkout and portal sessions faster than 10 a minute. Or API_KEY_RATE_LIMITED: the API key’s own request rate limit was exceeded. Retryable after Retry-After seconds; a refused request creates nothing. application/json ErrorResponse
502 The configured billing provider rejected its credentials or response. application/json HttpErrorResponse
503 Credential verification is unavailable, no production billing-provider capability is composed, the provider is temporarily unreachable, or the requested plan has no matching provider price. The stable detail distinguishes these cases. Retryable. Restore the unavailable capability before retrying. application/json HttpErrorResponse
Field Type Required Description
actionable boolean yes
expires_at string yes
id string yes
mode enum yes One of: simulation, sandbox, provider.
url string or null yes

Operation ID: getBillingPricing

Read the versioned USD rate catalog without activating customer billing.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Status Description Body
200 Successful Response application/json PricingResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 A verified email is unavailable for account provisioning. application/json HttpErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. application/json HttpErrorResponse
Field Type Required Description
activation const “requires_explicit_tenant_enrollment” no Default "requires_explicit_tenant_enrollment".
currency const “USD” no Default "USD".
pricing_version string yes
processing_credits_included const false no Default false.
rates object yes

Operation ID: createBillingQuote

Estimate processing from supplied facts; no payment or ledger write occurs.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

application/json: PricingQuoteRequest (required)

Field Type Required Description
duration_seconds number or string or null no
frames_per_second number or string or null no
height integer or null no
media_family enum yes One of: image, audio, video, document, text, model, live.
operation enum yes One of: sign, watermark, watermark_then_sign.
width integer or null no
Status Description Body
200 Successful Response application/json PricingQuoteResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 Required inspected-media facts are missing, invalid, or outside the versioned pricing envelope; or account provisioning lacks a verified email. application/json HttpErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. application/json HttpErrorResponse
Field Type Required Description
currency const “USD” no Default "USD".
estimate_only const true no Default true.
excludes array of string no Default ["subscription","storage","egress","tax"].
final_facts_source const “server_validated_media_inspection” no Default "server_validated_media_inspection".
lines array of PricingLineResponse yes
pricing_version string yes
total_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.

Operation ID: getBillingWallet

Read the prepaid wallet balance, settings and recent ledger.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Status Description Body
200 Successful Response application/json WalletResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 A verified email is unavailable for account provisioning. application/json HttpErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. application/json HttpErrorResponse
Field Type Required Description
auto_recharge WalletAutoRecharge yes
balance_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
currency const “USD” no Default "USD".
enabled boolean yes Whether the account is opted into prepaid wallet billing (and not out).
month_to_date_spend_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
monthly_spend_limit_usd string or null yes
recharge_pending boolean yes
reserved_usd string yes The quoted cost of admitted, not yet published work. New work is admitted only while its quote fits within balance_usd minus this. Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
top_up_max_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
top_up_min_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
transactions array of WalletTransactionResponse yes
version integer yes

Operation ID: setBillingWalletSettings

Opt into prepaid wallet billing or change auto-recharge and the monthly limit.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

application/json: WalletSettingsRequest (required)

Field Type Required Description
auto_recharge WalletAutoRechargeRequest yes Turning auto-recharge on, or changing its threshold or amount while it is on, needs a signed-in console session; an API key with billing:write may only turn it off or leave it unchanged.
enabled boolean no false opts the account out of wallet billing: new work is no longer admitted against the wallet and auto-recharge stops; the balance and ledger are kept. Refused while the balance is negative or admitted work is still reserved. true on an opted-out wallet opts back in. Default true.
expected_version integer yes The wallet version last read. 0 opts the account into prepaid wallet billing, which also assigns the current rate catalog if none is assigned. Minimum 0.
monthly_spend_limit_usd number or string or null no New work is refused once this month’s wallet charges reach it.
Status Description Body
200 Successful Response application/json WalletResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. An API key is also refused opting the account into (or back into) wallet billing (wallet_opt_in_requires_console_session) and turning auto-recharge on or changing its terms (auto_recharge_requires_console_session): only a signed-in console session may make the wallet the account’s billing authority or authorize off-session card charges. application/json HttpErrorResponse or ErrorResponse
409 expected_version is not the wallet’s current version; read and retry (wallet_settings_version_conflict). Or an opt-out was refused while the balance is negative or admitted work is still reserved (wallet_opt_out_refused), or there is no wallet to opt out of (billing_wallet_not_enabled). application/json HttpErrorResponse
422 A setting is outside its bounds, or the request failed validation. application/json HttpErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable, or the wallet cannot be opted into (expected_version 0) because no billing provider is composed to fund it (billing_provider_unavailable). Retryable. application/json HttpErrorResponse
Field Type Required Description
auto_recharge WalletAutoRecharge yes
balance_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
currency const “USD” no Default "USD".
enabled boolean yes Whether the account is opted into prepaid wallet billing (and not out).
month_to_date_spend_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
monthly_spend_limit_usd string or null yes
recharge_pending boolean yes
reserved_usd string yes The quoted cost of admitted, not yet published work. New work is admitted only while its quote fits within balance_usd minus this. Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
top_up_max_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
top_up_min_usd string yes Pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$.
transactions array of WalletTransactionResponse yes
version integer yes

Operation ID: getUsage

Read authoritative itemized usage and hard-cap availability.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Name In Type Required Description
period query string or null no
item_limit query integer no Minimum 1. Maximum 200. Default 50.
Status Description Body
200 Successful Response application/json UsageResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. application/json HttpErrorResponse or ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. application/json HttpErrorResponse
422 A verified email is unavailable for account provisioning. application/json HttpErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. application/json HttpErrorResponse
Field Type Required Description
cost_estimate null no
items array of UsageItemResponse yes
meters array of MeterQuotaResponse yes
period string yes
pricing_version null no