Rialto

KYC & Accreditation

User verification flows for Know Your Customer and accredited investor checks.

Users must complete KYC (Know Your Customer) verification before subscribing to offerings. Accredited investor verification is required for certain offering types. Both flows are session-based: create a session, direct the user to a hosted verification page, and receive the result via webhook or polling.

All endpoints below require a Rialto access_token (obtained via token exchange).

KYC Flow

How It Works

  1. Your backend creates a KYC session
  2. Redirect or embed the returned session_url for the user
  3. User completes identity verification through the hosted flow
  4. Session progresses through states automatically
  5. You are notified via webhook or poll for the result

Creating a KYC Session

curl -X POST https://api.rialto.com/identity/kyc-sessions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <rialto_access_token>" \
  -d '{
    "redirectUrl": "https://yourapp.com/kyc-callback"
  }'

redirectUrl is optional -- if provided, the user is redirected there after completing verification.

Response (201):

{
  "success": true,
  "data": {
    "id": "a1b2c3d4-...",
    "user_id": "70000000-...",
    "org_id": "550e8400-...",
    "session_url": "https://verify.rialto.com/kyc/a1b2c3d4-...",
    "redirect_url": "https://yourapp.com/kyc-callback",
    "status": "awaiting_input",
    "identity_check": "not_attempted",
    "document_check": "not_attempted",
    "flags": [],
    "created_at": "2026-03-15T10:30:00.000Z",
    "updated_at": "2026-03-15T10:30:00.000Z"
  }
}

Only one active (non-terminal) KYC session is allowed per user at a time.

KYC Session Statuses

StatusDescriptionTerminal?
awaiting_inputWaiting for user to submit identity infoNo
pii_submittedIdentity info submitted, awaiting verificationNo
processingDocument scan / identity check in progressNo
approvedIdentity verified successfullyYes
deniedIdentity verification failedYes
requires_reviewNeeds manual review by Rialto staffNo
expiredSession timed outYes
errorUnrecoverable processing errorYes

Check Statuses

Each session has identity_check and document_check fields:

Check StatusMeaning
clearCheck passed
failedCheck failed
unverifiedCould not verify
not_attemptedCheck not yet run
pendingCheck in progress

Checking KYC Status

# Get a specific session
curl https://api.rialto.com/identity/kyc-sessions/<session_id> \
  -H "Authorization: Bearer <rialto_access_token>"

# List all sessions for the authenticated user
curl https://api.rialto.com/identity/kyc-sessions/user \
  -H "Authorization: Bearer <rialto_access_token>"

KYC Webhook Events

Subscribe to these events via the webhooks API:

EventWhen it fires
kyc.session.createdSession created
kyc.session.pii_submittedUser submitted identity info
kyc.session.processingVerification in progress
kyc.session.approvedVerification passed
kyc.session.deniedVerification failed
kyc.session.requires_reviewFlagged for manual review

Accreditation Flow

How It Works

  1. Your backend creates an accreditation session
  2. Direct the user to the returned session_url
  3. User selects a verification method and submits documentation
  4. For self-certification as non-accredited: completes immediately
  5. For documentation review: requires admin review
  6. You are notified via webhook or poll for the result

Creating an Accreditation Session

curl -X POST https://api.rialto.com/identity/accreditation-sessions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <rialto_access_token>" \
  -d '{
    "verificationMethod": "documentation_review",
    "redirectUrl": "https://yourapp.com/accreditation-callback"
  }'

Both fields are optional:

  • verificationMethod: "self_certification" (default) or "documentation_review"
  • redirectUrl: Where to redirect the user after completion

Response (201):

{
  "success": true,
  "data": {
    "id": "b2c3d4e5-...",
    "status": "pending",
    "session_url": "https://verify.rialto.com/accreditation/b2c3d4e5-...",
    "redirect_url": "https://yourapp.com/accreditation-callback",
    "accreditation_verification_method": "documentation_review",
    "created_at": "2026-03-15T10:30:00.000Z",
    "updated_at": "2026-03-15T10:30:00.000Z"
  }
}

Only one active (non-terminal) accreditation session is allowed per user at a time.

Verification Methods

MethodHow it works
self_certificationUser declares their status. Non-accredited completes immediately (approved). Accredited goes to submitted for review.
documentation_reviewUser uploads proof documents. Always goes through admin review for accredited status.

Accreditation Session Statuses

StatusDescriptionTerminal?
pendingInitial state, user has not submittedNo
submittedUser submitted, awaiting admin reviewNo
under_reviewAdmin is reviewingNo
more_info_neededAdmin requested additional informationNo
approvedAccreditation verifiedYes
deniedAccreditation deniedYes
expiredSession timed outYes

Accreditation Statuses

When approved, users receive one of these accreditation statuses:

StatusDescription
accreditedAccredited investor
non_accreditedNot accredited
qualified_purchaserQualified purchaser (QP)
qualified_clientQualified client (QC)
expiredAccreditation expired

Accreditation Bases

The basis for accreditation:

BasisDescription
incomeIncome-based accreditation
net_worthNet worth-based
license_7_65_82Series 7, 65, or 82 license holder
entityEntity-based accreditation
not_accreditedNot accredited

Uploading Documents

For documentation_review sessions, upload proof documents:

curl -X POST https://api.rialto.com/identity/accreditation-sessions/<session_id>/documents \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <rialto_access_token>" \
  -d '{
    "type": "income_proof",
    "fileName": "tax-return-2025.pdf",
    "content": "<base64-encoded-file>",
    "contentType": "application/pdf"
  }'
FieldRequiredDescription
typeYesincome_proof, net_worth_proof, license_proof, or entity_proof
fileNameYesOriginal file name
contentYesBase64-encoded file content
contentTypeNoMIME type (defaults to application/pdf)

Max file size: 10 MB

Checking Accreditation Status

# Get a specific session
curl https://api.rialto.com/identity/accreditation-sessions/<session_id> \
  -H "Authorization: Bearer <rialto_access_token>"

# List all sessions for the authenticated user
curl https://api.rialto.com/identity/accreditation-sessions/user \
  -H "Authorization: Bearer <rialto_access_token>"

Accreditation Webhook Events

EventWhen it fires
accreditation.session.createdSession created
accreditation.document.uploadedUser uploaded a document
accreditation.session.submittedUser submitted for review
accreditation.session.more_info_neededAdmin requested more info
accreditation.session.approvedAccreditation approved
accreditation.session.deniedAccreditation denied

Token Claims After Verification

After KYC and accreditation are completed, subsequent Rialto tokens include updated claims:

EventClaim updated
KYC approvedkyc_completed = true
Accreditation approvedaccredited = true, accreditation_verified = true

Use these claims to gate features in your application -- for example, only allow users with kyc_completed = true and accredited = true to subscribe to regulated offerings.

Typical User Journey

1. Token Exchange     → User gets Rialto access token
2. Create KYC Session → User verifies identity
3. KYC Approved       → kyc_completed = true in token
4. Create Accreditation Session → User proves accreditation
5. Accreditation Approved → accredited = true in token
6. User can now subscribe to offerings

On this page