PindoDocs
Web AppWeb

Verify (2FA)

PindoVerify sends a PIN to a user's phone and validates that they received it, supporting two-factor authentication, passwordless sign-in, and number validation.

Generate a PIN

POST/v1/sms/verify

Send a PIN to a phone number under your brand name.

FieldTypeDescription
brandrequiredstringYour brand name, shown to the user in the PIN message.
numberrequiredstringRecipient in international format, e.g. +250781234567.
curl -X POST \
  https://api.pindo.io/v1/sms/verify \
  -H 'Authorization: Bearer your-token' \
  -H 'Content-Type: application/json' \
  -d '{
    "brand": "PindoTest",
    "number": "+250781234567"
  }'

On success, you'll receive a request_id. Hold on to it to check the code later.

{
  "message": "success",
  "network": "63510",
  "remaining_balance": 487.49,
  "request_id": 4
}

Verify a PIN

POST/v1/sms/verify/check

Submit the code your user entered along with the request_id from the previous step.

FieldTypeDescription
coderequiredstringThe PIN the user entered.
request_idrequiredintegerThe id returned when the PIN was generated.
curl -X POST \
  https://api.pindo.io/v1/sms/verify/check \
  -H 'Authorization: Bearer your-token' \
  -H 'Content-Type: application/json' \
  -d '{ "code": "752623", "request_id": 4 }'
{
  "message": "success",
  "remaining_balance": 487.49,
  "request_id": 4
}

Status & cancel

Check the current state of a verification with GET /v1/sms/verify/status/:request_id, or cancel one in progress with PUT /v1/sms/verify/cancel/:request_id.

curl -X GET \
  https://api.pindo.io/v1/sms/verify/status/:request_id \
  -H 'Authorization: Bearer your-token'

Try it

Interactive PlaygroundGenerate a PIN then verify it — two-step flow
cURL
curl -X POST \
  https://api.pindo.io/v1/sms/verify \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "brand": "PindoTest",
    "number": "+250781234567"
  }'