Getting started
The Rentager API lets you read and write properties, reservations, guests, and availability in the vacation rental CRM. Production base URL:
https://api.rentager.com/v1Sandbox (test data, no impact on live Airbnb/Booking calendars):
https://sandbox.api.rentager.com/v1- Create a Rentager account and verify your email.
- In Dashboard → Integrations → API keys, generate a secret key.
- Connect at least one OTA from the integrations catalog (Airbnb, Booking.com, Vrbo…).
- Make your first authenticated call to GET /properties.
Authentication
All requests use a Bearer token. Never expose the key in guest-facing frontends.
curl https://api.rentager.com/v1/properties \
-H "Authorization: Bearer rtg_live_••••••••" \
-H "Content-Type: application/json"- rtg_live_* — production
- rtg_test_* — sandbox
Connect OTAs (Airbnb, Booking.com, Vrbo)
OTA connections are managed in the UI or via API. Recommended host flow:
Airbnb
Host OAuth → calendar, pricing, and messaging sync. 5‑min polling + reservation webhooks.
POST /integrations/airbnb/connectBooking.com
Import listings and bidirectional availability locks to prevent double bookings.
POST /integrations/booking/connectVrbo / iCal
When no native API exists, use inbound/outbound iCal feeds (see iCal section).
POST /integrations/icalFull connector catalog: /integrations
REST API reference
Core resources of the vacation rental management CMS. All responses are JSON.
Properties
GET /v1/properties
GET /v1/properties/{id}
POST /v1/properties
PATCH /v1/properties/{id}
DELETE /v1/properties/{id}{
"id": "prop_8f2a",
"name": "Sea View Loft",
"timezone": "Europe/Madrid",
"channels": ["airbnb", "booking"],
"base_price": { "amount": 14500, "currency": "EUR" },
"status": "active"
}Reservations
GET /v1/reservations?property_id=prop_8f2a&from=2026-08-01
GET /v1/reservations/{id}
POST /v1/reservations
PATCH /v1/reservations/{id}{
"id": "res_91c0",
"property_id": "prop_8f2a",
"check_in": "2026-09-12",
"check_out": "2026-09-15",
"guest_id": "gst_22",
"channel": "airbnb",
"status": "confirmed",
"payout": { "amount": 31200, "currency": "EUR" }
}Guests
GET /v1/guests
GET /v1/guests/{id}
POST /v1/guests/{id}/messagesCalendar / availability
GET /v1/properties/{id}/calendar?from=2026-08-01&to=2026-08-31
PUT /v1/properties/{id}/calendar/blocks
PATCH /v1/properties/{id}/calendar/pricesWebhooks
Subscribe to real-time events. Each payload is signed with HMAC-SHA256 in the X-Rentager-Signature header.
POST /v1/webhooks
{
"url": "https://api.rentagermanagement.com/hooks/rentager",
"events": [
"reservation.created",
"reservation.updated",
"reservation.cancelled",
"message.received",
"calendar.conflict"
]
}Respond with 2xx within 5s. Retries use exponential backoff (up to 8 attempts / 24h).
iCal feeds
Useful for channels without an API or as sync fallback. Each property exposes an outbound feed and accepts inbound URLs.
GET /v1/properties/{id}/ical/export.ics
POST /v1/properties/{id}/ical/import
{ "url": "https://www.airbnb.com/calendar/ical/….ics" }Errors & rate limits
Default limit: 120 req/min per API key (burst 30). Headers: X-RateLimit-Remaining, X-RateLimit-Reset.
| Code | Meaning |
|---|---|
| 400 | Invalid payload (dates, currency, channel) |
| 401 | Missing or revoked API key |
| 409 | Calendar conflict / double booking prevented |
| 429 | Rate limit exceeded |
{
"error": {
"code": "calendar_conflict",
"message": "Dates overlap an existing Airbnb block",
"request_id": "req_0b17"
}
}