Inquiries
Create an inquiry
POST /api/v1/inquiries
Anything your form collects beyond the fields below travels in metadata untyped, so the form can evolve without a contract change.
Request body
application/json, shaped as InquiryInput.
| Field | Type | Description |
|---|---|---|
| propertyId | string | Must be one of your published listings, so a typo fails loudly rather than creating an orphan. |
| firstName | string | max 100 chars |
| lastName required | string | max 100 chars |
| email required | max 200 chars | |
| phone | string | max 50 chars |
| checkIn | date | YYYY-MM-DD |
| checkOut | date | Must be after checkIn. YYYY-MM-DD |
| adults | integer | The tenants picker, one field per age band. 0–20 |
| children | integer | 0–20 |
| infants | integer | 0–20 |
| pets | boolean | |
| guestCount | integer | Deprecated: folded into adults. Send the age bands instead. 1–50 |
| message | string | max 10000 chars |
| locale | string | Which language they were reading. max 10 chars |
| source | string | Where the form lives. Defaults to website. max 50 chars |
| metadata | object | Anything else your form collects. At most 10 KB serialised. Travels untyped, so the form can evolve without a contract change. |
Response
201 { id: string }
Errors
Every failure is { error, message }; see Errors. A missing or expired bearer is a 401 on every endpoint
but the token exchange.
| Status | error | When |
|---|---|---|
| 400 | invalid_request | A bad field, with a message naming its path. An unknown or unpublished propertyId is a 400 too. |
| 429 | rate_limited | More than the organisation’s daily allowance (500 by default) in 24 hours. |
Notes
guestCountis still accepted and folded intoadults. It is deprecated; send the age bands.- An inquiry never blocks a day. It becomes a booking when staff convert it.