---
title: "Create Off-ramp Verification"
method: POST
path: "/off-ramp/verification"
tags: ["off-ramp"]
---

# Create Off-ramp Verification

`POST /off-ramp/verification`

## Request

- Base URL: `https://api.coinvoyage.io/v3`
- URL: `https://api.coinvoyage.io/v3/off-ramp/verification`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3/docs/off-ramp/verification/post.ts> (a function with typed inputs; its response is checked against the schema)

Internal credentials only. The request signature appends the lowercase hex SHA-256 digest of the exact request body after method, path, and timestamp.

## Headers

- `Authorization-Signature` string, required

## Request body

- KYCLinkRequest
  - `email` string, required
  - `type` 'individual' | 'business', required: Whether the KYC link is for an individual or a business
  - `full_name` string
  - `endorsements` EndorsementName[]
  - `redirect_uri` string
  - `email_challenge_id` string, required
  - `email_challenge_code` string, required

## Response `201`

KYC link created

- KYCLinkResponse
  - `id` string, required
  - `type` 'individual' | 'business', required: Whether the KYC link is for an individual or a business
  - `customer_id` string, nullable
  - `full_name` string, nullable
  - `email` string, required
  - `kyc_link` string, required
  - `kyc_status` 'not_started' | 'incomplete' | 'awaiting_questionnaire' | 'awaiting_ubo' | 'under_review' | 'approved' | 'rejected' | 'paused' | 'offboarded', required: Current verification status of the KYC link
  - `rejection_reasons` KYCRejectionReason[]
    - `developer_reason` string, required
    - `reason` string, required
    - `created_at` string, required
  - `tos_link` string, required
  - `tos_status` 'pending' | 'approved', required: Whether the customer has accepted the Terms of Service
  - `created_at` string, nullable
  - `requirement_url` string, nullable

## Other responses

- `401`: Unauthorized
- `403`: Internal credential required
- `422`: Invalid request body
- `500`: Internal Server Error
- `503`: Email verification unavailable

## Changes

- **2026-09-30** `86cc796d122e`: 1 info
  - added the optional property `requirement_url` to the response with the `201` status
- **2026-09-26** `b82377b55a17`: 2 breaking, 2 info
  - added the new required request property `email_challenge_code`
  - added the new required request property `email_challenge_id`
  - added the non-success response with the status `403`
  - added the non-success response with the status `503`

[Operation history](https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3/changes/off-ramp/verification/post.md)

---

[API](https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3.md) - [All operations](https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3/llms.txt) - [OpenAPI document](https://skmtc.dev/coinvoyage/apis/coinvoyage-api-v3/revisions/3535f46f4c27?raw)
