VeyqoDEVELOPERS
DocumentationGET Get Account Statement

SafeHaven Accounts API

GET/safehaven/accounts/{id}/statement

Get Account Statement

Get Account Statement through this project environment’s SafeHaven account. Uses snake_case fields and NGN minor units. Requires accounts:read.

GEThttps://api.veyqo.org/api/v1/safehaven/accounts/{id}/statementIntegration guide
Use your sandbox environment to start. Understand error codes and payment statuses before handling a live payment.
Get Account Statement
curl --request GET "https://api.veyqo.org/api/v1/safehaven/accounts/$PROVIDER_RESOURCE_ID/statement?page=0&limit=100" \
  --header "Authorization: Bearer $VEYQO_SECRET_KEY" \
  --header "Accept: application/json"
{
  "success": true,
  "data": []
}

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/safehaven/accounts/{id}/statement

Server secret key required. Scope: accounts:read. The key determines the project and environment; no project-selection header is accepted.

Path and query parameters

ParameterLocationRequiredDescription
idpathYesUse the ID returned when this resource was created.
pagequeryNoThis represents the position the results should begin from. 0 represents the first position.
limitqueryNoThis is the maximum number of accounts to be fetched for this request. Maximum 100.
from_datequeryNoThis is the start date of the period you wish to fetch the statement for.
to_datequeryNoThis is the end date of the period you wish to fetch the statement for.
typequeryNoThe type of transaction you wish to fetch for

Response fields

Errors and recovery

CodeHTTPRecoveryRetry policy
VALIDATION_FAILED422Read 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.
INVALID_API_KEY401Use 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_PERMISSION403Grant the required scope or use a suitably scoped key. Dashboard organization roles and staff permissions are separate.After permission changes.
RESOURCE_NOT_FOUND404Check the ID, project and environment. Do not guess another project’s IDs. An inactive payment link is also not-found.No blind retry.
PROVIDER_NOT_CONNECTED422Connect a provider, choose the project default, or explicitly pass provider. An account shared with another project still needs its own assignment here.After configuration changes.
PROVIDER_AUTHENTICATION_FAILED502The merchant must check/rotate the provider credentials in the dashboard. Do not expose those secrets to your application users.After credential correction; reconcile existing payment first.
PROVIDER_REQUEST_FAILED422Read the safe message, inspect the payment’s failure details and correct the request or provider account. Never repeatedly retry a business rejection.Only after resolving the cause.
PROVIDER_UNAVAILABLE503Check the existing payment and verify its state before starting another attempt. Retry safe reads with backoff; preserve operation identity for retried writes.Conditional: reconcile unknown outcomes first.
RATE_LIMIT_EXCEEDED429Honor Retry-After, use bounded exponential backoff with jitter, and reduce concurrent requests. Read X-RateLimit headers.Yes, after Retry-After; preserve write idempotency.
IDEMPOTENCY_KEY_REUSED409Reuse the exact original request to recover that operation, or use a new key only for a genuinely different operation.Do not retry a changed body with that key.
IDEMPOTENCY_IN_PROGRESS409Wait briefly, retry with the same key and unchanged request, then reconcile by reference if the result remains uncertain.Back off with jitter; preserve key/body.