---
title: "Prepare a sandbox developer project showflat request for review"
method: POST
path: "/developers/current/projects/{id}/showflat-requests"
tags: ["Developers"]
---

# Prepare a sandbox developer project showflat request for review

`POST /developers/current/projects/{id}/showflat-requests`

## Request

- Base URL: `https://platform-api.homejourney.sg/v1`
- URL: `https://platform-api.homejourney.sg/v1/developers/current/projects/{id}/showflat-requests`
- Auth: HTTP bearer

Creates a deterministic sandbox showflat request when the authenticated automation client has `developers.showflat.write`. External URL: `/v1/developers/current/projects/{id}/showflat-requests`. Current Next.js implementation path: `/api/platform/v1/developers/current/projects/[id]/showflat-requests`. This mutating route requires `Idempotency-Key`, validates capacity/waitlist state and reminder consent, and may return a first-party console continuation when an eligible host grant exists. API clients cannot confirm or reject the review, and the route never sends SMS, WhatsApp, email, writes external calendars, routes live CRM payloads, exposes contact fields, mutates production feeds, or writes live scheduling records.

## Path parameters

- `id` string, required

## Headers

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

## Request body

- PlatformDeveloperShowflatRequestCreateRequest
  - `showflat_slot_id` string, required
  - `requester` object, required
    - `name` string, required
    - `phone` string, required
    - `email` string, email
  - `unit_interest` object
    - `unit_type_code` string
    - `budget_band` string
  - `source` object, required
    - `source_page` string, uri, required
    - `campaign` string
  - `reminder_consent` object, required
    - `consent_granted` true, required
    - `consent_text_version` string, required
  - `message` string

## Response `201`

Sandbox developer showflat request accepted.

- PlatformDeveloperShowflatRequestCreateResponse
  - `showflat_request` PlatformDeveloperShowflatRequest, required
    - `id` string, required
    - `sandbox_fixture_id` string, required
    - `project_id` string, required
    - `showflat_slot_id` string, required
    - `status` 'accepted' | 'waitlisted', required
    - `requested_at` string, date-time, required
    - `requested_slot` object, required
      - `slot_date` string, date, required
      - `starts_at` string, date-time, required
      - `ends_at` string, date-time, required
      - `timezone` 'Asia/Singapore', required
      - `public_status` 'available' | 'waitlist' | 'full', required
      - `waitlist_state` 'not_applicable' | 'waitlist_open' | 'waitlist_closed', required
    - `requester_redaction` object, required
      - `buyer_identity_exposed` false, required
      - `contact_details_exposed` false, required
      - `email_returned` false, required
      - `phone_returned` false, required
      - `raw_message_returned` false, required
    - `unit_interest` object, required
      - `unit_type_code` string, nullable, required
      - `budget_band` string, nullable, required
      - `raw_budget_exposed` false, required
    - `routing` object, required
      - `owner_routing_status` 'sandbox_routed', required
      - `assigned_destination_type` 'appointed_agency', required
      - `crm_owner_routing_metadata_present` true, required
      - `crm_write_performed` false, required
      - `live_crm_delivery_deferred` true, required
    - `reminder_consent` object, required
      - `consent_granted` true, required
      - `consent_text_version` string, required
      - `reminder_contact_redacted` true, required
      - `sms_whatsapp_email_deferred` true, required
    - `source` object, required
      - `source_page_domain` string, required
      - `campaign` string, nullable, required
      - `raw_source_url_exposed` false, required
    - `source_attribution` PlatformDeveloperAttribution, required
      - `source` 'official_developer_batch' | 'approved_homejourney_admin_correction' | 'trusted_partner_feed' | 'scraper_new_launches_fallback', required
      - `source_label` string, required
      - `source_updated_at` string, date-time, required
      - `last_verified_at` string, date-time, required
      - `freshness_status` 'current' | 'stale' | 'fallback', required
      - `source_precedence` 'official_developer_batch' | 'approved_homejourney_admin_correction' | 'trusted_partner_feed' | 'scraper_new_launches_fallback', required
      - `precedence_rank` 1 | 2 | 3 | 4, required
    - `safety` object, required
      - `buyer_identity_exposed` false, required
      - `contact_details_exposed` false, required
      - `raw_message_exposed` false, required
      - `raw_calendar_id_exposed` false, required
      - `broker_contact_exposed` false, required
      - `crm_owner_private_note_exposed` false, required
      - `external_calendar_write_performed` false, required
    - `side_effects` PlatformDeveloperSideEffects, required
      - `production_feed_called` false, required
      - `live_callback_sent` false, required
      - `public_page_published` false, required
      - `live_new_launches_mutated` false, required
      - `sms_sent` false, required
      - `whatsapp_sent` false, required
      - `email_sent` false, required
      - `crm_write_performed` false, required
      - `calendar_write_performed` false, required
    - `livemode` false, required
    - `updated_at` string, date-time, required
  - `prepared_action` PlatformDeveloperShowflatPreparedAction
    - `action_id` string, required
    - `status` 'prepared', required
    - `required_scope` 'developers.showflat.write', required
    - `required_confirmation` 'first_party_app', required
    - `idempotency_required` true, required
    - `expires_at` string, date-time, required
    - `side_effects` object, required
      - `prepared_action_created` true, required
      - `action_prepared_event_created` true, required
      - `scheduling_changed` false, required
      - `calendar_write_performed` false, required
      - `crm_write_performed` false, required
      - `contact_data_exposed` false, required
    - `safety` object, required
      - `delegated` false, required
      - `api_confirmation_allowed` false, required
      - `api_rejection_allowed` false, required
    - `continuation` object, required
      - `url` string, uri, required
      - `handoff_required` true, required
      - `reason` 'first_party_confirmation_required', required
    - `principal` Principal, required (unresolved $ref)
  - `showflat_request_boundary` object, required
    - `sandbox_only` true, required
    - `idempotency_required` true, required
    - `capacity_limit_checked` true, required
    - `waitlist_state_checked` true, required
    - `reminder_consent_required` true, required
    - `raw_contact_fields_returned` false, required
    - `buyer_identity_returned` false, required
    - `sms_whatsapp_email_deferred` true, required
    - `external_calendar_write_deferred` true, required
    - `crm_owner_routing_metadata_present` true, required
    - `crm_delivery_write_deferred` true, required
    - `live_promotion_required` true, required
  - `livemode` false, required
  - `idempotency_key_hash` string, 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)
