API · scope verify_payment
Verify payment
Returns the current state of a payment. Call it when the customer returns, when a webhook arrives, or as a backup if a webhook was missed.
POST https://payment.yamin.bd/api/verify-payment
Content-Type: application/json
MHS-GUARANTEEPAY-API-KEY: YOUR_API_KEY
{ "pp_id": "k3J9x…" }
pp_id is the only field. Payment IDs from another brand return INVALID_PP_ID.
Response HTTP 200
{
"pp_id": "k3J9x…",
"full_name": "Rahim Uddin",
"email_address": "rahim@example.com",
"mobile_number": "01700000000",
"gateway": "bKash",
"amount": "500.00",
"fee": "0.00",
"discount_amount": "0.00",
"total": "500.00",
"local_net_amount": "500.00",
"currency": "BDT",
"local_currency": "BDT",
"metadata": { "order_id": "ORD-1001" },
"sender": "01711111111",
"transaction_id": "BK7A2C9XQ1",
"status": "completed",
"date": "Oct 01, 2026 10:24 AM"
}
| Field | Meaning |
|---|---|
status | Lowercase status. See statuses. |
amount | Amount you requested, in currency. |
fee / discount_amount | Gateway fee added and discount removed at checkout. |
total | amount + fee − discount_amount. |
local_net_amount / local_currency | What the customer actually paid in the gateway's currency. |
transaction_id | Gateway / MFS transaction ID (TrxID). |
sender | Payer account or number, when known. |
metadata | Exactly what you sent at create time. |
Before you fulfil, check that:
statusis exactlycompleted.metadata.order_idmatches the order you are about to fulfil. This stops someone reusing another paidpp_id.amountandcurrencymatch what the order costs.- You have not already fulfilled this order. Store the
pp_idand make your handler idempotent.