API reference

RDCPASS exposes eight services over one HTTP API. They share the same authentication, request fields, response envelope, request modes and error format, documented once on this page; each service page then covers its own fields and outcomes in full.

Base URLs

EnvironmentBase URL
Productionhttps://api.rdcpass.cd
Sandboxhttps://gateway.staging.rdcpass.cd

Credentials are issued per environment and never work across them — see Sandbox & environments.

Authentication

Every endpoint requires the full RDCPASS authentication stack — HMAC request signing, mutual TLS in production and AES-256-GCM payload encryption — with one exception: the OpenID Connect endpoints of Login with RDCPASS use standard OAuth/OIDC client authentication, so off-the-shelf OIDC libraries work unmodified. Read Authentication before your first request.

Services and endpoints

ServiceSingleBatchObject
KYC ValidationPOST /v1/kyc/validationsPOST /v1/kyc/validations/batcheskyc_validation
Face RecognitionPOST /v1/face/recognitionsPOST /v1/face/recognitions/batchesface_recognition
Age VerificationPOST /v1/age/verificationsPOST /v1/age/verifications/batchesage_verification
KYB VerificationPOST /v1/kyb/verificationsPOST /v1/kyb/verifications/batcheskyb_verification
AML & CTF ScreeningPOST /v1/aml/screeningsPOST /v1/aml/screenings/batchesaml_screening
Credit ScoringPOST /v1/credit/scoresPOST /v1/credit/scores/batchescredit_score
Fraud ReportingPOST /v1/fraud/reportsPOST /v1/fraud/reports/batchesfraud_report
Login with RDCPASSGET /v1/oidc/authorize · POST /v1/oidc/token——

Common request fields

Identity services accept the following fields. Service pages note any service-specific additions or restrictions.

FieldTypeRequiredDescription
identifierobjectYes*{ "type", "value" } — type is rdcpass_id (primary, e.g. COD-2103-0214-4937), passport, ceni, driving_licence or national_id. KYB uses rccm, id_nat or nif.
matchobjectNoClaims to compare: full_name, date_of_birth (YYYY-MM-DD), age. Each returns match, partial_match, no_match or not_provided.
purposestringYesOne of your application’s approved purposes: customer_onboarding, account_recovery, transaction_authorization, age_gating, regulatory_compliance, fraud_prevention, credit_assessment, employment_screening.
scopesstring[]NoSubset of the scopes granted to your application; defaults to all granted scopes. A scope not granted returns 403 scope_not_granted.
document_deliverystringNosigned_url (default) or base64 for document images and biometric files.
referencestringNoYour own identifier, echoed back. Required on every batch item.

* Face Recognition makes identifier optional (1:N identification); Fraud Reporting and AML & CTF Screening take a subject instead.

Common headers

HeaderDescription
Idempotency-KeyOptional on every POST. A UUID; a retry with the same key within 24 hours returns the original response.
PreferOptional. respond-async runs the request asynchronously and returns 202 with a job or batch object.

Response envelope

Every service result shares this envelope. Service-specific fields (match, similarity, risk_level, score, …) sit alongside it.

FieldTypeDescription
idstringUnique result identifier, prefixed by service (kyc_, face_, age_, kyb_, aml_, crs_, frd_).
objectstringThe object type, e.g. kyc_validation.
livemodebooleantrue in production, false in sandbox.
statusstringcompleted for synchronous results; asynchronous and batch items can be failed.
resultstringThe service outcome, e.g. verified, not_found, not_certified, match, no_match.
accountobjectThe RDCPASS account: rdcpass_id, status, certified, created_at, level_of_assurance. Absent when no identity was resolved.
kycobjectbasic (always, when resolved) plus one block per scope applied.
scopes_appliedstring[]Scopes whose data is included in this response.
scopes_withheldstring[]Scopes requested and granted but with no data on record — omitted, not an error.
created_atstringRFC 3339 timestamp of the result.
Response envelope (KYC Validation, after decryption)
{
  "id": "kyc_8d2f6a1c93",
  "object": "kyc_validation",
  "livemode": true,
  "reference": "cust-0001",
  "status": "completed",
  "result": "verified",
  "account": {
    "rdcpass_id": "COD-2103-0214-4937",
    "status": "active",
    "certified": true,
    "created_at": "2025-03-14T09:22:41Z",
    "level_of_assurance": "LOA3"
  },
  "kyc": {
    "basic": {
      "full_name": "Kabeya Mwamba Tshisekedi",
      "first_name": "Kabeya",
      "last_name": "Tshisekedi",
      "date_of_birth": "1988-04-12",
      "age": 38,
      "gender": "male",
      "nationality": "COD"
    },
    "phone_numbers": [
      { "number": "+243812345678", "operator": "Vodacom", "is_primary": true, "verified": true }
    ]
  },
  "scopes_applied": ["kyc.basic", "kyc.phone_numbers"],
  "scopes_withheld": ["kyc.addresses"],
  "purpose": "customer_onboarding",
  "created_at": "2026-09-26T10:15:02Z"
}

Errors

Errors use one format across the API, with the HTTP status and a stable code. The full list is in Errors.

403 Forbidden
{
  "error": "scope_not_granted",
  "message": "Scope kyc.biometrics.selfie is not granted to this application."
}

Request modes

Every verification service supports single and batch requests, each synchronously or asynchronously: up to 50 items in a synchronous batch and 10,000 in an asynchronous one, with results by webhook or from GET /v1/jobs/{job_id} and GET /v1/batches/{batch_id}/results. See Single, batch & async.

Versioning

The API version is part of the path (/v1). Within a version RDCPASS only makes backward-compatible changes: new endpoints, new optional request fields, new response fields, new enum values and new webhook event types. Build clients that ignore unknown fields and handle unknown enum values gracefully. Breaking changes ship as a new version, announced at least 12 months before the previous version is retired.

Service reference

Questions about your integration? Contact developer support