Meow Cards API
Manage virtual and physical cards, and view transactions and insights.
Manage virtual and physical cards, and view transactions and insights.
openapi: 3.1.0
info:
title: Meow Accounts Cards 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: Cards
description: Manage virtual and physical cards, and view transactions and insights.
paths:
/cards:
post:
tags:
- Cards
summary: Create Card
description: Creates a virtual card scoped to a single merchant and spend limit. Set `single_use` to `true` (default) for a one-shot card that auto-cancels after the first authorization, or `false` for a multi-use card that stays active until expiry or explicit revoke. Retrieve the PAN by calling `POST /cards/{card_id}/pan`.
operationId: create_card_cards_post
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCardRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:write
parameters:
- $ref: '#/components/parameters/EntityIdHeader'
get:
tags:
- Cards
summary: List Cards
description: Returns the cards you have access to. As an admin or viewer you see all entity cards; as a card manager you see your team's cards; as a card user you see only your own.
operationId: list_cards_cards_get
parameters:
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 10
title: Limit
- name: offset
in: query
required: false
schema:
type: integer
maximum: 1000000
minimum: 0
default: 0
title: Offset
- name: query
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Query
- name: statuses
in: query
required: false
schema:
anyOf:
- type: array
items:
$ref: '#/components/schemas/CardStatus'
- type: 'null'
title: Statuses
- name: card_types
in: query
required: false
schema:
type: array
items:
$ref: '#/components/schemas/CardFormFactor'
default: []
title: Card Types
- name: from_created_time
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
title: From Created Time
- name: to_created_time
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
title: To Created Time
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/MeowPaginatedList_CardResponse_'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:read
/cards/payment-token:
post:
tags:
- Cards
summary: Create Payment Token
description: Creates a Shared Payment Token for merchants that support the Agentic Commerce Protocol. Returns a token string, not full card details. Use a payment token instead of a card when the merchant accepts one. This endpoint is not yet available.
operationId: create_payment_token_cards_payment_token_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreatePaymentTokenRequest'
required: true
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentTokenResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:write
parameters:
- $ref: '#/components/parameters/EntityIdHeader'
/cards/{card_id}/revoke:
post:
tags:
- Cards
summary: Revoke Card
description: Immediately revoke a card. Revoke a card whose purchase failed to close it before it expires.
operationId: revoke_card_cards__card_id__revoke_post
parameters:
- name: card_id
in: path
required: true
schema:
type: string
format: uuid
title: Card Id
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/RevokeCardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:write
/cards/{card_id}/pan:
post:
tags:
- Cards
summary: Get Card PAN
description: Returns the full card number (PAN), CVC, and expiration for a card created via the API. Requires the `cards:write` scope. Pass the `card_id` returned by Create Card. This can be called only once per card; subsequent calls return an error. Revoke and recreate the card if the PAN is needed again.
operationId: get_card_pan_cards__card_id__pan_post
parameters:
- name: card_id
in: path
required: true
schema:
type: string
format: uuid
title: Card Id
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CardPanResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:write
/cards/transactions:
get:
tags:
- Cards
summary: List Card Transactions
description: Returns transactions for cards you have access to. Supports filtering by card, date range, status, merchant, and amount.
operationId: list_card_transactions_cards_transactions_get
parameters:
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 10
title: Limit
- name: offset
in: query
required: false
schema:
type: integer
maximum: 1000000
minimum: 0
default: 0
title: Offset
- name: query
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 140
- type: 'null'
title: Query
- name: merchant_name
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 140
- type: 'null'
title: Merchant Name
- name: merchant_ids
in: query
required: false
schema:
anyOf:
- type: array
items:
type: string
format: uuid
- type: 'null'
title: Merchant Ids
- name: cardholder_name
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 140
- type: 'null'
title: Cardholder Name
- name: cardholder_emails
in: query
required: false
schema:
anyOf:
- type: array
items:
type: string
format: email
- type: 'null'
title: Cardholder Emails
- name: card_id
in: query
required: false
schema:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Card Id
- name: card_ids
in: query
required: false
schema:
anyOf:
- type: array
items:
type: string
format: uuid
- type: 'null'
title: Card Ids
- name: card_nickname
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 140
- type: 'null'
title: Card Nickname
- name: card_is_physical
in: query
required: false
schema:
anyOf:
- type: boolean
- type: 'null'
title: Card Is Physical
- name: card_last_4
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 4
- type: 'null'
title: Card Last 4
- name: from_original_created_time
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
title: From Original Created Time
- name: to_original_created_time
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
title: To Original Created Time
- name: statuses
in: query
required: false
schema:
anyOf:
- type: array
items:
$ref: '#/components/schemas/ExtAwxCardTransactionStatus'
- type: 'null'
title: Statuses
- name: is_missing_requirements
in: query
required: false
schema:
anyOf:
- type: boolean
- type: 'null'
title: Is Missing Requirements
- name: sort_by
in: query
required: false
schema:
$ref: '#/components/schemas/AwxTransactionSortEnum'
default: ORIGINAL_CREATED_TIME
- name: is_ascending
in: query
required: false
schema:
type: boolean
default: false
title: Is Ascending
- name: network_transaction_id
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Network Transaction Id
- name: amount_min
in: query
required: false
schema:
anyOf:
- type: number
maximum: 1000000000.0
minimum: 0.0
- type: string
pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
- type: 'null'
title: Amount Min
- name: amount_max
in: query
required: false
schema:
anyOf:
- type: number
maximum: 1000000000.0
minimum: 0.0
- type: string
pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
- type: 'null'
title: Amount Max
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/MeowPaginatedList_AwxCardTransactionBusinessResponse_'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:read
/cards/insights:
get:
tags:
- Cards
summary: Get Card Spending Insights
description: 'Returns entity-wide spending analytics for your entity: total spend, cashback earned, top merchants, top expenses, and weekly trends. Requires admin, viewer, or card manager access.'
operationId: get_card_insights_cards_insights_get
parameters:
- name: from_date
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
title: From Date
- name: to_date
in: query
required: false
schema:
anyOf:
- type: string
format: date-time
- type: 'null'
title: To Date
- name: limit_top_expenses
in: query
required: false
schema:
type: integer
maximum: 25
minimum: 1
default: 5
title: Limit Top Expenses
- name: limit_top_merchants
in: query
required: false
schema:
type: integer
maximum: 25
minimum: 1
default: 5
title: Limit Top Merchants
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/AwxCardInsightsResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:read
/cards/{card_id}:
get:
tags:
- Cards
summary: Get Card
description: Returns details of a specific card you have access to.
operationId: get_card_cards__card_id__get
parameters:
- name: card_id
in: path
required: true
schema:
type: string
format: uuid
title: Card Id
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:read
patch:
tags:
- Cards
summary: Update Card
description: Updates a card you created via the API. Freeze or unfreeze it with the `status` field, replace its spend limits with `spending_controls`, or change its allowed merchant categories. All fields are optional; omitted fields are left unchanged.
operationId: update_card_cards__card_id__patch
parameters:
- name: card_id
in: path
required: true
schema:
type: string
format: uuid
title: Card Id
- $ref: '#/components/parameters/EntityIdHeader'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateCardRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CardResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:write
/cards/{card_id}/details:
get:
tags:
- Cards
summary: Get Card Details
description: 'Returns operational details of a card: billing address, delivery address, linked banking account, and shipping tracking URL.'
operationId: get_card_details_cards__card_id__details_get
parameters:
- name: card_id
in: path
required: true
schema:
type: string
format: uuid
title: Card Id
- $ref: '#/components/parameters/EntityIdHeader'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CardDetailsResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- cards:read
components:
schemas:
WeeklyTimeSeries:
properties:
week:
type: string
format: date
title: Week
data:
items:
$ref: '#/components/schemas/SpendInsight'
type: array
title: Data
type: object
required:
- week
- data
title: WeeklyTimeSeries
MerchantRestrictionType:
type: string
enum:
- allow
- block
title: MerchantRestrictionType
x-enum-varnames:
- allow
- block
MerchantSpendInsight:
properties:
total:
type: string
pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
title: Total
count:
type: integer
title: Count
merchant:
type: string
title: Merchant
logo_url:
anyOf:
- type: string
- type: 'null'
title: Logo Url
website:
anyOf:
- type: string
- type: 'null'
title: Website
type: object
required:
- total
- count
- merchant
title: MerchantSpendInsight
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
PaymentTokenResponse:
properties:
payment_type:
type: string
const: spt
title: Payment Type
default: spt
token:
type: string
title: Token
description: Shared Payment Token ID.
provider:
type: string
title: Provider
default: stripe
usage_limits:
$ref: '#/components/schemas/TokenUsageLimits'
metadata:
$ref: '#/components/schemas/CardMetadata'
type: object
required:
- token
- usage_limits
- metadata
title: PaymentTokenResponse
DbIndustry:
properties:
mcc:
type: string
pattern: '[0-9]{4}$'
title: Mcc
description:
type: string
title: Description
irs_description:
anyOf:
- type: string
- type: 'null'
title: Irs Description
type: object
required:
- mcc
- description
- irs_description
title: DbIndustry
CardFormFactor:
type: string
enum:
- physical
- virtual
title: CardFormFactor
x-enum-varnames:
- physical
- virtual
ExtAwxCardTransactionStatus:
type: string
enum:
- APPROVED
- PENDING
- FAILED
- CLEARED
- REVERSED
- EXPIRED
title: ExtAwxCardTransactionStatus
x-enum-varnames:
- APPROVED
- PENDING
- FAILED
- CLEARED
- REVERSED
- EXPIRED
CardMetadata:
properties:
card_id:
type: string
format: uuid
title: Card Id
description: Identifier for the issued card.
task_description:
type: string
title: Task Description
description: What you are purchasing.
type: object
required:
- card_id
- task_description
title: CardMetadata
CardDetailsResponse:
properties:
id:
type: string
format: uuid
title: Id
description: Unique card identifier.
billing_address:
$ref: '#/components/schemas/JAddress'
description: Card billing address.
delivery_address:
anyOf:
- type: string
- type: 'null'
title: Delivery Address
description: Masked delivery address for the physical card.
debit_account:
$ref: '#/components/schemas/CardDebitAccount'
description: Linked banking account.
tracking_url:
anyOf:
- type: string
- type: 'null'
title: Tracking Url
description: Shipping tracking URL for the physical card.
type: object
required:
- id
- billing_address
- debit_account
title: CardDetailsResponse
TransactionEarnedCashback:
properties:
dollars:
type: string
pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
title: Dollars
percentage:
type: string
pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,4}0*$
title: Percentage
description: Percentage represented as 4 digit decimal. 0.0001 = 0.01%. Max is 0.05 = 5%
type: object
required:
- dollars
- percentage
title: TransactionEarnedCashback
UpdateCardRequest:
properties:
status:
anyOf:
- $ref: '#/components/schemas/CardStatusUpdate'
- type: 'null'
description: Set to `inactive` to freeze the card or `active` to unfreeze it.
nickname:
anyOf:
- type: string
maxLength: 30
minLength: 1
pattern: ^[ -~]+$
- type: 'null'
title: Nickname
description: Rename the card's display name (max 30 characters).
spending_controls:
anyOf:
- $ref: '#/components/schemas/SpendingControls'
- type: 'null'
description: Replace the card's spend limits.
allowed_categories:
anyOf:
- items:
$ref: '#/components/schemas/CardTransactionCategory'
type: array
- type: 'null'
title: Allowed Categories
description: Restrict the card to these merchant categories. Pass `null` to clear all category restrictions.
type: object
title: UpdateCardRequest
CreatePaymentTokenRequest:
properties:
amount:
type: integer
maximum: 25000.0
exclusiveMinimum: 0.0
title: Amount
description: Maximum amount for this token in whole dollars.
currency:
$ref: '#/components/schemas/Iso4217Code'
description: Three-letter ISO 4217 currency code.
default: USD
merchant_name:
type: string
maxLength: 100
minLength: 1
pattern: ^[ -~]+$
title: Merchant Name
description: Name of the merchant.
task_description:
type: string
title: Task Description
description: Brief description of the purchase.
expires_in_minutes:
type: integer
maximum: 1440.0
exclusiveMinimum: 0.0
title: Expires In Minutes
description: Token expires after this many minutes (default 60).
default: 60
type: object
required:
- amount
- merchant_name
- task_description
title: CreatePaymentTokenRequest
MeowPage:
properties:
limit:
type: integer
maximum: 200.0
minimum: 1.0
title: Limit
default: 10
offset:
type: integer
maximum: 1000000.0
minimum: 0.0
title: Offset
default: 0
type: object
title: MeowPage
JAddress:
properties:
street_line_1:
anyOf:
- type: string
- type: 'null'
title: Street Line 1
street_line_2:
anyOf:
- type: string
- type: 'null'
title: Street Line 2
city:
anyOf:
- type: string
- type: 'null'
title: City
state:
anyOf:
- type: string
- type: 'null'
title: State
postal_code:
anyOf:
- type: string
- type: 'null'
title: Postal Code
country:
anyOf:
- type: string
- type: 'null'
title: Country
type: object
title: JAddress
SpendInsight:
properties:
total:
type: string
pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
title: Total
value:
type: string
title: Value
type: object
required:
- total
- value
title: SpendInsight
CardDebitAccount:
properties:
id:
type: string
format: uuid
title: Id
description: Banking account ID.
name:
type: string
title: Name
description: Banking account display name.
bank:
$ref: '#/components/schemas/BankingAccountProductType'
description: Banking account product type.
type: object
required:
- id
- name
- bank
title: CardDebitAccount
CardControls:
properties:
spending_limit:
type: integer
title: Spending Limit
description: Maximum spend limit in whole dollars.
single_use:
type: boolean
title: Single Use
description: Whether the card is single-use.
expires_at:
type: string
format: date-time
title: Expires At
description: When the card is set to expire. The card is not revoked automatically; revoke it explicitly when you are done with it.
type: object
required:
- spending_limit
- single_use
- expires_at
title: CardControls
TopExpense:
properties:
id:
type: string
format: uuid
title: Id
amount:
type: string
pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$
title: Amount
detail:
type: string
title: Detail
logo_url:
anyOf:
- type: string
- type: 'null'
title: Logo Url
website:
anyOf:
- type: string
- type: 'null'
title: Website
cardholder:
type: string
title: Cardholder
posted_time:
type: string
format: date-time
title: Posted Time
card_id:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Card Id
network_transaction_id:
anyOf:
- type: string
- type: 'null'
title: Network Transaction Id
type: object
required:
- id
- amount
- detail
- cardholder
- posted_time
title: TopExpense
TokenUsageLimits:
properties:
max_amount:
type: integer
title: Max Amount
description: Maximum amount in whole dollars.
currency:
$ref: '#/components/schemas/Iso4217Code'
description: Three-letter ISO 4217 currency code.
expires_at:
type: string
format: date-time
title: Expires At
description: Token expiration timestamp.
type: object
required:
- max_amount
- currency
- expires_at
title: TokenUsageLimits
IssuingPlatform:
type: string
enum:
- stripe
-
# --- truncated at 32 KB (51 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/meow/refs/heads/main/openapi/meow-cards-api-openapi.yml