API reference
Properties
Resource properties
Properties are the root resource. Create one first; pictures, checklists, bookings, and job requests reference it by propertyId or by your sourcePropertyId.
Create a property
/v1/properties 201 Created
x-api-key
Creates a property and returns it inline. Persist the returned propertyId: dependent calls take either propertyId or your sourcePropertyId (the sourceId you set here).
| Field | Type | Required | Notes |
|---|---|---|---|
sourceId | string | Required | Your identifier for the property, 5–100 chars. |
name | string | Required | 3–100 chars. |
countryCode | string | Required | Exactly 2 chars (ISO 3166-1 alpha-2). |
timeZone | string | Required | IANA time zone, e.g. Europe/Berlin. |
location | object | Required | See Location. |
beds | integer | Required | — |
bedrooms | integer | Required | — |
bathrooms | integer | Required | — |
type | string | Optional | Property type label. |
details | object | Optional | See Property details. |
tags | string[] | Optional | 1–10 items; an empty list is rejected. |
bedDetails | object[] | Optional | See Bed details. |
pictureUrl | string | Optional | Legacy picture identifier (not a URL). Prefer POST /v1/propertyPictures. |
Location
| Field | Type | Required | Notes |
|---|---|---|---|
latitude | number | Required | -90 to 90. |
longitude | number | Required | -180 to 180. |
Property details
| Field | Type | Required | Notes |
|---|---|---|---|
information | string | Optional | — |
access | string | Optional | — |
garbage | string | Optional | — |
parking | string | Optional | — |
wifiName | string | Optional | — |
wifiPassword | string | Optional | — |
wifiDescription | string | Optional | — |
disableRemindersAutomation | boolean | Optional | Default false. Accepted on create and update; never returned. |
otherAttributes | object[] | Optional | See Other attributes. |
Other attributes
| Field | Type | Required | Notes |
|---|---|---|---|
label | string | Required | Max 100 chars. |
value | string | string[] | Required | A string of up to 500 chars, or an array of such strings. |
group | string | Optional | Max 100 chars. |
pictures | string[] | Optional | Picture URLs. |
Bed details
| Field | Type | Required | Notes |
|---|---|---|---|
bedType | string | Required | One of super-king, king, queen, twin, double, sofabed, child. |
twinable | boolean | Required | — |
displayLabel | string | Required | Max 100 chars. |
quantity | integer | Required | — |
curl -X POST https://platform.getproperly.com/v1/properties \
-H "x-api-key: $PROPERLY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 018f6b1e-create-seaside-loft" \
-d '{
"sourceId": "pms-100234",
"name": "Seaside Loft 2B",
"countryCode": "US",
"timeZone": "America/Los_Angeles",
"location": { "latitude": 34.0119, "longitude": -118.4916 },
"beds": 3,
"bedrooms": 2,
"bathrooms": 2,
"tags": ["beach"],
"details": { "access": "Lockbox code 4821", "wifiName": "SeasideLoft", "wifiPassword": "surf2026" },
"bedDetails": [
{ "bedType": "queen", "twinable": false, "displayLabel": "Master bedroom", "quantity": 1 },
{ "bedType": "sofabed", "twinable": false, "displayLabel": "Living room", "quantity": 1 }
]
}' {
"propertyId": "8jL2mQxT4a",
"sourceId": "pms-100234",
"name": "Seaside Loft 2B",
"address": "12 Ocean Ave, Santa Monica, CA",
"pictureUrls": ["https://res.cloudinary.com/…/prop1.jpg"],
"tags": ["beach"],
"location": { "latitude": 34.0119, "longitude": -118.4916 },
"timeZone": "America/Los_Angeles",
"countryCode": "US",
"bedrooms": 2,
"beds": 3,
"bathrooms": 2,
"bedDetails": [
{ "bedType": "queen", "twinable": false, "displayLabel": "Master bedroom", "quantity": 1 },
{ "bedType": "sofabed", "twinable": false, "displayLabel": "Living room", "quantity": 1 }
],
"details": { "access": "Lockbox code 4821", "wifiName": "SeasideLoft", "wifiPassword": "surf2026" },
"createdAt": "2026-05-02T18:11:04.000Z",
"updatedAt": "2026-08-30T09:20:41.000Z"
} List properties
/v1/properties 200 OK
x-api-key
Cursor-paginated listing ordered by propertyId ascending, in the collection envelope { "data": [ …property… ], "nextCursor": "<id>" | null, "hasMore": boolean }. Pass nextCursor as the next request's cursor; it is null on the last page.
| Parameter | Type | Required | Notes |
|---|---|---|---|
cursor | string | Optional | Opaque; the nextCursor from a previous page. |
limit | integer | Optional | 1–100, default 50. |
| Field | Type | Required | Notes |
|---|---|---|---|
propertyId | string | Required | The Properly id. |
sourceId | string | Optional | The identifier you supplied at create. |
name | string | Optional | — |
note | string | Optional | — |
pictureUrls | string[] | Optional | — |
tags | string[] | Optional | — |
location | object | Optional | { latitude, longitude }. |
timeZone | string | Optional | — |
address | string | Optional | — |
type | string | Optional | — |
countryCode | string | Optional | — |
bedrooms | integer | Optional | — |
beds | integer | Optional | — |
bathrooms | integer | Optional | — |
bedDetails | object[] | Optional | Same item shape as create. |
details | object | Optional | information, access, garbage, parking, wifiName, wifiPassword, wifiDescription, otherAttributes: exactly what you wrote. disableRemindersAutomation is accepted on create and update but never returned. |
createdAt | date-time | Optional | — |
updatedAt | date-time | Optional | — |
curl "https://platform.getproperly.com/v1/properties?limit=50" \
-H "x-api-key: $PROPERLY_API_KEY" {
"data": [
{
"propertyId": "8jL2mQxT4a",
"sourceId": "pms-100234",
"name": "Seaside Loft 2B",
"address": "12 Ocean Ave, Santa Monica, CA",
"pictureUrls": ["https://res.cloudinary.com/…/prop1.jpg"],
"tags": ["beach"],
"location": { "latitude": 34.0119, "longitude": -118.4916 },
"timeZone": "America/Los_Angeles",
"countryCode": "US",
"bedrooms": 2,
"beds": 3,
"bathrooms": 2,
"bedDetails": [
{ "bedType": "queen", "twinable": false, "displayLabel": "Master bedroom", "quantity": 1 },
{ "bedType": "sofabed", "twinable": false, "displayLabel": "Living room", "quantity": 1 }
],
"details": { "access": "Lockbox code 4821", "wifiName": "SeasideLoft", "wifiPassword": "surf2026" },
"createdAt": "2026-05-02T18:11:04.000Z",
"updatedAt": "2026-08-30T09:20:41.000Z"
}
],
"nextCursor": null,
"hasMore": false
} Get a property
/v1/properties/{propertyId} 200 OK
x-api-key
Returns one property with the same fields as the listing. Unknown id → 404.
curl https://platform.getproperly.com/v1/properties/8jL2mQxT4a \
-H "x-api-key: $PROPERLY_API_KEY" {
"propertyId": "8jL2mQxT4a",
"sourceId": "pms-100234",
"name": "Seaside Loft 2B",
"address": "12 Ocean Ave, Santa Monica, CA",
"pictureUrls": ["https://res.cloudinary.com/…/prop1.jpg"],
"tags": ["beach"],
"location": { "latitude": 34.0119, "longitude": -118.4916 },
"timeZone": "America/Los_Angeles",
"countryCode": "US",
"bedrooms": 2,
"beds": 3,
"bathrooms": 2,
"bedDetails": [
{ "bedType": "queen", "twinable": false, "displayLabel": "Master bedroom", "quantity": 1 },
{ "bedType": "sofabed", "twinable": false, "displayLabel": "Living room", "quantity": 1 }
],
"details": { "access": "Lockbox code 4821", "wifiName": "SeasideLoft", "wifiPassword": "surf2026" },
"createdAt": "2026-05-02T18:11:04.000Z",
"updatedAt": "2026-08-30T09:20:41.000Z"
} Update a property
/v1/properties/{propertyId} 200 OK
x-api-key
Partial update; returns the updated property. The body accepts any subset of the create fields. If location is sent, both latitude and longitude are required.
| Field | Type | Required | Notes |
|---|---|---|---|
sourceId | string | Optional | Your identifier for the property, 5–100 chars. |
name | string | Optional | 3–100 chars. |
countryCode | string | Optional | Exactly 2 chars (ISO 3166-1 alpha-2). |
timeZone | string | Optional | IANA time zone, e.g. Europe/Berlin. |
location | object | Optional | See Location. |
beds | integer | Optional | — |
bedrooms | integer | Optional | — |
bathrooms | integer | Optional | — |
type | string | Optional | Property type label. |
details | object | Optional | See Property details. |
tags | string[] | Optional | 1–10 items; an empty list is rejected. |
bedDetails | object[] | Optional | See Bed details. |
pictureUrl | string | Optional | Legacy picture identifier (not a URL). Prefer POST /v1/propertyPictures. |
curl -X PATCH https://platform.getproperly.com/v1/properties/8jL2mQxT4a \
-H "x-api-key: $PROPERLY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Seaside Loft 2B (renovated)", "tags": ["beach", "renovated"] }' {
"propertyId": "8jL2mQxT4a",
"sourceId": "pms-100234",
"name": "Seaside Loft 2B (renovated)",
"address": "12 Ocean Ave, Santa Monica, CA",
"pictureUrls": ["https://res.cloudinary.com/…/prop1.jpg"],
"tags": ["beach", "renovated"],
"location": { "latitude": 34.0119, "longitude": -118.4916 },
"timeZone": "America/Los_Angeles",
"countryCode": "US",
"bedrooms": 2,
"beds": 3,
"bathrooms": 2,
"bedDetails": [
{ "bedType": "queen", "twinable": false, "displayLabel": "Master bedroom", "quantity": 1 },
{ "bedType": "sofabed", "twinable": false, "displayLabel": "Living room", "quantity": 1 }
],
"details": { "access": "Lockbox code 4821", "wifiName": "SeasideLoft", "wifiPassword": "surf2026" },
"createdAt": "2026-05-02T18:11:04.000Z",
"updatedAt": "2026-08-30T09:20:41.000Z"
} Delete a property
/v1/properties/{propertyId} 204 No Content
x-api-key
Deletes the property. Returns 204 with no body.
curl -X DELETE https://platform.getproperly.com/v1/properties/8jL2mQxT4a \
-H "x-api-key: $PROPERLY_API_KEY"