pms_write_unsupported
The listing's PMS cannot do this through its API (for example cancel on OwnerRez, or change dates on Smoobu). Do it in the PMS; the change arrives with the next sync.
When it fires
The listing is managed in a PMS, and that PMS's API cannot do what you asked. Repull never fakes a write the PMS cannot make, so the request is refused and nothing is sent. Typical cases:
- Cancelling on OwnerRez — its API has no cancel.
- Changing the dates of a Smoobu booking — cancel and rebook, or change them in Smoobu.
POST /v1/reservations/quoteon Mews, Cloudbeds or iGMS, which have no quote API. You can still create the booking; on iGMS atotalPriceis required.platform: "owner"on a PMS listing — block owner stays in the PMS.- A specific
unitIdon Hostaway or iGMS, or a tentative hold on iGMS. - A group booking on any PMS except Cloudbeds.
- Moving a PMS stay to another listing, or changing its check-in/check-out times.
provider names the PMS and message says where to make the change instead.
Response shape
Every Repull error follows the same envelope. The code is stable and safe to switch on.
{
"error": {
"code": "pms_write_unsupported",
"message": "OwnerRez cannot cancel a booking through its API. Cancel it in OwnerRez.",
"fix": "Cancel it in OwnerRez; the cancellation reaches Repull with the next sync.",
"docs_url": "https://repull.dev/docs/errors/pms_write_unsupported",
"request_id": "req_01J5X7Y8Z9ABCDEF12345678",
"provider": "ownerrez"
}
}How to fix
- Do not retry — the same request is refused the same way.
- Make the change in the PMS named in `provider`. It reaches Repull with the next sync, and the matching webhook fires.
- Before writing, read `GET /v1/listings/{id}` → `capabilities.reservations` (`create`, `modify`, `cancel`, `quote`, `customPrice`, `notes`) to know what the listing supports.
Common gotchas
- This is a property of the PMS's API, not of your plan or your connection. Reconnecting does not change it.
- The per-PMS table is at PMS reservation support.
Examples
curl
# Check first: what can this listing do?
curl https://api.repull.dev/v1/listings/4118 \
-H "Authorization: Bearer sk_live_YOUR_KEY"
# → "capabilities": { "reservations": { "provider": "ownerrez", "cancel": false, ... } }
curl -X POST https://api.repull.dev/v1/reservations/215708/cancel \
-H "Authorization: Bearer sk_live_YOUR_KEY"
# → 422 pms_write_unsupportedTypeScript
const res = await fetch('https://api.repull.dev/v1/reservations/215708/cancel', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.REPULL_API_KEY}` },
})
if (res.status === 422) {
const { error } = await res.json()
if (error.code === 'pms_write_unsupported') {
// Not possible through this PMS's API — tell the user to do it in error.provider
return { doItInPms: error.provider, why: error.message }
}
}If you're an AI agent
The PMS's API cannot perform this write. Do not retry. Tell the user to make the change directly in the PMS named in `provider`; it syncs back automatically. Check capabilities.reservations on GET /v1/listings/{id} before attempting writes.
Related
- Error reference — the full table of error codes
- Using Repull from AI agents — patterns for handling errors in agent loops
- Creating reservations
- PMS reservation support
Hit an error that isn't covered? Email hello@repull.dev with the request id from the response headers.