Create Customer via Link

POST
/api/v1/customer/verification/link

Create customer with entitlements and generate KYC verification link

Authorization

headerX-Api-Key<token>

API key in format: sti_env_prefix_secret

Header Parameters

idempotency-key*string

Required for mutating calls. Use a V4 UUID. The server stores the first result for 24h and returns it on subsequent retries with the same key.

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid

Request Body

application/json
  1. body

Individual + link

external_customer_id?string

External customer ID

customer_type*string
email?string

Email address

Match^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
Formatemail
phone?string

Phone number

Match^\+[1-9]\d{6,14}$
Formate164
entitlements?array<>

Feature-based entitlements for the customer

Default[]
metadata?

Additional metadata

first_name?string

First name of the applicant

last_name?string

Last name of the applicant

middle_name?string

Middle name of the applicant

dob?string

Date of birth in YYYY-MM-DD format

Match^\d{4}-\d{2}-\d{2}$
nationality?string

Country code

tax_id_number?string

Tax Identification Number (TIN)

address?

Address information

proof_of_address_documents?array<>

Proof of address documents (PDF, JPEG, PNG or HEIC, up to 5MB each). Held by Stables and reviewed by compliance; satisfies the proof_of_address capability once approved.

source_of_wealth_documents?array<>

Documents evidencing the customer's source of wealth (PDF, JPEG, PNG or HEIC, up to 5MB each). Held by Stables and reviewed by compliance; satisfies the source_of_wealth capability once approved.

id_documents?array<>

Documents of the applicant

selfie_photo?

Selfie photo of the applicant

reason_for_use?string

Customer's self-declared intended use of the service. Held by Stables and reviewed by compliance; grants the reason_for_use capability once approved.

age_risk_acknowledged?boolean

Customer acknowledges age-related vulnerability and the risks of transacting in crypto. Held by Stables and reviewed by compliance; grants the age_risk_acknowledgement capability once approved.

financial_profile?

Self-declared financial profile. Required for the usd_virtual_account entitlement, whose provider treats expected monthly payment volume as mandatory.

account_purpose?string

What the customer will use Stables for. Held by Stables; grants the account_purpose capability with base verification (straight away once it is approved).

Value in"PERSONAL_OR_LIVING_EXPENSES""RECEIVE_SALARY""PAYMENTS_TO_FRIENDS_OR_FAMILY_ABROAD""PURCHASE_GOODS_AND_SERVICES""RECEIVE_PAYMENTS_FOR_GOODS_AND_SERVICES""INVESTMENT_PURPOSES""PROTECT_WEALTH""CHARITABLE_DONATIONS""OTHER"
account_purpose_other?string

Free-text explanation when account_purpose is OTHER

Length1 <= length
expected_monthly_volume?string

Expected monthly volume in USD, as a band: 0_9999 (under $10,000), 10000_49999, 50000_99999, 100000_249999, 250000_999999, 1000000_plus ($1,000,000+). Held by Stables; grants the expected_monthly_volume capability with base verification (straight away once it is approved).

Value in"0_9999""10000_49999""50000_99999""100000_249999""250000_999999""1000000_plus"
occupation?string

The customer's occupation as a standardised code (SOC 2018 based), e.g. 132011 for accountant and auditor. Must be one of the accepted codes. Held by Stables; grants the occupation_code capability with base verification (straight away once it is approved).

annual_income?string

Annual income in USD, as a band: 0_24999 (under $25,000), 25000_49999, 50000_99999, 100000_249999, 250000_499999, 500000_999999, 1000000_plus ($1,000,000+). Held by Stables; grants the annual_income capability with base verification (straight away once it is approved).

Value in"0_24999""25000_49999""50000_99999""100000_249999""250000_499999""500000_999999""1000000_plus"
ttl_in_secs?integer

Time-to-live for the KYC link in seconds (default: 1800)

Range0 < value <= 9007199254740991
redirect?

Custom redirect URLs for KYC completion

verification_type?string

Step-up verification or action type. Omit to use the customer's base KYC level (INDIVIDUAL_BASE / BUSINESS_BASE). age_risk is deprecated: submit reason_for_use and age_risk_acknowledged through PATCH /customer/:customerId instead.

Value in"liveness""age_risk""passport""source_of_wealth""proof_of_address"

Response Body

Default Response

application/json
  1. response
customer_id*CustomerId

Customer UUID

Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
kyc_link*string

URL for customer to complete KYC process

Formaturi
customer_created*boolean

False when an existing customer with this email was reused instead of created. Fields supplied for an existing customer are ignored.

Example Request
curl -X POST 'https://api.sandbox.stables.money/api/v1/customer/verification/link' \  -H 'idempotency-key: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{  "customer_type": "individual"}'
Example Response
{  "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e",  "kyc_link": "http://example.com",  "customer_created": true}