Scope3 Storefront Billing API

Payout bank details and billing configuration for storefronts

Operations 9

GET /billing/storefront-rate-card Get the storefront Rate Card offer and acceptance state #
POST /billing/storefront-rate-card/accept Accept an exact storefront Rate Card offer #
GET /billing/payout-activity Get payout activity #
GET /billing Get billing config #
PUT /billing Update billing configuration (admin) #
PUT /billing/payout-details Set payout details (admin) #
GET /billing/payees List payout payees #
PUT /billing/payees Set payout payee (admin) #
GET /billing/accounts List billing accounts #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/scope3-storefront-billing-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

scope3-storefront-billing-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Scope3 Storefront Storefront Billing API
  version: 2.0.0
  description: 'REST API for partners to manage storefronts, inventory sources, and billing.


    ## Authentication


    All endpoints require a Bearer token in the Authorization header:

    ```

    Authorization: Bearer your-api-key

    ```


    ## Base URL


    `https://api.interchange.io/api/v2/storefront`


    ## For AI Agents


    AI agents can use the MCP endpoint at `/mcp/v2/storefront` with three tools:

    - `initialize`: Start an MCP session

    - `api_call`: Make REST API calls

    - `ask_about_capability`: Learn about API features'
servers:
- url: https://api.interchange.io/api/v2/storefront
  description: Production server
tags:
- name: Storefront Billing
  description: Payout bank details and billing configuration for storefronts
paths:
  /billing/storefront-rate-card:
    servers:
    - url: https://api.interchange.io/api/v2
      description: Production server
    get:
      operationId: getStorefrontRateCardOffer
      summary: Get the storefront Rate Card offer and acceptance state
      description: Returns exact effective public storefront plans for an enrolled billing organization, applicable corporate discount and list/net prices, deterministic Free/Paid state, current acceptance record, and immutable history at the organization billing boundary. A pre-ToS direct org admin may read an available offer so pricing can be reviewed alongside the governing agreement; acceptance history remains readable outside the pilot.
      tags:
      - Storefront Billing
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Get the storefront Rate Card offer and acceptance state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetStorefrontRateCardOfferResponse'
        '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/storefront-rate-card/accept:
    servers:
    - url: https://api.interchange.io/api/v2
      description: Production server
    post:
      operationId: acceptStorefrontRateCardOffer
      summary: Accept an exact storefront Rate Card offer
      description: Creates the initial immutable paid-plan acceptance record for a direct human organization admin. The server re-resolves the Rate Card, public plan, governing agreement, and discount; a changed displayed offer returns conflict and must be reviewed again. Prices are never accepted from the client.
      tags:
      - Storefront 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 storefront Rate Card offer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcceptStorefrontRateCardOfferResponse'
        '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/payout-activity:
    servers:
    - url: https://api.interchange.io/api/v2
      description: Production server
    get:
      operationId: getPayoutActivity
      summary: Get payout activity
      description: 'Payout activity for the caller''s org (status, period, legal entity, currency, amount, expected/paid date). Currently always `{ rows: [] }` — no payout run has produced an artifact yet.'
      tags:
      - Storefront 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 payout activity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayoutActivityResponse'
        '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:
    get:
      operationId: getStorefrontBilling
      summary: Get billing config
      description: 'Get the billing configuration for the storefront: payout setup status, masked payout bank details, platform fee, additional fees, payout currency, and payment terms.'
      tags:
      - Storefront 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 billing config
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetBillingResponse'
        '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: updateStorefrontBilling
      summary: Update billing configuration (admin)
      description: Update the storefront billing configuration (platform fee percent, additional fees, currency, default net days). Admin-only.
      tags:
      - Storefront 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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                platformFeePercent:
                  description: Platform fee percentage (0–100)
                  type: number
                  minimum: 0
                  maximum: 100
                fees:
                  description: Additional partner fees
                  type: array
                  items:
                    $ref: '#/components/schemas/BillingFee'
                currency:
                  description: ISO 4217 currency code
                  example: USD
                  type: string
                  minLength: 3
                  maxLength: 3
                  pattern: ^[A-Z]{3}$
                defaultNetDays:
                  description: Payment terms in days
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
      responses:
        '200':
          description: Update billing configuration (admin)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateStorefrontBillingResponse'
        '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/payout-details:
    put:
      operationId: setPayoutDetails
      summary: Set payout details (admin)
      description: 'Add or replace the payout bank details Scope3 uses to pay the storefront out by bank transfer: beneficiary name and address, account number or IBAN (write-only — reads return the last 4 characters), one bank identifier (Fedwire/ABA routing number, CHIPS ABA, SWIFT-BIC, or local bank code), and the payout currency. Admin-only.'
      tags:
      - Storefront 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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                beneficiaryName:
                  description: Legal name of the payout beneficiary — the account holder the bank pays, exactly as it appears on the bank account.
                  type: string
                  minLength: 1
                  maxLength: 255
                addressLine1:
                  description: Beneficiary street address, line 1.
                  type: string
                  minLength: 1
                  maxLength: 255
                addressLine2:
                  description: Beneficiary street address, line 2 (optional).
                  type: string
                  maxLength: 255
                city:
                  description: Beneficiary city.
                  type: string
                  minLength: 1
                  maxLength: 128
                region:
                  description: Beneficiary state/province/region (optional).
                  type: string
                  maxLength: 128
                postalCode:
                  description: Beneficiary postal/ZIP code.
                  type: string
                  minLength: 1
                  maxLength: 32
                countryCode:
                  description: Beneficiary country as an ISO 3166-1 alpha-2 code (e.g. "US", "GB").
                  example: US
                  type: string
                  pattern: ^[A-Z]{2}$
                accountNumber:
                  description: Bank account number OR IBAN (6–34 alphanumeric characters; spaces are stripped). Never returned in full by the API — reads expose only the last 4 characters. Required the first time payout details are set; may be omitted on later updates to keep the stored account number unchanged.
                  type: string
                bankIdentifierType:
                  description: 'Which bank identifier system `bankIdentifierValue` uses: FEDWIRE_ABA (US Fedwire/ABA routing number, 9 digits), CHIPS_ABA (CHIPS ABA number, 9 digits), SWIFT_BIC (SWIFT/BIC code, 8 or 11 characters), or BANK_CODE (a local/domestic bank code for banks without a SWIFT-BIC).'
                  type: string
                  enum:
                  - FEDWIRE_ABA
                  - CHIPS_ABA
                  - SWIFT_BIC
                  - BANK_CODE
                bankIdentifierValue:
                  description: 'The bank identifier itself, matching `bankIdentifierType`: a 9-digit Fedwire/ABA routing number, a 9-digit CHIPS ABA number, an 8/11-character SWIFT-BIC, or a local bank code (1–34 letters/digits/dashes).'
                  type: string
                  minLength: 1
                  maxLength: 34
                currency:
                  description: Payout currency as a 3-letter uppercase ISO 4217 code — the currency Scope3 pays this account out in.
                  example: USD
                  type: string
                  pattern: ^[A-Z]{3}$
              required:
              - beneficiaryName
              - addressLine1
              - city
              - postalCode
              - countryCode
              - bankIdentifierType
              - bankIdentifierValue
              - currency
      responses:
        '200':
          description: Set payout details (admin)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetPayoutDetailsResponse'
        '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/payees:
    get:
      operationId: listPayoutPayees
      summary: List payout payees
      description: 'List the multi-entity payout payees on file (masked: account numbers reduced to their last 4 characters). Each payee is the bank account for one legal payout entity in one payout currency. The default payout details on the billing config are separate — see Get billing config.'
      tags:
      - Storefront 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 payout payees
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListPayoutPayeesResponse'
        '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: setPayoutPayee
      summary: Set payout payee (admin)
      description: 'Add or update the payout bank details for one legal payout entity in one payout currency. Upserts by (entityName, currency): one bank account per entity per currency, and the beneficiary name must match the account holder — the legal entity itself. accountNumber is write-only and required the first time the payee is set; omit it on later updates to keep the stored value. Admin-only.'
      tags:
      - Storefront 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
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                entityName:
                  description: 'Label for the legal payout entity this bank account belongs to (e.g. "Acme Media India Pvt Ltd"). Together with the payout currency it identifies the payee: one bank account per entity per currency.'
                  type: string
                  minLength: 1
                  maxLength: 255
                beneficiaryName:
                  description: Legal name of the payout beneficiary — the account holder the bank pays, exactly as it appears on the bank account.
                  type: string
                  minLength: 1
                  maxLength: 255
                addressLine1:
                  description: Beneficiary street address, line 1.
                  type: string
                  minLength: 1
                  maxLength: 255
                addressLine2:
                  description: Beneficiary street address, line 2 (optional).
                  type: string
                  maxLength: 255
                city:
                  description: Beneficiary city.
                  type: string
                  minLength: 1
                  maxLength: 128
                region:
                  description: Beneficiary state/province/region (optional).
                  type: string
                  maxLength: 128
                postalCode:
                  description: Beneficiary postal/ZIP code.
                  type: string
                  minLength: 1
                  maxLength: 32
                countryCode:
                  description: Beneficiary country as an ISO 3166-1 alpha-2 code (e.g. "US", "GB").
                  example: US
                  type: string
                  pattern: ^[A-Z]{2}$
                accountNumber:
                  description: Bank account number OR IBAN (6–34 alphanumeric characters; spaces are stripped). Never returned in full by the API — reads expose only the last 4 characters. Required the first time payout details are set; may be omitted on later updates to keep the stored account number unchanged.
                  type: string
                bankIdentifierType:
                  description: 'Which bank identifier system `bankIdentifierValue` uses: FEDWIRE_ABA (US Fedwire/ABA routing number, 9 digits), CHIPS_ABA (CHIPS ABA number, 9 digits), SWIFT_BIC (SWIFT/BIC code, 8 or 11 characters), or BANK_CODE (a local/domestic bank code for banks without a SWIFT-BIC).'
                  type: string
                  enum:
                  - FEDWIRE_ABA
                  - CHIPS_ABA
                  - SWIFT_BIC
                  - BANK_CODE
                bankIdentifierValue:
                  description: 'The bank identifier itself, matching `bankIdentifierType`: a 9-digit Fedwire/ABA routing number, a 9-digit CHIPS ABA number, an 8/11-character SWIFT-BIC, or a local bank code (1–34 letters/digits/dashes).'
                  type: string
                  minLength: 1
                  maxLength: 34
                currency:
                  description: Payout currency as a 3-letter uppercase ISO 4217 code — the currency Scope3 pays this account out in.
                  example: USD
                  type: string
                  pattern: ^[A-Z]{3}$
                isPrimary:
                  description: 'Set true to make this the customer''s PRIMARY payout entity (the one returned as `payoutDetails` on GET /billing), demoting any other primary payee. Omit to leave the current primary/non-primary status unchanged. Exactly one payee per customer is primary: a customer''s FIRST payee always becomes the primary regardless of this field.'
                  type: boolean
              required:
              - entityName
              - beneficiaryName
              - addressLine1
              - city
              - postalCode
              - countryCode
              - bankIdentifierType
              - bankIdentifierValue
              - currency
      responses:
        '200':
          description: Set payout payee (admin)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetPayoutPayeeResponse'
        '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/accounts:
    get:
      operationId: listBillingAccounts
      summary: List billing accounts
      description: Get billing status for managed accounts of a parent customer.
      tags:
      - Storefront Billing
      security:
      - bearerAuth: []
      responses:
        '200':
          description: List billing accounts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingAccountsResponse'
        '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:
    UpdateStorefrontBillingResponse:
      type: object
      properties:
        billing:
          $ref: '#/components/schemas/StorefrontBillingResponse'
      required:
      - billing
      additionalProperties: false
    StorefrontBillingResponse:
      description: Storefront billing configuration. Storefront billing setup is optional only for official Scope3 sales-adapter storefronts on existing downstream platform settlement agreements. Third-party sales agents and finished-product/pass-through sources are normal Interchange-cleared storefront sources and still require payout bank details. Seller-cleared settlement is not yet configurable for normal storefronts.
      type: object
      properties:
        onboardingStatus:
          description: Payout setup status. 'complete' once payout bank details are on file.
          type: string
          enum:
          - pending
          - complete
          - restricted
        platformFeePercent:
          description: Platform fee percentage
          type:
          - number
          - 'null'
        fees:
          description: Additional fees
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/BillingFeeOutput'
        currency:
          description: Payout currency (ISO 4217 code)
          type:
          - string
          - 'null'
        country:
          description: ISO 3166-1 alpha-2 country used for billing
          type:
          - string
          - 'null'
        defaultNetDays:
          description: Payment terms in days
          type:
          - number
          - 'null'
        payoutDetails:
          description: Masked payout bank details on file, or null when none have been added yet
          allOf:
          - $ref: '#/components/schemas/PayoutDetails'
        inherited:
          description: Whether this billing config is inherited from a parent customer
          type: boolean
        createdAt:
          description: Creation timestamp (ISO 8601)
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        updatedAt:
          description: Last update timestamp (ISO 8601)
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
      required:
      - onboardingStatus
      - platformFeePercent
      - fees
      - currency
      - country
      - defaultNetDays
      - payoutDetails
      - inherited
      - createdAt
      - updatedAt
      additionalProperties: false
    GetStorefrontRateCardOfferResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            billingCustomerId:
              type: integer
              maximum: 9007199254740991
              minimum: 1
            eligible:
              type: boolean
            commercialStatus:
              type: string
              enum:
              - FREE
              - PAID
            renewal:
              type:
              - object
              - 'null'
              properties:
                version:
                  type: string
                  pattern: ^v1:[0-9a-f]{64}$
                status:
                  type: string
                  enum:
                  - RENEWS
                  - NON_RENEWAL_SCHEDULED
                  - RENEWAL_BLOCKED
                  - ENDED
                  - PINNED
                targetBindingId:
                  type: string
                  pattern: ^\d+$
                effectiveFreeAt:
                  type: string
                  format: date-time
                  pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                changeAllowedUntil:
                  type: string
                  format: date-time
                  pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                allowedActions:
                  type: array
                  items:
                    type: string
                    enum:
                    - CANCEL_AT_TERM
                    - REINSTATE_AUTO_RENEWAL
                latestInstruction:
                  type:
                  - object
                  - 'null'
                  properties:
                    id:
                      type: string
                      pattern: ^\d+$
                    bindingId:
                      type: string
                      pattern: ^\d+$
                    instructionType:
                      type: string
                      enum:
                      - CANCEL_AT_TERM
                      - REINSTATE_AUTO_RENEWAL
                    supersedesInstructionId:
                      type:
                      - string
                      - 'null'
                      pattern: ^\d+$
                    effectiveAt:
                      type: string
                      format: date-time
                      pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                    changeCutoffAt:
                      type: string
                      format: date-time
                      pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                    actorUserId:
                      type: string
                      pattern: ^\d+$
                    source:
                      type: string
                      enum:
                      - PLAN_BILLING
                      - MCP_APP
                      - ADMIN
                    reason:
                      type: string
                      minLength: 3
                      maxLength: 500
                    recordedAt:
                      type: string
                      format: date-time
                      pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                  required:
                  - id
                  - bindingId
                  - instructionType
                  - supersedesInstructionId
                  - effectiveAt
                  - changeCutoffAt
                  - actorUserId
                  - source
                  - reason
                  - recordedAt
                  additionalProperties: false
                history:
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        pattern: ^\d+$
                      bindingId:
                        type: string
  

# --- truncated at 32 KB (198 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/scope3/refs/heads/main/openapi/scope3-storefront-billing-api-openapi.yml