Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers.flowestate.app/llms.txt

Use this file to discover all available pages before exploring further.

A project is the top-level container for a real-estate development. It groups units and stores shared metadata (location, price band, amenities).

List projects

GET /projects
Scope: projects:read. Paginated.

Query parameters

ParamNotes
limit, offset, sortOrder, querySee Pagination. query matches name, city, and promotora.
typeFilter by project type.
statusFilter by draft, published, or archived.
cityFilter by city (partial match).

Response 200

Paginated data[]. Each item includes a unitCount derived field.
{
  "id": "proj_...",
  "name": "Bavarian Forest",
  "type": "residential",
  "promotora": "Acme Developers",
  "city": "Punta Cana",
  "address": "Av. Estados Unidos #1",
  "description": "...",
  "country": "DO",
  "state": "La Altagracia",
  "operationType": "sale",
  "currency": "USD",
  "salePrice": 250000,
  "rentPrice": null,
  "minPrice": 180000,
  "maxPrice": 320000,
  "bedrooms": 2,
  "bathrooms": 2.5,
  "parkingSpots": 1,
  "builtArea": 110,
  "lotArea": 0,
  "status": "published",
  "image": "https://cdn.flowestate.app/...",
  "unitCount": 24,
  "createdAt": "2025-08-01T12:00:00.000Z",
  "updatedAt": "2026-04-29T12:00:00.000Z"
}

Create a project

POST /projects
Scope: projects:write.

Request body

Only name is required. You can include an optional units[] array to create initial units in the same call.
{
  "name": "Bavarian Forest",
  "type": "residential",
  "promotora": "Acme Developers",
  "city": "Punta Cana",
  "address": "Av. Estados Unidos #1",
  "description": "...",
  "country": "DO",
  "state": "La Altagracia",
  "operationType": "sale",
  "currency": "USD",
  "salePrice": 250000,
  "rentPrice": null,
  "bedrooms": 2,
  "bathrooms": 2.5,
  "parkingSpots": 1,
  "builtArea": 110,
  "lotArea": 0,
  "status": "draft",
  "units": [
    { "name": "A-101", "type": "apartment", "price": 250000, "area": 110, "status": "available" }
  ]
}
status: draft | published | archived (default draft).

Response 201

{
  "id": "proj_...",
  "name": "Bavarian Forest",
  "type": "residential",
  "city": "Punta Cana",
  "status": "draft",
  "unitCount": 1,
  "createdAt": "2026-04-29T18:04:15.000Z"
}

Webhook side effects

A project.created event is dispatched. If units[] was provided, a unit.created event also fires for each unit.

Get a project

GET /projects/{projectId}
Scope: projects:read. Includes the embedded units[] array with each unit’s id, name, type, price, area, status, and timestamps.

Update a project

PUT /projects/{projectId}
Scope: projects:write. All fields optional, must provide at least one.

Webhook side effects

A project.updated event is dispatched.

Delete a project

DELETE /projects/{projectId}
Scope: projects:write.
Deleting a project also deletes all its units. This is irreversible.

Response 200

{ "deleted": true, "id": "proj_..." }

Webhook side effects

A project.deleted event is dispatched.