Skip to content

Claim Verification

After claim creation, the voucher owner receives a 6-digit OTP. Submit that OTP to verify and finalize the claim.

Flow

Endpoint

POST /merchant-api/claims/:id/verify

Headers

HeaderRequiredDescription
X-API-KeyYesMerchant API credential.
X-TimestampYesISO timestamp used for signature verification.
X-SignatureYesBase64 Ed25519 signature for the request.
Idempotency-KeyYesRequired idempotency key for safe retries.
X-Correlation-IdNoOptional correlation id for multi-step tracing.
User-AgentNoOptional client identifier.

Path Parameters

ParameterTypeRequiredRules
idnumberYesPositive integer claim id.

Request Body

FieldTypeRequiredRules
otpstringYesExactly 6 digits.

Example Request

bash
curl -X POST "$API_BASE_URL/merchant-api/claims/7721/verify" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $MERCHANT_API_KEY" \
  -H "X-Timestamp: 2026-04-29T12:00:00.000Z" \
  -H "X-Signature: $MERCHANT_SIGNATURE" \
  -H "Idempotency-Key: 3323184b-9530-40bc-8cca-b90ae7bb7fa8" \
  -H "X-Correlation-Id: red_01HWJ9S8E4Y9G7E4F6N5Q2P3Z8" \
  -d '{
    "otp": "123456"
  }'

Completed Response

json
{
  "status": "COMPLETED",
  "redemption": {
    "id": 9801,
    "redeemedAmount": "50.00",
    "telebirrRef": "TB-240427-000125",
    "voucherRemainingBalance": "300.00",
    "voucherOriginalAmount": "500.00",
    "redeemedAt": "2026-04-27T08:03:24.000Z"
  }
}

Failed Response

json
{
  "status": "FAILED",
  "failure": {
    "reason": "Invalid or expired OTP.",
    "stage": "OTP_VERIFICATION"
  }
}

Response Codes

CodeMeaning
200Claim verification processed.
400Invalid payload, invalid claim id, missing/invalid required header, or OTP validation failure.
401Missing or invalid auth/signature headers.
403Access is forbidden, including IP allowlist failures.
404Claim or voucher not found.
409Idempotency conflict or request with same key already in progress.
503Settlement is still in progress. Retry after a short delay.
500Unexpected processing error.

Failure Handling

When status is FAILED, the response includes:

  • failure.reason for operator-readable details
  • failure.stage to identify failure point (OTP_VERIFICATION, WALLET_RESERVATION, TELEBIRR_SETTLEMENT)