For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
RegisterLoginSandbox Login
GuidesRecipesAPI Reference
GuidesRecipesAPI Reference
  • Product Overview
    • Products & Features
    • Key Concepts
  • Getting Started
    • Account Setup
    • Quickstart
  • Checkout
    • Settlement Locations
  • Payouts
    • Payout Overview
    • What is a Payout
      • What is KYC
        • Coinflow Prebuilt KYC Solution
        • KYC Attestation
        • Reusable KYC Token Sharing
  • Subscriptions
    • Subscriptions Overview
  • Marketplaces
    • Marketplace Overview
    • How Marketplaces Work
    • Marketplaces Webhooks
    • Marketplaces Implementation
  • Developer Resources
    • Custom Branding
    • Checkout Implementation
    • Webhooks
  • Merchant Dashboard
    • Login & Account Access
    • Users and Roles
    • Rate Limits
    • Developer Contact
LogoLogo
RegisterLoginSandbox Login
On this page
  • Overview
  • Who should use this method
  • How it works
  • Setup
  • Step 1: Establish a Persona Connect partnership with Coinflow
  • Step 2: Generate a share token for the verified user
  • Step 3: Register the user with Coinflow
  • Step 1: Contact Coinflow
  • Step 2: Sign the tri-party agreement
  • Step 3: Generate a share token
  • Step 4: Register the user with Coinflow
  • Next steps
PayoutsKYC VerificationSupported KYC Methods

Reusable KYC Token Sharing

Reuse identity verifications you've already collected through Persona or Sumsub instead of asking your users to verify again with Coinflow.
Was this page helpful?
Previous

Available Countries - Withdraw

Learn about which countries Coinflow can support with direct bank payouts.
Next
Built with

Overview

If you already verify users through Persona or Sumsub, you can share that existing verification with Coinflow instead of asking your users to verify a second time. Reusing the verification gives your users a seamless payout experience and keeps your existing identity infrastructure as the source of truth.

Who should use this method

Reusable KYC token sharing is the right path for merchants who:

  • Already run an identity verification program through Persona or Sumsub.
  • Have users who are already verified through that provider.
  • Want to avoid asking those users to re-verify with Coinflow.

If you don’t yet run your own KYC, use Coinflow’s prebuilt KYC instead.

How it works

Regardless of which provider you use, the flow is the same:

  1. Your existing KYC provider produces a share token representing the verified user.
  2. You pass that share token to Coinflow’s /withdraw/kyc/share-token endpoint, along with a vendor field identifying the provider.
  3. Coinflow ingests the verification data and creates a Withdrawer record. The user can now receive payouts without re-verifying.

UI integration: If you use Coinflow’s prebuilt withdraw UI (e.g. CoinflowWithdraw), call the share-token endpoint before rendering the component so the verification record exists when the UI loads.

Setup

The setup steps differ by provider — pick the tab that matches your stack.

Persona
Sumsub

Persona share tokens use Persona’s Connect data-sharing partnership feature.

Step 1: Establish a Persona Connect partnership with Coinflow

Reach out to a Coinflow integrations representative to set up the Persona Connect partnership between your Persona account and Coinflow. You’ll receive a Coinflow connection ID once the partnership is approved.

Step 2: Generate a share token for the verified user

Call Persona’s Create Share Token endpoint to mint a share token for the user’s completed Inquiry, referencing the Coinflow connection ID from Step 1:

Create Share Token
1curl -X POST https://api.withpersona.com/api/v1/connect/share-tokens \
2 -H "Authorization: Bearer <YOUR_PERSONA_API_KEY>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "data": {
6 "attributes": {
7 "connection-id": "<COINFLOW_CONNECTION_ID>",
8 "source-id": "<INQUIRY_ID>"
9 }
10 }
11 }'

Step 3: Register the user with Coinflow

Call Coinflow’s Register User Via Share Token endpoint with vendor: "persona" and the share token from Step 2.

POST
/api/withdraw/kyc/share-token
1curl -X POST https://api-sandbox.coinflow.cash/api/withdraw/kyc/share-token \
2 -H "x-coinflow-auth-user-id: <apiKey>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "vendor": "sumsub",
6 "shareToken": "string",
7 "country": "string",
8 "email": "string"
9}'
Try it
Response
1{
2 "withdrawer": {
3 "_id": "string",
4 "wallet": "string",
5 "blockchain": "solana",
6 "wallets": [
7 {
8 "wallet": "string",
9 "blockchain": "solana"
10 }
11 ],
12 "email": "string",
13 "availability": {
14 "status": "Functional",
15 "reason": "string",
16 "editor": "string",
17 "updatedAt": "2024-01-15T09:30:00Z"
18 },
19 "currency": "USD",
20 "merchant": "string",
21 "verification": {
22 "reference": "string",
23 "status": "pending",
24 "vendor": "middesk",
25 "name": "string",
26 "attested": true,
27 "shareToken": "string",
28 "shareTokenStatus": "string",
29 "sessionToken": "string"
30 },
31 "riskScoreOverride": true,
32 "country": "string",
33 "user": true,
34 "watchlistExempt": "Unknown",
35 "originalCurrency": "USD",
36 "geoBlockOverride": {
37 "reason": "string",
38 "setBy": "string",
39 "setAt": "2024-01-15T09:30:00Z",
40 "expiresAt": "2024-01-15T09:30:00Z"
41 },
42 "createdAt": "2024-01-15T09:30:00Z",
43 "dwolla": {
44 "customerId": "string",
45 "status": "pending",
46 "acceptedTerms": "2024-01-15T09:30:00Z",
47 "verification": {
48 "reference": "string",
49 "status": "pending",
50 "vendor": "middesk",
51 "name": "string",
52 "attested": true,
53 "shareToken": "string",
54 "shareTokenStatus": "string",
55 "sessionToken": "string"
56 }
57 },
58 "watchlistId": "string"
59 }
60}

When you call Get Withdrawer after registration, Coinflow checks the share-token status to confirm the verification is complete before returning the withdrawer record. If Coinflow needs fields your inquiry didn’t capture, the user is prompted to fill in the remaining fields.

Next steps

After registering a withdrawer through token sharing, the flow is the same as any other payout:

  1. Get the withdrawer to confirm verification.status is approved or attested.
  2. Add a payout destination (bank account, debit card, IBAN, or PIX) — or use the Bank Authentication UI.
  3. Initiate the payout.

See the full merchant payout guide for end-to-end implementation.