Skip to content
ZytePedevelopersDashboard
DocsBalances and transactions
Balances and transactions

Transaction status

Recover one merchant-owned transaction using its returned identifier.

Retrieve a transaction

External transaction status is the HMAC route for a single merchant-owned ledger transaction. Resolve transaction_id before signing its path.

Keep your references

The example includes internal_ref, external_ref, gateway_ref, gross/fees/net amounts, currency, category, method, status, payee information and timestamps. Amounts appear as decimal strings; do not silently treat every money field in the platform as an integer in paise.

Reconcile asynchronous updates

Callbacks are the primary update channel. Use status GET when a callback is delayed, missed or needs investigation. Payout-specific status uses the payout route; dashboard transaction listing is not a public merchant listing API.

Avoid assumed state machines

Different endpoints use paid, SUCCESS, completed, COMPLETED and processing in examples. The complete vocabulary, transitions and terminal-state guarantees require backend confirmation.

Request example

Choose Node.js, Python, PHP, Ruby, Java or cURL. Run signed requests on your backend. PHP, Ruby and Java include signing directly. Java requires JDK 17 or newer.

import { signedHeaders } from './signing.mjs';
const transaction_id = process.env.ZYTEPE_TRANSACTION_ID;
if (!transaction_id) throw new Error('Set ZYTEPE_TRANSACTION_ID to the returned identifier');
const path = `/api/v1/transactions/external/status/${encodeURIComponent(transaction_id)}`;
const query = '';
const body = ''; // GET requests have no body
const headers = signedHeaders({
  method: 'GET', path, query, body,
  keyId: process.env.ZYTEPE_API_KEY_ID,
  secret: process.env.ZYTEPE_API_SECRET,
});
const url = 'https://api.zytepe.com' + path + (query ? '?' + query : '');
const response = await fetch(url, { method: 'GET', headers });
if (!response.ok) throw new Error('Request failed: HTTP ' + response.status);
const result = await response.json();
// Store the returned identifiers securely. Do not log customer data.

Path, query and headers

transaction_idRequiredpath

Use the identifier returned by the corresponding creation operation.

Request body

No request body for GET.

Example response

JSON · response
{
  "success": true,
  "message": "Transaction status retrieved from ZytePe ledger.",
  "data": {
    "id": "ca9a58aa-d578-4fc2-a9f4-fb8d090d4b5f",
    "internal_ref": "ZY-INT-2042-AX19",
    "external_ref": "PAYOUT-2026-00041",
    "gateway_ref": "BANKREF98344210",
    "amount_gross": "1500.0000",
    "amount_fees": "15.0000",
    "amount_net": "1485.0000",
    "currency": "INR",
    "category": "DISBURSEMENT",
    "method": "IMPS",
    "status": "COMPLETED",
    "payee_id": "d965aa45-1952-4749-aa52-2bed21470ffd",
    "payee_name": "Aditi Traders",
    "failure_reason": null,
    "created_at": "2026-05-03T10:42:10.110Z",
    "updated_at": "2026-05-03T10:43:18.240Z"
  }
}