Meow Entities API
The Entities API from Meow — 12 operation(s) for entities.
The Entities API from Meow — 12 operation(s) for entities.
openapi: 3.1.0
info:
title: Meow Accounts Entities 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: Entities
paths:
/entities:
post:
tags:
- Entities
summary: Create Business Entity
description: 'Creates a new business entity owned by your API key''s user. Send an empty body to create a bare not-started entity, or seed any KYB business details up front: legal name, incorporation, the registered legal and (optional) physical address, and the business profile fields (phone, tax ID, website, description, industry, account purpose, and digital-currency questions). The creating user is granted admin on the new entity, so the same API key can immediately act on it by passing the returned entity ID in the `x-entity-id` header. Anything you omit can be added later with Update Business Details. The entity still completes KYB (beneficial owners and any remaining details) before it can be approved or open bank accounts.'
operationId: create_business_entity_entities_post
requestBody:
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/CreateBusinessEntityRequest'
- type: 'null'
title: Request
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CreateBusinessEntityResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
get:
tags:
- Entities
summary: List Onboarding Entities
description: Lists the business entities being onboarded by your API key's user.
operationId: list_entity_onboarding_entities_get
parameters:
- name: limit
in: query
required: false
schema:
type: integer
maximum: 100
minimum: 1
default: 10
title: Limit
- name: offset
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 100
- type: 'null'
description: Opaque offset identifier for pagination. Use the nextOffset from a previous response.
title: Offset
description: Opaque offset identifier for pagination. Use the nextOffset from a previous response.
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityOnboardingListResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:read
/entities/{entity_id}:
get:
tags:
- Entities
summary: Get Entity Onboarding Status
description: Returns the onboarding status of a business entity, including uploaded documents and each representative's KYC status in the `representatives` array. The top-level `kyc_status` reflects the primary representative.
operationId: get_entity_onboarding_entities__entity_id__get
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityOnboardingStatusResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:read
/entities/{entity_id}/business-details:
patch:
tags:
- Entities
summary: Update Business Details
description: Update a business entity's KYB details before its application is submitted. Send only the fields you want to change; anything you omit keeps its current value. Use this to fill in the business phone, tax ID, website, description, industry, account purpose, and digital-currency questions, and the registered legal and physical addresses, or to correct details captured at creation. Send `physical_address` together with `business_address`; omitting it keeps any physical address already on file, or uses the legal address when none is set. Returns the refreshed onboarding status, including what is still required next.
operationId: update_entity_business_details_entities__entity_id__business_details_patch
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EntityUpdateBusinessDetailsRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityOnboardingStatusResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
/entities/{entity_id}/representatives:
post:
tags:
- Entities
summary: Add Entity Representative
description: Add a representative (a beneficial owner or officer) to a business entity. Set `is_primary` to mark the primary representative (signer); exactly one primary is required before the application can be submitted. Verify the representative separately by submitting their KYC data or minting a self-serve verification link. This is allowed only before the application is submitted for review.
operationId: create_representative_entities__entity_id__representatives_post
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EntityCreateRepresentativeRequest'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityRepresentativeResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
get:
tags:
- Entities
summary: List Entity Representatives
description: List the representatives (beneficial owners and officers) on a business entity's application, each with their identity verification (KYC) status. The primary representative (signer) is returned first. Use each `representative_id` to submit KYC, mint a verification link, or make it primary.
operationId: list_representatives_entities__entity_id__representatives_get
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityRepresentativeListResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:read
/entities/{entity_id}/representatives/{representative_id}/kyc:
post:
tags:
- Entities
summary: Submit Representative KYC Data
description: Submit identity (KYC) data for a representative you added. Verification runs server-side; poll the entity onboarding status endpoint for the result. Use this when you hold the representative's identity details; otherwise mint a verification link for them to self-verify.
operationId: submit_representative_kyc_data_entities__entity_id__representatives__representative_id__kyc_post
parameters:
- name: representative_id
in: path
required: true
schema:
type: string
title: Representative Id
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/OnboardingKycIdentity'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityRepresentativeKycResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
/entities/{entity_id}/representatives/{representative_id}/verification-link:
post:
tags:
- Entities
summary: Create Representative Verification Link
description: Mint a shareable identity-verification link the representative opens to complete KYC themselves. The alternative to submitting their KYC data directly.
operationId: create_representative_verification_link_entities__entity_id__representatives__representative_id__verification_link_post
parameters:
- name: representative_id
in: path
required: true
schema:
type: string
title: Representative Id
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityRepresentativeVerificationLinkResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
/entities/{entity_id}/representatives/{representative_id}/make-primary:
post:
tags:
- Entities
summary: Make Representative Primary
description: Make an existing representative the primary representative (signer). Any current primary is demoted, so exactly one remains. Allowed only before the application is submitted for review. Returns the updated onboarding status.
operationId: set_primary_representative_entities__entity_id__representatives__representative_id__make_primary_post
parameters:
- name: representative_id
in: path
required: true
schema:
type: string
title: Representative Id
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityOnboardingStatusResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
/entities/{entity_id}/documents/upload-url:
post:
tags:
- Entities
summary: Get Entity Document Upload URL
description: Get a pre-signed URL to upload a KYB document. Use HTTP PUT to upload the file to the returned URL, then confirm it. For a document that belongs to a specific representative (e.g. their ID or proof of address), pass their `representative_id` here and again on the confirm call, which records the link.
operationId: upload_document_entities__entity_id__documents_upload_url_post
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EntityDocumentUploadRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PartnerDocumentUploadResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
/entities/{entity_id}/documents/confirm:
post:
tags:
- Entities
summary: Confirm Entity Document Upload
description: Confirm that a KYB document was uploaded successfully. Pass the same `representative_id` given when the upload URL was generated (if any) to record which representative the document belongs to; it is echoed back on the entity's onboarding status under `documents`.
operationId: confirm_document_entities__entity_id__documents_confirm_post
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EntityDocumentConfirmRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PartnerDocumentConfirmResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
/entities/{entity_id}/submit:
post:
tags:
- Entities
summary: Submit Entity Application
description: 'Submit a fully prepared business entity for review. Choose the checking account product to open. The application must have everything it needs first (check `next_step.can_submit` on the onboarding status); otherwise this returns the outstanding requirements. Once submitted, the application moves to review and can no longer be edited. Pass `product_features` to request additional products alongside the checking account (for example `stablecoins` for USDC access); they are enabled once the application is approved. Returns the updated onboarding status, including a `consent_url`: share it with the primary representative so they can review and accept the required agreements, disclosures, and attestations in their browser (no login needed). The same link is also returned on `GET /entities/{entity_id}` after submission.'
operationId: submit_entity_application_entities__entity_id__submit_post
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EntitySubmitApplicationRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityOnboardingStatusResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
/entities/{entity_id}/due-diligence:
post:
tags:
- Entities
summary: Submit Due Diligence Form
description: Submit an enhanced due diligence form for a business entity. Some industries require additional due diligence before the application can be submitted (check `next_step.missing` on the onboarding status). Only forms that collect plain data are accepted here; forms that require document uploads must be completed in the web app. Returns the updated onboarding status.
operationId: submit_entity_due_diligence_entities__entity_id__due_diligence_post
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/InvestmentsEddFormRequest'
- $ref: '#/components/schemas/HoldingsEddFormRequest'
- $ref: '#/components/schemas/MpmEddFormRequest'
- $ref: '#/components/schemas/RealEstateEddFormRequest'
- $ref: '#/components/schemas/NoWebsiteEddFormRequest'
discriminator:
propertyName: form_type
mapping:
investments: '#/components/schemas/InvestmentsEddFormRequest'
holdings: '#/components/schemas/HoldingsEddFormRequest'
mpm: '#/components/schemas/MpmEddFormRequest'
real_estate: '#/components/schemas/RealEstateEddFormRequest'
no_website: '#/components/schemas/NoWebsiteEddFormRequest'
title: Request
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityOnboardingStatusResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- entity:create
get:
tags:
- Entities
summary: Get Due Diligence Requirements
description: List the enhanced due diligence forms required for a business entity, each with its completion status and whether it must be completed in the web app (forms that collect document uploads cannot be submitted through the API). Fetch each submittable form's schema, then submit it.
operationId: get_entity_due_diligence_entities__entity_id__due_diligence_get
parameters:
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/EntityDueDiligenceStatusResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:read
/entities/{entity_id}/due-diligence/schema/{form_type}:
get:
tags:
- Entities
summary: Get Due Diligence Form Schema
description: 'Get the field schema for a due diligence form: its pages and elements with types, choices, validation, and conditional visibility. Use it to build a valid submission body. Only forms submittable through the API have a schema; others must be completed in the web app.'
operationId: get_entity_due_diligence_schema_entities__entity_id__due_diligence_schema__form_type__get
parameters:
- name: form_type
in: path
required: true
schema:
$ref: '#/components/schemas/CustomerApiEddFormType'
- name: entity_id
in: path
required: true
schema:
type: string
title: Entity Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DDFormSchema'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security:
- apiKeyAuth:
- accounts:read
components:
schemas:
EntityRepresentativeVerificationLinkResponse:
properties:
representative_id:
type: string
format: uuid
title: Representative Id
description: ID of the representative the link is for.
identity_verification_url:
anyOf:
- type: string
- type: 'null'
title: Identity Verification Url
description: Shareable identity-verification link the representative opens to complete KYC themselves, or null if one could not be generated (e.g. verification has already started).
type: object
required:
- representative_id
- identity_verification_url
title: EntityRepresentativeVerificationLinkResponse
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)).
LoanType:
type: string
enum:
- bridge_short_term_financing
- construction_loans
- property_rehab_loans
- other
title: LoanType
HoldingsDueDiligence:
properties:
holding_type:
$ref: '#/components/schemas/HoldingType-Input'
holding_entity_type:
items:
$ref: '#/components/schemas/HoldingEntityType'
type: array
title: Holding Entity Type
real_estate:
anyOf:
- $ref: '#/components/schemas/RealEstateHoldingDueDiligence'
- type: 'null'
investors:
anyOf:
- $ref: '#/components/schemas/InvestorsDueDiligence'
- type: 'null'
type: object
required:
- holding_type
- holding_entity_type
title: HoldingsDueDiligence
EntityCreateRepresentativeRequest:
properties:
is_beneficial_owner:
type: boolean
title: Is Beneficial Owner
description: Whether this person owns 25% or more of the business.
default: false
percent_ownership:
anyOf:
- type: number
maximum: 100.0
minimum: 25.0
- type: string
pattern: ^(?!^[-+.]*$)[+-]?0*\d*\.?\d{0,2}0*$
- type: 'null'
title: Percent Ownership
description: Ownership percentage; required when `is_beneficial_owner` is true.
examples:
- '50'
email:
type: string
format: email
title: Email
description: Email address of the representative.
examples:
- felix@catnipcoffee.com
first_name:
anyOf:
- type: string
- type: 'null'
title: First Name
description: Legal first name.
examples:
- Felix
last_name:
anyOf:
- type: string
- type: 'null'
title: Last Name
description: Legal last name.
examples:
- Whiskers
title_id:
$ref: '#/components/schemas/RepresentativeTitle'
description: The representative's job title.
is_primary:
type: boolean
title: Is Primary
description: Whether this representative is the primary representative (signer) for the application. Setting this demotes any existing primary; exactly one primary is required before the application can be submitted.
default: false
type: object
required:
- email
- title_id
title: EntityCreateRepresentativeRequest
RealEstateEddFormRequest:
properties:
form_type:
type: string
const: real_estate
title: Form Type
form_data:
$ref: '#/components/schemas/RealEstateDueDiligence'
type: object
required:
- form_type
- form_data
title: RealEstateEddFormRequest
OnboardingKycStatus:
type: string
enum:
- not_started
- pending
- action_required
- approved
- rejected
title: OnboardingKycStatus
x-enum-varnames:
- not_started
- pending
- action_required
- approved
- rejected
CountryCodeAlpha2:
type: string
enum:
- AW
- AF
- AO
- AI
- AX
- AL
- AD
- AE
- AR
- AM
- AS
- AQ
- TF
- AG
- AU
- AT
- AZ
- BI
- BE
- BJ
- BQ
- BF
- BD
- BG
- BH
- BS
- BA
- BL
- BY
- BZ
- BM
- BO
- BR
- BB
- BN
- BT
- BV
- BW
- CF
- CA
- CC
- CH
- CL
- CN
- CI
- CM
- CD
- CG
- CK
- CO
- KM
- CV
- CR
- CU
- CW
- CX
- KY
- CY
- CZ
- DE
- DJ
- DM
- DK
- DO
- DZ
- EC
- EG
- ER
- EH
- ES
- EE
- ET
- FI
- FJ
- FK
- FR
- FO
- FM
- GA
- GB
- GE
- GG
- GH
- GI
- GN
- GP
- GM
- GW
- GQ
- GR
- GD
- GL
- GT
- GF
- GU
- GY
- HK
- HM
- HN
- HR
- HT
- HU
- ID
- IM
- IN
- IO
- IE
- IR
- IQ
- IS
- IL
- IT
- JM
- JE
- JO
- JP
- KZ
- KE
- KG
- KH
- KI
- KN
- KR
- KW
- LA
- LB
- LR
- LY
- LC
- LI
- LK
- LS
- LT
- LU
- LV
- MO
- MF
- MA
- MC
- MD
- MG
- MV
- MX
- MH
- MK
- ML
- MT
- MM
- ME
- MN
- MP
- MZ
- MR
- MS
- MQ
- MU
- MW
- MY
- YT
- NA
- NC
- NE
- NF
- NG
- NI
- NU
- NL
- 'NO'
- NP
- NR
- NZ
- OM
- PK
- PA
- PN
- PE
- PH
- PW
- PG
- PL
- PR
- KP
- PT
- PY
- PS
- PF
- QA
- RE
- RO
- RU
- RW
- SA
- SD
- SN
- SG
- GS
- SH
- SJ
- SB
- SL
- SV
- SM
- SO
- PM
- RS
- SS
- ST
- SR
- SK
- SI
- SE
- SZ
- SX
- SC
- SY
- TC
- TD
- TG
- TH
- TJ
- TK
- TM
- TL
- TO
- TT
- TN
- TR
- TV
- TW
- TZ
- UG
- UA
- UM
- UY
- US
- UZ
- VA
- VC
- VE
- VG
- VI
- VN
- VU
- WF
- WS
- XK
- YE
- ZA
- ZM
- ZW
title: CountryCodeAlpha2
x-enum-varnames:
- AW
- AF
- AO
- AI
- AX
- AL
- AD
- AE
- AR
- AM
- AS
- AQ
- TF
- AG
- AU
- AT
- AZ
- BI
- BE
- BJ
- BQ
- BF
- BD
- BG
- BH
- BS
- BA
- BL
- BY
- BZ
- BM
- BO
- BR
- BB
- BN
- BT
- BV
- BW
- CF
- CA
- CC
- CH
- CL
- CN
- CI
- CM
- CD
- CG
- CK
- CO
- KM
- CV
- CR
- CU
- CW
- CX
- KY
- CY
- CZ
- DE
- DJ
- DM
- DK
- DO
- DZ
- EC
- EG
- ER
- EH
- ES
- EE
- ET
- FI
- FJ
- FK
- FR
- FO
- FM
- GA
- GB
- GE
- GG
- GH
- GI
- GN
- GP
- GM
- GW
- GQ
- GR
- GD
- GL
- GT
- GF
- GU
- GY
- HK
- HM
- HN
- HR
- HT
- HU
- ID
- IM
- IN
- IO
- IE
- IR
- IQ
- IS
- IL
- IT
- JM
- JE
- JO
- JP
- KZ
- KE
- KG
- KH
- KI
- KN
- KR
- KW
- LA
- LB
- LR
- LY
- LC
- LI
- LK
- LS
- LT
- LU
- LV
- MO
- MF
- MA
- MC
- MD
- MG
- MV
- MX
- MH
- MK
- ML
- MT
- MM
- ME
- MN
- MP
- MZ
- MR
- MS
- MQ
- MU
- MW
- MY
- YT
- NA
- NC
- NE
- NF
- NG
- NI
- NU
- NL
- 'NO'
- NP
- NR
- NZ
- OM
- PK
- PA
- PN
- PE
- PH
- PW
- PG
- PL
- PR
- KP
- PT
- PY
- PS
- PF
- QA
- RE
- RO
- RU
- RW
- SA
- SD
- SN
- SG
- GS
- SH
- SJ
- SB
- SL
- SV
- SM
- SO
- PM
- RS
# --- truncated at 32 KB (93 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/meow/refs/heads/main/openapi/meow-entities-api-openapi.yml