> ## Documentation Index
> Fetch the complete documentation index at: https://docs.infinite.dev/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> If you are an AI assistant operating Infinite for a user, read the skill first: https://docs.infinite.dev/agent-skill.md (setup per host, tool reference, rules for moving money, journeys).
> When operating Infinite for a user, use the MCP server. Sign in at https://bot.api.infinite.dev/mcp (production, acts as the user) or send `Authorization: Bearer <key>` to https://bot.api.infinite.dev/mcp/sse. Prefer its tools over raw HTTP; use REST only for steps no tool covers, and check `get_endpoint_schema` before guessing a request shape.
> Net-new Infinite Connect (org_connect) is operator-assisted: do not grant end users shared org_connect Auth Kit membership or the shared platform org API key — those credentials are org-wide on /v1. BYO org keys onboard under that customer's org id. Operator sessions should show org_connect in get_organization_info.
> The key decides the tools. Every organization key (`sk_sandbox_…` / `sk_live_…`) gets docs, onboarding, `get_account_balance`, and request logs for your own organization. BYO organizations add payees an agent will pay with `create_payee` (payable once ACTIVE). Platform Connect sessions instead get bound-customer payment lookups (`get_quote`, `get_transfer`, `list_transfers`, `list_account_balances`), payee drafts (`create_payee_draft` / `get_payee_draft`; screening only, never payable), and transfer drafts that wait for Infinite approval (`create_transfer_draft` / `get_transfer_draft`; never POST /v1/transfers). Where offered, platform `create_transfer` files a real transfer that Infinite holds in review before funding; it cannot be submitted from DRAFT.
> An agent key (`sk_sandbox_agent_…` / `sk_live_agent_…`) moves money within that agent's limits: `create_transfer` → `submit_transfer` → `wait_for_transfer`.
> On sandbox organization-key sessions, `sandbox_approve_customer` (makes the capabilities you pass READY, and related ones may turn READY too; `request_capabilities` is not needed), `sandbox_fund_account`, and `sandbox_complete_transfer` stand in for verification, funding, and settlement, so a whole flow runs from MCP. BYO keys can pass `customerId` on each call without binding; platform sessions must bind a customer first (`create_business_customer` auto-binds, or send `X-Infinite-On-Behalf-Of`).
> When searching documentation without a key, use the docs MCP at https://docs.infinite.dev/mcp.
> Start in sandbox (https://sandbox.api.infinite.dev). Do not use production unless the user explicitly asks.
> Confirm amount, currency, and payee with the user before any payment is submitted. Pass the invoice number as `reference` on `create_transfer`; the summary says what the payee will see.
> REST amounts are integer minor units (`"4000"` = 40.00 USD). MCP payment tools take exact decimal strings (`"40.00"`). Never mix them.
> Agent denials return `403 { denial: { code, message, window, limit, used, remaining, attemptedAmount, currency }, hint }` with decimal amounts; per-transfer denials omit `used` and `remaining`. Report them to the user; do not work around them.

# Simulate customer capabilities

> Make the requested capabilities READY for a sandbox customer by simulating the underlying approvals, without running real onboarding. The customer must already be ACTIVE (see the customer status endpoint). Emits the same capability webhooks as production. Simulating USD_BALANCE also approves external payout accounts that are still in review, including accounts created before the capability was enabled. Approving those payout accounts requires permission to write accounts.

## Testing balance accounts end to end

1. Set the customer status to `ACTIVE` via the customer status endpoint
2. Simulate `USD_BALANCE` with this endpoint
3. [Create the balance account](/api-reference/balance-accounts/create-a-balance-account)
4. Credit it with [account fund-in](/api-reference/sandbox/simulate-account-funding)

<Note>The customer must be `ACTIVE` before capabilities can be simulated. Capabilities that depend on provider-side configuration that cannot be simulated return `400`.</Note>

<Note>Simulating `USD_BALANCE` also approves external payout accounts that are still in review, including ones created before the capability was enabled. Call it again to approve accounts left in review by an earlier simulation.</Note>


## OpenAPI

````yaml put /v1/sandbox/customers/{id}/capabilities
openapi: 3.0.0
info:
  title: Infinite API
  description: API for Infinite
  version: '1.0'
  contact: {}
servers:
  - url: https://sandbox.api.infinite.dev
    description: Sandbox
  - url: https://api.infinite.dev
    description: Production
security: []
tags:
  - name: Accounts
    description: Virtual and external account management
  - name: Customers
    description: Customer identity management
  - name: Documents
    description: Document upload and management
  - name: Fixed Routes
    description: Fixed route management
  - name: External Bank Accounts
    description: External bank account management
  - name: External Wallets
    description: External wallet management
  - name: Infinite Wallets
    description: Infinite Wallet management
  - name: Organizations
    description: Organization management
  - name: Quotes
    description: Quote creation and management
  - name: Transfers
    description: Money movement and transaction tracking
  - name: Verification
    description: Identity verification workflows
  - name: Terms of Service
    description: Terms of Service acceptance
  - name: Health
    description: System health and monitoring
  - name: Sandbox
    description: Sandbox utilities
paths:
  /v1/sandbox/customers/{id}/capabilities:
    servers:
      - url: https://sandbox.api.infinite.dev
        description: Sandbox
    put:
      tags:
        - Sandbox
      summary: Simulate customer capabilities
      description: >-
        Make the requested capabilities READY for a sandbox customer by
        simulating the underlying approvals, without running real onboarding.
        The customer must already be ACTIVE (see the customer status endpoint).
        Emits the same capability webhooks as production. Simulating USD_BALANCE
        also approves external payout accounts that are still in review,
        including accounts created before the capability was enabled. Approving
        those payout accounts requires permission to write accounts.
      operationId: SandboxController_simulateCapabilities_v1
      parameters:
        - name: X-API-Key
          in: header
          description: API key
          required: false
          schema:
            type: string
        - name: id
          required: true
          in: path
          description: Customer ID
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SandboxSimulateCapabilitiesDto'
      responses:
        '200':
          description: Capabilities simulated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerCapabilitiesResponseDto'
        '400':
          description: >-
            Not in sandbox environment, customer not ACTIVE, or a capability
            cannot be simulated
        '401':
          description: Unauthorized - Invalid or missing authentication credentials
        '403':
          description: Account write permission is required when simulating USD balance
        '404':
          description: Customer not found
      security:
        - bearer: []
      x-codeSamples:
        - lang: bash
          label: CLI
          source: >-
            # Requires: npm i -g @infinite_dev/cli && export
            INFINITE_API_KEY=sk_sandbox_...

            # Escape hatch for any endpoint: infinite api <METHOD> <path>

            infinite api PUT /v1/sandbox/customers/cus_abc123/capabilities \
              --body '<request-json>'
        - lang: text
          label: MCP
          source: >-
            Simulate customer capabilities (cus_abc123).


            # Infinite MCP is read-only for this endpoint — use a dedicated MCP
            tool when one exists, otherwise run the CLI tab.
components:
  schemas:
    SandboxSimulateCapabilitiesDto:
      type: object
      properties:
        capabilities:
          type: array
          description: >-
            Capabilities to make READY for this customer by simulating the
            underlying approvals.
          example:
            - USD_BALANCE
          items:
            type: string
            enum:
              - USD_ACH_PAYIN
              - USD_ACH_PAYOUT
              - USD_WIRE_PAYIN
              - USD_WIRE_PAYOUT
              - USD_BALANCE
              - USD_YIELD
              - SWIFT_PAYIN
              - SWIFT_PAYOUT
              - STABLECOIN_PAYIN
              - STABLECOIN_PAYOUT
              - STABLECOIN_SWAPS
              - AED_FX_PAYOUT
              - AUD_FX_PAYOUT
              - BHD_FX_PAYOUT
              - BOB_FX_PAYOUT
              - BRL_FX_PAYOUT
              - CLP_FX_PAYOUT
              - CNY_FX_PAYOUT
              - COP_FX_PAYOUT
              - DOP_FX_PAYOUT
              - EGP_FX_PAYOUT
              - EUR_FX_PAYOUT
              - GBP_FX_PAYOUT
              - HKD_FX_PAYOUT
              - IDR_FX_PAYOUT
              - INR_FX_PAYOUT
              - JPY_FX_PAYOUT
              - KRW_FX_PAYOUT
              - KWD_FX_PAYOUT
              - MXN_FX_PAYOUT
              - MYR_FX_PAYOUT
              - PEN_FX_PAYOUT
              - PHP_FX_PAYOUT
              - PYG_FX_PAYOUT
              - QAR_FX_PAYOUT
              - SAR_FX_PAYOUT
              - SGD_FX_PAYOUT
              - THB_FX_PAYOUT
              - TRY_FX_PAYOUT
              - TWD_FX_PAYOUT
              - USD_FX_PAYOUT
              - VND_FX_PAYOUT
      required:
        - capabilities
    CustomerCapabilitiesResponseDto:
      type: object
      properties:
        id:
          type: string
          description: Customer ID
          example: cus_abc123
        capabilities:
          type: array
          items:
            $ref: '#/components/schemas/CustomerCapabilityStateDto'
      required:
        - id
        - capabilities
    CustomerCapabilityStateDto:
      type: object
      properties:
        capability:
          type: string
          enum:
            - USD_ACH_PAYIN
            - USD_ACH_PAYOUT
            - USD_WIRE_PAYIN
            - USD_WIRE_PAYOUT
            - USD_BALANCE
            - USD_YIELD
            - SWIFT_PAYIN
            - SWIFT_PAYOUT
            - STABLECOIN_PAYIN
            - STABLECOIN_PAYOUT
            - STABLECOIN_SWAPS
            - AED_FX_PAYOUT
            - AUD_FX_PAYOUT
            - BHD_FX_PAYOUT
            - BOB_FX_PAYOUT
            - BRL_FX_PAYOUT
            - CLP_FX_PAYOUT
            - CNY_FX_PAYOUT
            - COP_FX_PAYOUT
            - DOP_FX_PAYOUT
            - EGP_FX_PAYOUT
            - EUR_FX_PAYOUT
            - GBP_FX_PAYOUT
            - HKD_FX_PAYOUT
            - IDR_FX_PAYOUT
            - INR_FX_PAYOUT
            - JPY_FX_PAYOUT
            - KRW_FX_PAYOUT
            - KWD_FX_PAYOUT
            - MXN_FX_PAYOUT
            - MYR_FX_PAYOUT
            - PEN_FX_PAYOUT
            - PHP_FX_PAYOUT
            - PYG_FX_PAYOUT
            - QAR_FX_PAYOUT
            - SAR_FX_PAYOUT
            - SGD_FX_PAYOUT
            - THB_FX_PAYOUT
            - TRY_FX_PAYOUT
            - TWD_FX_PAYOUT
            - USD_FX_PAYOUT
            - VND_FX_PAYOUT
          example: USD_WIRE_PAYIN
        status:
          type: string
          enum:
            - READY
            - IN_REVIEW
            - UNAVAILABLE
          example: READY
      required:
        - capability
        - status
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: API Key
      type: http
      description: API Key in Bearer format (e.g., Bearer sk_test_...)

````

## Related topics

- [Get customer capabilities](/api-reference/customers/get-customer-capabilities.md)
- [Simulate transfer lifecycle](/api-reference/sandbox/simulate-transfer-lifecycle.md)
- [Simulate account funding](/api-reference/sandbox/simulate-account-funding.md)
- [Customers](/concepts/customers.md)
- [Simulate a fixed-route source deposit](/api-reference/sandbox/simulate-a-fixed-route-source-deposit.md)
