Card Payment Status & Info

Retrieve the full state of a card transaction — including status, decline reason, amounts, and billing details.

Overview

Use the Payment Info endpoint to fetch the complete transaction state.

This endpoint is the source of truth when:

  • A webhook was not received (network issues, downtime)
  • You need to verify a transaction before fulfilling an order
  • You need full details for reconciliation or support

Webhooks should be your primary mechanism. Use polling only as a fallback.


Endpoint

GET /api/v1/payments/card/info/{id}

Retrieve full details of a card transaction.


Headers

HeaderValue
AuthorizationBearer {token}

Path Parameters

ParameterTypeDescription
idStringUnique transaction ID returned at creation time

Important Notes

Use /info, not /status

  • /info/{id} returns declineCode on failure
  • Status-only endpoints do not provide decline reasons

Key Response Fields

FieldTypeDescription
transactionIdStringUnique transaction identifier
requestIdStringIdempotency key used in the original request
midStringMerchant account ID
transactionStatusStringCurrent transaction status
declineCodeIntegerDecline reason (only when FAILED)
cardMaskStringMasked card number (e.g. 411111****1111)
cardHolderStringCardholder name
orderCurrencyStringRequested currency
processedCurrencyStringSettlement currency
orderAmountNumberRequested amount
processedAmountNumberProcessed amount (may differ due to FX)
conversionRateNumberApplied FX rate
callbackUrlStringWebhook endpoint for final status
billingDetailsObjectCustomer billing information
orderObjectOrder-related data
createdAtStringISO 8601 timestamp
metadataMapCustom key-value data

Transaction Status Lifecycle

StatusTerminalDescription
NEWNoTransaction created
PENDINGNoSent to processor
PROCESSINGNoActively processing
CUSTOMER_VERIFICATIONNoWaiting for 3DS completion
SUCCEEDYesPayment successful
FAILEDYesPayment declined (check declineCode)
REFUNDEDYesFully refunded
CHARGEBACKYesChargeback initiated
CANCELLEDYesTransaction cancelled

Stop polling once a terminal status is reached.


Polling Strategy (Fallback Only)

If webhook is not received:

  • Start polling after ~2 seconds
  • Use exponential backoff
  • Cap interval at ~30 seconds
  • Never poll more frequently than every 2 seconds
  • Stop when:
    • A terminal status is reached
    • Max retry limit is exceeded

Example Response

{
  "transactionId": "123456789",
  "requestId": "req-abc-123",
  "mid": "mid-001",
  "transactionStatus": "FAILED",
  "declineCode": 51,
  "cardMask": "411111****1111",
  "cardHolder": "John Doe",
  "orderCurrency": "USD",
  "processedCurrency": "USD",
  "orderAmount": 100,
  "processedAmount": 100,
  "conversionRate": 1,
  "callbackUrl": "https://merchant.com/webhook",
  "createdAt": "2026-04-24T10:15:30Z",
  "metadata": {
    "orderId": "ORD-123"
  }
}

Error Responses

HTTP StatusDescription
400Bad Request — invalid or missing parameters
401Unauthorized — invalid or expired token
404Not Found — transaction does not exist
500Internal Server Error — retry with backoff

Best Practices

  • Treat webhooks as the primary source of truth
  • Use /info only as a fallback
  • Always check declineCode when status is FAILED
  • Store transactionId and requestId for reconciliation
  • Stop polling immediately after terminal status