Point of sale webhooks

Optional backend confirmation alongside Intent API callbacks. Required for till-point QR integrations (no Intent callback on the till).

📘

This webhook is different from eCommerce webhooks.

When to use

PatternWebhook
App-to-app (Intent API)Optional - Intent callback is primary; webhook for server-side reconciliation
Till-point QRRequired - till receives outcome via webhook

Setup

Contact support with:

  • Your HTTPS webhook URL (Peach Payments only allows ports 80 and 443)
  • Optional custom request headers (for example, authentication tokens) - Peach Payments configures these on your endpoint

Point of sale webhooks use plain JSON - you do not need to decrypt them.

Peach Payments configures the webhook at merchant level. One configuration covers all terminals allocated to the merchant.

Delivery

Successful and declined webhooks are triggered immediately. Peach Payments attempts delivery five times, 30 seconds apart. If all attempts fail, Peach Payments moves the event to a dead-letter queue and can manually resubmit it.

Use webhookId to deduplicate deliveries. Use transaction.posData.merchantTransactionId to match the event to your order.

Reversals

If the terminal cannot show the Transaction successful screen because of connectivity loss, an app crash, or app closure, the result is unclear on the terminal and Peach Payments does not send a successful webhook.

Peach Payments reverses the payment within five minutes. The customer might still receive a successful payment notification on their phone during this period. Decide whether to wait for the reversal before you attempt a new payment. If no success is confirmed, you can retry the payment.

Refunds

Refund events use the transaction webhook flow. You can use the webhook as the single confirmation path for refund outcomes.

Success criterion

Apply the same logic as the Intent API response: check transactionType and isApproved on the webhook transaction payload.

OperationSuccess
SaletransactionType is SALE or SALE_WITH_CASHBACK and isApproved == true
RefundtransactionType == REFUND and isApproved == true
VoidUse void-specific fields on the payload (no isApproved)

Do not rely on transactionResult alone - always evaluate isApproved together with transactionType.

Key fields

FieldUse
transactionIdPeach Payments transaction UUID - refunds or voids
amountAmount in minor units
transaction.posData.merchantTransactionIdYour order reference
transactionTypeSALE, REFUND, and so on
isApprovedtrue / false

Match webhook events to till orders using merchantTransactionId in transaction.posData.

Payload fields

Fields that do not apply to a transaction can be absent.

Webhook envelope

FieldDescription
webhookIdUnique webhook delivery UUID. Use this value to deduplicate deliveries.
webhookTypeWebhook type. Transaction and refund events use transaction.
webhookTimeDate and time that Peach Payments creates the webhook, in ISO 8601.
terminalTerminal details.
networkTerminal network details.
routingAcquiring route details.
reversalFailureReasonReason that a reversal failed, when applicable.
transactionTransaction or refund result.

terminal

FieldDescription
idPeach Payments terminal UUID.
manufacturerSerialNumberTerminal serial number issued by the manufacturer.
externalSerialNumberExternal terminal serial number.
manufacturerTerminal manufacturer.
modelTerminal model.
firmwareVersionsMap of terminal firmware names and versions.
batteryPercentTerminal battery percentage.
location.latitudeTerminal latitude, when available.
location.longitudeTerminal longitude, when available.

network and routing

FieldDescription
network.typeNetwork type, such as Wifi or mobile data.
network.nameNetwork name.
network.signalStrengthNetwork signal strength.
network.networkLatencyMeasured network latency, when available.
routing.routeAcquiring route.
routing.tenantPaymentMethodRouteIdTenant payment method route UUID.
routing.configRoute-specific configuration.

transaction

FieldDescription
transactionIdPeach Payments transaction UUID.
originalTransactionIdOriginal transaction UUID for linked transactions.
transactionResultProcessing result, such as approved_confirmed, declined, or reversed.
errorMessageError description for a failed or declined transaction.
cardNotPresentRefundableStatusrefundable, not_refundable, or unknown.
transactionTypeTransaction operation type.
responseCodeTransaction response code details.
cardTransactionDataCard transaction, amount, merchant, and card details.
voidableUntilTimeLast time that a void can be accepted, in UTC.
transactionTimeTime Peach Payments receives the transaction, in UTC.
posDataMerchant metadata, including merchantTransactionId.
paymentMethodPayment method, such as card.
softPosPinTokenToken used when a SoftPOS PIN prompt is required.
refundBalanceDataOriginal amount, remaining balance, and refund history for refunds.

transaction.cardTransactionData

FieldDescription
rrnRetrieval Reference Number sent to the acquirer.
transactionLinkIdMastercard lifecycle-linking identifier, when available.
traceIdTransaction trace identifier.
stanSystem Trace Audit Number sent to the acquirer.
settlementDateExpected settlement date in yyyy-MM-dd format.
merchantMerchant name, city, and country code for the transaction.
amountAmount details.
cardCard details.
midAcquirer merchant identifier.
tidAcquirer terminal identifier.
approvalCodeApproval code issued by the authorising institution.
cryptogramEMV response cryptogram.
issuerTerminalDataIssuer response data returned to the terminal.

transaction.cardTransactionData.amount

FieldDescription
amountTotal amount in minor units.
currencyCodeISO 4217 currency code.
displayValueFormatted amount.
otherAmountSecondary amount in minor units, when applicable.
otherAmountDisplayValueFormatted secondary amount.

transaction.cardTransactionData.card

FieldDescription
maskedPanMasked primary account number.
binNumberBank identification number.
schemeCard scheme.
cardholderNameCardholder name.
expiryYearCard expiry year in yy format.
expiryMonthCard expiry month in MM format.
budgetPeriodCustomer-selected repayment period in months.
accountTypeAccount type value and description.
panEntryModeCard entry mode value and description.
cvmMethodCardholder verification method value and description.
cvmConditionCodeCardholder verification condition value and description.
cvmRuleResultCardholder verification result value and description.
applicationIdEMV application identifier.
applicationNameEMV application label.
terminalVerificationResultTerminal verification result.
transactionStatusInformationEMV transaction status information.
productTypeCard product type.
bankNameCard-issuing bank name.
countryCodeCard issuer ISO 3166 alpha-2 country code.
aipEMV Application Interchange Profile.
aipSupportsCDCVMWhether the card supports consumer-device verification.
tokenizedWhether the primary account number is tokenised.
cardHmacPeach Payments card HMAC.
cardFingerprintPeach Payments card fingerprint.

transaction.responseCode

FieldDescription
valueResponse code.
descriptionResponse description.
isoCodeDescriptionISO response description.
terminalOutcomeStringOutcome text for the terminal.
receiptStringOutcome text for the receipt.
explanationAdditional response explanation.
internalResponsePeach Payments response code and description.
acquirerResponseAcquirer response code, description, and route.
schemeResponseCard scheme response code.

transaction.refundBalanceData

FieldDescription
amountOriginal transaction amount.
balanceAmount still available to refund.
refundHistorySuccessful refunds, including transaction UUID, amount, and transaction time.

reversalFailureReason

Possible values are card_declined, customer_cancel, malfunction, suspected_fraud, timeout, unable_to_complete, unable_to_send, security_error, offline_declined, online_declined, partial, too_late_response, issuer_unavailable, and merchant_reversal.


Did this page help you?