Scope3 Buyer Billing API
Consolidated invoicing for buyers — invoices and pending invoice items issued by Scope3 across the buyer customer.
Consolidated invoicing for buyers — invoices and pending invoice items issued by Scope3 across the buyer customer.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/scope3-buyer-billing-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Scope3 Buyer Billing API
version: 2.0.0
description: 'Operations tagged Buyer Billing across 2 of this provider''s published API definitions: scope3-buyer-openapi-original.yml, scope3-storefront-openapi-original.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.interchange.io/api/v2/buyer
description: Production server
- url: https://api.interchange.io/api/v2/storefront
description: Production server
tags:
- name: Buyer Billing
description: Consolidated invoicing for buyers — invoices and pending invoice items issued by Scope3 across the buyer customer.
paths:
/billing/info:
get:
operationId: getBillingInfo
summary: Get billing information
description: 'Get the billing information Scope3 issues invoices to for the authenticated customer: billing contact, email recipients, address, and tax ID.'
tags:
- Buyer Billing
security:
- bearerAuth: []
responses:
'200':
description: Get billing information
content:
application/json:
schema:
$ref: '#/components/schemas/GetBillingInfoResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
put:
operationId: updateBillingInfo
summary: Update billing information (admin)
description: Update the billing information Scope3 issues invoices to. At minimum, a payer name and billing address are needed to issue an invoice. Admin-only.
tags:
- Buyer Billing
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
contactName:
description: Billing contact / payer name
type:
- string
- 'null'
minLength: 1
maxLength: 255
email:
description: Email addresses invoices are sent to
maxItems: 10
type:
- array
- 'null'
items:
type: string
format: email
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
ccEmails:
description: Email addresses CC’d on invoices
maxItems: 10
type:
- array
- 'null'
items:
type: string
format: email
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
phone:
description: Billing phone number
type:
- string
- 'null'
maxLength: 64
address:
description: Billing street address, line 1
type:
- string
- 'null'
maxLength: 255
address2:
description: Billing street address, line 2
type:
- string
- 'null'
maxLength: 255
city:
description: Billing city
type:
- string
- 'null'
maxLength: 128
region:
description: Billing state/province/region
type:
- string
- 'null'
maxLength: 128
postalCode:
description: Billing postal/ZIP code
type:
- string
- 'null'
maxLength: 32
countryAlpha2:
description: Billing country (ISO 3166-1 alpha-2)
example: US
type:
- string
- 'null'
pattern: ^[A-Z]{2}$
taxId:
description: Tax/VAT identifier shown on invoices
type:
- string
- 'null'
maxLength: 64
responses:
'200':
description: Update billing information (admin)
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateBillingInfoResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
servers:
- url: https://api.interchange.io/api/v2/buyer
description: Production server
/billing/account:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: getBillingAccount
summary: Get billing account
description: 'One consolidated view of the organization''s commercial account: plan and terms, effective pricing, intelligence usage, credit/prepay balance, agreements, child accounts, and the single next action (if any) needed to become or remain paid. Org-admin only; child-account requests resolve to the parent organization.'
tags:
- Buyer Billing
security:
- bearerAuth: []
responses:
'200':
description: Get billing account
content:
application/json:
schema:
$ref: '#/components/schemas/GetBillingAccountResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: ACCESS_DENIED (caller is not an org admin / eligible service token).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/iu-rate-card:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: getIuRateCardOffer
summary: Get the organization IU Rate Card offer and acceptance state
description: Returns organization-wide IU offer and acceptance state, including any published plan and activity terms, applicable corporate discount, rollover policy, exact list/net prices, current immutable acceptance record, and history shared by buyer and storefront workloads. A new offer is returned only when an effective Rate Card is published and the billing organization is enrolled in the pilot; acceptance history remains readable outside the pilot.
tags:
- Buyer Billing
security:
- bearerAuth: []
responses:
'200':
description: Get the organization IU Rate Card offer and acceptance state
content:
application/json:
schema:
$ref: '#/components/schemas/GetIuRateCardOfferResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: ACCESS_DENIED (caller is not a direct organization admin).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: CONFLICT (commercial configuration is ambiguous).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/iu-rate-card/v2:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: getIuRateCardOfferV2
summary: Get the versioned organization IU commercial document
description: Returns the expanded enterprise IU offer and acceptance document, including immutable proposal, payment-option, entitlement, support, and complete activity-schedule snapshots. This explicit version boundary keeps the original strict V2 response stable for deployed clients.
tags:
- Buyer Billing
security:
- bearerAuth: []
responses:
'200':
description: Get the versioned organization IU commercial document
content:
application/json:
schema:
$ref: '#/components/schemas/GetIuRateCardOfferV2Response'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: ACCESS_DENIED (caller is not a direct organization admin).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: CONFLICT (commercial configuration is ambiguous).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/iu-rate-card/document.pdf:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: downloadIuRateCardCommercialOfferDocument
summary: Download the current Commercial Offer proposal
description: Downloads the customer-facing PDF generated from the same immutable proposal snapshot shown in Plan & Billing. The route resolves only the authenticated organization's pending, upcoming, or current Commercial Offer. Exactly one of bindingId or offerVersion is required.
tags:
- Buyer Billing
security:
- bearerAuth: []
parameters:
- in: query
name: bindingId
schema:
description: Accepted plan record to render. Exactly one of bindingId or offerVersion is required.
type: string
pattern: ^\d+$
- in: query
name: offerVersion
schema:
description: Pending offer version to render. Exactly one of bindingId or offerVersion is required.
type: string
pattern: ^v1:[0-9a-f]{64}$
responses:
'200':
description: Download the current Commercial Offer proposal
content:
application/pdf:
schema:
$ref: '#/components/schemas/CommercialOfferDocumentPdf'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: ACCESS_DENIED (caller is not a direct organization admin).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: No customer-facing Commercial Offer is available.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/iu-rate-card/accept:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
post:
operationId: acceptIuRateCardOffer
summary: Accept an exact organization IU Rate Card offer
description: Creates the one initial immutable IU-plan acceptance record for a direct human organization admin. The server re-resolves the Rate Card, activity terms, plan, governing agreement, and corporate discount; a changed displayed offer must be reviewed again.
tags:
- Buyer Billing
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
offerVersion:
type: string
pattern: ^v1:[0-9a-f]{64}$
planId:
type: string
pattern: ^\d+$
paymentOptionKey:
type: string
minLength: 1
maxLength: 120
pattern: ^[a-z0-9][a-z0-9._-]*$
idempotencyKey:
type: string
minLength: 8
maxLength: 128
pattern: ^[A-Za-z0-9._:-]+$
required:
- offerVersion
- planId
- idempotencyKey
additionalProperties: false
responses:
'200':
description: Accept an exact organization IU Rate Card offer
content:
application/json:
schema:
$ref: '#/components/schemas/AcceptIuRateCardOfferResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: ACCESS_DENIED (a direct human organization admin is required).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'409':
description: CONFLICT (the offer changed, the key was reused, or an accepted plan already exists).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/payment-methods/setup:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
post:
operationId: setupPaymentMethod
summary: Start adding a card (admin)
description: Create a card-capture session for the organization and return the client secret the embedded card form needs, plus the publishable key to mount it. The saved method appears (via webhook-verified confirmation) in the payment-methods list and on the billing-account document; it is never inferred from the client-side confirmation alone. Org-admin humans only — service tokens are denied. 403 FEATURE_NOT_ENABLED until the buyer-card-collection flag is on for the organization.
tags:
- Buyer Billing
security:
- bearerAuth: []
responses:
'200':
description: Start adding a card (admin)
content:
application/json:
schema:
$ref: '#/components/schemas/SetupPaymentMethodResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: FEATURE_NOT_ENABLED (flag off) or ACCESS_DENIED (not an org admin, or a service token).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/payment-methods:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: listPaymentMethods
summary: List payment methods
description: The organization's active payment methods — display-safe metadata only (kind, brand, last4, expiry, status); never a card number or processor token. At most one active method today.
tags:
- Buyer Billing
security:
- bearerAuth: []
responses:
'200':
description: List payment methods
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentMethodListResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: ACCESS_DENIED (caller is not an org admin / eligible service token).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/payment-methods/{id}:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
delete:
operationId: removePaymentMethod
summary: Remove a payment method (admin)
description: Remove a saved payment method. Denied with VALIDATION_ERROR when the method is load-bearing (it is the organization's only way to pay) — add a replacement card first, or set up invoicing. Org-admin humans only — service tokens are denied.
tags:
- Buyer Billing
security:
- bearerAuth: []
parameters:
- in: path
name: id
schema:
description: Surrogate id of the payment-method row to remove.
type: string
pattern: ^\d+$
required: true
description: Surrogate id of the payment-method row to remove.
responses:
'200':
description: Remove a payment method (admin)
content:
application/json:
schema:
$ref: '#/components/schemas/RemovePaymentMethodResponse'
'400':
description: VALIDATION_ERROR (the method is load-bearing — replace it instead of removing).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: ACCESS_DENIED (not an org admin, or a service token).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/capture-links/{token}:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: exchangeCaptureLink
summary: Open a payment capture link
description: Exchange a capture-link token issued by the add_payment_authority task. No API key or session applies — the single-use token (valid 30 minutes, one verified card capture) is the authorization; the hosted capture page calls this on the cardholder's behalf. Marks the link opened and returns the org display name plus the embedded card form's client secret and publishable key while the link is still capturable; once verified or expired it returns the status alone. Pass `view=status` for a cheap status-only poll that opens nothing. Unknown or malformed tokens return a bare 404/400 with no organization information. Requests are IP rate-limited.
tags:
- Buyer Billing
security: []
parameters:
- in: query
name: view
schema:
description: 'Pass `status` for the cheap status-only poll: returns status and expiry without opening the link or minting card-form credentials.'
type: string
enum:
- status
description: 'Pass `status` for the cheap status-only poll: returns status and expiry without opening the link or minting card-form credentials.'
- in: path
name: token
schema:
description: The single-use capture-link token from the URL issued by add_payment_authority. The token is the authorization — no session or API key applies.
type: string
pattern: ^[A-Za-z0-9_-]{40,64}$
required: true
description: The single-use capture-link token from the URL issued by add_payment_authority. The token is the authorization — no session or API key applies.
responses:
'200':
description: Open a payment capture link
content:
application/json:
schema:
$ref: '#/components/schemas/CaptureLinkExchangeResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: NOT_FOUND (unknown token — deliberately indistinguishable from any other failure; no organization information is returned).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'429':
description: RATE_LIMITED (per-IP enumeration cap).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/payment-methods/pay-now:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
post:
operationId: payNow
summary: Manually retry the outstanding failed charge (admin)
description: Immediately re-attempts the organization's outstanding failed charge on the currently-saved card. Returns `processing` — the actual recovery (hold cleared, `nextAction` back to `NONE`) is confirmed asynchronously via a signature-verified Stripe webhook; poll GET /billing/account rather than inferring success from this response. Org-admin humans only — service tokens are denied (card actuation is a human/PCI boundary).
tags:
- Buyer Billing
security:
- bearerAuth: []
responses:
'200':
description: Manually retry the outstanding failed charge (admin)
content:
application/json:
schema:
$ref: '#/components/schemas/PayNowResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: ACCESS_DENIED (not an org admin, or a service token).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: NOT_FOUND (no outstanding failed charge to retry).
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/invoice-activity:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: getInvoiceActivity
summary: Get invoice activity
description: 'Invoice activity for the caller''s org (status, kind, currency, amount, due/paid date). Rows project from the org''s issued IU fee invoices (kind: fees) — empty until the org''s first charged billing cycle closes. Dark-metered (cost_bearer=platform) usage is never billable and never appears.'
tags:
- Buyer Billing
security:
- bearerAuth: []
parameters:
- in: query
name: targetCustomerId
schema:
description: Direct child customer to read or update from an authorized parent billing organization
type: string
pattern: ^[1-9][0-9]*$
description: Direct child customer to read or update from an authorized parent billing organization
responses:
'200':
description: Get invoice activity
content:
application/json:
schema:
$ref: '#/components/schemas/InvoiceActivityResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/fee-invoices:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: listFeeInvoices
summary: List fee invoices
description: The org's IU fee invoices, newest first — one per charged billing cycle, with gapless sequential numbering. Empty until the org's first charged cycle closes.
tags:
- Buyer Billing
security:
- bearerAuth: []
parameters:
- in: query
name: targetCustomerId
schema:
description: Direct child customer to read or update from an authorized parent billing organization
type: string
pattern: ^[1-9][0-9]*$
description: Direct child customer to read or update from an authorized parent billing organization
responses:
'200':
description: List fee invoices
content:
application/json:
schema:
$ref: '#/components/schemas/FeeInvoiceListResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/billing/fee-invoices/{invoiceNumber}:
servers:
- url: https://api.interchange.io/api/v2
description: Production server
get:
operationId: getFeeInvoice
summary: Get fee invoice
description: One fee invoice with its line items (plan commitment, overage with IU quantity and rate, payments applied). Scoped to the caller’s org — another org’s invoice number is a 404.
tags:
- Buyer Billing
security:
- bearerAuth: []
parameters:
- in: query
name: targetCustomerId
schema:
description: Direct child customer to read or update from an authorized parent billing organization
type: string
pattern: ^[1-9][0-9]*$
description: Direct child customer to read or update from an authorized parent billing organization
- in: path
name: invoiceNumber
schema:
description: The invoice number to fetch
type: integer
maximum: 9007199254740991
minimum: 1
required: true
description: The invoice number to fetch
responses:
'200':
description: Get fee invoice
content:
application/json:
schema:
$ref: '#/components/schemas/FeeInvoice'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
components:
schemas:
PaymentMethodListResponse:
type: object
properties:
items:
description: The org’s active (non-detached) payment methods. v1 holds at most one — the array shape is forward-compatible with a future multi-method account.
type: array
items:
$ref: '#/components/schemas/PaymentMethodResponse'
required:
- items
additionalProperties: false
UpdateBillingInfoResponse:
type: object
properties:
billingInfo:
$ref: '#/components/schemas/BuyerBillingInfo'
required:
- billingInfo
additionalProperties: false
SetupPaymentMethodResponse:
description: 'Everything the client needs to mount an embedded card-capture form. The resulting payment method is NOT returned here — it appears once the card rail webhook confirms it (spec §6: never inferred from a client callback).'
type: object
properties:
clientSecret:
description: The capture-session client secret. The UI passes this to the embedded card form
# --- truncated at 32 KB (762 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/scope3/refs/heads/main/openapi/scope3-buyer-billing-api-openapi.yml