---
title: "Create a sandbox webhook test event"
method: POST
path: "/webhooks/test-events"
tags: ["Webhooks"]
---

# Create a sandbox webhook test event

`POST /webhooks/test-events`

## Request

- Base URL: `https://platform-api.homejourney.sg/v1`
- URL: `https://platform-api.homejourney.sg/v1/webhooks/test-events`
- Auth: HTTP bearer

Enqueues a sandbox-only webhook test event into the platform outbox for partner integration testing. External URL: `/v1/webhooks/test-events`. Current Next.js implementation path: `/api/platform/v1/webhooks/test-events`. This mutating route requires `Idempotency-Key`, always returns `livemode: false`, and never contains production PII, real contact details, direct delivery side effects, or AWS queue dependencies.

## Headers

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

## Request body

- PlatformWebhookTestEventRequest: Sandbox-only webhook test event request. The generated payload uses deterministic fixture data and never contains production PII.
  - `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': Additive platform webhook event type. Event-specific payload DTOs are added only when a workflow route or deterministic sandbox producer can back the contract.

## Response `202`

Sandbox webhook test event accepted into the outbox.

- PlatformWebhookTestEventResponse
  - `webhook_event` object, required
    - `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.
    - `created_at` string, date-time, required
    - `outbox_id` string, uuid, required
    - `dispatch_status` 'pending' | 'claimed' | 'delivered' | 'failed' | 'abandoned', required
    - `inserted` boolean, required
    - `payload_redaction_version` integer, 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)
