{
  "merchantId": "41a77f74-8b67-4f04-be50-c8dd5ad8836f",
  "customerId": "Abcam",
  "consumerId": "60513141-4d0f-4d3d-9c8a-cc1bd61f40fd",
  "merchantName": "My Shop",
  "paymentIdempotencyId": "ATOA1695808662681",
  "status": "COMPLETED",
  "statusDetails": null,
  "paidAmount": 25.50,
  "tipAmount": 0,
  "currency": "GBP",
  "createdAt": "2026-03-20T14:30:00.000Z",
  "updatedAt": "2026-03-20T14:31:00.000Z",
  "taxAmount": 0,
  "serviceAmount": 0,
  "transactionType": "CARD",
  "storeDetails": {
    "id": "d77e02d5-4e93-46cf-a8be-50da650df562",
    "address": "London",
    "locationName": "London Store"
  },
  "orderId": "POS-ORDER-001",
  "paymentRequestId": "9baa68d8-362a-4127-994d-2ea622ef35ee",
  "errorDescription": null,
  "redirectUrlParams": "{}",
  "splitBill": false,
  "notes": "POS terminal payment",
  "customFields": [
    {
      "fieldName": "Invoice Number",
      "value": "INV-2026-0042",
      "filledBy": "BUSINESS"
    }
  ],
  "eventType": "POS_PAYMENT_STATUS"
}

Delivers notifications for all POS terminal (Pax machine) activity:

  • Payments — Pay by Bank and card payments at the terminal.
  • Refunds (voids) — refunds from the POS terminal. Not delivered under REFUND_STATUS.

API or Dashboard refunds are delivered under REFUND_STATUS, not here.

Payment statuses

StatusDescription
COMPLETEDPayment processed successfully. Funds have been transferred to the merchant’s account.
FAILEDPayment was unsuccessful, including reversed transactions. The customer will need to retry.
EXPIREDPayment request expired before the customer completed the payment.

Refund statuses

StatusDescription
COMPLETEDRefund processed successfully. Funds have been credited to the customer’s account.
FAILEDRefund could not be processed. The refund may need to be retried.

Distinguish payment from refund deliveries by checking for refundId. Refund payloads use refundId and refundAmount instead of payment fields like tipAmount and storeDetails.

V2 signing required: Subscribing to POS_PAYMENT_STATUS requires a V2 signing secret. All POS webhooks are delivered with V2 signing — the X-Atoa-Signature header contains the HMAC-SHA256 signature and the body includes an eventType field.


Payloads


Custom fields

Custom fields collected during the terminal payment appear as a customFields array. For refunds, custom fields from the original payment are carried over.

FieldTypeDescription
fieldNamestringThe name of the custom field (e.g. “Invoice Number”)
valuestringThe value entered for the field
filledBystringWho provided the value — BUSINESS or PAYEE

Only present when custom fields were entered at the terminal. Not included in PAYMENTS_STATUS or EXPIRED_STATUS webhooks.


Signature verification

All POS_PAYMENT_STATUS webhooks use V2 signing. To verify the signature, use the X-Atoa-Signature header as described in the V2 Webhook Signing guide.