next_step object that tells you what’s outstanding, so you don’t infer it from
status.
This is self-serve onboarding for entities your key owns. The key’s user is
the creator and admin, not a representative of the entity. To onboard entities
on behalf of your customers as a platform, use
Partner Onboarding instead.
You’ll need
- A global API key (user-scoped, not entity-scoped) with the
entity:createscope for writes andaccounts:readto read and list onboarding state. Onboarding routes reject entity-scoped keys with403. - No
x-entity-idheader. The entity is addressed in the URL path.
Read next_step after every call
Every onboarding read returns a next_step. For a US entity mid-onboarding it
looks like this (address is a US-only requirement — see
documents):
| Field | Meaning |
|---|---|
step | The step the application is on now. |
phase | business_info → ready_to_submit → submitted. |
missing | The items still required to clear the current step. |
required_proof_types | KYB documents still owed, as proof_type values. Pass each one when requesting an upload URL. |
can_submit | true once everything required has been collected. |
GET /entities/{entity_id}, act on
next_step.step, repeat until can_submit is true, then submit.
step | Do this |
|---|---|
collect_business_details, collect_business_addresses | Create the entity, or update its details. |
collect_additional_details | Update business details with the account purpose and digital-currency answers. |
manage_representatives | Add representatives, marking one is_primary. |
complete_identity_verification | Verify each representative. |
upload_documents | Upload the documents named in required_proof_types. |
submit_application | Submit the application. |
Some entities draw an extra due-diligence step (
complete_due_diligence) or a
follow-up information request after submission (resolve_info_requests). These
are handled in the Meow dashboard; the API surfaces them in next_step so you
know when to direct the business there.1. Create the entity
POST /entities creates the entity and returns its public ID. The creating user
is granted admin, so the same key can act on the entity immediately. Send an
empty body to create a bare entity, or seed any KYB business details up front.
Response
id. It’s the {entity_id} for every call below, and the x-entity-id
header once the entity is onboarded and you call entity-scoped APIs.
legal_structure is one of: ccorp, corp, scorp, llc, llp, lp,
partnership, soleprop, nonprofit, trust, estate, foreign_entity,
scheme.
2. Update business details
PATCH /entities/{entity_id}/business-details fills in or corrects KYB details
before the application is submitted. Send only the fields you want to change;
anything you omit keeps its current value. Use it for the business profile the
create call didn’t include, and to answer the account-purpose and
digital-currency questions (collect_additional_details).
next_step. 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.
3. Add representatives
POST /entities/{entity_id}/representatives records a beneficial owner or
officer and returns its representative_id. This step is create-only.
Verify the representative separately (section 4).
Mark exactly one representative as the signer with is_primary: true; setting it
demotes any previous primary. A primary representative is required before the
application can be submitted.
Response
title_idis one of:chief executive officer,chief financial officer,chief operating officer,president,general partner,managing member,finance manager.percent_ownershipis required whenis_beneficial_owneristrue, between25and100. Total beneficial ownership across representatives cannot exceed100.- Each
emailis unique per entity. Re-posting the same address returns400.
4. Verify each representative
KYC is per representative, with two ways to do it. Pick one per person.- You hold their details
- They self-verify
Submit the representative’s identity data and Meow runs verification on it.For
Response
id_type: us_ssn send nine digits with or without dashes
(123-45-6789 or 123456789); for us_ssn_last_4 send the last four.next_step (the complete_identity_verification
step clears once a representative is verified) or the identity_verification.*
webhooks. The entity’s own kyc_status reflects the primary user, not an added
representative.
5. Upload supporting documents
next_step.required_proof_types lists exactly which documents the entity still
owes. For a US entity that’s typically ["incorporation", "address"]. Each
one uses a three-step flow: get a pre-signed URL, PUT the bytes, then
confirm. Repeat the flow for each proof type — for example, the incorporation
certificate first, then the proof of physical address:
PUT the file to upload_url
Content-Type you requested, keep the file under max_bytes, and
upload before the URL expires.required_proof_types as the proof_type. For US
entities, required_proof_types includes both incorporation and address
as standard requirements. address is proof of physical address at the
entity level — a utility bill, bank statement, or lease/rental agreement
evidencing the entity’s relationship to its physical address. The address
requirement applies to US entities only; foreign entities are not asked for
it. Other common
values include articles_of_organization, bylaws, operating_agreement,
ein, bank_statement, and beneficial_owner_id.
Address documents uploaded for a representative do not satisfy the
entity-level
address requirement — the document must evidence the
entity’s physical address. next_step.can_submit stays false until every
proof type in required_proof_types has been uploaded.6. Submit the application
Oncenext_step.can_submit is true, submit the application with
POST /entities/{entity_id}/submit. Choose the checking account product to open,
and attest that you are authorized to submit on the business’s behalf. If
anything is still outstanding, this returns 400 with the remaining
requirements; check next_step.can_submit first.
Response
banking_account_product_typeisgrasshopperorcrb.attestationmust betrue.
status to under_review, then approved or rejected. Watch for the
outcome with webhooks (below) or by polling the status endpoint.
Sandbox: simulate application approval
In sandbox and development environments there is no human compliance review, so a submitted application would otherwise sit inunder_review forever. Simulate
the approval with
POST /simulations/entities/{entity_id}/application_approval. It approves the
application as if compliance review had passed and kicks off checking-account
onboarding.
- The body is optional.
banking_account_product_typedefaults tograsshopper;crbis also supported. - Use a global (user) API key with the
simulations:writescope; the key’s user must be an admin of the entity. - The application must already be submitted (section 6).
status moves to submitted immediately
and to approved once the checking account activates. Poll
GET /entities/{entity_id} or subscribe to the application.* webhook events
to observe the transition.
7. Track progress to submission
GET /entities/{entity_id} returns the lifecycle status, uploaded
documents, and next_step.
Response
status | Meaning |
|---|---|
pending_document_upload | No documents uploaded yet. |
pending_user_action | Still collecting required data. |
submitted | Submitted; queued for review. |
under_review | Meow is reviewing the application. |
approved | KYB approved (and an account is open). |
rejected | KYB rejected. |
8. List your entities
GET /entities returns every entity your key’s user owns, each tagged with its
onboarding_type, with opaque-offset pagination.
Response
page is non-null, pass page.nextOffset as the offset query parameter
for the next page. When page is null, you’ve reached the end.
Track updates with webhooks
Subscribe toidentity_verification.* for KYC outcomes and application.* for
KYB lifecycle changes, then update your records from the delivered payloads.
See the webhooks guide for signing, retries, and
out-of-order handling.
End to end
See also
Create an entity
Full request contract for
POST /entities.Update business details
Fill in or correct KYB details before submission.
Add a representative
Beneficial owners and officers, with the primary signer flag.
Submit the application
Choose the account product and attest, then send for review.