Transactions

Retrieve a Transaction

Fetch the current status and details of a transaction using its ePay reference.

Retrieve a Transaction

GET /v1/transactions/:reference

Returns the current state of a transaction. Use this to poll for status updates or reconcile payments against your records.


Request

raw HTTP
npm install @e-pay/node
pip install epay
composer require epay-et/php-sdk
go get github.com/epay-et/go-sdk
curl https://api.e-pay.et/v1/transactions/PAB12CD3420260813 \
  -H "Authorization: Bearer sk_live_your_key_here"
import { Epay } from '@e-pay/node';

const epay = new Epay({ apiKey: process.env.EPAY_SECRET_KEY });

const transaction = await epay.transactions.retrieve(reference);

if (transaction.status === 'completed') {
const receipt = await epay.payments.verify(reference);
await fulfil(receipt);
}
const res = await fetch('https://api.e-pay.et/v1/transactions/PAB12CD3420260813', {
  headers: { Authorization: `Bearer ${process.env.EPAY_SECRET_KEY}` },
});

if (!res.ok) throw new Error(`ePay ${res.status}: ${await res.text()}`);

const transaction = await res.json();
from epay import Epay

epay = Epay() # reads EPAY_SECRET_KEY

transaction = epay.transactions.retrieve(reference)

if transaction["status"] == "completed":
receipt = epay.payments.verify(reference)
fulfil(receipt)
import os
import requests

res = requests.get(
    "https://api.e-pay.et/v1/transactions/PAB12CD3420260813",
    headers={"Authorization": f"Bearer {os.environ['EPAY_SECRET_KEY']}"},
    timeout=30,
)
res.raise_for_status()

transaction = res.json()
use Epay\Epay;

$epay = new Epay(); // reads EPAY_SECRET_KEY

$transaction = $epay->transactions->retrieve($reference);

if ($transaction['status'] === 'completed') {
    $receipt = $epay->payments->verify($reference);
fulfil($receipt);
}
$ch = curl_init('https://api.e-pay.et/v1/transactions/PAB12CD3420260813');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('EPAY_SECRET_KEY')],
]);

$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);

if ($status >= 400) {
    throw new RuntimeException("ePay {$status}: {$body}");
}

$transaction = json_decode($body, true);
transaction, err := client.Transactions.Retrieve(ctx, reference)
if err != nil {
	return err
}

// Nullable fields are pointers, so "absent" stays distinct from "empty".
if transaction.PaidAt != nil {
log.Println("paid at", \*transaction.PaidAt)
}

if transaction.Status == epay.StatusCompleted {
receipt, err := client.Payments.Verify(ctx, reference)
if err != nil {
return err
}
return fulfil(receipt)
}
req, _ := http.NewRequestWithContext(ctx, http.MethodGet, "https://api.e-pay.et/v1/transactions/PAB12CD3420260813", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("EPAY_SECRET_KEY"))

res, err := http.DefaultClient.Do(req)
if err != nil {
	return err
}
defer res.Body.Close()

if res.StatusCode >= 400 {
	return fmt.Errorf("ePay %d", res.StatusCode)
}

var transaction struct {
	Reference    string  `json:"reference"`
	Status       string  `json:"status"`
	Amount       string  `json:"amount"`
	CurrencyCode string  `json:"currencyCode"`
	PaidAt       *string `json:"paidAt"`
	CreatedAt    string  `json:"createdAt"`
}
if err := json.NewDecoder(res.Body).Decode(&transaction); err != nil {
	return err
}

Response

{
  "reference": "PAB12CD3420260813",
  "merchantReference": "order_123",
  "status": "completed",
  "amount": "250.00",
  "currencyCode": "ETB",
  "paidAt": "2026-08-13T11:47:00.000Z",
  "createdAt": "2026-08-13T11:30:00.000Z"
}

Path Parameters

Prop

Type


Response

Prop

Type


Transaction statuses

StatusDescription
pendingSession created; customer has not yet interacted with the checkout.
processingCustomer is actively on the checkout page.
completedPayment was successful.
failedPayment attempt failed.
cancelledTransaction was cancelled via the API or by the customer.

Errors

StatusDescription
401Missing or invalid API key.
404No transaction found for the given reference under your account.

Next: Transaction Timeline — see every event recorded against this transaction.

On this page