Peleza β€” Trust built on data
KYC Verification
On this page

Manual Submissions

Submit an individual national ID for manual verification in eligible countries (e.g. RW, TZ). Only country, type, and id are required; biodata and supporting files are optional. Fetch results with GET /api/v1/kyc/manual/{batch_token}. Use the sandbox sample IDs below when testing against the sandbox host.

Test data

Sandbox test data

Use these values against the sandbox host. Click a value to copy it.

Sandbox β€” Complete (RW)
Sandbox β€” Complete (TZ)
Sandbox β€” Processing (stays in_progress)
Sandbox β€” Unable to verify
More complete IDs (sandbox)

Submit verification

POST/api/v1/kyc/manual
{{baseUrl}}/api/v1/kyc/manual
HeaderTypeDescription
AuthorizationstringBearer YOUR_ACCESS_TOKEN from the OAuth client-credentials flow
Content-Typestringapplication/json

Body Parameters

ParameterTypeDescriptionRequired
countrystringISO country code β€” e.g. RW, TZrequired
typestringnational_id (only supported type today)required
idstringNational ID / document numberrequired
first_namestringGiven name. Omit the field, or send null / empty string.optional
middle_namestringMiddle name. Omit the field, or send null / empty string.optional
last_namestringFamily name. Omit the field, or send null / empty string.optional
date_of_birthstringDate of birth as YYYY-MM-DD. Must be in the past if provided.optional
genderstringMale, Female, M, or F (any case)optional
filesarraySupporting documents as base64 in the JSON body. Max 10 files, 10 MB decoded each.optional
files[].filenamestringOriginal file name β€” e.g. id-front.jpgoptional
files[].mime_typestringMIME type β€” e.g. image/jpegoptional
files[].contentstringRaw base64 or a data URIoptional

Sandbox sample β€” Complete (RW)

Sample request body for Sandbox sample β€” Complete (RW):

Sample dataSample request body
{
  "country": "RW",
  "type": "national_id",
  "id": "85940685"
}

Sample response for Sandbox sample β€” Complete (RW):

200 OKSample dataSample response
{
  "success": true,
  "response_code": 202,
  "message": "Manual verification submitted successfully",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "in_progress",
    "submitted_at": "2026-08-27T10:56:00.000000Z",
    "note": "This verification requires manual processing and is typically completed within 24-48 hours."
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Sandbox sample β€” Complete (TZ)

Sample request body for Sandbox sample β€” Complete (TZ):

Sample dataSample request body
{
  "country": "TZ",
  "type": "national_id",
  "id": "8594068345"
}

Sample response for Sandbox sample β€” Complete (TZ):

200 OKSample dataSample response
{
  "success": true,
  "response_code": 202,
  "message": "Manual verification submitted successfully",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "in_progress",
    "submitted_at": "2026-08-27T10:56:00.000000Z",
    "note": "This verification requires manual processing and is typically completed within 24-48 hours."
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Sandbox sample β€” Processing (RW)

Sample request body for Sandbox sample β€” Processing (RW):

Sample dataSample request body
{
  "country": "RW",
  "type": "national_id",
  "id": "MANUAL0001"
}

Sample response for Sandbox sample β€” Processing (RW):

200 OKSample dataSample response
{
  "success": true,
  "response_code": 202,
  "message": "Manual verification submitted successfully",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "in_progress",
    "submitted_at": "2026-08-27T10:56:00.000000Z",
    "note": "This verification requires manual processing and is typically completed within 24-48 hours."
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

With optional biodata and files (TZ sandbox)

Sample request body for With optional biodata and files (TZ sandbox):

Sample dataSample request body
{
  "country": "TZ",
  "type": "national_id",
  "id": "8594068345",
  "first_name": "Jane",
  "last_name": "Doe",
  "date_of_birth": "1991-06-12",
  "gender": "Female",
  "files": [
    {
      "filename": "id-front.jpg",
      "mime_type": "image/jpeg",
      "content": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU"
    }
  ]
}

Sample response for With optional biodata and files (TZ sandbox):

200 OKSample dataSample response
{
  "success": true,
  "response_code": 202,
  "message": "Manual verification submitted successfully",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "in_progress",
    "submitted_at": "2026-08-27T10:56:00.000000Z",
    "note": "This verification requires manual processing and is typically completed within 24-48 hours."
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Duplicate in-progress request (HTTP 200)

Sample request body for Duplicate in-progress request (HTTP 200):

Sample dataSample request body
{
  "country": "RW",
  "type": "national_id",
  "id": "85940685"
}

Sample response for Duplicate in-progress request (HTTP 200):

200 OKSample dataSample response
{
  "success": true,
  "response_code": 200,
  "message": "Manual verification already in progress",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "in_progress",
    "submitted_at": "2026-08-27T10:56:00.000000Z"
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Response Fields

FieldTypeDescription
successbooleanWhether the request succeeded
response_codenumberApplication response code (typically mirrors HTTP)
messagestringHuman-readable status message
dataobjectPayload for the verified resource
request_idstringUUID for support and audit trails
data.batch_tokenstringUUID β€” fetch results with GET /api/v1/kyc/manual/{batch_token}
data.typestringnational_id
data.statusstringin_progress on accept; complete or unable_to_verify after processing
data.submitted_atstringISO 8601 timestamp
data.notestringProcessing SLA note (returned on HTTP 202 only)

Fetch results

Fetch results using the batch_token from the submit response. On sandbox, use the sample IDs above β€” complete IDs return verification_result; MANUAL0001/MANUAL0002 stay in_progress; UNKNOWN999/UNKNOWN888 return unable_to_verify.

GET/api/v1/kyc/manual/{token}
{{baseUrl}}/api/v1/kyc/manual/{token}

Sandbox β€” Complete (RW Β· ${MANUAL_RW_COMPLETE_ID})

200 OKSample dataExample response
{
  "success": true,
  "response_code": 200,
  "message": "Status retrieved successfully",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "complete",
    "submitted_at": "2026-08-27T10:56:00.000000Z",
    "verification_result": {
      "first_name": "John",
      "last_name": "Doe",
      "other_name": null,
      "gender": "Male",
      "dob": "1990-01-08",
      "citizenship": "Rwandan",
      "id_number": "85940685",
      "valid": true,
      "name": "Doe John"
    }
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Sandbox β€” Complete (TZ Β· ${MANUAL_TZ_COMPLETE_ID})

200 OKSample dataExample response
{
  "success": true,
  "response_code": 200,
  "message": "Status retrieved successfully",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "complete",
    "submitted_at": "2026-08-27T10:56:00.000000Z",
    "verification_result": {
      "first_name": "Jane",
      "last_name": "Doe",
      "other_name": null,
      "gender": "Female",
      "dob": "1991-06-12",
      "citizenship": "Tanzanian",
      "id_number": "8594068345",
      "valid": true,
      "name": "Doe Jane"
    }
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Sandbox β€” Processing (RW Β· ${MANUAL_RW_PROCESSING_ID})

200 OKSample dataExample response
{
  "success": true,
  "response_code": 200,
  "message": "Status retrieved successfully",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "in_progress",
    "submitted_at": "2026-08-27T10:56:00.000000Z"
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Sandbox β€” Unable (RW Β· ${MANUAL_RW_UNABLE_ID})

200 OKSample dataExample response
{
  "success": true,
  "response_code": 200,
  "message": "Status retrieved successfully",
  "data": {
    "batch_token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "type": "national_id",
    "status": "unable_to_verify",
    "submitted_at": "2026-08-27T10:56:00.000000Z"
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}
FieldTypeDescription
data.batch_tokenstringUUID from the submit response
data.typestringnational_id
data.statusstringin_progress | complete | unable_to_verify
data.submitted_atstringISO 8601 timestamp
data.verification_resultobjectOmitted while in_progress or unable_to_verify; present when status is complete
data.verification_result.first_namestringVerified given name
data.verification_result.last_namestringVerified family name
data.verification_result.other_namestring|nullVerified other / middle name
data.verification_result.genderstringVerified gender
data.verification_result.dobstringVerified date of birth (YYYY-MM-DD)
data.verification_result.citizenshipstringCitizenship label, e.g. Rwandan
data.verification_result.id_numberstringVerified national ID number
data.verification_result.validbooleantrue when the ID was successfully verified
data.verification_result.namestringDisplay name β€” last_name first_name other_name

Set {{baseUrl}} to https://api.peleza.com (production) or https://sandbox.peleza.com (sandbox). Authenticated calls need a Bearer token from POST /api/v1/oauth/token.