GET /api/v1/payments/{id}.
Status values
| Status | Terminal | Description |
|---|---|---|
pending | No | Payment created; waiting for customer (USSD, QR, card checkout) |
processing | No | Rare/legacy intermediate state — mobile payments normally go straight from pending to a terminal status |
completed | Yes | Payment successful |
failed | Yes | Payment failed |
cancelled | Yes | Cancelled before completion |
expired | Yes | Payment not completed within ~30 minutes of creation |
partially_refunded | — | Set after completion when a partial refund is applied |
refunded | — | Set after completion when the full amount has been refunded |
expired with webhook and callback delivery.
Webhook events per status
Webhooks fire on status transitions only — there is no webhook when the payment is created (pending is the initial state, not a transition):
| Status reached | Webhook event | Callback sent? |
|---|---|---|
processing (rare) | payment.processing | No |
completed | payment.completed | Yes |
failed | payment.failed | Yes |
cancelled | payment.cancelled | Yes |
expired | payment.expired | Yes |
No webhook is currently emitted for the refund statuses (
partially_refunded, refunded).Poll payment status
GET /api/v1/payments/{id} returns the current recorded status instantly — it is safe to poll every 2–5 seconds while the customer is on the USSD prompt.
API reference
GET /api/v1/payments/
reference is always your merchant reference; external_id is PayGrid’s upstream payment identifier — quote it in support requests.
Force status refresh
POST /api/v1/payments/{id}/refresh performs a live status check and updates the payment (also triggers webhooks if the status changed):
502 PROVIDER_ERROR if that check is temporarily unavailable. For routine polling prefer GET; PayGrid also refreshes pending payments automatically.
List payments
GET /api/v1/payments — query params page (default 1) and per_page (default 10, max 100; invalid values fall back to the defaults). Results are ordered newest first. Responses include a meta block:
API reference
GET /api/v1/payments

