Skip to main content
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_account returns this document as the tool’s structured content. An optional section parameter (one of organization, scope, standing, plan, pricing, usage, payment, contracts, accounts, enterpriseContracts, nextAction, permissions) returns just that section to keep the response small; section: "accounts" also returns totalAccounts, since the accounts array is capped at 50 entries.
  • open_plan_and_billing opens 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.
Neither tool mutates anything: accepting terms, funding a balance, and applying for credit remain separate flows.

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.
See Errors for the full error contract.

Get billing info

The payer identity on its own, without the rest of the account

Billing overview

How invoicing and remittance work