Skip to main content
This example demonstrates the Pods KYC flow from your backend. KYC is a pure server-to-server flow — no wallet signing. You onboard a user with one of the KYC flows, then poll GET /api/v1/kyc/status until the profile reaches a terminal state.
Keep PODS_API_KEY on your backend. Never expose it in a browser or mobile client.

Overview

This example covers:
  • Sumsub reusable KYC (Brazil Pix) — POST /api/v1/kyc/sumsub-share-token
  • External evidencePOST /api/v1/kyc/sessions then POST /api/v1/kyc/sessions/{kycUserId}/submit
  • Status pollingGET /api/v1/kyc/status

Prerequisites

  • Node.js 18+
  • Pods API key
  • For Sumsub: an approved Sumsub applicant + a freshly generated share token
  • For external evidence: liveness + document images you captured yourself

Installation

Environment Variables

Step-by-Step Walkthrough

1. Initialize API Client + status poller

2. Sumsub Reusable KYC (Brazil Pix)

Submit the fresh Sumsub share token your backend generated for the approved applicant. Pods returns a kycUserId — store it for status checks.

3. External Evidence

Create a session, then submit the identity evidence you captured. Each image is either inline base64 or an HTTPS url Pods fetches — pick one per image.
/submit does real work (creates the subaccount + uploads images) and can take ~20s. A timeout or non-JSON body does not mean failure — always poll /status before concluding. See External Evidence KYC.

Status values

createdprovider_pendingapproved / rejected / rejected_retryable / blocked. Money movement is enabled once status is approved and the capability flag you need (brlaEnabled for Brazil, usdEnabled for foreign USD) is true.

Running the Example

See the full runnable script: kyc-backend.js.

Next Steps

Pods Ramp

Move money once the wallet is approved

KYC Overview

All KYC flows and endpoints

External Evidence Guide

Full evidence payload and rejection handling

API Reference

View complete API documentation