---
title: "Submit Tier 2 Verification"
method: POST
path: "/v1/customers/{id}/tier2-verification"
tags: ["public.customers"]
---

# Submit Tier 2 Verification

`POST /v1/customers/{id}/tier2-verification`

Submits tier 2 verification for an existing customer. Individual customers submit KYC fields. Business/entity customers submit business KYB fields with customer_type=business. Identity-document and supporting-document image fields must be sent as base64 data URLs such as data:image/png;base64,...

## Path parameters

- `id` string, required

## Request body

- SubmitTier2VerificationRequest
  - `account_purpose` 'charitable_donations' | 'ecommerce_retail_payments' | 'investment_purposes' | 'operating_a_company' | 'other' | 'payments_to_friends_or_family_abroad' | 'personal_or_living_expenses' | 'protect_wealth' | 'purchase_goods_and_services' | 'receive_payment_for_freelancing' | 'receive_salary', required
  - `acting_as_intermediary` boolean, required — ActingAsIntermediary indicates whether the customer is acting as an intermediary for a third party.
  - `birth_date` string, required
  - `customer_type` 'individual' | 'business'
  - `documents` Document[]
    - `file` string, required — File must be a base64 data URL up to 5 MiB decoded, for example: data:image/png;base64,iVBORw0KGgo...
    - `purposes` string[], required
  - `employment_status` 'employed' | 'homemaker' | 'retired' | 'self_employed' | 'student' | 'unemployed', required — EmploymentStatus is the customer's current employment status. Required for high risk customers.
  - `expected_monthly_payments_usd` '0_4999' | '5000_9999' | '10000_49999' | '50000_plus', required
  - `identifying_information` IdentifyingInformation[], required
    - `expiration` string
    - `image_back` string — ImageBack must be a base64 data URL up to 1 MiB decoded when provided, for example: data:image/png;base64,iVBORw0KGgo...
    - `image_front` string — ImageFront must be a base64 data URL up to 1 MiB decoded when provided. It is required for passport, drivers_license, and national_id, but optional for tin.
    - `issuing_country` string, required
    - `number` string
    - `type` 'passport' | 'drivers_license' | 'national_id' | 'tin', required
  - `most_recent_occupation` 'BUSINESS_ADMIN' | 'STEM' | 'HEALTHCARE_SOCIAL' | 'EDUCATION_ARTS_MEDIA' | 'SERVICE_PUBLIC_SAFETY' | 'TRADES_LABOR', required — MostRecentOccupation is the customer's most recent occupation category.
  - `nationality` string, required
  - `residential_address` ResidentialAddress, required
    - `city` string, required
    - `country` string, required
    - `postal_code` string, required
    - `street_line_1` string, required
    - `subdivision` string, required
  - `source_of_funds` 'company_funds' | 'ecommerce_reseller' | 'gambling_proceeds' | 'gifts' | 'government_benefits' | 'inheritance' | 'investments_loans' | 'pension_retirement' | 'salary' | 'sale_of_assets_real_estate' | 'savings' | 'someone_elses_funds', required

## Response `200`

OK

- CustomerResponse
  - `capabilities` CustomerCapability[]
    - `name` string — Name is the customer capability identifier. Currently returned values are "base" and "usd_banking".
    - `status` string — Status is the capability state. Returned values are "approved", "pending", "information_requested", "rejected", or "missing".
  - `created_at` string
  - `email` string
  - `first_name` string
  - `id` string
  - `is_verified` boolean
  - `last_name` string
  - `paystack_funding_account_readiness` PaystackFundingAccountReadiness
    - `account_number_last4` string
    - `bank_code` string
    - `missing_fields` string[]
    - `status` 'READY' | 'REQUIRES_INFORMATION'
    - `updated_at` string
  - `rejection_reasons` string[] — RejectionReasons contains the current blocking verification/capability issues. It is empty after approval.
  - `tier_1_kyc_complete` boolean
  - `tier_2_kyc_complete` boolean
  - `updated_at` string

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `404` — Customer not found
- `409` — Verification already in progress or requires operations review
- `500` — Internal server error
- `502` — Verification provider failed

---

[API](https://skmtc.dev/daya/apis/daya-external-api-public-api.md) · [All operations](https://skmtc.dev/daya/apis/daya-external-api-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/daya/daya-external-api-public-api/revisions/5fc72bf91a48/schema)
