Skip to main content
Version: 2.1

IPN Notifications

GLODIPAY delivers real-time payment results to your server via Instant Payment Notification (IPN) — an HTTP POST to the notificationUrl you provided when creating the transaction.

Method: POST
Content-Type: application/json

Signature 2.1: the body is {"signVersion": "2.1", "payload": "<JSON string>", "signature": "<base64>"}. Verify signature against the payload string with the GLODIPAY RSA Public Key, then parse payload — it contains the fields below. Accounts still on 2.0 receive the fields flat, with signature among them. See Signature.

Retry policy: If your server does not respond with {"returnCode":"100"} within 30 seconds, GLODIPAY will retry delivery. Your handler should be idempotent — the same notification may be delivered more than once.

What triggers an IPN: only the statuses listed in Statuses that trigger an IPN.


Statuses that trigger an IPN​

Payment​

statusSent when
successfulThe payment is completed. Sent once per transaction.
under_reviewFunds were received but need review — for example the amount paid differs from the order amount, or the processor reports the payment as pending. A later successful IPN may follow; failed will not.
failedThe payment failed. Not sent if the transaction has already been successful or under_review.

Refund and void​

statusSent when
refund_initiatedA refund is created — through the Refund API, by the processor, or as part of a chargeback.
refund_under_reviewThe processor reports the refund as pending (some processors only).
refund_successfulThe refund completed and covers the full paid amount.
refund_partially_successfulThe refund completed for part of the paid amount.
refund_failedThe refund failed or was rejected.
refund_partially_failedA partial refund failed.
void_initiated, void_under_review, void_successful, void_partially_successful, void_failed, void_partially_failedSame as the refund_* values, when the refund is processed as a void (same-day refund on accounts with void enabled).

Never sent​

incomplete, pending, processed, expired, error, canceled, rejected, released, documents_uploaded, chargeback_alert, chargebacked and dispute are never sent as IPNs. Use Query Transaction to read them.

A chargeback is reported through the refund IPNs: refund_initiated (if no refund exists yet), then refund_successful or refund_partially_successful for the charged-back amount.


Payload Fields​

FieldTypeRequiredDescription
merchantIdStringMMerchant's ID
transactionIdStringMGLODIPAY transaction ID (ULID)
transactionNumberStringMGLODIPAY human-readable transaction number
refStringMMerchant's orderRef
currencyStringMISO 4217 currency code
amountFloatMInvoice amount
paidAmountFloatOAmount actually charged to the buyer (including buyer fees)
settlementAmountFloatOAmount to be settled to the merchant
estimationSettlementAtISO 8601 datetimeOEstimated settlement datetime
feesJSONOFee breakdown. See fees object below
statusStringMTransaction status. See Status Values
statusCodeNumberMNumeric status code. See Status Codes
metadataJSONOKey-value pairs from the original checkout session
transactionDocumentsJSONOSupporting documents from the original session
paymentMethodDetailsJSONOPayment method used. See paymentMethodDetails object below
messageStringOHuman-readable status message
descriptorStringOTransaction descriptor
transactionCreatedAtISO 8601 datetimeMTransaction creation time in GLODIPAY system
originalTransactionCreatedAtISO 8601 datetimeMTransaction creation time at the PSP
signatureStringM2.0 only — on 2.1 the signature is sent next to payload. See Signature

fees Object​

FieldTypeDescription
buyerFloatBuyer-facing fee amount
sellerFloatMerchant fee amount
rollingFloatRolling reserve amount
operateFloatTotal operating fees (processor + GLODIPAY + partner)
estimationRollingReleaseAtISO 8601 datetimeEstimated rolling reserve release datetime

paymentMethodDetails Object​

FieldTypeDescription
displayNameStringPayment method label shown to the buyer
groupStringPayment method group type
familyStringPayment method family type
typeStringPayment method type (e.g. card, wallet)
{type}JSONOptional. Payment method-specific details. The key equals the type value. Currently only present for card payments when card details are available. See card object below

card Object (paymentMethodDetails.card)​

FieldDescription
nameCardholder name
firstSixDigitsFirst 6 digits of the card number (BIN)
lastFourDigitsLast 4 digits of the card number
expiryMonthExpiry month (MM)
expiryYearExpiry year (YY)
typeCard brand (visa, mastercard, amex, jcb, etc.)
issuerIssuing bank name (provider-dependent)
issuerCountryCodeISO 3166-1 alpha-2 country code of the issuing bank (provider-dependent)
fundingCard funding type: credit, debit, or prepaid (provider-dependent)
authorizationCodeAuthorization code from the issuer (provider-dependent)
clientIPCustomer IP address at the time of payment (provider-dependent)
checksAVS/CVC verification results object (provider-dependent)
threeDSecure3D Secure authentication details object (provider-dependent)

checks object fields (when present):

FieldDescription
addressLine1CheckAVS address line 1 check result
addressPostalCodeCheckAVS postal code check result
cvcCheckCVC/CVV check result

threeDSecure object fields (when present):

FieldDescription
authFlowAuthentication flow used
eciElectronic Commerce Indicator
result3DS authentication result
version3DS protocol version

Example IPN Payload (Successful Card Payment)​

{
"merchantId": "1100000123",
"transactionId": "01jza90dy6w82dfrrqvadn5vs4",
"transactionNumber": "2604-1713100800",
"ref": "ORDER-001",
"currency": "USD",
"amount": 100.00,
"paidAmount": 105.00,
"settlementAmount": 95.00,
"estimationSettlementAt": "2026-04-16T00:00:00+00:00",
"fees": {
"buyer": 5.00,
"seller": 5.00,
"rolling": 2.00,
"operate": 3.00,
"estimationRollingReleaseAt": "2026-05-14T00:00:00+00:00"
},
"status": "successful",
"statusCode": 6,
"paymentMethodDetails": {
"displayName": "Credit / Debit Card",
"group": "card",
"family": "card",
"type": "card",
"card": {
"name": "John Doe",
"firstSixDigits": "411111",
"lastFourDigits": "1111",
"expiryMonth": "01",
"expiryYear": "30",
"type": "visa",
"issuer": "Example Bank",
"issuerCountryCode": "US",
"funding": "credit",
"authorizationCode": "ABC123"
}
},
"metadata": { "orderId": "12345" },
"message": null,
"descriptor": "GLODIPAY*ORDER-001",
"transactionCreatedAt": "2026-04-14T10:00:00+00:00",
"originalTransactionCreatedAt": "2026-04-14T10:00:01+00:00"
}

2.1 accounts receive these fields as a JSON string in payload, alongside signVersion and signature; 2.0 accounts receive them flat with signature. See Signature.


Acknowledgement Response​

Your server must respond with the following JSON within 30 seconds. Any other response or a timeout is treated as a delivery failure and GLODIPAY will retry.

{
"returnCode": "100",
"description": "Received"
}
FieldTypeRequiredDescription
returnCodeStringMMust be "100" to acknowledge receipt
descriptionString(max:1500)OOptional description

Refund IPN​

Refund notifications use the same notificationUrl as the original transaction. The payload format differs — see Refund API for the refund-specific IPN payload fields.

Bookmarks

No bookmarks yet.
Hover over a heading and click to save a section.