Daylet API (1.0.0)

Download OpenAPI specification:

The Daylet API lets you integrate your property's availability, pricing, and booking creation into your own website or backend system.

Authentication

Every request requires a Bearer API key in the Authorization header:

Authorization: Bearer dlk_live_<48 hex chars>

Keys are generated in the Daylet dashboard → API Keys page (Pro plan). A key is scoped to exactly one property — the property ID is never passed in the request; it is derived from the key itself.

Pricing

The API is included with the Pro plan: 10,000 API calls per month across your account, then £0.50 (or €0.50) per additional 1,000 calls.

Rate limits

Window Limit
Per IP (before auth) 60 req / 60 s
Read endpoints 120 req / 60 s
Write endpoints 20 req / 60 s

Rate-limit state is returned in X-RateLimit-* response headers.

Response envelope

All responses use a consistent JSON envelope:

Success: { "data": { ... } }

Error: { "error": { "code": "<error_code>", "message": "..." } }

CORS

This API is server-to-server only. CORS is intentionally not enabled — your API key must never be embedded in browser-shipped code.

Property

Discover the property's configuration, rooms, and extras — the IDs and flags the other endpoints expect

Get property configuration

Returns the configuration of the property the API key is scoped to. Start here: booking_mode tells you whether bookings need room_ids (rooms mode) or not (property mode), payments_enabled whether require_payment: true bookings will work, and deposit_enabled whether those bookings only charge a deposit upfront rather than the full total.

Authorizations:
bearerAuth

Responses

Request samples

curl https://www.dayletus.com/api/v1/property \
  -H "Authorization: Bearer dlk_live_your_key_here"

Response samples

Content type
application/json
{
  • "data": {
    }
}

List rooms

Lists the active rooms of the property (rooms-mode properties only). Use the returned IDs as room_ids when creating bookings, and as room_id when querying availability or quoting. Returns 400 for property-mode properties, which have no rooms.

Authorizations:
bearerAuth

Responses

Request samples

curl https://www.dayletus.com/api/v1/rooms \
  -H "Authorization: Bearer dlk_live_your_key_here"

Response samples

Content type
application/json
{
  • "data": {
    }
}

List extras

Lists the active extras (add-on services and items) configured for the property. Use the returned IDs as extras[].extra_id when quoting or creating bookings. Extras with is_required: true are charged and recorded automatically on every booking — only optional extras need to be passed.

Authorizations:
bearerAuth

Responses

Request samples

curl https://www.dayletus.com/api/v1/extras \
  -H "Authorization: Bearer dlk_live_your_key_here"

Response samples

Content type
application/json
{
  • "data": {
    }
}

Availability

Query property availability

Get availability

Returns unavailable date ranges and booking restrictions for the property within a given window. Use this to pre-validate dates before quoting or creating a booking.

Ranges are half-open [start, end): the end date is checkout-style — the last blocked night is the day before end, and end itself is a valid check-in date.

Rooms-mode properties must pass room_id (availability is tracked per room); list room IDs with GET /api/v1/rooms.

Authorizations:
bearerAuth
query Parameters
from
required
string^\d{4}-\d{2}-\d{2}$
Example: from=2025-08-01

Start of the window (inclusive), ISO 8601 date

to
required
string^\d{4}-\d{2}-\d{2}$
Example: to=2025-08-31

End of the window (inclusive), ISO 8601 date

room_id
string <uuid>

Room to query. Required for rooms-mode properties; invalid otherwise.

Responses

Request samples

curl -G https://www.dayletus.com/api/v1/availability \
  -H "Authorization: Bearer dlk_live_your_key_here" \
  -d from=2025-08-01 \
  -d to=2025-08-31

Response samples

Content type
application/json
{
  • "data": {
    }
}

Pricing

Get server-computed price quotes

Get a price quote

Returns a server-computed price quote for a prospective stay. Uses the same pricing engine as the guest booking flow, so quotes and real charges never diverge. Returns 422 if pricing is not enabled for the property.

Rooms-mode properties must pass room_id (single room) or room_ids (multi-room stay) — the same rooms you would pass when creating the booking. Required extras are included in the quote automatically.

Optional discount_code previews a discount before booking — final_total already nets it out. Returns 400 if the code doesn't match an active code for this property.

Authorizations:
bearerAuth
Request Body schema: application/json
required
check_in
required
string^\d{4}-\d{2}-\d{2}$

Desired check-in date

check_out
required
string^\d{4}-\d{2}-\d{2}$

Desired check-out date

required
object

Guest counts for the stay

room_id
string <uuid> ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA...

Room to quote (rooms-mode only). Shorthand for room_ids with a single entry.

room_ids
Array of strings <uuid> non-empty [ items <uuid >^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA... ]

Rooms to quote (rooms-mode only). Use this to quote a multi-room stay — the same rooms you would pass when creating the booking.

Array of objects

Extras to include in the quote

discount_code
string non-empty

Discount code to preview. The request fails with 400 if the code doesn't match an active code for this property.

Responses

Request samples

Content type
application/json
{
  • "check_in": "2025-08-16",
  • "check_out": "2025-08-23",
  • "guests": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Bookings

Create, retrieve, and cancel bookings

Create a booking

Creates a booking for the property the API key is scoped to.

Bookings created with require_payment: false start as pending and await the owner's approval. With require_payment: true they start as awaiting_payment and are confirmed automatically once Stripe reports the payment.

When require_payment is true, a Stripe Checkout Session is created in the same request and checkout_url is returned — no second round trip needed. Pass success_url and cancel_url to redirect the guest back to your own site after payment.

Rooms-mode properties require room_ids — list them with GET /api/v1/rooms. Optional extras are passed in extras (see GET /api/v1/extras); required extras are recorded and charged automatically. Optional discount_code applies a discount — the request fails with 400 if it doesn't match an active code for this property.

When the property has deposit_enabled (see GET /api/v1/property) and require_payment is true, only the deposit is charged now — the response's deposit_amount, balance_amount, and balance_due_at describe the split, and payment_status is awaiting_deposit rather than awaiting_payment. Both fields are null when the booking isn't on a deposit.

Idempotency

Pass an Idempotency-Key header (any unique string, e.g. a UUID) to make retries safe. The first request for a key is processed and the response stored; later requests with the same key replay the stored response. A 409 is returned if the same key is reused with a different request body.

Authorizations:
bearerAuth
header Parameters
Idempotency-Key
string
Example: 550e8400-e29b-41d4-a716-446655440000

Unique string (e.g. UUID) to make the request idempotent

Request Body schema: application/json
required
check_in
required
string^\d{4}-\d{2}-\d{2}$

Check-in date

check_out
required
string^\d{4}-\d{2}-\d{2}$

Check-out date

required
object

Guest counts for the stay

room_ids
Array of strings <uuid> non-empty [ items <uuid >^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA... ]

Room IDs to book (rooms-mode properties only)

guest_name
required
string non-empty

Guest's full name

guest_email
string <email> ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z...

Guest's email address

guest_phone
string non-empty

Guest's phone number

object

Guest's billing address

Array of objects
discount_code
string non-empty

Discount code to apply. The request fails with 400 if the code doesn't match an active code for this property.

require_payment
required
boolean
Default: false

When true, a Stripe Checkout Session is created and checkout_url is returned

success_url
string <uri>

URL to redirect the guest to after successful payment

cancel_url
string <uri>

URL to redirect the guest to if they cancel payment

locale
string
Enum: "en" "fr" "es" "de"

Locale for confirmation emails

Responses

Request samples

Content type
application/json
{
  • "check_in": "2025-08-16",
  • "check_out": "2025-08-23",
  • "guests": {
    },
  • "guest_name": "Alice Smith",
  • "guest_email": "alice@example.com",
  • "require_payment": false
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get a booking

Returns the details of a single booking. The booking must belong to the property the API key is scoped to — mismatched booking IDs return 404 (not 403) to avoid confirming the existence of another owner's bookings. This is the endpoint for a "view your booking" page: fetch it by the ID returned from POST /bookings whenever the guest returns.

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid>

Booking UUID

Responses

Request samples

curl https://www.dayletus.com/api/v1/bookings/b1a2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer dlk_live_your_key_here"

Response samples

Content type
application/json
{
  • "data": {
    }
}

Cancel a booking

Cancels a booking and notifies the guest by email. Paid bookings are refused with 409 — a cancellation with money involved needs the property owner's refund decision, so it must be done from the Daylet dashboard. Bookings still awaiting_payment can be cancelled; if the guest completes a stale checkout afterwards, the payment is refunded automatically instead of confirming the booking.

Authorizations:
bearerAuth
path Parameters
id
required
string <uuid>

Booking UUID

Responses

Request samples

curl -X POST https://www.dayletus.com/api/v1/bookings/b1a2c3d4-e5f6-7890-abcd-ef1234567890/cancel \
  -H "Authorization: Bearer dlk_live_your_key_here"

Response samples

Content type
application/json
{
  • "data": {
    }
}