---
title: "List sandbox developer project units"
method: GET
path: "/developers/current/projects/{id}/units"
tags: ["Developers"]
---

# List sandbox developer project units

`GET /developers/current/projects/{id}/units`

## Request

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

Returns redacted restricted unit-stack metadata for one deterministic sandbox developer project when the authenticated automation client has `developers.inventory.read`. External URL: `/v1/developers/current/projects/{id}/units`. Current Next.js implementation path: `/api/platform/v1/developers/current/projects/[id]/units`. This read-only route exposes only hashed unit references, unit-type labels, floor bands, public availability labels, public price bands, source attribution, redaction-review evidence, and side-effect blocking. It never exposes raw unit numbers, stack identifiers, buyer identity, reservation notes, raw option state, unapproved hold status, exact price, internal discounts, internal margins, raw source files, source credentials, write controls, or live inventory feeds.

## Path parameters

- `id` string, required

## Query parameters

- `limit` integer
- `cursor` string
- `unit_type_code` string
- `status` 'available' | 'reserved' | 'sold' | 'blocked' | 'fallback_unverified'

## Headers

- `X-Correlation-Id` string

## Response `200`

Sandbox developer project response.

- PlatformDeveloperUnitListResponse
  - `project` PlatformDeveloperProjectReference, required
    - `id` string, required
    - `project_slug` string, required
    - `display_name` string, required
    - `status` 'active' | 'upcoming', required
    - `source_attribution` object, 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
  - `units` PlatformDeveloperUnit[], required
    - `id` string, required
    - `sandbox_fixture_id` string, required
    - `project_id` string, required
    - `unit_type_code` string, required
    - `unit_type_label` string, required
    - `bedrooms` integer, required
    - `floor_area_sqft` integer, required
    - `floor_band` string, required
    - `unit_reference` object, required
      - `public_unit_reference` string, required
      - `hashed_unit_reference` string, required
      - `raw_unit_number_exposed` false, required
      - `stack_identifier_exposed` false, required
    - `availability` object, required
      - `status` 'available' | 'reserved' | 'sold' | 'blocked' | 'fallback_unverified', required
      - `public_label` string, required
      - `raw_option_state_exposed` false, required
      - `buyer_identity_exposed` false, required
      - `reservation_notes_exposed` false, required
      - `unapproved_hold_status_exposed` false, required
    - `price` object, required
      - `currency` 'SGD', required
      - `public_label` string, required
      - `exact_price_exposed` false, required
      - `internal_discount_exposed` false, required
      - `internal_margin_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
    - `redaction_review` object, required
      - `scope_required` 'developers.inventory.read', required
      - `reviewed_at` string, date-time, required
      - `unit_number_redacted` true, required
      - `stack_identifier_redacted` true, required
      - `raw_source_file_redacted` true, required
      - `private_notes_redacted` true, required
    - `safety` object, required
      - `raw_unit_number_exposed` false, required
      - `stack_identifier_exposed` false, required
      - `buyer_identity_exposed` false, required
      - `reservation_notes_exposed` false, required
      - `raw_option_state_exposed` false, required
      - `unapproved_hold_status_exposed` false, required
      - `internal_discount_exposed` false, required
      - `internal_margin_exposed` false, required
      - `raw_source_files_exposed` false, required
      - `source_credentials_exposed` 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
  - `pagination` object, required
    - `limit` integer, required
    - `next_cursor` string, nullable, required
  - `unit_boundary` object, required
    - `restricted_unit_stack_metadata_only` true, required
    - `raw_unit_numbers_redacted` true, required
    - `stack_identifiers_redacted` true, required
    - `buyer_identity_redacted` true, required
    - `reservation_notes_redacted` true, required
    - `raw_option_state_redacted` true, required
    - `write_controls_deferred` true, required
    - `live_promotion_required` 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.
- `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)
