Manual Replay
In v1 there is no self-service replay endpoint for merchants. If your receiver was
down for longer than the auto-retry window or you accidentally rejected events with a
4xx (which is terminal — see retry policy),
the events you missed are still in our database with delivery_status = failed.
To get them re-delivered, contact TradeOn support with:
- Your merchant id (visible in your cabinet → Settings).
- The event id or list of event ids to replay (
X-Event-Idfrom the original delivery, or theidcolumn fromGET /api/v1/merchant/webhook-events). - A short note on why a replay is needed (audit trail).
Support will reset each event back to pending, mark the attempt as manual, and the
sender service picks it up on the next 5-second poll.
What manual replay does on our side
When support triggers a replay (admin endpoint
POST /api/v1/admin/merchants/{merchantId}/webhook-events/{eventId}/retry):
- The event row is reset to
delivery_status = pending,next_attempt_at = null,attempt_kind = manual, and thelast_response_*fields are cleared. - The sender’s normal claim → POST → outcome flow takes over on the next poll.
- A single delivery attempt is made. If it succeeds, the event is
delivered. If it fails — for any reason, transient or terminal — it goes straight tofailedagain. Manual replays do not re-enter the auto-retry chain (1m → 10m → 1h); one shot, then terminal.
The single-shot rule is intentional: support has already seen the failure, so silently auto-retrying a manual replay would just mask whatever the merchant is investigating.
What you’ll see
A replayed delivery is indistinguishable from a fresh one at the wire:
- Same
X-Event-Idand body as the original. - Fresh
X-TimestampandX-Signature(signed at the moment of replay). - Your endpoint must dedup on
(purchase_id, event)orprovider_uuid(dedup contract) and treat the second arrival as a no-op.
If you want the cabinet to show the replay history, the delivery_attempts counter
increments with each attempt — including the manual one — and last_response_code /
last_response_body reflect the most recent attempt.
Already-delivered events
You cannot replay a delivered event. Support’s tooling rejects the request with
409 Conflict to prevent accidentally re-firing settled state. If you genuinely need to
re-process a delivered event (e.g. you wiped your processing log), reconstruct
state from GET /api/v1/merchant/purchases and GET /api/v1/merchant/balance
rather than spoofing a webhook.