Rizerve API Documentation ( Latest )
Rizerve API v1 Reference
Build With Rizerve
The Rizerve API is open to developers, channel managers, property management systems, and
automation platforms. If you have built something that connects to Rizerve, a Make scenario, a
Zapier integration, a custom dashboard, or a full channel manager integration, we want to
hear about it and help you share it with the Rizerve community of hosts.
To get started, generate your API key from your Rizerve account under Account → API Access,
read through the documentation above, and start building. If you run into anything that isn’t
covered here or want to discuss a deeper integration, reach out directly at [your email] and we
will get back to you personally.
The Rizerve API allows external applications, channel managers, property management
systems, and automation platforms to read and write bookings and calendar availability for
vacation rental properties.
Base URL: https://api.rizerve.io/v1
Auth: X-API-Key header on every request (except /health)
Content-Type: application/json
Date format: YYYY-MM-DD or ISO 8601 timestamps
Money: All prices in euros (float/integer — not cents). A property priced at €150 has price_per_night: 150.
Rizerve API v1 Reference
Base URL: https://api.rizerve.io/v1
Auth: X-API-Key header on every request (except /health)
Content-Type: application/json
Date format: YYYY-MM-DD or ISO 8601 timestamps
Money: Prices are in the property’s configured currency, stored as face value (not cents). A property with currency: "EUR" and price_per_night: 150 means €150.00. A property with currency: "USD" and price_per_night: 200 means $200.00.
Authentication
Every request (except /health) must include:
X-API-Key: rz_xxx…xxxx
API keys are scoped to an owner account. Requests without a valid key receive:
{
"error": {
"code": "unauthorized",
"message": "Invalid API key"
}
}
Response Format
List endpoints return a raw array (not wrapped in a data envelope):
[
{ "id": "...", "name": "Beach Villa", ... },
{ "id": "...", "name": "Mountain Cabin", ... }
]
Single-resource endpoints return the object directly (no wrapping):
{
"id": "...",
"name": "Beach Villa",
...
}
Success responses (create/update/delete) return the created/updated/deleted object:
{
"id": "...",
"deleted": true
}
Error format (all endpoints):
{
"error": {
"code": "not_found",
"message": "Property not found"
}
}
Endpoints
Health
GET /v1/health
No auth required.
Response:
{
"status": "ok",
"version": "1.0"
}
Properties
All property endpoints require X-API-Key.
List Properties
GET /v1/properties
Returns all properties owned by the authenticated account as a raw array.
Response:
[
{
"id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"name": "Casa Nabão",
"description": "Located in the heart of central Portugal...",
"location": "Portugal",
"price_per_night": 150,
"currency": "EUR",
"bedrooms": 4,
"bathrooms": 2,
"max_guests": 8,
"amenities": ["WiFi", "Pool", "AC"],
"hero_image_url": "https://hlksgjderfsvlmkntrvr.supabase.co/storage/v1/object/public/property-images/...",
"logo_url": "https://hlksgjderfsvlmkntrvr.supabase.co/storage/v1/object/public/property-logos/...",
"main_site_url": "myproperty.com",
"public_slug": "yr407oh9",
"minimum_stay": 4,
"check_in_time": "15:00",
"check_out_time": "11:00",
"extra_fee": 8,
"extra_fee_type": "fixed",
"theme_color": "#2563eb",
"latitude": null,
"longitude": null,
"show_map": false,
"payment_mode": "email_instructions",
"payment_instructions": null,
"is_published": true,
"created_at": "2026-01-16T12:35:03.650663+00:00",
"updated_at": "2026-06-16T10:56:02.234757+00:00"
}
]
Get Single Property
GET /v1/properties/:slug
Returns a single property by its public slug. Same shape as list items.
Error (404):
{
"error": {
"code": "not_found",
"message": "Property not found"
}
}
Create Property
POST /v1/properties
Request body:
{
"title": "Mountain Cabin",
"description": "Cozy cabin in the woods...",
"location": "Zagori, Greece",
"price_per_night": 90,
"currency": "EUR",
"bedrooms": 2,
"bathrooms": 1,
"max_guests": 4,
"amenities": ["WiFi", "Fireplace"],
"minimum_stay": 2,
"check_in_time": "14:00",
"check_out_time": "10:00"
}
Required: title, price_per_night
Optional: description, location, currency (default EUR), bedrooms, bathrooms, max_guests, amenities (array), minimum_stay (default 1), check_in_time, check_out_time, extra_fee, extra_fee_type (fixed/percentage), theme_color, latitude, longitude, main_site_url
Auto-generated: id, public_slug (from title if omitted)
Response: Created property object.
Update Property
PUT /v1/properties/:slug
Send only the fields you want to change. Omitted fields are left unchanged.
Request body (partial):
{
"price_per_night": 110,
"is_published": true
}
Response: Updated property object.
Delete Property
DELETE /v1/properties/:slug
Cascade deletes related bookings, blocked dates, and iCal feeds.
Response:
{
"deleted": true,
"id": "f2ecf153-be88-4277-918f-9f862d6fbc2b"
}
Property Stats
GET /v1/properties/:slug/stats?period=30d
Requires X-API-Key.
| Param | Type | Default | Description |
|---|---|---|---|
| period | string | 30d | 7d, 30d, 90d, 365d, or YYYY-MM-DD/YYYY-MM-DD |
Response:
{
"property_id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"property_slug": "yr407oh9",
"period": "30d",
"date_from": "2026-06-01",
"date_to": "2026-07-01",
"page_views": 1240,
"unique_visitors": 890,
"bookings": 8,
"conversion_rate": 0.9,
"revenue": 5250,
"currency": "EUR",
"average_stay_nights": 5.2,
"occupancy_rate": 52.0
}
Bookings
All booking endpoints require X-API-Key.
List Bookings
GET /v1/bookings
Returns all bookings as a raw array.
Response:
[
{
"id": "1423ffcb-037e-4420-9ad1-c2b32d7ef76b",
"property_id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"guest_name": "Alexandra M.",
"guest_email": "[email protected]",
"guest_phone": "+306912345678",
"check_in": "2026-01-26",
"check_out": "2026-01-28",
"guests": 2,
"total_price": 300,
"currency": "EUR",
"status": "confirmed",
"payment_status": "unpaid",
"stripe_session_id": null,
"stripe_payment_intent_id": null,
"stripe_account_id": null,
"application_fee_amount": null,
"payment_token": null,
"notes": null,
"created_at": "2026-01-16T16:14:50.197475+00:00",
"updated_at": "2026-02-24T19:50:38.184075+00:00"
}
]
Get Single Booking
GET /v1/bookings/:id
Returns a single booking by its UUID. Same shape as list items.
Create Booking
POST /v1/bookings
Request body:
{
"property_id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"guest_name": "Maria Papadopoulos",
"guest_email": "[email protected]",
"guest_phone": "+306912345678",
"check_in": "2026-07-05",
"check_out": "2026-07-10",
"guests": 4,
"total_price": 750
}
Required: property_id, guest_name, check_in, check_out, total_price
Optional: guest_email (defaults to ""), guest_phone, guests (default 1), notes
Enforces the property’s minimum_stay — returns 422 if stay is too short.
Response: Created booking object (status defaults to confirmed).
Error (minimum_stay):
{
"error": {
"code": "min_stay",
"message": "Minimum stay is 4 nights"
}
}
Update Booking Status
PUT /v1/bookings/:id/status
Request body:
{
"status": "confirmed"
}
| Status | Description |
|---|---|
pending | Awaiting owner action |
confirmed | Booking accepted |
cancelled | Booking cancelled |
completed | Guest has stayed |
Valid transitions:
pending→confirmed,cancelledconfirmed→cancelled,completedcancelled→ terminal (no further changes)completed→ terminal (no further changes)
Response: Updated booking object.
Delete Booking
DELETE /v1/bookings/:id
Response:
{
"deleted": true,
"id": "1423ffcb-037e-4420-9ad1-c2b32d7ef76b"
}
Availability
All availability endpoints require X-API-Key.
Check Availability
GET /v1/availability?property_id=UUID&check_in=YYYY-MM-DD&check_out=YYYY-MM-DD
| Param | Required | Description |
|---|---|---|
| property_id | yes | Property UUID |
| check_in | yes | Start date |
| check_out | yes | End date |
Response:
{
"blocked_dates": [],
"booked_dates": []
}
Arrays contain date objects when the range has conflicts. Empty arrays mean the range is fully available.
Block/Unblock a Date
POST /v1/properties/:slug/availability
Request body:
{
"date": "2026-07-03",
"available": false,
"reason": "maintenance"
}
| Field | Required | Description |
|---|---|---|
| date | yes | Date to block/unblock |
| available | yes | true = available, false = blocked |
| reason | no | "maintenance", "owner_stay", or custom |
Response:
{
"date": "2026-07-03",
"available": false,
"reason": "maintenance"
}
Batch Set Availability
POST /v1/availability/batch
Request body:
{
"ranges": [
{
"property_id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"date_from": "2026-08-01",
"date_to": "2026-08-15",
"available": false,
"reason": "owner_stay"
}
]
}
Max 50 ranges per request. Dates already tied to existing bookings are skipped (not overwritten).
Response:
{
"processed": 1,
"dates_affected": 15,
"skipped": 0
}
iCal Feeds
All iCal endpoints require X-API-Key (except the public export URL which is served by ical.rizerve.io).
List iCal Feeds
GET /v1/properties/:slug/ical-feeds
Response:
[
{
"id": "c790857f-659b-4b34-bbd2-0dcf498afd45",
"property_id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"url": "https://www.airbnb.com/calendar/ical/12345.ics",
"source": "airbnb",
"last_sync": null,
"created_at": "2026-07-01T09:34:12.776082+00:00"
}
]
Import iCal Feed
POST /v1/properties/:slug/ical-feeds
Request body:
{
"url": "https://www.airbnb.com/calendar/ical/12345.ics",
"source": "airbnb"
}
| Field | Required | Description |
|---|---|---|
| url | yes | External iCal feed URL |
| source | no | Label: "airbnb", "booking", "vrbo", or custom |
Response: Created feed object. The system syncs automatically within a few minutes.
Get Public iCal Export URL
GET /v1/properties/:slug/ical
Response:
{
"ical_url": "https://ical.rizerve.io/yr407oh9.ics",
"property_id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"property_slug": "yr407oh9"
}
The URL at ical.rizerve.io/{slug}.ics serves a valid .ics calendar file with no auth required. Use this to import the Rizerve calendar into Airbnb, VRBO, Booking.com, etc.
Delete iCal Feed
DELETE /v1/properties/:slug/ical-feeds/:feedId
Removes the imported feed and clears any dates it imported.
Response:
{
"deleted": true,
"id": "c790857f-659b-4b34-bbd2-0dcf498afd45"
}
Analytics
All analytics endpoints require X-API-Key.
Revenue Report
GET /v1/analytics/revenue?period=30d&group_by=month
| Param | Type | Default | Description |
|---|---|---|---|
| period | string | 30d | 7d, 30d, 90d, 365d |
| group_by | string | month | day, week, month, property |
Response:
{
"period": "30d",
"total_revenue": 5250,
"currency": "EUR",
"breakdown": [
{
"label": "2026-06",
"revenue": 5250,
"bookings": 8
}
]
}
Revenue includes only confirmed and completed bookings within the period.
Occupancy Report
GET /v1/analytics/occupancy?period=30d&property_slug=optional
| Param | Type | Default | Description |
|---|---|---|---|
| period | string | 30d | 30d, 90d, 365d |
| property_slug | string | — | Filter to single property (omit for all) |
Response:
{
"period": "30d",
"overall_occupancy": 52.0,
"properties": [
{
"property_slug": "yr407oh9",
"occupancy": 62.0,
"available_nights": 11,
"booked_nights": 19
},
{
"property_slug": "pg7iwryx",
"occupancy": 42.0,
"available_nights": 17,
"booked_nights": 13
}
]
}
Webhooks
All webhook endpoints require X-API-Key.
List Webhooks
GET /v1/webhooks
Response:
[
{
"id": "9475a908-28bf-4303-a6ab-33b347d2d82f",
"url": "https://example.com/webhook",
"events": ["booking.created", "booking.status_changed"],
"created_at": "2026-07-01T09:34:13.700825+00:00",
"last_fired_at": null,
"failures": 0
}
]
Register Webhook
POST /v1/webhooks
Request body:
{
"url": "https://my-app.com/webhook",
"events": ["booking.created", "booking.status_changed", "availability.updated"]
}
| Field | Required | Description |
|---|---|---|
| url | yes | HTTPS endpoint to POST events to |
| events | yes | Array of event types to subscribe to |
Supported events:
booking.created— new booking created via API or direct booking pagebooking.status_changed— booking confirmed, cancelled, or completedavailability.updated— dates blocked/unblocked
Webhooks are fired asynchronously with up to 3 retries with exponential backoff. Timeout per delivery is 10 seconds. Failures are logged in the failures counter.
Event payload format:
{
"event": "booking.created",
"data": { /* full booking object */ },
"timestamp": "2026-07-01T09:34:13.700825+00:00"
}
Response: Created webhook object.
Delete Webhook
DELETE /v1/webhooks/:id
Response:
{
"deleted": true,
"id": "9475a908-28bf-4303-a6ab-33b347d2d82f"
}
Guest Lookup
GET /v1/[email protected]
Requires X-API-Key. Searches all bookings by guest email and aggregates.
Response:
[
{
"guest_name": "Alexandra M.",
"guest_email": "[email protected]",
"guest_phone": "+306912345678",
"bookings": [
{
"id": "56b66909-...",
"property_id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"check_in": "2026-02-01",
"check_out": "2026-02-05",
"guests": 2,
"total_price": 600,
"status": "confirmed",
"created_at": "2026-01-17T06:55:04.341109+00:00"
},
{
"id": "1423ffcb-...",
"property_id": "f2ecf153-be88-4277-918f-9f862d6fbc2b",
"check_in": "2026-01-26",
"check_out": "2026-01-28",
"guests": 2,
"total_price": 300,
"status": "confirmed",
"created_at": "2026-01-16T16:14:50.197475+00:00"
}
]
}
]
Error Codes
| HTTP Status | Code | Meaning |
|---|---|---|
| 400 | bad_request | Invalid request body or parameters |
| 401 | unauthorized | Missing or invalid API key |
| 404 | not_found | Resource doesn’t exist |
| 422 | min_stay | Stay is shorter than property’s minimum |
| 500 | db_error | Database constraint violation or internal error |
| 500 | internal_error | Unexpected server error |
Data Types
| Type | Format | Example |
|---|---|---|
| UUID | Standard UUID v4 | f2ecf153-be88-4277-918f-9f862d6fbc2b |
| Date | YYYY-MM-DD | 2026-07-15 |
| Timestamp | ISO 8601 | 2026-06-27T10:30:00.000+00:00 |
| Money | Face value (float/int) in property currency | 150 with currency: "EUR" = €150.00 |
| Slug | Auto-generated, lowercase alphanumeric | yr407oh9 |
| Time | HH:MM 24h | 15:00 |
| Percentage | Float 0–100 | 52.0 = 52% |
Acceptable Use
The Rizerve API is provided for the purpose of building integrations, automations, and tools
that enhance the direct booking experience for vacation rental hosts and their guests. By
accessing the API you agree to use it only for lawful purposes and in a manner consistent with
Rizerve’s terms of service.
You may not use the API to scrape or harvest data at scale, interfere with the availability or
integrity of the platform, access properties or bookings that do not belong to your account, or
build tools that facilitate spam, fraud, or abuse of any kind. Rizerve reserves the right to
revoke API access for any account found to be in violation of these terms.