Ta strona pokazuje kontrakt API v1 wygenerowany z tego samego rejestru, z którego korzystają punkty końcowe. Opisy w dokumencie są po angielsku. Plik do wczytania w Postmanie, Insomni lub generatorze klienta: /api/v1/openapi.json
OpenAPI 3.1.0 · 1.1.0-beta · https://estalo.pl/api/v1
Ścieżki
GET/api/v1/me
Describe the calling API key
Odpowiedzi: 200, 400, 401, 402, 403, 429, 500
GET/api/v1/clients
Clients (buyers, sellers, landlords) of the office.
Requires scope clients:read. Ordered by id ascending; follow next_cursor until has_more is false.
| limit | query | integer | |
| cursor | query | string | next_cursor of the previous page. Valid only with the same filters. |
| created_gte | query | string (date-time) | created_at >= value (ISO 8601 with time zone). |
| created_lt | query | string (date-time) | created_at < value (ISO 8601 with time zone). |
| updated_gte | query | string (date-time) | updated_at >= value (ISO 8601 with time zone). |
| updated_lt | query | string (date-time) | updated_at < value (ISO 8601 with time zone). |
| include_archived | query | boolean | Include rows with status archived/closed. |
Odpowiedzi: 200, 400, 401, 402, 403, 429, 500
POST/api/v1/clients
Create a client
Requires scope clients:write and changes switched on for the workspace. The record is created as the key's creator, with the same rules as in the app.
| Idempotency-Key | header, wymagany | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: ClientCreate
Odpowiedzi: 201, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/clients/{id}
One client
Requires scope clients:read. 404 also when the record belongs to another office or is outside the key's visibility.
| id | path, wymagany | integer |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 429, 500
PATCH/api/v1/clients/{id}
Change a client
Requires scope clients:write and changes switched on for the workspace. Sparse: only the fields sent change; null clears a field where allowed.
| id | path, wymagany | integer | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: ClientUpdate
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
DELETE/api/v1/clients/{id}
Archive a client
Requires scope clients:write and changes switched on for the workspace. Result: archived.
| id | path, wymagany | integer | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/properties
Listings (offers) of the office. Listings in the trash are never returned.
Requires scope properties:read. Ordered by id ascending; follow next_cursor until has_more is false.
| limit | query | integer | |
| cursor | query | string | next_cursor of the previous page. Valid only with the same filters. |
| created_gte | query | string (date-time) | created_at >= value (ISO 8601 with time zone). |
| created_lt | query | string (date-time) | created_at < value (ISO 8601 with time zone). |
| updated_gte | query | string (date-time) | updated_at >= value (ISO 8601 with time zone). |
| updated_lt | query | string (date-time) | updated_at < value (ISO 8601 with time zone). |
Odpowiedzi: 200, 400, 401, 402, 403, 429, 500
POST/api/v1/properties
Create a property
Requires scope properties:write and changes switched on for the workspace. The record is created as the key's creator, with the same rules as in the app.
| Idempotency-Key | header, wymagany | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: PropertyCreate
Odpowiedzi: 201, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/properties/{id}
One property
Requires scope properties:read. 404 also when the record belongs to another office or is outside the key's visibility.
| id | path, wymagany | string (uuid) |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 429, 500
PATCH/api/v1/properties/{id}
Change a property
Requires scope properties:write and changes switched on for the workspace. Sparse: only the fields sent change; null clears a field where allowed.
| id | path, wymagany | string (uuid) | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: PropertyUpdate
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
DELETE/api/v1/properties/{id}
Move a property to the trash
Requires scope properties:write and changes switched on for the workspace. Result: trashed.
| id | path, wymagany | string (uuid) | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/deals
Sales: transactions joining a client to a listing. Commission and settlement fields are not exposed.
Requires scope deals:read. Ordered by id ascending; follow next_cursor until has_more is false.
| limit | query | integer | |
| cursor | query | string | next_cursor of the previous page. Valid only with the same filters. |
| created_gte | query | string (date-time) | created_at >= value (ISO 8601 with time zone). |
| created_lt | query | string (date-time) | created_at < value (ISO 8601 with time zone). |
| updated_gte | query | string (date-time) | updated_at >= value (ISO 8601 with time zone). |
| updated_lt | query | string (date-time) | updated_at < value (ISO 8601 with time zone). |
Odpowiedzi: 200, 400, 401, 402, 403, 429, 500
POST/api/v1/deals
Create a deal
Requires scope deals:write and changes switched on for the workspace. The record is created as the key's creator, with the same rules as in the app.
| Idempotency-Key | header, wymagany | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: DealCreate
Odpowiedzi: 201, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/deals/{id}
One deal
Requires scope deals:read. 404 also when the record belongs to another office or is outside the key's visibility.
| id | path, wymagany | string (uuid) |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 429, 500
PATCH/api/v1/deals/{id}
Change a deal
Requires scope deals:write and changes switched on for the workspace. Sparse: only the fields sent change; null clears a field where allowed.
| id | path, wymagany | string (uuid) | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: DealUpdate
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/events
Calendar events (meetings, presentations, calls, notary appointments).
Requires scope events:read. Ordered by id ascending; follow next_cursor until has_more is false.
| limit | query | integer | |
| cursor | query | string | next_cursor of the previous page. Valid only with the same filters. |
| created_gte | query | string (date-time) | created_at >= value (ISO 8601 with time zone). |
| created_lt | query | string (date-time) | created_at < value (ISO 8601 with time zone). |
| updated_gte | query | string (date-time) | updated_at >= value (ISO 8601 with time zone). |
| updated_lt | query | string (date-time) | updated_at < value (ISO 8601 with time zone). |
| start_gte | query | string (date-time) | start_time >= value (ISO 8601 with time zone). |
| start_lt | query | string (date-time) | start_time < value (ISO 8601 with time zone). |
Odpowiedzi: 200, 400, 401, 402, 403, 429, 500
POST/api/v1/events
Create a event
Requires scope events:write and changes switched on for the workspace. The record is created as the key's creator, with the same rules as in the app.
| Idempotency-Key | header, wymagany | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: EventCreate
Odpowiedzi: 201, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/events/{id}
One event
Requires scope events:read. 404 also when the record belongs to another office or is outside the key's visibility.
| id | path, wymagany | integer |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 429, 500
PATCH/api/v1/events/{id}
Change a event
Requires scope events:write and changes switched on for the workspace. Sparse: only the fields sent change; null clears a field where allowed.
| id | path, wymagany | integer | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: EventUpdate
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
DELETE/api/v1/events/{id}
Delete a event
Requires scope events:write and changes switched on for the workspace. Result: deleted.
| id | path, wymagany | integer | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/leads
Inquiries (leads) from portals, forms and e-mail import.
Requires scope leads:read. Ordered by id ascending; follow next_cursor until has_more is false.
| limit | query | integer | |
| cursor | query | string | next_cursor of the previous page. Valid only with the same filters. |
| created_gte | query | string (date-time) | created_at >= value (ISO 8601 with time zone). |
| created_lt | query | string (date-time) | created_at < value (ISO 8601 with time zone). |
| updated_gte | query | string (date-time) | updated_at >= value (ISO 8601 with time zone). |
| updated_lt | query | string (date-time) | updated_at < value (ISO 8601 with time zone). |
Odpowiedzi: 200, 400, 401, 402, 403, 429, 500
POST/api/v1/leads
Create a lead
Requires scope leads:write and changes switched on for the workspace. The record is created as the key's creator, with the same rules as in the app.
| Idempotency-Key | header, wymagany | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: LeadCreate
Odpowiedzi: 201, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/leads/{id}
One lead
Requires scope leads:read. 404 also when the record belongs to another office or is outside the key's visibility.
| id | path, wymagany | string (uuid) |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 429, 500
PATCH/api/v1/leads/{id}
Change a lead
Requires scope leads:write and changes switched on for the workspace. Sparse: only the fields sent change; null clears a field where allowed.
| id | path, wymagany | string (uuid) | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: LeadUpdate
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/tasks
Tasks and reminders.
Requires scope tasks:read. Ordered by id ascending; follow next_cursor until has_more is false.
| limit | query | integer | |
| cursor | query | string | next_cursor of the previous page. Valid only with the same filters. |
| created_gte | query | string (date-time) | created_at >= value (ISO 8601 with time zone). |
| created_lt | query | string (date-time) | created_at < value (ISO 8601 with time zone). |
| updated_gte | query | string (date-time) | updated_at >= value (ISO 8601 with time zone). |
| updated_lt | query | string (date-time) | updated_at < value (ISO 8601 with time zone). |
| due_gte | query | string (date-time) | due_date >= value (ISO 8601 with time zone). |
| due_lt | query | string (date-time) | due_date < value (ISO 8601 with time zone). |
Odpowiedzi: 200, 400, 401, 402, 403, 429, 500
POST/api/v1/tasks
Create a task
Requires scope tasks:write and changes switched on for the workspace. The record is created as the key's creator, with the same rules as in the app.
| Idempotency-Key | header, wymagany | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: TaskCreate
Odpowiedzi: 201, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
GET/api/v1/tasks/{id}
One task
Requires scope tasks:read. 404 also when the record belongs to another office or is outside the key's visibility.
| id | path, wymagany | string (uuid) |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 429, 500
PATCH/api/v1/tasks/{id}
Change a task
Requires scope tasks:write and changes switched on for the workspace. Sparse: only the fields sent change; null clears a field where allowed.
| id | path, wymagany | string (uuid) | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Treść żądania: TaskUpdate
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
DELETE/api/v1/tasks/{id}
Delete a task
Requires scope tasks:write and changes switched on for the workspace. Result: deleted.
| id | path, wymagany | string (uuid) | |
| Idempotency-Key | header | string | Unique per change, kept 24 h. A retry with the same key and body returns the first response with Idempotent-Replayed: true. |
Odpowiedzi: 200, 400, 401, 402, 403, 404, 409, 413, 415, 422, 429, 500
Schematy
Me
| Pole | Typ | Opis |
|---|---|---|
| data | object |
Pagination
| Pole | Typ | Opis |
|---|---|---|
| limit * | integer | |
| has_more * | boolean | |
| next_cursor * | string | null |
Error
| Pole | Typ | Opis |
|---|---|---|
| error * | object |
WebhookEvent
Body of a webhook POST. IDs only; fetch the record through the API.
| Pole | Typ | Opis |
|---|---|---|
| id * | string (uuid) | Event id. Deduplicate on this. |
| type * | "lead.created" | "lead.status_changed" | "lead.updated" | "client.created" | "client.updated" | "deal.created" | "deal.stage_changed" | "task.created" | "task.completed" | "event.created" | "property.created" | "property.updated" | |
| schema_version * | 1 | |
| sequence * | integer | Monotonic across Estalo; gaps are normal. |
| created_at * | string (date-time) | |
| organization_id * | string (uuid) | |
| data * | object |
Client
| Pole | Typ | Opis |
|---|---|---|
| id * | integer | |
| status * | string | null | new, contacted, meeting, active, lost, archived (open/closed are legacy twins). |
| type * | string | null | buyer, seller or landlord. |
| first_name * | string | null | |
| last_name * | string | null | |
| name * | string | null | |
| email * | string | null | |
| phone * | string | null | |
| interest * | string | null | |
| budget * | number | null | |
| pref_budget_min * | number | null | |
| pref_budget_max * | number | null | |
| pref_area_min * | number | null | |
| pref_rooms_min * | integer | null | |
| pref_locations * | string | null | |
| assigned_user_id * | string (uuid) | null | |
| last_contact_at * | string (date-time) | null | |
| created_at * | string (date-time) | null | |
| updated_at * | string (date-time) | null |
Property
| Pole | Typ | Opis |
|---|---|---|
| id * | string (uuid) | |
| title * | string | |
| status * | string | |
| offer_number * | string | null | |
| type * | string | null | |
| category * | string | null | |
| transaction_type * | string | null | |
| market * | string | null | |
| price * | number | null | |
| area * | number | null | |
| rooms * | integer | null | |
| floor * | integer | null | |
| total_floors * | integer | null | |
| build_year * | integer | null | |
| address_city * | string | null | |
| address_district * | string | null | |
| address_street * | string | null | |
| description * | string | null | Public listing description. |
| assigned_user_id * | string (uuid) | null | |
| created_at * | string (date-time) | null | |
| updated_at * | string (date-time) | null |
Deal
| Pole | Typ | Opis |
|---|---|---|
| id * | string (uuid) | |
| title * | string | |
| stage * | string | |
| value * | number | null | |
| client_id * | integer | null | |
| property_id * | string (uuid) | null | |
| assigned_user_id * | string (uuid) | null | |
| close_date * | string (date-time) | null | |
| created_at * | string (date-time) | null | |
| updated_at * | string (date-time) | null |
Event
| Pole | Typ | Opis |
|---|---|---|
| id * | integer | |
| title * | string | |
| type * | string | |
| start_time * | string (date-time) | |
| end_time * | string (date-time) | |
| client_id * | integer | null | |
| property_id * | string (uuid) | null | |
| assigned_user_id * | string (uuid) | null | |
| outcome * | string | null | |
| outcome_at * | string (date-time) | null | |
| created_at * | string (date-time) | null | |
| updated_at * | string (date-time) | null |
Lead
| Pole | Typ | Opis |
|---|---|---|
| id * | string (uuid) | |
| status * | string | null | |
| source * | string | null | |
| message * | string | null | Text of the inquiry as received from the portal e-mail (source = email_import); null for other sources. |
| first_name * | string | null | |
| last_name * | string | null | |
| customer_name * | string | null | |
| email * | string | null | |
| phone * | string | null | |
| marketing_consent * | boolean | null | |
| property_id * | string (uuid) | null | |
| converted_client_id * | integer | null | |
| assigned_user_id * | string (uuid) | null | |
| created_at * | string (date-time) | null | |
| updated_at * | string (date-time) | |
| portal * | string | null | otodom, nieruchomosci_online, gratka, morizon, adresowo or unknown. |
| offer_number * | string | null | Office listing number quoted by the portal. |
| provider_listing_id * | string | null | Listing id on the portal. |
| listing_title * | string | null |
Task
| Pole | Typ | Opis |
|---|---|---|
| id * | string (uuid) | |
| title * | string | |
| status * | string | null | todo, in_progress or done. |
| priority * | string | null | |
| task_type * | string | null | |
| due_date * | string (date-time) | |
| completed_at * | string (date-time) | null | |
| related_client_id * | integer | null | |
| related_property_id * | string (uuid) | null | |
| related_deal_id * | string (uuid) | null | |
| assigned_user_id * | string (uuid) | null | |
| created_at * | string (date-time) | null | |
| updated_at * | string (date-time) | null |
WrittenId
| Pole | Typ | Opis |
|---|---|---|
| id * | string (uuid) | integer |
ClientCreate
| Pole | Typ | Opis |
|---|---|---|
| first_name | string | |
| last_name | string | |
| name | string | Full name; first_name/last_name are derived from it when they are not sent. |
| string (email) | ||
| phone | string | |
| status | "new" | "contacted" | "meeting" | "active" | "lost" | "archived" | |
| type | "buyer" | "seller" | "landlord" | |
| budget | number |
ClientUpdate
| Pole | Typ | Opis |
|---|---|---|
| first_name | string | |
| last_name | string | |
| name | string | Full name; first_name/last_name are derived from it when they are not sent. |
| string (email) | null | ||
| phone | string | null | |
| status | "new" | "contacted" | "meeting" | "active" | "lost" | "archived" | |
| type | "buyer" | "seller" | "landlord" | |
| budget | number | null | |
| expected_updated_at | string (date-time) | Optional. The record's updated_at you based the change on; a different current value answers 409 conflict. |
PropertyCreate
| Pole | Typ | Opis |
|---|---|---|
| title * | string | |
| price * | integer | |
| type * | "flat" | "house" | "plot" | "store" | "warehouse" | "garage" | "room" | |
| transaction_type | "sale" | "rent" | |
| market | "primary" | "secondary" | |
| status | "active" | "reserved" | "sold" | "rented" | "inactive" | "offer" | |
| address_city * | string | |
| address_street | string | |
| address_district | string | |
| area | number | |
| rooms | integer | |
| floor | integer | |
| total_floors | integer | |
| build_year | integer | |
| description | string |
PropertyUpdate
| Pole | Typ | Opis |
|---|---|---|
| title | string | |
| price | integer | |
| type | "flat" | "house" | "plot" | "store" | "warehouse" | "garage" | "room" | |
| transaction_type | "sale" | "rent" | |
| market | "primary" | "secondary" | |
| status | "active" | "reserved" | "sold" | "rented" | "inactive" | "offer" | |
| address_city | string | |
| address_street | string | |
| address_district | string | |
| area | number | |
| rooms | integer | |
| floor | integer | null | |
| total_floors | integer | null | |
| build_year | integer | null | |
| description | string | |
| assigned_user_id | string (uuid) | null | Office leadership on an active office plan only; otherwise 403 forbidden. |
| expected_updated_at | string (date-time) | Optional. The record's updated_at you based the change on; a different current value answers 409 conflict. |
DealCreate
| Pole | Typ | Opis |
|---|---|---|
| title * | string | |
| value * | number | |
| stage * | "new" | "presentation" | "negotiation" | "agreement" | "closed" | |
| client_id | integer | |
| property_id | string (uuid) | |
| close_date | string (date-time) | ISO 8601 with a time zone. |
| assigned_user_id | string (uuid) | Office leadership on an active office plan only; otherwise 403 forbidden. |
DealUpdate
| Pole | Typ | Opis |
|---|---|---|
| title | string | |
| value | number | |
| stage | "new" | "presentation" | "negotiation" | "agreement" | "closed" | |
| client_id | integer | null | |
| property_id | string (uuid) | null | |
| close_date | string (date-time) | null | ISO 8601 with a time zone. |
| assigned_user_id | string (uuid) | Office leadership on an active office plan only; otherwise 403 forbidden. |
| expected_updated_at | string (date-time) | Optional. The record's updated_at you based the change on; a different current value answers 409 conflict. |
EventCreate
| Pole | Typ | Opis |
|---|---|---|
| title * | string | |
| type | "meeting" | "test_drive" | "other" | "call" | "notary" | |
| start_time * | string (date-time) | ISO 8601 with a time zone. |
| end_time * | string (date-time) | ISO 8601 with a time zone. |
| client_id | integer | |
| property_id | string (uuid) |
EventUpdate
| Pole | Typ | Opis |
|---|---|---|
| title | string | |
| type | "meeting" | "test_drive" | "other" | "call" | "notary" | |
| start_time | string (date-time) | ISO 8601 with a time zone. |
| end_time | string (date-time) | ISO 8601 with a time zone. |
| client_id | integer | null | |
| property_id | string (uuid) | null | |
| outcome | "interested" | "too_expensive" | "location" | "layout" | "to_negotiate" | "not_interested" | Result of a held meeting; sets outcome_at. |
| expected_updated_at | string (date-time) | Optional. The record's updated_at you based the change on; a different current value answers 409 conflict. |
LeadCreate
| Pole | Typ | Opis |
|---|---|---|
| first_name | string | |
| last_name | string | |
| customer_name | string | |
| string (email) | ||
| phone | string | |
| message | string | Inquiry text. Returned by GET only for source = email_import, so it is write-only for other sources. |
| source | string | Free text; email_import is reserved for Estalo's mail import. |
| status | "new" | "no_answer" | "callback" | "contacted" | "interested" | "meeting" | "negotiating" | "converted" | "not_interested" | "stale" |
LeadUpdate
| Pole | Typ | Opis |
|---|---|---|
| first_name | string | |
| last_name | string | |
| customer_name | string | |
| string (email) | null | ||
| phone | string | null | |
| message | string | null | Inquiry text. Returned by GET only for source = email_import, so it is write-only for other sources. |
| source | string | Free text; email_import is reserved for Estalo's mail import. |
| status | "new" | "no_answer" | "callback" | "contacted" | "interested" | "meeting" | "negotiating" | "converted" | "not_interested" | "stale" | |
| assigned_user_id | string (uuid) | null | Office leadership on an active office plan only; otherwise 403 forbidden. |
| expected_updated_at | string (date-time) | Optional. The record's updated_at you based the change on; a different current value answers 409 conflict. |
TaskCreate
| Pole | Typ | Opis |
|---|---|---|
| title * | string | |
| status | "todo" | "in_progress" | "done" | |
| priority | "low" | "medium" | "high" | |
| task_type | "call" | "meeting" | "viewing" | "other" | |
| due_date | string (date-time) | ISO 8601 with a time zone. |
| related_client_id | integer | |
| related_property_id | string (uuid) | |
| related_deal_id | string (uuid) | |
| assigned_user_id | string (uuid) | Office leadership on an active office plan only; otherwise 403 forbidden. |
TaskUpdate
| Pole | Typ | Opis |
|---|---|---|
| title | string | |
| status | "todo" | "in_progress" | "done" | |
| priority | "low" | "medium" | "high" | |
| task_type | "call" | "meeting" | "viewing" | "other" | |
| due_date | string (date-time) | ISO 8601 with a time zone. |
| related_client_id | integer | null | |
| related_property_id | string (uuid) | null | |
| related_deal_id | string (uuid) | null | |
| assigned_user_id | string (uuid) | Office leadership on an active office plan only; otherwise 403 forbidden. |
| expected_updated_at | string (date-time) | Optional. The record's updated_at you based the change on; a different current value answers 409 conflict. |