> ## 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.

# Validate and enrich bank code

> Validate a bank code for a specific payment network and retrieve enriched bank information.

Provide the payment network (rail) and the appropriate bank code:

| Payment Network | Bank Code Type | Format | Example |
|-----------------|----------------|--------|---------|
| `ach`, `wire` | Routing Number | 9 digits | 021000021 |
| `swift` | BIC/SWIFT | 8-11 chars | CHASUS33 |
| `sepa`, `sepa_instant` | IBAN | 15-34 chars | DE89370400440532013000 |
| `faster_payments`, `bacs`, `chaps` | Sort Code | 6 digits | 200000 |
| `eft`, `interac` | Transit Number | 9 digits | 000412345 |
| `npp`, `becs` | BSB | 6 digits | 063000 |
| `imps`, `neft`, `rtgs` | IFSC | 11 chars | HDFC0001234 |
| `pix`, `ted` | COMPE Code | 3 digits | 001 |
| `chats` | Bank Code | 3 digits | 004 |
|| `fast_sg`, `meps` | Bank Code | 4 digits | 7171 |
|| `bi_fast`, `artajasa` | Bank Code | 3 digits | 014 |
|| `spei` | Institution Code | 3 digits | 012 |



## OpenAPI

````yaml post /v1/external-bank-accounts/validate
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/external-bank-accounts/validate:
    post:
      tags:
        - External Bank Accounts
      summary: Validate and enrich bank code
      description: >-
        Validate a bank code for a specific payment network and retrieve
        enriched bank information.


        Provide the payment network (rail) and the appropriate bank code:


        | Payment Network | Bank Code Type | Format | Example |

        |-----------------|----------------|--------|---------|

        | `ach`, `wire` | Routing Number | 9 digits | 021000021 |

        | `swift` | BIC/SWIFT | 8-11 chars | CHASUS33 |

        | `sepa`, `sepa_instant` | IBAN | 15-34 chars | DE89370400440532013000 |

        | `faster_payments`, `bacs`, `chaps` | Sort Code | 6 digits | 200000 |

        | `eft`, `interac` | Transit Number | 9 digits | 000412345 |

        | `npp`, `becs` | BSB | 6 digits | 063000 |

        | `imps`, `neft`, `rtgs` | IFSC | 11 chars | HDFC0001234 |

        | `pix`, `ted` | COMPE Code | 3 digits | 001 |

        | `chats` | Bank Code | 3 digits | 004 |

        || `fast_sg`, `meps` | Bank Code | 4 digits | 7171 |

        || `bi_fast`, `artajasa` | Bank Code | 3 digits | 014 |

        || `spei` | Institution Code | 3 digits | 012 |
      operationId: ExternalBankAccountValidationController_validateBankCode_v1
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidateBankCodeDto'
      responses:
        '200':
          description: Bank code validation and enrichment result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankCodeEnrichmentResponseDto'
        '429':
          description: Rate limit exceeded for unauthenticated requests
      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 POST /v1/external-bank-accounts/validate \
              --body '<request-json>'
        - lang: text
          label: MCP
          source: >-
            Validate and enrich bank code.


            # Infinite MCP is read-only for this endpoint — use a dedicated MCP
            tool when one exists, otherwise run the CLI tab.
components:
  schemas:
    ValidateBankCodeDto:
      type: object
      properties:
        paymentNetwork:
          type: string
          description: Payment rail/network to validate the bank code for
          enum:
            - ACH
            - ACH_SAME_DAY
            - WIRE
            - FED_NOW
            - RTP
            - EREBOR
            - EREBOR_RAIL
            - BALANCE
            - SWIFT
            - SEPA
            - SEPA_INSTANT
            - TIPS
            - FASTER_PAYMENTS
            - BACS
            - CHAPS
            - ELIXIR
            - NICS
            - EFT
            - INTERAC
            - NPP
            - BECS
            - UPI
            - IMPS
            - IMPS_WITH_FIRC
            - NEFT
            - RTGS
            - BI_FAST
            - ARTAJASA
            - PIX
            - TED
            - TEF
            - SPEI
            - COELSA
            - SINPE
            - CIPS
            - CFXPS
            - CHATS
            - ZENGIN
            - KFTC
            - FAST_SG
            - MEPS
            - DUITNOW
            - PROMPTPAY
            - INSTAPAY
            - PESONET
            - NAPAS
            - BEFTN
            - SLIPS
            - ZAHAV
            - GHIPSS
            - NIBSS
            - PESALINK
            - RTC_ZA
            - TZS_RTGS
            - EGP_ACH
            - JOD_ACH
            - NPSS
            - MADA
            - QPS
            - DOP_ACH
            - GTQ_ACH
            - HNL_ACH
            - PEN_ACH
            - JMD_ACH
            - USD_ACH_SV
            - USD_ACH_EC
            - CLP_TEF
            - PSE
            - COP_ACH
            - BOB_RTGS
            - PYG_ACH
            - CERTIS
            - DKK_TIPS
            - SENT
            - NKS
            - BANKGIROT
            - HKD_FPS
            - IBFT
            - TRY_FAST
          example: ACH
        code:
          type: string
          description: >-
            The bank code value to validate and enrich (routing number, sort
            code, IFSC, BIC, IBAN, etc.)
          example: '021000021'
      required:
        - paymentNetwork
        - code
    BankCodeEnrichmentResponseDto:
      type: object
      properties:
        found:
          type: boolean
          description: Whether the bank code was found and enriched
          example: true
        code:
          type: string
          description: The bank code that was looked up
          example: '021000021'
        paymentNetwork:
          type: string
          description: The payment network the code was validated for
          enum:
            - ACH
            - ACH_SAME_DAY
            - WIRE
            - FEDWIRE
            - FED_NOW
            - RTP
            - EREBOR
            - EREBOR_RAIL
            - BALANCE
            - SWIFT
            - SEPA
            - SEPA_INSTANT
            - TIPS
            - FASTER_PAYMENTS
            - BACS
            - CHAPS
            - ELIXIR
            - NICS
            - EFT
            - INTERAC
            - NPP
            - BECS
            - UPI
            - IMPS
            - IMPS_WITH_FIRC
            - NEFT
            - RTGS
            - BI_FAST
            - ARTAJASA
            - PIX
            - TED
            - TEF
            - SPEI
            - COELSA
            - SINPE
            - CIPS
            - CFXPS
            - CHATS
            - ZENGIN
            - KFTC
            - FAST_SG
            - MEPS
            - DUITNOW
            - PROMPTPAY
            - INSTAPAY
            - PESONET
            - NAPAS
            - BEFTN
            - SLIPS
            - ZAHAV
            - GHIPSS
            - NIBSS
            - PESALINK
            - RTC_ZA
            - TZS_RTGS
            - EGP_ACH
            - JOD_ACH
            - NPSS
            - MADA
            - QPS
            - DOP_ACH
            - GTQ_ACH
            - HNL_ACH
            - PEN_ACH
            - JMD_ACH
            - USD_ACH_SV
            - USD_ACH_EC
            - CLP_TEF
            - PSE
            - COP_ACH
            - BOB_RTGS
            - PYG_ACH
            - CERTIS
            - DKK_TIPS
            - SENT
            - NKS
            - BANKGIROT
            - HKD_FPS
            - IBFT
            - TRY_FAST
          example: ACH
        bankName:
          type: string
          description: Bank name
          example: JPMorgan Chase Bank
        branch:
          type: string
          description: Branch name
          example: Main Branch
        address:
          description: Bank address details
          allOf:
            - $ref: '#/components/schemas/BankAddressDto'
      required:
        - found
        - code
        - paymentNetwork
    BankAddressDto:
      type: object
      properties:
        addressLine1:
          type: string
          description: Address line 1 (optional for bank addresses)
          example: 123 Main Street
          maxLength: 1024
        addressLine2:
          type: string
          description: Address line 2 (apartment, suite, etc.)
          example: Apt 4B
          maxLength: 1024
        city:
          type: string
          description: City
          example: San Francisco
          maxLength: 256
        state:
          type: string
          description: State / Province
          example: CA
          maxLength: 256
        postalCode:
          type: string
          description: Postal code / ZIP code (optional for bank addresses)
          example: '94102'
          maxLength: 50
        country:
          type: string
          description: Country code (ISO 3166-2)
          example: US
          minLength: 2
          maxLength: 2

````

## Related topics

- [Validate if a fixed route can be created](/api-reference/fixed-routes/validate-if-a-fixed-route-can-be-created.md)
- [SWIFT Payouts](/guides/swift-payouts.md)
- [Fixed Routes](/concepts/fixed-routes.md)
- [Create a virtual bank account fixed route](/api-reference/fixed-routes/create-a-virtual-bank-account-fixed-route.md)
- [Get a fixed route by ID](/api-reference/fixed-routes/get-a-fixed-route-by-id.md)
