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.

ParamTypeDefaultDescription
periodstring30d7d, 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"
}
StatusDescription
pendingAwaiting owner action
confirmedBooking accepted
cancelledBooking cancelled
completedGuest has stayed

Valid transitions:

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
ParamRequiredDescription
property_idyesProperty UUID
check_inyesStart date
check_outyesEnd 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"
}
FieldRequiredDescription
dateyesDate to block/unblock
availableyestrue = available, false = blocked
reasonno"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"
}
FieldRequiredDescription
urlyesExternal iCal feed URL
sourcenoLabel: "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
ParamTypeDefaultDescription
periodstring30d7d, 30d, 90d, 365d
group_bystringmonthday, 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
ParamTypeDefaultDescription
periodstring30d30d, 90d, 365d
property_slugstringFilter 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"]
}
FieldRequiredDescription
urlyesHTTPS endpoint to POST events to
eventsyesArray of event types to subscribe to

Supported events:

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 StatusCodeMeaning
400bad_requestInvalid request body or parameters
401unauthorizedMissing or invalid API key
404not_foundResource doesn’t exist
422min_stayStay is shorter than property’s minimum
500db_errorDatabase constraint violation or internal error
500internal_errorUnexpected server error

Data Types

TypeFormatExample
UUIDStandard UUID v4f2ecf153-be88-4277-918f-9f862d6fbc2b
DateYYYY-MM-DD2026-07-15
TimestampISO 86012026-06-27T10:30:00.000+00:00
MoneyFace value (float/int) in property currency150 with currency: "EUR" = €150.00
SlugAuto-generated, lowercase alphanumericyr407oh9
TimeHH:MM 24h15:00
PercentageFloat 0–10052.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.