openapi: 3.0.3 info: title: Moov API description: >- The Moov API lets software platforms accept, store, send, and spend money through a single REST API. It is organized around Moov accounts, funding sources (bank accounts, cards, wallets, payment methods), and money movement (transfers, refunds, disputes, sweeps, card issuing). The API is based on REST principles, returns JSON, and uses standard HTTP response codes. Requests are authenticated with an OAuth 2.0 access token (Bearer). Event notifications are delivered via webhooks (HTTPS POST with an HMAC SHA-512 signature); Moov does not expose a public WebSocket API. This document models a representative subset of the commercial hosted API at api.moov.io - the canonical, machine-generated OpenAPI spec is published by Moov (see externalDocs). Separately, Moov maintains open-source Go libraries for banking file formats at github.com/moov-io, which are not part of this API. version: v2026.04.00 contact: name: Moov url: https://moov.io termsOfService: https://moov.io/legal/platform-agreement/ externalDocs: description: Moov API reference and canonical OpenAPI spec url: https://docs.moov.io/api/ servers: - url: https://api.moov.io description: Moov production security: - bearerAuth: [] tags: - name: Accounts description: Business and individual accounts, the core money-movement identity. - name: Representatives description: Beneficial owners and controllers attached to a business account. - name: Capabilities description: Money-movement capabilities enabled on an account. - name: Underwriting description: Underwriting details used to enable card acquiring and higher-risk activity. - name: Bank Accounts description: Bank accounts linked as funding sources, with verification. - name: Cards description: Payment cards linked as funding sources. - name: Wallets description: Stored-balance wallets and their ledgered transactions. - name: Payment Methods description: Funding-source and rail combinations usable in transfers. - name: Transfers description: Money movement across ACH, RTP, push-to-card, and card acquiring. - name: Refunds description: Refunds and reversals on card transfers. - name: Sweeps description: Automated sweeps of wallet balances to a bank account. - name: Disputes description: Card disputes, chargebacks, and evidence. - name: Card Issuing description: Virtual spending cards, authorizations, and card transactions. - name: Institutions description: Financial institution lookup by routing number. paths: /accounts: post: operationId: createAccount tags: [Accounts] summary: Create an account. responses: '200': { description: The created account. } get: operationId: listAccounts tags: [Accounts] summary: List accounts. responses: '200': { description: A list of accounts. } /accounts/{accountID}: parameters: - $ref: '#/components/parameters/accountID' get: operationId: getAccount tags: [Accounts] summary: Retrieve an account. responses: '200': { description: The account. } patch: operationId: updateAccount tags: [Accounts] summary: Update an account. responses: '200': { description: The updated account. } delete: operationId: disconnectAccount tags: [Accounts] summary: Disconnect an account. responses: '204': { description: Account disconnected. } /accounts/{accountID}/connections: parameters: - $ref: '#/components/parameters/accountID' post: operationId: createConnection tags: [Accounts] summary: Create an account connection. responses: '200': { description: The created connection. } /accounts/{accountID}/connected-accounts: parameters: - $ref: '#/components/parameters/accountID' get: operationId: listConnectedAccounts tags: [Accounts] summary: List connected accounts. responses: '200': { description: A list of connected accounts. } /tos-token: get: operationId: getTermsOfServiceToken tags: [Accounts] summary: Generate a terms-of-service token. responses: '200': { description: A terms-of-service token. } /accounts/{accountID}/representatives: parameters: - $ref: '#/components/parameters/accountID' post: operationId: createRepresentative tags: [Representatives] summary: Add a representative. responses: '200': { description: The created representative. } get: operationId: listRepresentatives tags: [Representatives] summary: List representatives. responses: '200': { description: A list of representatives. } /accounts/{accountID}/representatives/{representativeID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/representativeID' get: operationId: getRepresentative tags: [Representatives] summary: Retrieve a representative. responses: '200': { description: The representative. } patch: operationId: updateRepresentative tags: [Representatives] summary: Update a representative. responses: '200': { description: The updated representative. } delete: operationId: deleteRepresentative tags: [Representatives] summary: Remove a representative. responses: '204': { description: Representative removed. } /accounts/{accountID}/capabilities: parameters: - $ref: '#/components/parameters/accountID' post: operationId: requestCapabilities tags: [Capabilities] summary: Request capabilities. responses: '200': { description: The requested capabilities. } get: operationId: listCapabilities tags: [Capabilities] summary: List capabilities. responses: '200': { description: A list of capabilities. } /accounts/{accountID}/capabilities/{capabilityID}: parameters: - $ref: '#/components/parameters/accountID' - name: capabilityID in: path required: true schema: { type: string } get: operationId: getCapability tags: [Capabilities] summary: Retrieve a capability. responses: '200': { description: The capability. } delete: operationId: disableCapability tags: [Capabilities] summary: Disable a capability. responses: '204': { description: Capability disabled. } /accounts/{accountID}/underwriting: parameters: - $ref: '#/components/parameters/accountID' get: operationId: getUnderwriting tags: [Underwriting] summary: Retrieve underwriting details. responses: '200': { description: The underwriting details. } put: operationId: upsertUnderwriting tags: [Underwriting] summary: Create or update underwriting details. responses: '200': { description: The updated underwriting details. } /accounts/{accountID}/bank-accounts: parameters: - $ref: '#/components/parameters/accountID' post: operationId: linkBankAccount tags: [Bank Accounts] summary: Link a bank account. responses: '200': { description: The linked bank account. } get: operationId: listBankAccounts tags: [Bank Accounts] summary: List bank accounts. responses: '200': { description: A list of bank accounts. } /accounts/{accountID}/bank-accounts/{bankAccountID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/bankAccountID' get: operationId: getBankAccount tags: [Bank Accounts] summary: Retrieve a bank account. responses: '200': { description: The bank account. } delete: operationId: deleteBankAccount tags: [Bank Accounts] summary: Delete a bank account. responses: '204': { description: Bank account deleted. } /accounts/{accountID}/bank-accounts/{bankAccountID}/verify: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/bankAccountID' post: operationId: initiateBankAccountVerification tags: [Bank Accounts] summary: Initiate instant bank account verification. responses: '200': { description: Verification initiated. } put: operationId: completeBankAccountVerification tags: [Bank Accounts] summary: Complete instant bank account verification. responses: '200': { description: Verification completed. } get: operationId: getBankAccountVerification tags: [Bank Accounts] summary: Get bank account verification. responses: '200': { description: The verification status. } /accounts/{accountID}/bank-accounts/{bankAccountID}/micro-deposits: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/bankAccountID' post: operationId: initiateMicroDeposits tags: [Bank Accounts] summary: Initiate micro-deposits. responses: '200': { description: Micro-deposits initiated. } put: operationId: completeMicroDeposits tags: [Bank Accounts] summary: Complete micro-deposits. responses: '200': { description: Micro-deposits verified. } /accounts/{accountID}/cards: parameters: - $ref: '#/components/parameters/accountID' post: operationId: linkCard tags: [Cards] summary: Link a card. responses: '200': { description: The linked card. } get: operationId: listCards tags: [Cards] summary: List cards. responses: '200': { description: A list of cards. } /accounts/{accountID}/cards/{cardID}: parameters: - $ref: '#/components/parameters/accountID' - name: cardID in: path required: true schema: { type: string } get: operationId: getCard tags: [Cards] summary: Retrieve a card. responses: '200': { description: The card. } patch: operationId: updateCard tags: [Cards] summary: Update a card. responses: '200': { description: The updated card. } delete: operationId: disableCard tags: [Cards] summary: Disable a card. responses: '204': { description: Card disabled. } /accounts/{accountID}/wallets: parameters: - $ref: '#/components/parameters/accountID' post: operationId: createWallet tags: [Wallets] summary: Create a wallet. responses: '200': { description: The created wallet. } get: operationId: listWallets tags: [Wallets] summary: List wallets. responses: '200': { description: A list of wallets. } /accounts/{accountID}/wallets/{walletID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/walletID' get: operationId: getWallet tags: [Wallets] summary: Retrieve a wallet. responses: '200': { description: The wallet. } patch: operationId: updateWallet tags: [Wallets] summary: Update a wallet. responses: '200': { description: The updated wallet. } /accounts/{accountID}/wallets/{walletID}/transactions: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/walletID' get: operationId: listWalletTransactions tags: [Wallets] summary: List wallet transactions. responses: '200': { description: A list of wallet transactions. } /accounts/{accountID}/wallets/{walletID}/transactions/{transactionID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/walletID' - name: transactionID in: path required: true schema: { type: string } get: operationId: getWalletTransaction tags: [Wallets] summary: Retrieve a wallet transaction. responses: '200': { description: The wallet transaction. } /accounts/{accountID}/adjustments: parameters: - $ref: '#/components/parameters/accountID' get: operationId: listAdjustments tags: [Wallets] summary: List balance adjustments. responses: '200': { description: A list of adjustments. } /accounts/{accountID}/adjustments/{adjustmentID}: parameters: - $ref: '#/components/parameters/accountID' - name: adjustmentID in: path required: true schema: { type: string } get: operationId: getAdjustment tags: [Wallets] summary: Retrieve a balance adjustment. responses: '200': { description: The adjustment. } /accounts/{accountID}/payment-methods: parameters: - $ref: '#/components/parameters/accountID' get: operationId: listPaymentMethods tags: [Payment Methods] summary: List payment methods. responses: '200': { description: A list of payment methods. } /accounts/{accountID}/payment-methods/{paymentMethodID}: parameters: - $ref: '#/components/parameters/accountID' - name: paymentMethodID in: path required: true schema: { type: string } get: operationId: getPaymentMethod tags: [Payment Methods] summary: Retrieve a payment method. responses: '200': { description: The payment method. } /accounts/{accountID}/transfers: parameters: - $ref: '#/components/parameters/accountID' post: operationId: createTransfer tags: [Transfers] summary: Create a transfer. responses: '200': { description: The created transfer. } get: operationId: listTransfers tags: [Transfers] summary: List transfers. responses: '200': { description: A list of transfers. } /accounts/{accountID}/transfers/{transferID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/transferID' get: operationId: getTransfer tags: [Transfers] summary: Retrieve a transfer. responses: '200': { description: The transfer. } patch: operationId: updateTransferMetadata tags: [Transfers] summary: Update transfer metadata. responses: '200': { description: The updated transfer. } /accounts/{accountID}/transfer-options: parameters: - $ref: '#/components/parameters/accountID' post: operationId: createTransferOptions tags: [Transfers] summary: Retrieve available transfer options. responses: '200': { description: The available transfer options. } /accounts/{accountID}/transfer-config: parameters: - $ref: '#/components/parameters/accountID' post: operationId: createTransferConfig tags: [Transfers] summary: Create transfer configuration. responses: '200': { description: The created transfer configuration. } get: operationId: getTransferConfig tags: [Transfers] summary: Get transfer configuration. responses: '200': { description: The transfer configuration. } put: operationId: updateTransferConfig tags: [Transfers] summary: Update transfer configuration. responses: '200': { description: The updated transfer configuration. } /accounts/{accountID}/transfers/{transferID}/cancellations: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/transferID' post: operationId: cancelTransfer tags: [Transfers] summary: Cancel a transfer. responses: '200': { description: The cancellation. } /accounts/{accountID}/transfers/{transferID}/cancellations/{cancellationID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/transferID' - name: cancellationID in: path required: true schema: { type: string } get: operationId: getCancellation tags: [Transfers] summary: Get cancellation details. responses: '200': { description: The cancellation. } /accounts/{accountID}/transfers/{transferID}/refunds: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/transferID' post: operationId: createRefund tags: [Refunds] summary: Create a refund. responses: '200': { description: The created refund. } get: operationId: listRefunds tags: [Refunds] summary: List refunds. responses: '200': { description: A list of refunds. } /accounts/{accountID}/transfers/{transferID}/refunds/{refundID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/transferID' - name: refundID in: path required: true schema: { type: string } get: operationId: getRefund tags: [Refunds] summary: Retrieve a refund. responses: '200': { description: The refund. } /accounts/{accountID}/transfers/{transferID}/reversals: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/transferID' post: operationId: createReversal tags: [Refunds] summary: Cancel or refund a card transfer (reversal). responses: '200': { description: The reversal. } /accounts/{accountID}/sweep-configs: parameters: - $ref: '#/components/parameters/accountID' post: operationId: createSweepConfig tags: [Sweeps] summary: Create a sweep configuration. responses: '200': { description: The created sweep configuration. } get: operationId: listSweepConfigs tags: [Sweeps] summary: List sweep configurations. responses: '200': { description: A list of sweep configurations. } /accounts/{accountID}/sweep-configs/{sweepConfigID}: parameters: - $ref: '#/components/parameters/accountID' - name: sweepConfigID in: path required: true schema: { type: string } get: operationId: getSweepConfig tags: [Sweeps] summary: Retrieve a sweep configuration. responses: '200': { description: The sweep configuration. } patch: operationId: updateSweepConfig tags: [Sweeps] summary: Update a sweep configuration. responses: '200': { description: The updated sweep configuration. } /accounts/{accountID}/wallets/{walletID}/sweeps: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/walletID' get: operationId: listSweeps tags: [Sweeps] summary: List sweeps for a wallet. responses: '200': { description: A list of sweeps. } /accounts/{accountID}/wallets/{walletID}/sweeps/{sweepID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/walletID' - name: sweepID in: path required: true schema: { type: string } get: operationId: getSweep tags: [Sweeps] summary: Retrieve a sweep. responses: '200': { description: The sweep. } /accounts/{accountID}/disputes: parameters: - $ref: '#/components/parameters/accountID' get: operationId: listDisputes tags: [Disputes] summary: List disputes. responses: '200': { description: A list of disputes. } /accounts/{accountID}/disputes/{disputeID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/disputeID' get: operationId: getDispute tags: [Disputes] summary: Retrieve a dispute. responses: '200': { description: The dispute. } /accounts/{accountID}/disputes/{disputeID}/accept: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/disputeID' post: operationId: acceptDispute tags: [Disputes] summary: Accept a dispute. responses: '200': { description: The accepted dispute. } /accounts/{accountID}/disputes/{disputeID}/evidence-file: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/disputeID' post: operationId: uploadDisputeEvidenceFile tags: [Disputes] summary: Upload dispute evidence file. responses: '200': { description: The uploaded evidence. } /accounts/{accountID}/disputes/{disputeID}/evidence-text: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/disputeID' post: operationId: uploadDisputeEvidenceText tags: [Disputes] summary: Upload dispute evidence text. responses: '200': { description: The uploaded evidence. } /accounts/{accountID}/disputes/{disputeID}/evidence/submit: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/disputeID' post: operationId: submitDisputeEvidence tags: [Disputes] summary: Submit dispute evidence. responses: '200': { description: Evidence submitted. } /accounts/{accountID}/disputes/{disputeID}/evidence: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/disputeID' get: operationId: listDisputeEvidence tags: [Disputes] summary: List dispute evidence. responses: '200': { description: A list of evidence. } /accounts/{accountID}/disputes/{disputeID}/evidence/{evidenceID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/disputeID' - $ref: '#/components/parameters/evidenceID' get: operationId: getDisputeEvidence tags: [Disputes] summary: Retrieve dispute evidence. responses: '200': { description: The evidence. } patch: operationId: updateDisputeEvidence tags: [Disputes] summary: Update dispute evidence. responses: '200': { description: The updated evidence. } delete: operationId: deleteDisputeEvidence tags: [Disputes] summary: Delete dispute evidence. responses: '204': { description: Evidence deleted. } /accounts/{accountID}/disputes/{disputeID}/evidence/{evidenceID}/data: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/disputeID' - $ref: '#/components/parameters/evidenceID' get: operationId: getDisputeEvidenceData tags: [Disputes] summary: Retrieve dispute evidence data. responses: '200': { description: The evidence file data. } /issuing/{accountID}/cards: parameters: - $ref: '#/components/parameters/accountID' post: operationId: createIssuedCard tags: [Card Issuing] summary: Create a spending card. responses: '200': { description: The created spending card. } get: operationId: listIssuedCards tags: [Card Issuing] summary: List spending cards. responses: '200': { description: A list of spending cards. } /issuing/{accountID}/cards/{issuedCardID}: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/issuedCardID' get: operationId: getIssuedCard tags: [Card Issuing] summary: Retrieve a spending card. responses: '200': { description: The spending card. } patch: operationId: updateIssuedCard tags: [Card Issuing] summary: Update a spending card. responses: '200': { description: The updated spending card. } /issuing/{accountID}/cards/{issuedCardID}/details: parameters: - $ref: '#/components/parameters/accountID' - $ref: '#/components/parameters/issuedCardID' get: operationId: getIssuedCardDetails tags: [Card Issuing] summary: Get PCI details for a spending card. responses: '200': { description: The full PCI card details. } /issuing/{accountID}/authorizations: parameters: - $ref: '#/components/parameters/accountID' get: operationId: listAuthorizations tags: [Card Issuing] summary: List authorizations. responses: '200': { description: A list of authorizations. } /issuing/{accountID}/authorizations/{authorizationID}: parameters: - $ref: '#/components/parameters/accountID' - name: authorizationID in: path required: true schema: { type: string } get: operationId: getAuthorization tags: [Card Issuing] summary: Retrieve an authorization. responses: '200': { description: The authorization. } /issuing/{accountID}/authorizations/{authorizationID}/events: parameters: - $ref: '#/components/parameters/accountID' - name: authorizationID in: path required: true schema: { type: string } get: operationId: listAuthorizationEvents tags: [Card Issuing] summary: List authorization events. responses: '200': { description: A list of authorization events. } /issuing/{accountID}/card-transactions: parameters: - $ref: '#/components/parameters/accountID' get: operationId: listCardTransactions tags: [Card Issuing] summary: List card transactions. responses: '200': { description: A list of card transactions. } /issuing/{accountID}/card-transactions/{cardTransactionID}: parameters: - $ref: '#/components/parameters/accountID' - name: cardTransactionID in: path required: true schema: { type: string } get: operationId: getCardTransaction tags: [Card Issuing] summary: Retrieve a card transaction. responses: '200': { description: The card transaction. } /institutions: get: operationId: getInstitutions tags: [Institutions] summary: Look up financial institutions. description: >- Validate a financial institution before initiating payment activity, or check which payment rails are available for a given routing number. parameters: - name: routingNumber in: query schema: { type: string } description: The ABA routing number to look up. - name: name in: query schema: { type: string } description: Filter by institution name. responses: '200': { description: Matching institutions and supported rails. } components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: OAuth 2.0 access token passed as a Bearer token. parameters: accountID: name: accountID in: path required: true schema: { type: string, format: uuid } description: The Moov account identifier. representativeID: name: representativeID in: path required: true schema: { type: string, format: uuid } bankAccountID: name: bankAccountID in: path required: true schema: { type: string, format: uuid } walletID: name: walletID in: path required: true schema: { type: string, format: uuid } transferID: name: transferID in: path required: true schema: { type: string, format: uuid } disputeID: name: disputeID in: path required: true schema: { type: string, format: uuid } evidenceID: name: evidenceID in: path required: true schema: { type: string, format: uuid } issuedCardID: name: issuedCardID in: path required: true schema: { type: string, format: uuid }