ChapaChapa Docs

Verify Payout

Check the current status and details of a payout after it has been initiated.

The Verify Payout endpoint lets you check the current status and details of a payout (transfer) after it has been initiated.

Because transfers are asynchronous, a payout may not complete immediately. Verification helps you:

  • Confirm whether funds were successfully delivered
  • Check if a transfer is still processing
  • Identify failures, reversals, or blocks
  • Support customer and vendor inquiries

Always treat the transfer initialization response as temporary. Use verification or webhooks to confirm the final state.

Endpoint

GET /v2/payouts/{reference}/verify
Host: api.chapa.co

Authentication

Headers

NameRequiredDescription
AuthorizationYesBearer <PRIVATE_API_KEY>
Content-TypeYesapplication/json

Path Parameter

NameTypeRequiredDescription
referencestringYesPayout reference (merchant reference or Chapa reference)

Example Request

GET https://api.chapa.co/v2/payouts/PAYOUT_20251107_001/verify
Authorization: Bearer CHAPA_TEST_xxxxxxxxxxxxx
Content-Type: application/json

Example Response

{
  "status": "success",
  "message": "Payout verification successful",
  "data": {
    "merchant_reference": "PAYOUT_20251107_001",
    "amount": 150000,
    "currency": "ETB",
    "status": "completed",
    "account_number": "1001234567890",
    "account_name": "Abebe Kebede",
    "bank_slug": "ABY",
    "service_fee": 1500,
    "created_at": "2025-11-07T12:10:00Z",
    "updated_at": "2025-11-07T12:15:00Z",
    "processed_at": "2025-11-07T12:15:00Z",
    "reason": "Vendor payout for service"
  }
}

Response Fields

Transfer Object (data)

FieldTypeDescription
merchant_referencestringMerchant-generated reference
amountnumberTransfer amount
currencystringISO currency code
statusstringTransfer status
account_numberstringDestination account
account_namestringRecipient name
bank_slugstringBank or wallet identifier
service_feenumberFee charged
created_atstringTransfer creation timestamp
updated_atstringLast status update
processed_atstring | nullCompletion timestamp
reasonstringOptional description

Transfer Statuses

StatusMeaning
pendingTransfer created
processingTransfer in progress
completedFunds delivered
failedTransfer failed
blockedCompliance or risk issue
reversedFunds reversed
auth_neededAdditional authentication required
otp_neededOTP verification required

How to Use Verification

Typical Flow

  1. Initiate transfer (POST /v2/payouts)
  2. Receive initial pending status
  3. Wait for webhook or poll verification
  4. Act based on final status:
    • completed → mark payout successful
    • failed / reversed → notify user or retry
    • auth_needed / otp_needed → prompt for required action

Best Practices

  • Prefer webhooks for final status updates
  • Use verification as a fallback or manual check
  • Store all status changes for audit and reconciliation
  • Never assume completion immediately after creation

Common Errors

HTTPError CodeDescription
400MISSING_REQUIRED_FIELDReference is missing
404NOT_FOUNDPayout not found
500PROCESSING_FAILEDSystem issue fetching payout

Next Steps

On this page