Skip to main content
POST
Create a KYC link
This endpoint always requires x-api-key. The email is normalized before lookup, and needKyc defaults to true.
Testing in Sandbox? Pass needKyc: false and skip identity verification entirely. The KYC flow is a Sumsub verification with document upload, not something you need to prove your integration works, and every test investor you create without it is one less manual step in your loop.Rehearse the real KYC flow once before you go live, since needKyc: false is rejected in production with needKyc=false is only available in the sandbox environment.
This operation can create an investor account and send an invitation email. The returned Sumsub URL grants access to a verification flow; do not log it, commit it, or expose it to another user.
When needKyc is false, the investor is created without a KYC requirement and url is null.

Fields

Attach the wallet address

An investor record with no wallet address cannot invest. Pass walletAddress here so the record is complete from the start:
A wallet address is set once. If the investor already has a different address on file, the call is rejected with Investor <email> is already associated with a different wallet address rather than overwriting it. Preparing a whitelist transaction also attaches the address when the record does not yet have one.
Confirm the result with GET /get-investor-info, which returns walletAddress and complianceStatus. A complianceStatus of NOT_REQUIRED together with a non-null walletAddress is a ready-to-invest test investor.
needKyc is only applied when the investor record is created. For an email that already has an account, the stored value wins and cannot be downgraded — use a fresh address, such as a + alias.

Client examples

walletAddress and tokenSymbol are currently available through the API only; the CLI, MCP and SDK clients still accept email and needKyc.

Response

Authorizations

x-api-key
string
header
required

Body

application/json
email
string<email>
required
needKyc
boolean
default:true
walletAddress
string

Optional. Investor wallet address. It is attached to the investor record when that record does not already have one. A different stored address is rejected rather than replaced.

Pattern: ^0x[a-fA-F0-9]{40}$
tokenSymbol
string

Optional. Tokenized asset the investor is scoped to.

Response

Investor access resolved and invitation state returned.

email
string<email>
required
needKyc
boolean
required
userCreated
boolean
required
invitationSent
boolean
required
tokenSymbol
string | null
required

Tokenized asset the investor is scoped to, or null.

walletAddress
string | null
required

Investor wallet address on record, or null when none is set.

url
string<uri> | null
required

Sumsub verification URL. Null when KYC is not required. Treat this value as sensitive.