Skip to content

Verify Session

Verify the status of a checkout session. Use this endpoint to confirm whether a payment has been completed.

GET /v1/checkout/session/:sessionId/verify

Required permission: checkout

Authentication

Requires an API key (public or secret).

Path parameters

ParameterTypeDescription
sessionIdstringThe checkout session ID

Example request

bash
curl https://api.zevpaycheckout.com/v1/checkout/session/ecc48011-e36e-4741-9b99-657f4a1ee86e/verify \
  -H "x-api-key: sk_test_your_secret_key"
js
const response = await fetch(
  'https://api.zevpaycheckout.com/v1/checkout/session/ecc48011-e36e-4741-9b99-657f4a1ee86e/verify',
  {
    headers: {
      'x-api-key': 'sk_test_your_secret_key',
    },
  }
);

const { data } = await response.json();
console.log(data.status); // "completed"
python
import requests

response = requests.get(
    "https://api.zevpaycheckout.com/v1/checkout/session/ecc48011-e36e-4741-9b99-657f4a1ee86e/verify",
    headers={"x-api-key": "sk_test_your_secret_key"},
)

data = response.json()["data"]
print(data["status"])  # "completed"
php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
  'https://api.zevpaycheckout.com/v1/checkout/session/ecc48011-e36e-4741-9b99-657f4a1ee86e/verify');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'x-api-key: sk_test_your_secret_key',
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = json_decode(curl_exec($ch), true);
$data = $response['data'];
echo $data['status']; // "completed"

Response

json
{
  "success": true,
  "data": {
    "session_id": "ecc48011-e36e-4741-9b99-657f4a1ee86e",
    "reference": "ZVP-CKO-S-abc123",
    "merchant_reference": "ORDER-12345",
    "status": "completed",
    "amount": 500000,
    "currency": "NGN",
    "customer_email": "customer@example.com",
    "payment_method": "bank_transfer",
    "paid_at": "2026-03-07T19:42:00.000Z"
  }
}
FieldTypeDescription
session_idstringThe checkout session ID
referencestringZevPay transaction reference
merchant_referencestring | nullYour custom reference (if provided during initialization)
statusstringSession status — see statuses
amountintegerAmount in kobo
currencystringCurrency code (e.g., "NGN")
customer_emailstringCustomer's email address
payment_methodstring | nullPayment method used ("bank_transfer" or "payid"), or null if not yet selected
paid_atstring | nullISO 8601 timestamp of when payment was confirmed, or null if not yet paid

Session statuses

StatusDescription
activeSession is active, awaiting payment
completedPayment has been received and confirmed
expiredSession expired (30-minute timeout)
failedPayment failed

Behavior

  • If the session is active but past its expires_at time, the status is automatically updated to expired before returning
  • The paid_at field is only populated when status is completed
  • This endpoint is idempotent — calling it multiple times returns the same result

Best Practice

Always verify payment status on your server before fulfilling orders. Do not rely solely on client-side callbacks.

Errors

StatusMessageCause
404Session not found.Invalid session ID
401Invalid API keyKey not found or inactive

Try it

API Playground
GEThttps://api.zevpaycheckout.com/v1/checkout/session/:sessionId/verify

ZevPay Checkout Developer Documentation