openapi: 3.1.0
info:
title: Meow Accounts API
description: '## Overview
The Meow API provides financial services and billing capabilities for your business.
### Core Features
- **Financial data access**: access account information, transactions, balances, and payment networks.
- **Crypto operations**: create and manage crypto contacts, and initiate USDC transfers across blockchain networks.
### Billing API
The Billing API lets you create and manage invoices and collect payments:
- **Product management**: create and manage products with custom pricing.
- **Customer management**: maintain invoicing customers with their addresses.
- **Invoice creation**: generate invoices with line items, discounts, and custom notes.
- **Payment options**: accept payments via ACH, wire, international wire, card, and USDC.
- **Collection accounts**: configure accounts for payment collection.
### Getting Started
Authenticate by sending your API key in the `x-api-key` request header.
To scope requests to a specific entity, include the `x-entity-id` header. Use the `/api-keys/accessible-entities` endpoint to list all entities accessible by your API key.
### Error Responses
Errors return JSON with `code`, `message`, and `debug_message`. The `code` aligns with FDX where possible; use `debug_message` for troubleshooting only.
Common error codes:
- `500`: Internal server error
- `501`: Subsystem unavailable
- `503`: Scheduled maintenance
- `601`: Data not found
- `602`: Customer not authorized
- `701`: Account not found
- `703`: Invalid input (including invalid date ranges)
- `704`: Account type not supported
- `705`: Account is closed
- `801`: Transaction not found
'
contact:
name: Meow
url: https://meow.com/
email: support@meow.com
version: 1.0.0
license:
name: Proprietary
url: https://www.meow.com/terms-of-service
servers:
- url: https://api.meow.com/v1
description: Meow API Production
- url: https://api.sandbox.meow.com/v1
description: Meow API Sandbox
security:
- apiKeyAuth: []
tags:
- name: Accounts
description: Access and manage accounts.
paths:
/accounts:
get:
tags:
- Accounts
summary: List Bank Accounts
description: Returns a list of bank accounts.
operationId: list_accounts_accounts_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Accounts'
security:
- apiKeyAuth:
- accounts:read
parameters:
- $ref: '#/components/parameters/EntityIdHeader'
post:
tags:
- Accounts
summary: Create Bank Account
description: Opens an additional bank account under the given `product`. You must already have an open account of that product, and your business must have completed verification. The account may open immediately (status `created`, with `account_id`) or in the background (status `processing`); when `processing`, poll `GET /accounts` until the account appears.
operationId: create_account_accounts_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAccountRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CreateAccountResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:write
parameters:
- $ref: '#/components/parameters/EntityIdHeader'
/accounts/{account_id}:
get:
tags:
- Accounts
summary: Get Account Details
description: Returns detailed information about a specified bank account.
operationId: get_account_handler_accounts__account_id__get
parameters:
- name: account_id
in: path
required: true
schema:
type: string
description: The ID of the account.
title: Account Id
description: The ID of the account.
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/AccountWithDetails'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:read
patch:
tags:
- Accounts
summary: Update Bank Account
description: Updates a bank account's `nickname` (display name), shown in the dashboard to distinguish it from other accounts. Supported for checking accounts (grasshopper, tcb, firstbank) and crb accounts. The nickname must be unique among your accounts.
operationId: update_account_accounts__account_id__patch
parameters:
- name: account_id
in: path
required: true
schema:
type: string
description: The ID of the bank account to update.
title: Account Id
description: The ID of the bank account to update.
- $ref: '#/components/parameters/EntityIdHeader'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateAccountRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateAccountResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:write
/accounts/{account_id}/close:
post:
tags:
- Accounts
summary: Close a Bank Account
description: Closes a bank account. The account must have a zero balance and no active cards, scheduled payments, or open invoices. Cancel or remove those first. Supported for checking accounts (grasshopper, tcb, firstbank) and crb accounts. Some accounts close immediately (status `closed`); others process the close asynchronously (status `close_pending`), in which case poll `GET /accounts/{account_id}` until its `status` reads `CLOSED`.
operationId: close_account_accounts__account_id__close_post
parameters:
- name: account_id
in: path
required: true
schema:
type: string
description: The ID of the bank account to close.
title: Account Id
description: The ID of the bank account to close.
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CloseAccountResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:write
components:
schemas:
UpdateAccountResponse:
properties:
account_id:
type: string
title: Account Id
description: The `account_id` of the updated account.
examples:
- cash_account_3f9c1b2e-7a4d-4e88-9c21-0b6f5d8e1a2c
nickname:
type: string
title: Nickname
description: The account's display name after the update.
examples:
- Payroll
type: object
required:
- account_id
- nickname
title: UpdateAccountResponse
DateString:
type: string
format: date
title: DateString
description: ISO 8601 full-date in the format `YYYY-MM-DD` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
DigitalWalletType:
type: string
enum:
- DIGITALWALLET
title: DigitalWalletType
UpdateAccountRequest:
properties:
nickname:
type: string
maxLength: 25
minLength: 2
pattern: ^[A-Za-z0-9\-' ]+$
title: Nickname
description: A custom display name for the account, shown in the dashboard to distinguish it from other accounts. 2-25 characters; letters, numbers, hyphens, apostrophes, and spaces only. Must be unique among your accounts.
examples:
- Payroll
type: object
required:
- nickname
title: UpdateAccountRequest
AccountType:
type: string
enum:
- BROKERAGEPRODUCT
- CHECKING
- MONEYMARKET
- SAVINGS
- TAXABLE
title: AccountType
Iso4217Code:
type: string
enum:
- AED
- AFN
- ALL
- AMD
- ANG
- AOA
- ARS
- AUD
- AWG
- AZN
- BAM
- BBD
- BDT
- BGN
- BHD
- BIF
- BMD
- BND
- BOB
- BOV
- BRL
- BSD
- BTN
- BWP
- BYN
- BZD
- CAD
- CDF
- CHE
- CHF
- CHW
- CLF
- CLP
- CNY
- COP
- COU
- CRC
- CUC
- CUP
- CVE
- CZK
- DJF
- DKK
- DOP
- DZD
- EGP
- ERN
- ETB
- EUR
- FJD
- FKP
- GBP
- GEL
- GHS
- GIP
- GMD
- GNF
- GTQ
- GYD
- HKD
- HNL
- HRK
- HTG
- HUF
- IDR
- ILS
- INR
- IQD
- IRR
- ISK
- JMD
- JOD
- JPY
- KES
- KGS
- KHR
- KMF
- KPW
- KRW
- KWD
- KYD
- KZT
- LAK
- LBP
- LKR
- LRD
- LSL
- LYD
- MAD
- MDL
- MGA
- MKD
- MMK
- MNT
- MOP
- MRU
- MUR
- MVR
- MWK
- MXN
- MXV
- MYR
- MZN
- NAD
- NGN
- NIO
- NOK
- NPR
- NZD
- OMR
- PAB
- PEN
- PGK
- PHP
- PKR
- PLN
- PYG
- QAR
- RON
- RSD
- RUB
- RWF
- SAR
- SBD
- SCR
- SDG
- SLE
- SEK
- SGD
- SHP
- SLL
- SOS
- SRD
- SSP
- STN
- SVC
- SYP
- SZL
- THB
- TJS
- TMT
- TND
- TOP
- TRY
- TTD
- TWD
- TZS
- UAH
- UGX
- USD
- USN
- UYI
- UYU
- UYW
- UZS
- VED
- VES
- VND
- VUV
- WST
- XAF
- XAG
- XAU
- XBA
- XBB
- XBC
- XBD
- XCD
- XDR
- XOF
- XPD
- XPF
- XPT
- XSU
- XTS
- XUA
- XXX
- YER
- ZAR
- ZMW
- ZWG
- ZWL
title: Iso4217Code
CreateAccountRequest:
properties:
product:
$ref: '#/components/schemas/OpenableBankProduct'
description: The product to open the new account under. You must already have an open account of this product. The account may open immediately (status `created`, with `account_id`) or in the background (status `processing`); when `processing`, poll `GET /accounts` until the account appears.
examples:
- grasshopper
type: object
required:
- product
title: CreateAccountRequest
AccountDescriptor:
properties:
accountId:
$ref: '#/components/schemas/Identifier'
description: Unique identifier for this account.
accountType:
$ref: '#/components/schemas/AccountType'
description: The type of account.
accountNumberDisplay:
anyOf:
- type: string
- type: 'null'
title: Accountnumberdisplay
description: Last 4 digits of the account number.
examples:
- 4321
productName:
type: string
title: Productname
description: Product name (e.g., Business Checking, Treasury).
nickname:
anyOf:
- type: string
- type: 'null'
title: Nickname
description: Custom display name for the account.
status:
$ref: '#/components/schemas/AccountStatus'
description: Current account status.
currency:
$ref: '#/components/schemas/Currency'
description: Currency of the account.
type: object
required:
- accountId
- accountType
- productName
- status
- currency
title: AccountDescriptor
AccountCategory:
type: string
enum:
- DEPOSIT_ACCOUNT
- DIGITAL_WALLET
- INVESTMENT_ACCOUNT
title: AccountCategory
AccountStatus:
type: string
enum:
- CLOSED
- DELINQUENT
- NEGATIVECURRENTBALANCE
- OPEN
- PAID
- PENDINGCLOSE
- PENDINGOPEN
- RESTRICTED
title: AccountStatus
HoldingType-Output:
type: string
enum:
- ANNUITY
- BOND
- CD
- MUTUALFUND
- OPTION
- OTHER
- STOCK
title: HoldingType
description: 'Types of financial holdings or investments.
ANNUITY - A contract sold by financial institutions that provides fixed payments to the holder at specified intervals
BOND - A debt security where an investor loans money to an entity for a defined period at a fixed interest rate
CD - Certificate of Deposit, a time deposit with a bank with fixed term and interest rate
MUTUALFUND - An investment vehicle made up of a pool of funds collected from many investors
OPTION - A contract giving the buyer the right to buy or sell an underlying asset at a specific price
OTHER - Any holding type not covered by the other categories
STOCK - Shares or equity in a corporation'
DepositAccount:
properties:
accountId:
$ref: '#/components/schemas/Identifier'
description: Unique identifier for this account.
accountType:
$ref: '#/components/schemas/AccountType'
description: The type of account.
accountNumberDisplay:
anyOf:
- type: string
- type: 'null'
title: Accountnumberdisplay
description: Last 4 digits of the account number.
examples:
- 4321
productName:
type: string
title: Productname
description: Product name (e.g., Business Checking, Treasury).
nickname:
anyOf:
- type: string
- type: 'null'
title: Nickname
description: Custom display name for the account.
status:
$ref: '#/components/schemas/AccountStatus'
description: Current account status.
currency:
$ref: '#/components/schemas/Currency'
description: Currency of the account.
currentBalance:
type: number
title: Currentbalance
description: Total balance of posted transactions.
availableBalance:
type: number
title: Availablebalance
description: Balance available for transfers and payments.
bankProductType:
anyOf:
- type: string
- type: 'null'
title: Bankproducttype
description: The name of the bank this account is held at.
type: object
required:
- accountId
- accountType
- productName
- status
- currency
- currentBalance
- availableBalance
title: DepositAccount
AccountWithDetails:
anyOf:
- $ref: '#/components/schemas/DepositAccountWithDetail'
- $ref: '#/components/schemas/InvestmentAccountWithDetail'
- $ref: '#/components/schemas/DigitalWalletWithDetail'
title: AccountWithDetails
description: Account with balance details.
DigitalWalletInfo:
properties:
accountId:
$ref: '#/components/schemas/Identifier'
description: Unique identifier for this wallet.
accountCategory:
$ref: '#/components/schemas/AccountCategory'
description: Account category.
default: DIGITAL_WALLET
accountType:
$ref: '#/components/schemas/DigitalWalletType'
description: The type of digital wallet.
accountNumberDisplay:
anyOf:
- type: string
- type: 'null'
title: Accountnumberdisplay
description: Last 4 digits of the wallet address.
examples:
- 4321
productName:
type: string
title: Productname
description: Product name (e.g., USDC Wallet).
nickname:
anyOf:
- type: string
- type: 'null'
title: Nickname
description: Custom display name for the wallet.
status:
$ref: '#/components/schemas/AccountStatus'
description: Current wallet status.
currency:
$ref: '#/components/schemas/Currency'
description: Currency of the wallet.
type: object
required:
- accountId
- accountType
- productName
- status
- currency
title: DigitalWalletInfo
CloseAccountStatus:
type: string
enum:
- closed
- close_pending
title: CloseAccountStatus
DepositAccountInfo:
properties:
accountId:
$ref: '#/components/schemas/Identifier'
description: Unique identifier for this account.
accountType:
$ref: '#/components/schemas/AccountType'
description: The type of account.
accountNumberDisplay:
anyOf:
- type: string
- type: 'null'
title: Accountnumberdisplay
description: Last 4 digits of the account number.
examples:
- 4321
productName:
type: string
title: Productname
description: Product name (e.g., Business Checking, Treasury).
nickname:
anyOf:
- type: string
- type: 'null'
title: Nickname
description: Custom display name for the account.
status:
$ref: '#/components/schemas/AccountStatus'
description: Current account status.
currency:
$ref: '#/components/schemas/Currency'
description: Currency of the account.
bankProductType:
anyOf:
- type: string
- type: 'null'
title: Bankproducttype
description: The name of the bank this account is held at.
type: object
required:
- accountId
- accountType
- productName
- status
- currency
title: DepositAccountInfo
DigitalWallet:
properties:
accountId:
$ref: '#/components/schemas/Identifier'
description: Unique identifier for this wallet.
accountCategory:
$ref: '#/components/schemas/AccountCategory'
description: Account category.
default: DIGITAL_WALLET
accountType:
$ref: '#/components/schemas/DigitalWalletType'
description: The type of digital wallet.
accountNumberDisplay:
anyOf:
- type: string
- type: 'null'
title: Accountnumberdisplay
description: Last 4 digits of the wallet address.
examples:
- 4321
productName:
type: string
title: Productname
description: Product name (e.g., USDC Wallet).
nickname:
anyOf:
- type: string
- type: 'null'
title: Nickname
description: Custom display name for the wallet.
status:
$ref: '#/components/schemas/AccountStatus'
description: Current wallet status.
currency:
$ref: '#/components/schemas/Currency'
description: Currency of the wallet.
currentBalance:
type: number
title: Currentbalance
description: Total balance of the wallet.
availableBalance:
type: number
title: Availablebalance
description: Balance available for transfers.
type: object
required:
- accountId
- accountType
- productName
- status
- currency
- currentBalance
- availableBalance
title: DigitalWallet
Currency:
properties:
currencyCode:
$ref: '#/components/schemas/Iso4217Code'
description: ISO 4217 currency code.
type: object
required:
- currencyCode
title: Currency
CloseAccountResponse:
properties:
status:
$ref: '#/components/schemas/CloseAccountStatus'
type: object
required:
- status
title: CloseAccountResponse
HoldingSubType:
type: string
enum:
- CASH
- MONEYMARKET
title: HoldingSubType
description: The subtype of an investment holding. Set `holdingSubType` to `CASH` or `MONEYMARKET` to indicate cash-type holdings.
OpenableBankProduct:
type: string
enum:
- grasshopper
- tcb
- firstbank
- crb
title: OpenableBankProduct
x-enum-varnames:
- grasshopper
- tcb
- firstbank
- crb
DigitalWalletWithDetail:
properties:
digitalWallet:
$ref: '#/components/schemas/DigitalWallet'
description: Digital wallet with balances.
additionalProperties: false
type: object
required:
- digitalWallet
title: DigitalWalletWithDetail
DepositAccountWithDetail:
properties:
depositAccount:
$ref: '#/components/schemas/DepositAccount'
description: Deposit account with balances.
additionalProperties: false
type: object
required:
- depositAccount
title: DepositAccountWithDetail
CreateAccountResponse:
properties:
status:
$ref: '#/components/schemas/CreateAccountStatus'
description: '`created` when the new account is ready immediately and its `account_id` is returned. `processing` when the account is still being opened; poll `GET /accounts` until it appears.'
examples:
- created
account_id:
anyOf:
- type: string
- type: 'null'
title: Account Id
description: The new `account_id`, returned only when status is `created`. Null when status is `processing`; fetch it from `GET /accounts` once the account appears.
examples:
- cash_account_3f9c1b2e-7a4d-4e88-9c21-0b6f5d8e1a2c
type: object
required:
- status
title: CreateAccountResponse
Identifier:
type: string
maxLength: 256
title: Identifier
description: Value for a unique identifier.
Holding:
properties:
securityId:
anyOf:
- type: string
- type: 'null'
title: Securityid
description: Security identifier used to look up the closing price. Required together with `securityIdType` unless you provide `symbol`.
securityIdType:
anyOf:
- $ref: '#/components/schemas/SecurityIdType'
- type: 'null'
description: Type of security identifier provided (e.g., CUSIP, ISIN).
holdingName:
anyOf:
- type: string
- type: 'null'
title: Holdingname
description: Holding name or security name.
holdingType:
anyOf:
- $ref: '#/components/schemas/HoldingType-Output'
- type: 'null'
description: The high-level type of the holding (e.g., STOCK, BOND).
holdingSubType:
anyOf:
- $ref: '#/components/schemas/HoldingSubType'
- type: 'null'
description: The more granular subtype of the holding (e.g., CASH, MONEYMARKET).
symbol:
anyOf:
- type: string
- type: 'null'
title: Symbol
description: Ticker or market symbol. Required unless both `securityId` and `securityIdType` are provided.
purchasedPrice:
anyOf:
- type: number
- type: 'null'
title: Purchasedprice
description: Price of holding at the time of purchase. Used to determine the approximate cost basis using the purchase price and the number of units.
currentUnitPrice:
anyOf:
- type: number
- type: 'null'
title: Currentunitprice
description: Current unit price. Used as the institution price and fallback for the close price if a security ID is not provided.
currentUnitPriceDate:
anyOf:
- $ref: '#/components/schemas/DateString'
- type: 'null'
description: Current unit price as-of date. ISO 8601 full-date in format `YYYY-MM-DD`, per [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6).
units:
anyOf:
- type: number
- type: 'null'
title: Units
description: 'Quantity for security-based holdings: shares for stocks and mutual funds, face value for bonds, contracts for options. Required when the holding involves a security.'
marketValue:
type: number
title: Marketvalue
description: Market value at the time the data was retrieved.
faceValue:
anyOf:
- type: number
- type: 'null'
title: Facevalue
description: Required for bonds. Face value at the time the data was retrieved. If not present, assume the holding isn't a bond and fall back to `marketValue`.
cashAccount:
type: boolean
title: Cashaccount
description: If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. Used in determining if the security is a cash equivalent.
default: false
currency:
anyOf:
- $ref: '#/components/schemas/Currency'
- type: 'null'
description: Currency of the holding, if different from the account's currency.
type: object
required:
- marketValue
title: Holding
description: A holding in an investment account.
PageMetadata:
properties:
nextOffset:
anyOf:
- type: string
- type: 'null'
title: Nextoffset
description: Opaque offset identifier.
examples:
- qwer123454q2f
type: object
title: PageMetadata
InvestmentAccountDescriptor:
properties:
investmentAccount:
$ref: '#/components/schemas/AccountDescriptor'
description: Investment account details.
additionalProperties: false
type: object
required:
- investmentAccount
title: InvestmentAccountDescriptor
DigitalWalletDescriptor:
properties:
digitalWallet:
$ref: '#/components/schemas/DigitalWalletInfo'
description: Digital wallet details.
additionalProperties: false
type: object
required:
- digitalWallet
title: DigitalWalletDescriptor
InvestmentAccountWithDetail:
properties:
investmentAccount:
$ref: '#/components/schemas/InvestmentAccount'
description: Investment account with balances and holdings.
additionalProperties: false
type: object
required:
- investmentAccount
title: InvestmentAccountWithDetail
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
CreateAccountStatus:
type: string
enum:
- processing
- created
title: CreateAccountStatus
x-enum-varnames:
- processing
- created
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
AccountWithDescriptor:
anyOf:
- $ref: '#/components/schemas/DepositAccountDescriptor'
- $ref: '#/components/schemas/InvestmentAccountDescriptor'
- $ref: '#/components/schemas/DigitalWalletDescriptor'
title: AccountWithDescriptor
description: Account summary without balance details.
InvestmentAccount:
properties:
accountId:
$ref: '#/components/schemas/Identifier'
description: Unique identifier for this account.
accountType:
$ref: '#/components/schemas/AccountType'
description: The type of account.
accountNumberDisplay:
anyOf:
- type: string
- type: 'null'
title: Accountnumberdisplay
description: Last 4 digits of the account number.
examples:
- 4321
productName:
type: string
title: Productname
description: Product name (e.g., Business Checking, Treasury).
nickname:
anyOf:
- type: string
- type: 'null'
title: Nickname
description: Custom display name for the account.
status:
$ref: '#/components/schemas/AccountStatus'
description: Current account status.
currency:
$ref: '#/components/schemas/Currency'
description: Currency of the account.
availableCashBalance:
type: number
title: Availablecashbalance
description: Cash available for withdrawal or investment.
currentValue:
type: number
title: Currentvalue
description: Total current value of the account including all holdings.
holdings:
anyOf:
- items:
$ref: '#/components/schemas/Holding'
type: array
- type: 'null'
title: Holdings
description: List of securities and cash positions in the account.
type: object
required:
- accountId
- accountType
- productName
- status
- currency
- availableCashBalance
- currentValue
- holdings
title: InvestmentAccount
SecurityIdType:
type: string
enum:
- CUSIP
- ISIN
- SEDOL
- SICC
- VALOR
- WKN
title: SecurityIdType
description: 'Standard identifiers used for securities in financial markets.
CUSIP - Committee on Uniform Securities Identification Procedures (North American securities)
ISIN - International Securities Identification Number (global standard)
SEDOL - Stock Exchange Daily Official List (UK securities)
SICC - Standard Industrial Classification Code
VALOR - Swiss security identification number
WKN - Wertpapierkennnummer (German securities)'
Accounts:
properties:
page:
anyOf:
- $ref: '#/components/schemas/PageMetadata'
- type: 'null'
description: Metadata for pagination.
accounts:
items:
$ref: '#/components/schemas/AccountWithDescriptor'
type: array
title: Accounts
description: List of bank accounts.
examples:
- - depositAccount:
accountId: cash_account_1234567
# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/meow/refs/heads/main/openapi/meow-accounts-api-openapi.yml