Documentation menu

Verification

Verify one receipt directly or detect its provider.

Use POST /verify for automatic routing. Dedicated provider routes remain available when you already know the receipt source.

Universal verification

POST/verifyAny plan with credits
Detects CBE, Telebirr, CBE Birr, Dashen, or Bank of Abyssinia from the reference and optional secondary fields. M-Pesa is not auto-detected.
json
{
  "reference": "FT12AB34CD56",
  "suffix": "12345678",
  "phoneNumber": "251911223344"
}

Only reference is always required. Send only the secondary field required by the receipt.

typescript
import { veritas } from "@/lib/veritas";

const result = await veritas<{
  success: boolean;
  data?: unknown;
}>("/verify", {
  method: "POST",
  body: JSON.stringify({
    reference: "FT12AB34CD56",
    suffix: "12345678",
  }),
});

Dedicated routes

ProviderRoutesRequired input
CBEGET/POST /verify-cbereference; accountSuffix for bare legacy FT references
TelebirrPOST /verify-telebirrreference
DashenGET/POST /verify-dashenreference
AbyssiniaGET/POST /verify-abyssiniareference and five-digit suffix
CBE BirrGET/POST /verify-cbebirrreceiptNumber and 251 phoneNumber
M-PesaGET/POST /verify-mpesareference
typescript
import { veritas } from "@/lib/veritas";

const cbe = await veritas("/verify-cbe", {
  method: "POST",
  body: JSON.stringify({
    reference: "FT12AB34CD56",
    accountSuffix: "12345678",
  }),
});

const telebirr = await veritas("/verify-telebirr", {
  method: "POST",
  body: JSON.stringify({ reference: "ABC123DE45" }),
});

const dashen = await veritas("/verify-dashen", {
  method: "POST",
  body: JSON.stringify({ reference: "1234567890123456" }),
});

const abyssinia = await veritas("/verify-abyssinia", {
  method: "POST",
  body: JSON.stringify({
    reference: "FT12AB34CD56",
    suffix: "12345",
  }),
});

const cbeBirr = await veritas("/verify-cbebirr", {
  method: "POST",
  body: JSON.stringify({
    receiptNumber: "ABC123DE45",
    phoneNumber: "251911223344",
  }),
});

const mpesa = await veritas("/verify-mpesa", {
  method: "POST",
  body: JSON.stringify({ reference: "ABC123DE45" }),
});

Credit behavior

A single verification consumes one monthly verification credit before provider validation and upstream lookup. A malformed or unsuccessful provider response can therefore still consume a credit.

Response envelopes

CBE and M-Pesa commonly return top-level result fields. Telebirr wraps receipt data in data. Abyssinia uses an outer success envelope with provider data nested inside. Avoid one rigid response interface across every provider.