π¦ ClawHub
Hospitable Ops
by @jiangwill2023
Operate and automate Hospitable properties, reservations, and calendars with safe read-first API workflow, focusing on non-price calendar controls and write...
TERMINAL
clawhub install hospitable-opsπ About This Skill
name: hospitable-ops description: Operate, debug, and automate Hospitable via Public API with a safe read-first workflow and non-price calendar controls. Use when working with Hospitable properties, reservations, calendar reads, write verification, blocking/unblocking dates, check-in/check-out restrictions, property mapping, or cross-channel automation logic around Airbnb/Booking/Hospitable. Especially use for: (1) verifying Hospitable API auth and endpoints, (2) exporting properties/reservations/calendar, (3) testing or applying non-price calendar writes, (4) building Hospitable-based automation/reporting, (5) debugging delayed sync or write semantics.
Hospitable Ops
Use Hospitable as the unified operational base. Prefer read-first, then safe write verification, then controlled non-price writes.
Core rules
/Users/admin-ai/.openclaw/workspace-qiang/.env.local for repeatable Hospitable execution.HOSPITABLE_TOKEN must contain the token body only; never include a leading Bearer prefix in the env value.Standard workflow
1. VerifyHOSPITABLE_TOKEN is available in the current execution environment without printing it.
2. If runtime inheritance is uncertain, use local script loading from .env.local instead of re-debugging shell/profile inheritance.
3. Read data first:
- properties
- reservations
- calendar
4. Save JSON with statusCode and body envelope.
5. Build operational judgments from Hospitable first; layer Booking/Airbnb exceptions after.
6. For writes, probe safely:
- identify method
- identify minimal body
- test on low-risk future date
- re-read after delay
7. Only after semantics are clear, apply controlled non-price changes.Known API behavior
Read
Use bearer auth plusAccept: application/json.Current workspace rule:
Common read paths:
propertiesreservations?properties[]=properties//calendar?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD Runtime inheritance readback (validated)
Validated facts in this workspace:statusCode: 200 on propertiesHOSPITABLE_TOKEN/Users/admin-ai/.openclaw/workspace-qiang/.env.local directly inside Hospitable scriptsnode scripts/hospitable-read.js properties --per-page 1 returned statusCode: 200Current script CLI contract
/Users/admin-ai/.openclaw/workspace-qiang/scripts/hospitable-read.jsSupported commands:
properties [--per-page N]reservations --property [--per-page N] calendar --property --start YYYY-MM-DD --end YYYY-MM-DD Important:
calendar uses --start and --end--start-date / --end-date with this script#!/usr/bin/env node on line 1 if editing the script headerWrite
For calendar writes:properties//calendar PUTPATCH is not supporteddates{
"dates": [
{ "date": "YYYY-MM-DD" }
]
}
Verified non-price semantics
#### Block a whole date{
"dates": [
{ "date": "YYYY-MM-DD", "available": false }
]
}
Expected eventual readback:
status.reason = BLOCKEDstatus.source = apistatus.source_type = VENDORstatus.available = false#### Restrict check-in / check-out
{
"dates": [
{
"date": "YYYY-MM-DD",
"closed_for_checkin": true,
"closed_for_checkout": true
}
]
}
Expected eventual readback:
closed_for_checkin = trueclosed_for_checkout = trueAVAILABLEOperational boundaries
Allowed direct actions
Human-only actions
Long-term operating model
Reduce the property system into three stable forms whenever possible: 1. Airbnb-only 2. dual-channel managed by Hospitable native mechanisms 3. main-house gate open/closedTreat legacy exceptions as temporary cleanup layers, not permanent structure.
Current NXM cleanup model
mute(booking) is a historical order source only and should not take new sales.206 -> 201 is a temporary operational occupancy transfer caused by legacy mute orders.Recommended local files
scripts/hospitable-read.jsscripts/hospitable-write-probe.jsstatusCode/bodyDelay-aware verification
After a write returns202 accepted:
1. wait before declaring failure
2. re-read the same date window
3. compare operational fields, not only high-level availability
4. check whether the change is semantic (blocked vs closed_for_checkin/checkout)