GET /api/v2/billing/account
Returns one document that answers, for whoever is responsible for an
account’s money: which plan and terms the account is on, what has been used,
what is funded and what is owed, which agreements are in force, and the one
concrete step — if any — needed to become or remain paid. It reads the same
facts the org-settings Billing tab and the Plan & Billing page show; anything
shown on those surfaces that isn’t in this document is a bug.
Money always describes the organization: a child account’s request
resolves to its parent (billing lives at the org level), and the returned
organization.customerId reflects that. A human caller needs org-admin
standing (a child-account admin must also be an admin of the parent). An API
key (service token) issued to the organization gets the document with
payment-detail fields and contract-document download links redacted — marked
with "visibility": "redacted" and redactedFields so an agent can tell
“not allowed” from “empty”. Advertiser-scoped keys and keys issued to a child
account are denied. Credit-application reviewer notes are internal to Scope3
and always read as null here; your own justification text stays visible.
The document keeps two pricing systems separate. plan, pricing, and
contracts.mediaRateCard describe the active media contract used to clear
buys. enterpriseContracts describes the unpublished Organization IU plan
pilot. An absent IU offer or accepted plan does not invalidate an active media rate
card. IU offers remain absent unless the billing organization is enrolled in
the pilot; accepted history remains visible as a contractual record.
Request
curl
Parameters
This endpoint takes no parameters.From an agent (MCP)
Two read-only MCP tools cover the same document on both the buyer and storefront MCP servers — billing lives at the organization level regardless of role:get_billing_accountreturns this document as the tool’s structured content. An optionalsectionparameter (one oforganization,scope,standing,plan,pricing,usage,payment,contracts,accounts,enterpriseContracts,nextAction,permissions) returns just that section to keep the response small;section: "accounts"also returnstotalAccounts, since theaccountsarray is capped at 50 entries.open_plan_and_billingopens the Plan & Billing view in chat — a read-only page showing standing, balance, Enterprise Contract rights and lifecycle, the next action, and an intelligence-usage summary, with links to the full web page.
Response
Document sections
payment.deposits lists the organization’s recent prepay deposits (newest
first, at most 10): each row carries the deposited amount in minor units, its
currency, when it took effect, whether it was later reversed, and the payment
provider and reference recorded with it. Every row is projected read-only from
the platform ledger — the same source of truth as the balances above.
Some fields are typed but always empty today because the platform doesn’t yet
have a source for them: plan.subscriptions, pricing.publicList, and
payment.invoices. They will start populating as their owning features ship,
with no change to this response shape.
Enterprise Contract lifecycle
enterpriseContracts.commercialState is the complete Offer and immutable
Rate Card acceptance read model. Plan & Billing consumes the complete authenticated
REST object. MCP consumes the model-safe projection described below; neither
surface reconstructs commercial terms from flags or account metadata.
enterpriseContracts.packages adds a lifecycle projection for every accepted
Enterprise package record, including its purchased product rights. Ordinary
public IU plan records remain in commercialState.history and are not
mislabelled as Enterprise Contracts:
For a full-term prepayment, funding is recorded against the exact accepted
Enterprise Contract acceptance. Once the complete required amount is confirmed,
ordinary use of that prepaid balance does not make the package pending again.
If the funding deposit is reversed, the payment authority is no longer
satisfied and runtime access closes until funding is restored.
Every entry in
rights carries purchased: true independently of its runtime
state. This distinction is deliberate: acceptance records what the customer
bought, while funding, holds, term dates, and suspension determine whether the
right can be exercised now.
For an organization-scoped service token, enterpriseContracts.visibility is
redacted: immutable proposal prose and the selected payment option read as
null, and redactedFields names both fields. Human organization admins see
visibility: "visible". Internal actor and database identifiers are never part
of this customer-facing projection. The get_billing_account agent tool also
replaces stored proposal prose and the selected payment choice with null so
customer-authored contract text and payment details cannot enter model context.
Its model-visible history is partitioned and bounded: accepted Enterprise
records appear once under enterpriseContracts.packages, while ordinary IU
plan records remain under commercialState.history; each list contains at most the
20 newest entries. Accepted records and offers are explicit summaries rather than the
deep REST snapshots, and each package returns at most 10 rights. Companion
total/truncated fields disclose array, text, and 96 KiB UTF-8 byte bounds.
Plan labels are code-owned; unrecognized plan codes become numbered options
rather than echoing authored text. Exact authored names, activity schedules,
Rate Card snapshots, proposal prose, and payment choices stay outside model
context. The authenticated REST document used by Plan & Billing keeps the
complete history and exact terms.
The IU-plan launcher gives the model only a bounded launch receipt; the full
authenticated Task state is delivered to the requesting MCP App outside model
context. The Plan & Billing web page retains the human service schedule.
When enterpriseContracts.commercialState.nextAction asks for acceptance, use
open_iu_plan_task to review the exact version and
accept_iu_rate_card_offer for the human-confirmed acceptance step. The write
tool re-verifies that the caller is a current administrator of the governing
organization; an administrator of only a child account cannot read or accept
the parent package.
plan.contractStatus values
Only
active and inherited_active mean the account can transact. In
particular, awaiting_acceptance carries a real contractId — do not read the
presence of a contract as proof the account is ready.
nextAction values
Only one
nextAction is ever returned — the single most important thing to
do, not a checklist. permissions tells you whether the authenticated caller
can act on it directly, or should route it to an account admin.
Errors
401 UNAUTHORIZED— missing or invalid bearer token.403 ACCESS_DENIED— the caller is not an account admin (or, for a child account, an admin of the parent organization), or the API key is advertiser-scoped or issued to a child account.
Related
Get billing info
The payer identity on its own, without the rest of the account
Billing overview
How invoicing and remittance work