Merchant query resolution

How merchants raise and resolve operational queries with their acquirer and the Scan to Pay Operations team.

A merchant query is any operational issue a merchant raises after they've gone live — a transaction that didn't reconcile, a webhook that never arrived, a customer complaint about a charge they don't recognise, a portal access problem. This page documents the standard process for getting those queries resolved.

This is different from Customer disputes, which is the cardholder-initiated process flowing through banks. Merchant queries are merchant-initiated and typically operational rather than financial.

For the rules of the process, see Query resolution — business rules.


When to use this process

Query typeWhere to start
Transaction succeeded but no webhook receivedWebhooks recovery section first, then Support if unresolved
Webhook decryption failingSigning and verifying webhooks troubleshooting, then Support
API password lost / locked outAdmin Portal login recovery section
Customer claims they paid but you have no recordUse Querying transactions; if still missing, [email protected]
Settlement amount doesn't match your transaction totalAcquiring bank (the merchant's bank, not Scan to Pay)
Recurring system issue affecting many transactions[email protected] immediately
Account billing / commercial disputeYour account manager or [email protected]
Cardholder fraud claimThis is a Customer dispute, not a merchant query

The first step is usually to self-diagnose using the docs and APIs. If you can't resolve it, escalate to the right support team — see Support.


Standard query process

  1. Self-diagnose using the relevant Platform documentation (Webhooks, Errors, Transaction states, Querying transactions).
  2. Gather evidencetransactionId, merchantReference, the exact error message or unexpected behaviour, screenshots if relevant. The Support page request template lists what to include.
  3. Open a ticket via the support portal or email the right channel (operational queries → [email protected]; live incidents → [email protected]).
  4. Receive a case reference by reply email. Keep the subject line intact on follow-ups.
  5. Provide additional info as the support team investigates.
  6. Receive resolution — explanation, fix, or routing to the right party if the issue is with your acquirer rather than Scan to Pay.

Response times depend on priority. See Support — Priority levels and response times.


Query types and likely root cause

SymptomLikely causeFirst check
Transaction missing from your reconciliationWebhook missed or your handler erroredgetTransactionState lookup by transactionId
Customer reports successful payment but you didn't get a webhookWebhook handler returned non-200; transaction auto-reversedInspect your webhook receiver logs around that timestamp
You see a REVERSED you didn't triggerSame as above — auto-reversal due to missed webhook ackInspect 45-second-window violations
Webhook arrives but decryption failsNotification key drift between Scan to Pay and your systemRegenerate the key in Portal; redeploy
Customer paid with debit card; can't refundPASA rule — debit cards can't be refunded. Use reversal if within window, or EFT manuallyRefunds and reversals
API password "stopped working"Someone (you or a teammate) rotated it without coordinating the deployRegenerate and update your config
Transaction stuck in OFF_TO_BANK for hoursBank-side delay or platform issueEscalate to system support; provide transactionId

The patterns repeat — almost every operational query traces back to webhook acknowledgement, credential rotation, or bank communication. The platform's webhook reversal safety net and credential-rotation rules cause more support tickets than anything else.


Escalation

If a query isn't resolved in the time the priority allows (see Support) or you believe it's been deprioritised incorrectly:

  • Reply on the existing ticket asking for escalation
  • CC [email protected]
  • For P1 (critical, transaction-blocking) issues, call +27 10 449 1784 directly — phone is fastest for P1/P2

Don't open a duplicate ticket; that splits the conversation and slows resolution.


What's next