Identity Verification (KYC)

KYC regulations require us to verify user identities and wallets to identify and prevent financial crimes like money laundering and fraud and helps protect our platform and users.

If you are integrating Dinari dShares into your application, we provide a few different options on how to KYC your users in a compliant manner.

Requirements

Identity Verification

Dinari requires that all users that trade dShares, whether directly with an individual wallet or indirectly with an "omnibus wallet", have their identity verified with one of the available methods below.

For your users that trade with an individual wallet, their identity will be associated to their wallet address with the wallet address acting as the primary "key". Applications should check to ensure the wallet has status pass before submitting trades.

Trades submitted with wallets that have not passed Identity Verification (KYC) will fail.

Wallet addresses that have previously completed Identity Verification (KYC) directly with Dinari or indirectly with another application will not have to complete it again.

Likewise, registering additional wallets for a user may require the user to complete identity verification again.

Wallet Screening (AML)

In addition to Identity Verification, individual wallet addresses must also be AML (anti-money laundering) screened with a certified vendor. Dinari reserves the right to continuously AML screen wallets as trades are executed.

Wallets found flagged by Dinari might have their tokens restricted from transfer and trading pending review.

Integrations

Managed KYC

Managed KYC is suitable for applications where the users utilize individuals wallets that are non-custodial in nature and does not have an existing (or has an insufficient) identity verification process.

Examples include: wallet applications, swap applications, etc..

Dinari provides a free white-labeled Identity Verification (KYC) process for all integrations to use. This process is a purely web-based process and is embeddable in web applications as a pop-up browser window or in mobile applications as a WebView.

Note that the KYC process requires access to a camera. If the user's device does not have access to a camera or if the user requests it, a portion of the process may handoff to the user's phone.

Steps:

  1. Sign up as Dinari partner and obtain an API key.

  2. Check the user wallet's KYC status with the Get KYC Checks endpoint.

Any attempt that results in a status: pass will mean the wallet is enabled for trading and additional KYC is not required.

> curl -H "Authorization: Bearer {{API_TOKEN}}" \
https://api-enterprise.sbt.dinari.com/api/v1/web3/wallet/{{wallet_address}}/kyc/managed

[ 
  { 
    “status”: “pass”,
    “attempted_dt”: “2024-03-11T21:55:58.457160+00:00”,
    “expiration_dt”: “2024-03-12T21:55:58.457160+00:00”,
    “updated_dt”: “2024-03-11T21:55:58.457160+00:00”
  },
  {
    “status”: “pending”,
    “attempted_dt”: “2024-03-11T21:35:36.434789+00:00”,
    “expiration_dt”: “2024-03-12T21:35:36.434789+00:00”,
    “updated_dt”: “2024-03-11T21:35:36.511419+00:00”
  }
]
  1. For wallets that do not have a passing KYC check, create a new KYC request using the Verify Wallet for KYC endpoint. This will return a message and nonce that must be signed by the user wallet to prove their ownership of the wallet.

> curl -H "Authorization: Bearer {{API_TOKEN}}" \
  -X POST \
  https://api-enterprise.sbt.dinari.com/api/v1/web3/wallet/{{wallet_address}}/kyc/managed/nonce

{
  "message": "By signing this message, I affirm that I am the rightful and exclusive owner..."
  "nonce": "8b99591c-d32f-4d1a-96d9-374f38428138"
}
  1. Using the user's wallet, sign the message and submit it to the Request KYC for wallet endpoint. This will create a KYC request URL with Dinari.

curl -H "Authorization: Bearer {{API_TOKEN}}" \
  -X POST \
  -d '{ "signature": "{{MESSAGE_SIGNATURE}}", "nonce": "{{NONCE}}" }' \
  https://api-enterprise.sbt.dinari.com/api/v1/web3/wallet/{{wallet_address}}/kyc/managed
  
{
  "embed_url": "...",
  "expiration_dt": "2024-03-12T21:35:36.434789+00:00"
}
  1. Open the embed_url in a popup window (web) or a WebView (mobile).

After users complete this process, applications should reverify the status of the wallet as referenced in Step 2 before allowing any trades.

If users do not complete KYC within 24 hours, the KYC request will expire and you will have to create a new request.

Partner KYC

Partner KYC attestation is suitable for applications that either operate using an omnibus account or have their own identity verification process.

Examples include: exchanges, marketplaces, brokerage applications, etc.

Partner KYC is available for approved partners using certified identity verification vendors only. Please reach out to hello@dinari.com for the list of certified vendors or for more information.

Partner KYC docs coming soon!

Last updated