Request a full sync
Ask Doorloom to regenerate everything and push it to you through the normal webhook path. The blunt instrument, rate-limited accordingly.
Body
Both fields are optional. An empty body re-syncs everything, for every property you cover.
Body
| Field | Type | Required | Description |
|---|---|---|---|
property_ids
|
array | Optional | Doorloom property ids to re-sync. Up to 500. Omit for all covered properties. |
property_ids[]
|
integer | Optional | A Doorloom property id. Must be covered by your integration. |
types
|
array | Optional | Which kinds to regenerate. Omit for all five. |
types[]
|
string | Optional | availability, rates, restrictions, inventory or property. The .changed spellings are accepted too, so rates and rates.changed both work. |
curl -X POST https://api.doorloom.com/api/integrations/v1/sync \
-H "Authorization: Bearer $DOORLOOM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"property_ids": [902, 903],
"types": ["availability", "rates"]
}'
Response
202 Accepted. The work is queued, not done — events arrive on your webhook
afterwards, in sequence order, like any other event.
{
"success": true,
"message": "Full sync queued; events will arrive on your webhook in sequence order.",
"data": {
"queued_properties": 2,
"horizon_days": 365,
"types": [
"availability.changed",
"rates.changed"
]
}
}
| Field | Type | Description |
|---|---|---|
queued_properties
|
integer | How many properties were queued. |
horizon_days
|
integer | How far ahead events will be generated. Windows are chunked by calendar month, so a 365-day horizon is roughly twelve events per type per property. |
types
|
array | The types queued, normalised to their .changed names. |
This can be a lot of events
property_ids and types when you can.Rate limits
| Field | Type | Description |
|---|---|---|
Interval
|
string | One sync per 24 hours. Breaching this is 429 SYNC_TOO_SOON, with errors.retry_after in seconds. |
Daily cap
|
string | Six calls a day, refusals included. Breaching this is 429 RATE_LIMITED. |
{
"success": false,
"code": "SYNC_TOO_SOON",
"message": "A full sync was requested 3 hours ago; wait 75600 seconds.",
"errors": {
"retry_after": 75600
}
}
A bad request does not burn your window
property_id you get a 422 and your 24-hour window is untouched, so you
can correct the call and retry immediately.When to use it, and when not to
Use it when your cursor is older than the 30-day event retention, after a serious data loss on your side, or when you have added a large number of properties at once.
Do not use it as an ordinary catch-up.
GET /events is faster, has no
interval, costs Doorloom nothing, and gives you exactly what you missed. Do not use it as a
periodic job either — if you find yourself syncing on a schedule, something in your event handling
is wrong and a sync is hiding it rather than fixing it.
You get one a day, so spend it deliberately
GET /me and a
snapshot — and only then sync, with the
property_ids and types you actually need. If you need another sooner,
Doorloom staff can trigger one that bypasses the interval.For a single property that has drifted, a snapshot is usually enough. See Staying in sync.
Errors
Errors
| Status | Code | Meaning |
|---|---|---|
| 422 | VALIDATION_FAILED |
The request body failed validation. errors is Laravel's field bag: an object keyed by field path, each holding an array of messages. |
| 422 | PROPERTY_NOT_MAPPED |
The property reference is missing, unknown, or outside your integration's coverage. Coverage is set by Doorloom staff and only ever includes properties the brand owner owns outright, never cohosted ones. |
| 429 | SYNC_TOO_SOON |
A full re-sync was requested too recently. One is allowed every 24 hours. |
| 429 | RATE_LIMITED |
You exceeded one of the rate limits. The standard Retry-After and X-RateLimit-* headers are set on the response. |
| 401 | UNAUTHENTICATED |
No API key, or a key that is not valid. Rotating your API key invalidates the previous one immediately. |