---
title: "Submit customer for verification"
method: POST
path: "/verifications"
tags: ["KYC/KYB Verifications"]
---

# Submit customer for verification

`POST /verifications`

Trigger KYC (individual) or KYB (business) verification for a customer.
The response indicates whether all required information has been provided.
If data is missing, the `errors` array describes exactly what needs to be
supplied before verification can proceed.

Call this endpoint again after resolving errors to re-submit.

### What to collect for KYB

Before submitting a `BUSINESS` customer, collect the following via
`POST /customers`, `POST /beneficial-owners`, and `POST /documents`:

**Business identifying information**
- Entity full legal name
- Doing Business As (DBA) name, if applicable
- Physical address — principal place of business
- Countries of operation
- Identification number — U.S. taxpayer identification number, or, for a
  foreign business without one, alternative government-issued documentation
  certifying the existence of the business

**Ownership and control structure** — collected for **one control person**
(an individual with significant responsibility to control, manage, or
direct the legal entity) **and all beneficial owners** (every individual
who owns 25% or more, directly or indirectly). For each, provide:
- Full name
- Date of birth
- Address
- Identification number:
  - U.S. persons — SSN or ITIN
  - Non-U.S. persons — one or more of: ITIN, passport (with country of
    issuance), alien identification card, or another government-issued
    photo ID evidencing nationality or residence

**Required documents**
- Company formation and existence documents (certificate of incorporation,
  articles of association, etc.)
- Proof of ownership and control structure (organization and ownership
  chart, shareholder agreements, operating agreements, register of members,
  or certification of controlling person and beneficial owners)
- Proof of address dated within the last 3 months (utility bill, bank
  statement, lease agreement, or official correspondence)
- Tax ID or equivalent identifying-number documents
- For non-U.S. beneficial owners — passport plus one additional
  government-issued ID

## Request body

- VerificationRequest
  - `customerId` string, required — The ID of the customer to verify

## Response `200`

Verification status returned. Check `verificationStatus` and `errors` to determine next steps.

- Verification
  - `id` string, required — Unique identifier for this verification
  - `customerId` string, required — The ID of the customer being verified
  - `verificationStatus` 'RESOLVE_ERRORS' | 'PENDING_MANUAL_REVIEW' | 'IN_PROGRESS' | 'APPROVED' | 'REJECTED' | 'READY_FOR_VERIFICATION', required — Current status of the KYC/KYB verification
  - `errors` VerificationError[], required — List of issues preventing verification from proceeding. Empty when verificationStatus is APPROVED or IN_PROGRESS.
    - `resourceId` string, required — ID of the resource with the issue (Customer, BeneficialOwner, or Document)
    - `type` 'MISSING_FIELD' | 'INVALID_FIELD' | 'MISSING_LEGAL_PRESENCE_DOCUMENT' | 'MISSING_CONTROL_STRUCTURE_DOCUMENT' | 'MISSING_OWNERSHIP_STRUCTURE_DOCUMENT' | 'MISSING_PROOF_OF_ADDRESS_DOCUMENT' | 'MISSING_IDENTITY_DOCUMENT' | 'INVALID_DOCUMENT' | 'EXPIRED_DOCUMENT' | 'POOR_QUALITY_DOCUMENT' | 'SUSPECTED_FRAUD_DOCUMENT' | 'WRONG_DOCUMENT_TYPE' | 'INCOMPLETE_DOCUMENT' | 'UNREADABLE_DOCUMENT' | 'DOCUMENT_VERIFICATION_FAILED' | 'APPLICANT_SANCTIONED' | 'APPLICANT_FRAUD' | 'APPLICANT_CRIMINAL_RECORD' | 'APPLICANT_REJECTED' | 'MISSING_BENEFICIAL_OWNER' | 'MISSING_CONTROL_PERSON' | 'MISSING_GOOD_STANDING_DOCUMENT', required — Type of verification error. The category-specific MISSING_*_DOCUMENT types indicate which document category is needed. Document quality types (POOR_QUALITY_DOCUMENT, SUSPECTED_FRAUD_DOCUMENT, etc.) indicate specific issues with uploaded documents. APPLICANT_* types indicate issues with the applicant themselves (sanctions, fraud, criminal records).
    - `field` string — Dot-notation path to the field with the issue. Present when type is MISSING_FIELD or INVALID_FIELD.
    - `acceptedDocumentTypes` DocumentType[] — Document types that would satisfy this requirement. The integrator can upload any one of the listed types. Present when type is MISSING_LEGAL_PRESENCE_DOCUMENT, MISSING_CONTROL_STRUCTURE_DOCUMENT, MISSING_OWNERSHIP_STRUCTURE_DOCUMENT, MISSING_PROOF_OF_ADDRESS_DOCUMENT, MISSING_IDENTITY_DOCUMENT, INVALID_DOCUMENT, or EXPIRED_DOCUMENT. | Error Type | Accepted Document Types | |---|---| | MISSING_LEGAL_PRESENCE_DOCUMENT | CERTIFICATE_OF_INCORPORATION, ARTICLES_OF_INCORPORATION, ARTICLES_OF_ASSOCIATION, STATE_REGISTRY_EXCERPT | | MISSING_CONTROL_STRUCTURE_DOCUMENT | DIRECTOR_REGISTRY, TRUST_AGREEMENT, STATE_COMPANY_REGISTRY, PARTNERSHIP_CONTROL_AGREEMENT | | MISSING_OWNERSHIP_STRUCTURE_DOCUMENT | SHAREHOLDER_REGISTER, TRUST_AGREEMENT, PARTNERSHIP_AGREEMENT | | MISSING_PROOF_OF_ADDRESS_DOCUMENT | UTILITY_BILL, RENT_OR_LEASE_AGREEMENT, ELECTRICITY_BILL, BANK_STATEMENT, TAX_RETURN | | MISSING_IDENTITY_DOCUMENT | PASSPORT, DRIVERS_LICENSE, NATIONAL_ID |
    - `reason` string, required — Human-readable description of the issue
  - `createdAt` string, date-time, required — When this verification was created
  - `updatedAt` string, date-time — When this verification was last updated

## Other responses

- `400` — Bad request - Invalid parameters
- `401` — Unauthorized
- `404` — Customer not found
- `500` — Internal service error

---

[API](https://skmtc.net/stainless-api/apis/grid-api.md) · [All operations](https://skmtc.net/stainless-api/apis/grid-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/stainless-api/grid-api/revisions/151f2d9bad9c/schema)
