---
title: "Replay a webhook delivery"
method: POST
path: "/webhooks/deliveries/{id}/replay"
tags: ["Webhooks"]
---

# Replay a webhook delivery

`POST /webhooks/deliveries/{id}/replay`

## Request

- Base URL: `https://platform-api.homejourney.sg/v1`
- URL: `https://platform-api.homejourney.sg/v1/webhooks/deliveries/{id}/replay`
- Auth: HTTP bearer

Enqueues a sandbox-only webhook delivery replay into the platform DB outbox after write authorization, idempotency, and current-client ownership checks, then returns the current retry policy. External URL: `/v1/webhooks/deliveries/{id}/replay`. Current Next.js implementation path: `/api/platform/v1/webhooks/deliveries/[id]/replay`. This mutating route requires `webhooks.write` and `Idempotency-Key`. It never direct-sends webhooks, pushes AWS queues, exposes payloads, response bodies, response headers, raw endpoint URLs, signing secrets, or signing-secret digests. Live deliveries and deliveries without retained outbox payloads return a sanitized `webhook_replay_not_available` problem.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Correlation-Id` string
- `Idempotency-Key` string, required

## Response `202`

Sandbox webhook delivery replay accepted into the outbox.

- PlatformWebhookDeliveryReplayResponse: Sandbox webhook delivery replay enqueue response. The API creates a DB outbox replay record only; it does not direct-send webhooks or expose payloads, response evidence, endpoint URLs, or signing secrets.
  - `replay` object, required
    - `delivery_id` string, uuid, required
    - `source_event_id` string, required
    - `replay_event_id` string, required
    - `event_type` 'listing.updated' | 'viewing.requested' | 'viewing.status_changed' | 'agent.lead_created' | 'agent.lead_status_changed' | 'agency.member_changed' | 'agency.listing_distribution_changed' | 'listing_feed.status_changed' | 'site.published' | 'site.form_submitted' | 'site.scheduling_requested' | 'site.crm_delivery_failed' | 'developer.project_published' | 'developer.inventory_updated' | 'developer.price_list_published' | 'developer.showflat_requested' | 'developer.crm_delivery_failed' | 'bank.application_created' | 'bank.document_requested' | 'bank.document_uploaded' | 'bank.application_submitted' | 'bank.status_changed' | 'bank.callback_failed' | 'official_source.refresh_started' | 'official_source.refresh_completed' | 'official_source.refresh_failed' | 'official_source.schema_changed' | 'official_source.freshness_degraded' | 'service.booking_status_changed' | 'service.payment_succeeded' | 'service.payment_failed' | 'provider.payable_created' | 'provider.payout_scheduled' | 'provider.payout_paid' | 'provider.payout_failed' | 'service.refund_created' | 'service.chargeback_opened' | 'service.settlement_adjusted' | 'service.settlement_reconciled' | 'finance.application_status_changed' | 'transaction.matter_created' | 'transaction.milestone_changed' | 'transaction.document_requested' | 'transaction.document_shared' | 'conveyancing.matter_status_changed' | 'partner.certification_submitted' | 'partner.certification_approved' | 'integration.installed' | 'integration.revoked' | 'consent.granted' | 'consent.revoked' | 'data_dispute.opened' | 'data_dispute.resolved' | 'usage.quota_exceeded' | 'billing.invoice_created' | 'abuse.credential_suspended' | 'api.deprecation_notice_created', required: Additive platform webhook event type. Event-specific payload DTOs are added only when a workflow route or deterministic sandbox producer can back the contract.
    - `outbox_id` string, uuid, required
    - `dispatch_status` 'pending' | 'claimed' | 'delivered' | 'failed' | 'abandoned', required
    - `inserted` boolean, required
    - `payload_redaction_version` integer, required
    - `replay_status` 'queued', required
    - `delivery_requeued` true, required
    - `webhook_sent` false, required
    - `payload_returned` false, required
    - `response_body_returned` false, required
    - `response_headers_returned` false, required
    - `signing_secret_returned` false, required
  - `retry_policy` PlatformWebhookRetryPolicy, required: Current webhook retry posture. Automatic queue dispatch is intentionally deferred; sandbox replay requires an Idempotency-Key and retained outbox payload evidence.
    - `policy_version` 'platform_webhook_retry_policy.v1', required
    - `automatic_retries_enabled` false, required
    - `automatic_dispatch` 'deferred_until_queue_dispatcher', required
    - `outbox_max_attempts` integer, required
    - `manual_replay` 'sandbox_only', required
    - `replay_idempotency` 'required', required
    - `live_replay_supported` false, required
    - `payload_retention_required_for_replay` true, required
  - `livemode` false, required
  - `request_id` string, required

## Other responses

- `400`: Request validation failed.
- `401`: Missing or invalid platform API key.
- `403`: Credential, environment, or scope is not allowed.
- `404`: Platform API feature or resource is not available.
- `409`: Idempotency key is in progress or conflicts with an earlier request body.
- `429`: Rate limit exceeded.
- `500`: Unexpected platform API failure.

---

[API](https://skmtc.dev/homejourney/apis/homejourney-platform-api.md) · [All operations](https://skmtc.dev/homejourney/apis/homejourney-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/homejourney/apis/homejourney-platform-api/revisions/a2c6fe063db1?raw)
