Skip to main content

B2C (Business-to-Customer) Callbacks

Receive a signed notification when a payout reaches its final state. The callback is sent to the notify_url you supplied in the initiate-transfer request.

Payload Format

Field Reference

A failed payout means the funds debited at initiation are returned to your merchant wallet. Reconcile against the txnId you stored when initiating the transfer.

Verify, Then Process

Always verify the Ed25519 signature before trusting the payload — see Signature Verification for complete verification code in Node.js, Python, and Go. The examples below assume verifyCallback / verify_callback from that page.

Sample Payloads

Successful Payout

Failed Payout

Best Practices

Security
  • Always verify the Ed25519 signature against the raw body bytes before parsing JSON
  • Enforce a timestamp freshness window and dedupe on X-Request-ID
  • Treat the initiate-transfer 200 response as “accepted”, never as “paid” — only the completed callback confirms the recipient received funds
Reconciliation
  • Store the txn_id from every initiate-transfer response and match callbacks against it
  • Use your client_reference as the join key between your systems and GoPay’s
  • Alert on transfers that have neither a callback nor a resolution after the full retry window (roughly 45 minutes)