DocumentationGET List events
Events API
GET
/eventsList events
Every event Veyqo produced in this environment, newest first. Filter by `type`.
Use your sandbox environment to start. Understand error codes and payment statuses before handling a live payment.
List events
curl --request GET "https://api.veyqo.org/api/v1/events?per_page=5" \
--header "Authorization: Bearer $VEYQO_SECRET_KEY" \
--header "Accept: application/json"{
"success": true,
"data": [
{
"id": "evt_01M6EB66SC61Q3RQYAN0693DGM",
"type": "payment.succeeded",
"created_at": "2026-11-02T12:00:00+00:00",
"environment": "sandbox",
"data": {
"payment_id": "pay_01M6EB66SC61Q3RQYAN0693DGM",
"reference": "ORDER-1001",
"amount": 50000,
"amount_refunded": 0,
"currency": "NGN",
"status": "succeeded",
"customer": {
"email": "customer@example.com",
"name": "Ada Lovelace"
},
"provider": {
"name": "paystack",
"reference": "provider_reference_example"
},
"metadata": {
"order_id": "1001"
}
}
}
],
"meta": {
"page": 1,
"per_page": 25,
"total": 1,
"has_more": false
}
}Illustrative examples. Replace IDs and environment variables with your own values. Keep secret keys on your server.
Headers
Authorizationstringrequired- Bearer <secret-key>. This key determines your project environment and must stay on your server.
Acceptstringoptional- application/json
Endpoint
GET https://api.veyqo.org/api/v1/events
Server secret key required. Scope: events:read. The key determines the project and environment; no project-selection header is accepted.
Path and query parameters
| Parameter | Location | Required | Description |
|---|---|---|---|
| page | query | No | Page number, starting at 1. |
| per_page | query | No | Page size, default 25 and maximum 100. Maximum 100. |
| type | query | No | Exact supported event type. |
| payment_id | query | No | Veyqo payment ID, not your order reference. |
| created_after | query | No | Inclusive creation-time lower bound. Use an ISO 8601 date/time. |
| created_before | query | No | Inclusive creation-time upper bound. Use an ISO 8601 date/time. |
Response fields
idstringrequired- Deduplication key: the same ID as Veyqo-Event-Id.
typestringrequired- Normalized event type; see the webhook guide.
created_atstringrequired- Event creation timestamp. Format: date-time.
environmentstringrequired- Values: sandbox, live.
dataEventDatarequired- Payment snapshot when this event was recorded. Refund events also include refund_id and refund_amount.
data.payment_idstringrequired- Payment ID to retrieve and verify.
data.referencestringrequired- Merchant reference.
data.amountintegerrequired- Original minor-unit amount.
data.amount_refundedintegerrequired- Minor-unit refunded amount.
data.currencystringrequired- See the JSON example.
data.statusstringrequired- Values: created, pending, processing, succeeded, failed, cancelled, refunded, partially_refunded.
data.customerobjectrequired- See the JSON example.
data.customer.emailstringrequired- See the JSON example.
data.customer.namestringoptional- See the JSON example.
data.providerobjectrequired- See the JSON example.
data.provider.namestringrequired- Provider slug.
data.provider.referencestring | nullrequired- Provider reference.
data.metadataobject | arrayrequired- Your non-sensitive JSON metadata. Objects are recommended; do not store secrets or card details.
data.refund_idstringoptional- Present for refund events.
data.refund_amountintegeroptional- Present for refund events, in minor units.
data.refund_statusstringoptional- Present for refund events. Values: pending, succeeded, failed.
data.reasonstring | nulloptional- Present for refund events.
data is an array; meta contains page, per_page, total and has_more. These public API pagination fields use snake_case.
Errors and recovery
| Code | HTTP | Recovery | Retry policy |
|---|---|---|---|
| INVALID_API_KEY | 401 | Use a current kc_test_ or kc_live_ secret key on /api/v1. Use a pk_test_ or pk_live_ publishable key only on browser checkout. | After fixing credentials. |
| INSUFFICIENT_PERMISSION | 403 | Grant the required scope or use a suitably scoped key. Dashboard organization roles and staff permissions are separate. | After permission changes. |
| RATE_LIMIT_EXCEEDED | 429 | Honor Retry-After, use bounded exponential backoff with jitter, and reduce concurrent requests. Read X-RateLimit headers. | Yes, after Retry-After; preserve write idempotency. |
| METHOD_NOT_ALLOWED | 405 | Use the method documented for the endpoint, such as POST for verification and refunds. | After fixing the method. |
| INTERNAL_ERROR | 500 | Record X-Request-Id, timestamp and sanitized request context. Reconcile unknown payment outcomes before retrying a write; contact support if it persists. | Safe reads: bounded backoff. Writes: reconcile first. |
| VALIDATION_FAILED | 422 | Read error.details when present, correct the named fields and retry only after correction. Validation messages may describe state/capability errors without field details. | No automatic retry. |