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

# Create Transfer

> POST /v1/transfers

Create an internal transfer or external payment for the authenticated organization.



## OpenAPI

````yaml /openapi.json post /v1/transfers
openapi: 3.1.0
info:
  title: Waycore Bank Connections API
  description: >-
    Developer-first API for direct bank connections, accounts, and transactions.


    Design goals:

    - Flat records with minimal nesting.

    - Clear, bank-centric naming.

    - One canonical endpoint per resource.

    - Sparse fieldsets via `fields=`.

    - Historical browsing via `GET /transactions`.

    - Incremental ETL via `GET /transactions/sync`.

    - Discover supported institutions via `GET /institutions`.

    - Model downstream client businesses via `/entities` and explicit `entityId`
    ownership.


    Authentication:

    - Opaque API keys passed as `Authorization: Bearer <key>`.

    - Key format: `way_<environment>_<key_id>_<secret>`.

    - Keys are organization-bound, environment-bound (`live` or `test`),
    scope-carrying, and expiring.

    - Managed via the Waycore Console.
  version: 0.5.0
servers:
  - url: https://api.waycore.com
security: []
paths:
  /v1/transfers:
    post:
      tags:
        - transfers
      summary: Create Transfer
      description: >-
        POST /v1/transfers


        Create an internal transfer or external payment for the authenticated
        organization.
      operationId: create_transfer_v1_transfers_post
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            anyOf:
              - type: string
                minLength: 1
                maxLength: 255
                pattern: ^\S(?:.*\S)?$
              - type: 'null'
            description: >-
              Optional caller-generated key used to safely retry create and
              retry requests. When provided, the key is assumed to identify one
              request for at least 24 hours: identical retries may return a
              replayed response and materially different payloads with the same
              key should return 409 Conflict.
            title: Idempotency-Key
          description: >-
            Optional caller-generated key used to safely retry create and retry
            requests. When provided, the key is assumed to identify one request
            for at least 24 hours: identical retries may return a replayed
            response and materially different payloads with the same key should
            return 409 Conflict.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/InternalTransferRequest'
                - $ref: '#/components/schemas/ExternalTransferRequest'
              discriminator:
                propertyName: type
                mapping:
                  internal:
                    $ref: '#/components/schemas/InternalTransferRequest'
                  external:
                    $ref: '#/components/schemas/ExternalTransferRequest'
              title: Payload
      responses:
        '202':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transfer'
          headers:
            Idempotent-Replayed:
              description: >-
                True when the response was replayed from a previous request with
                the same `Idempotency-Key`.
              schema:
                type: boolean
        '400':
          description: >-
            Bad Request. `type` may be `invalid_request` for malformed payloads
            or validation failures.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
          description: Forbidden
        '409':
          description: >-
            Conflict. Returned when an idempotency key conflicts with a previous
            request or when the transfer is not in a retryable state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '429':
          description: >-
            Too Many Requests. Retry after the number of seconds in
            `Retry-After` when present, then retry the same request.
          headers:
            Retry-After:
              description: >-
                Number of seconds to wait before retrying, when rate limiting
                provides a specific backoff.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
          description: Internal Server Error
      security:
        - apiKeyBearer:
            - transfers:write
components:
  schemas:
    InternalTransferRequest:
      properties:
        type:
          type: string
          const: internal
          title: Type
          description: Internal account transfer.
        amount:
          $ref: '#/components/schemas/MoneyAmount-Input'
        sourceAccountId:
          type: string
          format: uuid
          title: Sourceaccountid
          description: Source connected account identifier.
        destination:
          $ref: '#/components/schemas/InternalAccountDestination'
        transferType:
          type: string
          const: internal
          title: Transfertype
          description: Internal transfer rail.
        executionDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Executiondate
          description: Requested execution date. Omit for the earliest supported date.
        memo:
          anyOf:
            - type: string
              maxLength: 500
            - type: 'null'
          title: Memo
          description: Integrator-visible memo.
        clientReference:
          type: string
          maxLength: 140
          minLength: 1
          title: Clientreference
          description: >-
            Integrator-supplied payment reference distinct from the idempotency
            key.
        skipPreflight:
          type: boolean
          title: Skippreflight
          description: >-
            Whether to skip optional preflight checks before attempting
            execution.
          default: false
      additionalProperties: false
      type: object
      required:
        - type
        - amount
        - sourceAccountId
        - destination
        - transferType
        - clientReference
      title: InternalTransferRequest
    ExternalTransferRequest:
      properties:
        type:
          type: string
          const: external
          title: Type
          description: External payment transfer.
        amount:
          $ref: '#/components/schemas/MoneyAmount-Input'
        sourceAccountId:
          type: string
          format: uuid
          title: Sourceaccountid
          description: Source connected account identifier.
        destination:
          $ref: '#/components/schemas/ExternalAccountDestination'
        transferType:
          type: string
          enum:
            - ach
            - wire
            - swift
            - fednow
            - rtp
            - sepa
            - local
          title: Transfertype
          description: >-
            Requested external payment rail. Destination account identity is
            described by `destination.paymentIdentifier.scheme`.
        executionDate:
          anyOf:
            - type: string
              format: date
            - type: 'null'
          title: Executiondate
          description: Requested execution date. Omit for the earliest supported date.
        memo:
          anyOf:
            - type: string
              maxLength: 500
            - type: 'null'
          title: Memo
          description: Integrator-visible memo.
        clientReference:
          type: string
          maxLength: 140
          minLength: 1
          title: Clientreference
          description: >-
            Integrator-supplied payment reference distinct from the idempotency
            key. Where supported by the bank, this is the reference sent with
            the payment.
        skipPreflight:
          type: boolean
          title: Skippreflight
          description: >-
            Whether to skip optional preflight checks before attempting
            execution.
          default: false
      additionalProperties: false
      type: object
      required:
        - type
        - amount
        - sourceAccountId
        - destination
        - transferType
        - clientReference
      title: ExternalTransferRequest
    Transfer:
      properties:
        id:
          type: string
          format: uuid
          title: Id
          description: Stable transfer identifier.
        status:
          $ref: '#/components/schemas/TransferStatus'
          description: >-
            Current transfer lifecycle status. `pending_bank_approval` means
            Waycore has initiated the bank flow and the integrator should direct
            its user to approve in the bank portal.
        type:
          $ref: '#/components/schemas/TransferKind'
          description: Transfer direction.
        requestedAmount:
          $ref: '#/components/schemas/MoneyAmount-Output'
          description: Amount requested by the caller.
        executedAmount:
          anyOf:
            - $ref: '#/components/schemas/MoneyAmount-Output'
            - type: 'null'
          description: Actual amount sent once execution is known.
        sourceAccountId:
          type: string
          format: uuid
          title: Sourceaccountid
          description: Source connected account identifier.
        destination:
          oneOf:
            - $ref: '#/components/schemas/InternalAccountDestination'
            - $ref: '#/components/schemas/MaskedExternalAccountDestination'
          title: Destination
          description: Transfer destination.
          discriminator:
            propertyName: type
            mapping:
              account:
                $ref: '#/components/schemas/InternalAccountDestination'
              externalAccount:
                $ref: '#/components/schemas/MaskedExternalAccountDestination'
        transferType:
          $ref: '#/components/schemas/TransferType'
          description: Transfer rail used or requested.
        memo:
          anyOf:
            - type: string
            - type: 'null'
          title: Memo
          description: Integrator-visible memo.
        clientReference:
          type: string
          title: Clientreference
          description: >-
            Integrator-supplied payment reference distinct from the idempotency
            key. Where supported by the bank, this is the reference sent with
            the payment.
        failureReason:
          anyOf:
            - $ref: '#/components/schemas/TransferFailureReason'
            - type: 'null'
          description: >-
            Failure details when `status` is `failed`, `returned`, or
            `cancelled`.
        createdAt:
          type: string
          format: date-time
          title: Createdat
          description: When the transfer was created.
        updatedAt:
          type: string
          format: date-time
          title: Updatedat
          description: When the transfer last changed.
      type: object
      required:
        - id
        - status
        - type
        - requestedAmount
        - sourceAccountId
        - destination
        - transferType
        - clientReference
        - createdAt
        - updatedAt
      title: Transfer
    PublicErrorResponse:
      properties:
        type:
          title: Type
          type: string
        message:
          type: string
          title: Message
        requestId:
          anyOf:
            - type: string
            - type: 'null'
          title: Requestid
        details:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Details
      type: object
      required:
        - type
        - message
      title: PublicErrorResponse
    MoneyAmount-Input:
      properties:
        type:
          type: string
          const: money
          title: Type
          description: Amount expressed in a currency.
        value:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Value
          description: Positive monetary amount.
        currency:
          type: string
          maxLength: 3
          minLength: 3
          pattern: ^[A-Z]{3}$
          title: Currency
          description: ISO 4217 currency supplied by the caller.
      additionalProperties: false
      type: object
      required:
        - type
        - value
        - currency
      title: MoneyAmount
      examples:
        - currency: USD
          type: money
          value: '1250.00'
    InternalAccountDestination:
      properties:
        type:
          type: string
          const: account
          title: Type
          description: Connected Waycore account destination.
        accountId:
          type: string
          format: uuid
          title: Accountid
          description: Destination account identifier.
      additionalProperties: false
      type: object
      required:
        - type
        - accountId
      title: InternalAccountDestination
    ExternalAccountDestination:
      properties:
        accountHolderName:
          type: string
          maxLength: 140
          minLength: 1
          title: Accountholdername
          description: Legal or trading name of the destination account holder.
        recipientType:
          anyOf:
            - $ref: '#/components/schemas/RecipientType'
            - type: 'null'
          description: Recipient classification, when known.
        address:
          anyOf:
            - $ref: '#/components/schemas/Address'
            - type: 'null'
          description: >-
            Recipient address details, when required by the payment rail or
            bank.
        paymentIdentifier:
          oneOf:
            - $ref: '#/components/schemas/UsAchExternalPaymentIdentifier'
            - $ref: >-
                #/components/schemas/UkSortCodeAccountNumberExternalPaymentIdentifier
            - $ref: '#/components/schemas/CaEftExternalPaymentIdentifier'
            - $ref: '#/components/schemas/AuBsbAccountNumberExternalPaymentIdentifier'
            - $ref: '#/components/schemas/IbanExternalPaymentIdentifier'
          title: Paymentidentifier
          description: >-
            Destination account identifier. `scheme` describes the account
            identity; `transferType` describes the requested payment rail.
          discriminator:
            propertyName: scheme
            mapping:
              au_bsb_account_number:
                $ref: >-
                  #/components/schemas/AuBsbAccountNumberExternalPaymentIdentifier
              ca_eft:
                $ref: '#/components/schemas/CaEftExternalPaymentIdentifier'
              iban:
                $ref: '#/components/schemas/IbanExternalPaymentIdentifier'
              uk_sort_code_account_number:
                $ref: >-
                  #/components/schemas/UkSortCodeAccountNumberExternalPaymentIdentifier
              us_ach:
                $ref: '#/components/schemas/UsAchExternalPaymentIdentifier'
        bankDetails:
          anyOf:
            - $ref: '#/components/schemas/BankDetails'
            - type: 'null'
          description: Destination bank details, when required by the rail.
        intermediaryBankDetails:
          anyOf:
            - $ref: '#/components/schemas/BankDetails'
            - type: 'null'
          description: >-
            Intermediary bank details, when required by SWIFT or correspondent
            rails.
        chargeBearer:
          anyOf:
            - $ref: '#/components/schemas/ChargeBearer'
            - type: 'null'
          description: Party responsible for payment charges, when required.
        additionalDetails:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Additionaldetails
          description: Bank-specific fields not yet modeled as first-class properties.
      additionalProperties: false
      type: object
      required:
        - accountHolderName
        - paymentIdentifier
      title: ExternalAccountDestination
    TransferStatus:
      type: string
      enum:
        - queued
        - executing
        - pending_bank_approval
        - completed
        - failed
        - returned
        - cancelled
        - unknown
      title: TransferStatus
    TransferKind:
      type: string
      enum:
        - internal
        - external
      title: TransferKind
    MoneyAmount-Output:
      properties:
        type:
          type: string
          const: money
          title: Type
          description: Amount expressed in a currency.
        value:
          type: string
          pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
          title: Value
          description: Positive monetary amount.
        currency:
          type: string
          maxLength: 3
          minLength: 3
          pattern: ^[A-Z]{3}$
          title: Currency
          description: ISO 4217 currency supplied by the caller.
      additionalProperties: false
      type: object
      required:
        - type
        - value
        - currency
      title: MoneyAmount
      examples:
        - currency: USD
          type: money
          value: '1250.00'
    MaskedExternalAccountDestination:
      properties:
        type:
          type: string
          const: externalAccount
          title: Type
          description: External destination.
        accountHolderName:
          type: string
          title: Accountholdername
          description: Destination account holder name.
        recipientType:
          anyOf:
            - $ref: '#/components/schemas/RecipientType'
            - type: 'null'
          description: Recipient classification, when supplied.
        addressProvided:
          type: boolean
          title: Addressprovided
          description: Whether recipient address details were captured for the transfer.
        paymentIdentifier:
          oneOf:
            - $ref: '#/components/schemas/UsAchMaskedExternalPaymentIdentifier'
            - $ref: >-
                #/components/schemas/UkSortCodeAccountNumberMaskedExternalPaymentIdentifier
            - $ref: '#/components/schemas/CaEftMaskedExternalPaymentIdentifier'
            - $ref: >-
                #/components/schemas/AuBsbAccountNumberMaskedExternalPaymentIdentifier
            - $ref: '#/components/schemas/IbanMaskedExternalPaymentIdentifier'
          title: Paymentidentifier
          description: Masked destination account identifier.
          discriminator:
            propertyName: scheme
            mapping:
              au_bsb_account_number:
                $ref: >-
                  #/components/schemas/AuBsbAccountNumberMaskedExternalPaymentIdentifier
              ca_eft:
                $ref: '#/components/schemas/CaEftMaskedExternalPaymentIdentifier'
              iban:
                $ref: '#/components/schemas/IbanMaskedExternalPaymentIdentifier'
              uk_sort_code_account_number:
                $ref: >-
                  #/components/schemas/UkSortCodeAccountNumberMaskedExternalPaymentIdentifier
              us_ach:
                $ref: '#/components/schemas/UsAchMaskedExternalPaymentIdentifier'
      type: object
      required:
        - type
        - accountHolderName
        - addressProvided
        - paymentIdentifier
      title: MaskedExternalAccountDestination
    TransferType:
      type: string
      enum:
        - internal
        - ach
        - wire
        - swift
        - fednow
        - rtp
        - sepa
        - local
      title: TransferType
    TransferFailureReason:
      properties:
        code:
          $ref: '#/components/schemas/TransferFailureCode'
        message:
          anyOf:
            - type: string
            - type: 'null'
          title: Message
          description: Generic, actionable failure summary safe for client display.
      type: object
      required:
        - code
      title: TransferFailureReason
    RecipientType:
      type: string
      enum:
        - individual
        - business
      title: RecipientType
    Address:
      properties:
        line1:
          type: string
          maxLength: 140
          minLength: 1
          title: Line1
          description: Street address line 1.
        line2:
          anyOf:
            - type: string
              maxLength: 140
            - type: 'null'
          title: Line2
          description: Street address line 2.
        city:
          type: string
          maxLength: 100
          minLength: 1
          title: City
          description: City, town, or locality.
        region:
          anyOf:
            - type: string
              maxLength: 100
            - type: 'null'
          title: Region
          description: State, province, county, or region.
        postalCode:
          anyOf:
            - type: string
              maxLength: 32
            - type: 'null'
          title: Postalcode
          description: Postal or ZIP code.
        countryCode:
          type: string
          maxLength: 2
          minLength: 2
          pattern: ^[A-Z]{2}$
          title: Countrycode
          description: ISO 3166-1 alpha-2 country code.
      additionalProperties: false
      type: object
      required:
        - line1
        - city
        - countryCode
      title: Address
    UsAchExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: us_ach
          title: Scheme
          description: >-
            US routing and account identifier for ACH and other domestic US
            rails.
        countryCode:
          type: string
          const: US
          title: Countrycode
          description: US country code.
        details:
          $ref: '#/components/schemas/UsAchExternalPaymentIdentifierDetails'
      additionalProperties: false
      type: object
      required:
        - scheme
        - countryCode
        - details
      title: UsAchExternalPaymentIdentifier
      examples:
        - countryCode: US
          details:
            accountNumber: '000123456789'
            routingNumber: '011000015'
          scheme: us_ach
    UkSortCodeAccountNumberExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: uk_sort_code_account_number
          title: Scheme
          description: UK sort-code and account-number identifier.
        countryCode:
          type: string
          const: GB
          title: Countrycode
          description: GB country code.
        details:
          $ref: >-
            #/components/schemas/UkSortCodeAccountNumberExternalPaymentIdentifierDetails
      additionalProperties: false
      type: object
      required:
        - scheme
        - countryCode
        - details
      title: UkSortCodeAccountNumberExternalPaymentIdentifier
      examples:
        - countryCode: GB
          details:
            accountNumber: '00001234'
            sortCode: '400409'
          scheme: uk_sort_code_account_number
    CaEftExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: ca_eft
          title: Scheme
          description: Canadian EFT institution, transit, and account identifier.
        countryCode:
          type: string
          const: CA
          title: Countrycode
          description: CA country code.
        details:
          $ref: '#/components/schemas/CaEftExternalPaymentIdentifierDetails'
      additionalProperties: false
      type: object
      required:
        - scheme
        - countryCode
        - details
      title: CaEftExternalPaymentIdentifier
      examples:
        - countryCode: CA
          details:
            accountNumber: '0001234567'
            institutionNumber: '260'
            transitNumber: '00011'
          scheme: ca_eft
    AuBsbAccountNumberExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: au_bsb_account_number
          title: Scheme
          description: Australian BSB and account-number identifier.
        countryCode:
          type: string
          const: AU
          title: Countrycode
          description: AU country code.
        details:
          $ref: >-
            #/components/schemas/AuBsbAccountNumberExternalPaymentIdentifierDetails
      additionalProperties: false
      type: object
      required:
        - scheme
        - countryCode
        - details
      title: AuBsbAccountNumberExternalPaymentIdentifier
      examples:
        - countryCode: AU
          details:
            accountNumber: '000782080'
            bsb: '033085'
          scheme: au_bsb_account_number
    IbanExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: iban
          title: Scheme
          description: IBAN account identifier.
        countryCode:
          type: string
          maxLength: 2
          minLength: 2
          pattern: ^[A-Z]{2}$
          title: Countrycode
          description: ISO 3166-1 alpha-2 country code for the destination account.
        details:
          $ref: '#/components/schemas/IbanExternalPaymentIdentifierDetails'
      additionalProperties: false
      type: object
      required:
        - scheme
        - countryCode
        - details
      title: IbanExternalPaymentIdentifier
      examples:
        - countryCode: DE
          details:
            bic: COBADEFFXXX
            iban: DE89370400440532013000
          scheme: iban
    BankDetails:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 140
            - type: 'null'
          title: Name
          description: Bank name.
        bic:
          anyOf:
            - type: string
              maxLength: 11
              minLength: 8
              pattern: ^[A-Z0-9]{8}([A-Z0-9]{3})?$
            - type: 'null'
          title: Bic
          description: SWIFT/BIC.
        address:
          anyOf:
            - $ref: '#/components/schemas/Address'
            - type: 'null'
          description: Bank address, when required.
      additionalProperties: false
      type: object
      title: BankDetails
    ChargeBearer:
      type: string
      enum:
        - shared
        - sender
        - recipient
      title: ChargeBearer
    UsAchMaskedExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: us_ach
          title: Scheme
          description: US ACH account identifier.
        countryCode:
          type: string
          const: US
          title: Countrycode
          description: US country code.
        detailsMask:
          $ref: '#/components/schemas/UsAchMaskedPaymentIdentifierDetails'
      type: object
      required:
        - scheme
        - countryCode
        - detailsMask
      title: UsAchMaskedExternalPaymentIdentifier
    UkSortCodeAccountNumberMaskedExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: uk_sort_code_account_number
          title: Scheme
          description: UK sort-code and account-number identifier.
        countryCode:
          type: string
          const: GB
          title: Countrycode
          description: GB country code.
        detailsMask:
          $ref: >-
            #/components/schemas/UkSortCodeAccountNumberMaskedPaymentIdentifierDetails
      type: object
      required:
        - scheme
        - countryCode
        - detailsMask
      title: UkSortCodeAccountNumberMaskedExternalPaymentIdentifier
    CaEftMaskedExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: ca_eft
          title: Scheme
          description: Canadian EFT account identifier.
        countryCode:
          type: string
          const: CA
          title: Countrycode
          description: CA country code.
        detailsMask:
          $ref: '#/components/schemas/CaEftMaskedPaymentIdentifierDetails'
      type: object
      required:
        - scheme
        - countryCode
        - detailsMask
      title: CaEftMaskedExternalPaymentIdentifier
    AuBsbAccountNumberMaskedExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: au_bsb_account_number
          title: Scheme
          description: Australian BSB and account-number identifier.
        countryCode:
          type: string
          const: AU
          title: Countrycode
          description: AU country code.
        detailsMask:
          $ref: >-
            #/components/schemas/AuBsbAccountNumberMaskedPaymentIdentifierDetails
      type: object
      required:
        - scheme
        - countryCode
        - detailsMask
      title: AuBsbAccountNumberMaskedExternalPaymentIdentifier
    IbanMaskedExternalPaymentIdentifier:
      properties:
        scheme:
          type: string
          const: iban
          title: Scheme
          description: IBAN account identifier.
        countryCode:
          type: string
          maxLength: 2
          minLength: 2
          pattern: ^[A-Z]{2}$
          title: Countrycode
          description: ISO 3166-1 alpha-2 country code for the destination account.
        detailsMask:
          $ref: '#/components/schemas/IbanMaskedPaymentIdentifierDetails'
      type: object
      required:
        - scheme
        - countryCode
        - detailsMask
      title: IbanMaskedExternalPaymentIdentifier
    TransferFailureCode:
      type: string
      enum:
        - insufficient_funds
        - invalid_destination
        - unsupported_transfer_type
        - provider_rejected
        - provider_unavailable
        - timed_out
        - unknown
      title: TransferFailureCode
    UsAchExternalPaymentIdentifierDetails:
      properties:
        routingNumber:
          type: string
          maxLength: 9
          minLength: 9
          pattern: ^\d{9}$
          title: Routingnumber
          description: Nine-digit ABA routing number.
        accountNumber:
          type: string
          maxLength: 17
          minLength: 1
          pattern: ^[A-Za-z0-9-]{1,17}$
          title: Accountnumber
          description: US account number, preserved as a string.
      additionalProperties: false
      type: object
      required:
        - routingNumber
        - accountNumber
      title: UsAchExternalPaymentIdentifierDetails
    UkSortCodeAccountNumberExternalPaymentIdentifierDetails:
      properties:
        sortCode:
          type: string
          maxLength: 6
          minLength: 6
          pattern: ^\d{6}$
          title: Sortcode
          description: Six-digit UK sort code.
        accountNumber:
          type: string
          maxLength: 8
          minLength: 8
          pattern: ^\d{8}$
          title: Accountnumber
          description: Eight-digit UK account number.
      additionalProperties: false
      type: object
      required:
        - sortCode
        - accountNumber
      title: UkSortCodeAccountNumberExternalPaymentIdentifierDetails
    CaEftExternalPaymentIdentifierDetails:
      properties:
        institutionNumber:
          type: string
          maxLength: 3
          minLength: 3
          pattern: ^\d{3}$
          title: Institutionnumber
          description: Three-digit Canadian financial institution number.
        transitNumber:
          type: string
          maxLength: 5
          minLength: 5
          pattern: ^\d{5}$
          title: Transitnumber
          description: Five-digit Canadian branch transit number.
        accountNumber:
          type: string
          maxLength: 12
          minLength: 7
          pattern: ^\d{7,12}$
          title: Accountnumber
          description: Canadian EFT account number, preserved as a string.
      additionalProperties: false
      type: object
      required:
        - institutionNumber
        - transitNumber
        - accountNumber
      title: CaEftExternalPaymentIdentifierDetails
    AuBsbAccountNumberExternalPaymentIdentifierDetails:
      properties:
        bsb:
          type: string
          maxLength: 6
          minLength: 6
          pattern: ^\d{6}$
          title: Bsb
          description: Six-digit Australian BSB.
        accountNumber:
          type: string
          maxLength: 9
          minLength: 1
          pattern: ^\d{1,9}$
          title: Accountnumber
          description: Australian account number, preserved as a string.
      additionalProperties: false
      type: object
      required:
        - bsb
        - accountNumber
      title: AuBsbAccountNumberExternalPaymentIdentifierDetails
    IbanExternalPaymentIdentifierDetails:
      properties:
        iban:
          type: string
          maxLength: 34
          minLength: 15
          pattern: ^[A-Z]{2}[0-9A-Z]{13,32}$
          title: Iban
          description: International Bank Account Number.
        bic:
          anyOf:
            - type: string
              maxLength: 11
              minLength: 8
              pattern: ^[A-Z0-9]{8}([A-Z0-9]{3})?$
            - type: 'null'
          title: Bic
          description: Optional SWIFT/BIC.
      additionalProperties: false
      type: object
      required:
        - iban
      title: IbanExternalPaymentIdentifierDetails
    UsAchMaskedPaymentIdentifierDetails:
      properties:
        routingNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Routingnumber
          description: Masked routing number, when safe to display.
        accountNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Accountnumber
          description: Masked account number, when safe to display.
      type: object
      title: UsAchMaskedPaymentIdentifierDetails
    UkSortCodeAccountNumberMaskedPaymentIdentifierDetails:
      properties:
        sortCode:
          anyOf:
            - type: string
            - type: 'null'
          title: Sortcode
          description: Masked sort code, when safe to display.
        accountNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Accountnumber
          description: Masked account number, when safe to display.
      type: object
      title: UkSortCodeAccountNumberMaskedPaymentIdentifierDetails
    CaEftMaskedPaymentIdentifierDetails:
      properties:
        institutionNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Institutionnumber
          description: Masked Canadian financial institution number, when safe to display.
        transitNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Transitnumber
          description: Masked Canadian branch transit number, when safe to display.
        accountNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Accountnumber
          description: Masked Canadian EFT account number, when safe to display.
      type: object
      title: CaEftMaskedPaymentIdentifierDetails
    AuBsbAccountNumberMaskedPaymentIdentifierDetails:
      properties:
        bsb:
          anyOf:
            - type: string
            - type: 'null'
          title: Bsb
          description: Masked Australian BSB, when safe to display.
        accountNumber:
          anyOf:
            - type: string
            - type: 'null'
          title: Accountnumber
          description: Masked Australian account number, when safe to display.
      type: object
      title: AuBsbAccountNumberMaskedPaymentIdentifierDetails
    IbanMaskedPaymentIdentifierDetails:
      properties:
        iban:
          anyOf:
            - type: string
            - type: 'null'
          title: Iban
          description: Masked IBAN, when safe to display.
        bic:
          anyOf:
            - type: string
            - type: 'null'
          title: Bic
          description: SWIFT/BIC, when safe to display.
      type: object
      title: IbanMaskedPaymentIdentifierDetails
  securitySchemes:
    apiKeyBearer:
      type: http
      scheme: bearer
      bearerFormat: way_<environment>_<key_id>_<secret>
      description: >-
        Opaque API key passed as `Authorization: Bearer <key>`. Keys are
        organization-bound, environment-bound (`live` or `test`),
        scope-carrying, and expiring. Create and manage keys via the console.

````