Skip to main content

Fake Booking and Availability API

MOCK DATA

Generate coherent reservation lifecycles and deterministic IANA-timezone availability slots with exact capacity and DST behavior.

Generated test data for fixtures and development

Base URL
/api/bookings
Category
Date & Time
Capabilities
2 routes Seedable
Last updated
July 29, 2026

GET /api/bookings

Live requestRuns against the public API
No key required
GET/api/bookings?resource=appointment&status=confirmed&timezone=Europe%2FCopenhagen&asOf=2026-07-10T12%3A00%3A00.000Z&count=8&seed=42

Request parameters

Pin appointment, room, desk or rental, or allow any.

Pin one exact lifecycle state, or allow any.

Case-insensitive canonical IANA timezone used for localStart/localEnd.

Exact number of fictional attendees or guests.

Minimum elapsed booking duration.

Maximum elapsed booking duration; must be at least minDurationMinutes.

Past/future lifecycle horizon around asOf.

Replay instant controlling lifecycle state; defaults to the request clock and is echoed.

Advanced response options7 options

How many records to generate (1–100).

Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Response format: json envelope, ndjson (one record per line) or csv.

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/bookings?resource=appointment&status=confirmed&timezone=Europe%2FCopenhagen&count=8&seed=42&asOf=2026-07-10T12%3A00%3A00.000Z"
const res = await fetch("https://randomapi.dev/api/bookings?resource=appointment&status=confirmed&timezone=Europe%2FCopenhagen&count=8&seed=42&asOf=2026-07-10T12%3A00%3A00.000Z");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/bookings?resource=appointment&status=confirmed&timezone=Europe%2FCopenhagen&count=8&seed=42&asOf=2026-07-10T12%3A00%3A00.000Z").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/bookings?resource=appointment&status=confirmed&timezone=Europe%2FCopenhagen&count=8&seed=42&asOf=2026-07-10T12%3A00%3A00.000Z"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 8
resource enum

Pin appointment, room, desk or rental, or allow any.

default: any
allowed: appointment | room | desk | rental | any
example: resource=appointment
status enum

Pin one exact lifecycle state, or allow any.

default: any
allowed: pending | confirmed | checkedIn | completed | cancelled | noShow | any
example: status=confirmed
timezone string

Case-insensitive canonical IANA timezone used for localStart/localEnd.

default: UTC
allowed: 1 – 100
example: timezone=Europe/Copenhagen
partySize int

Exact number of fictional attendees or guests.

default: 2
allowed: 1 – 12
example: partySize=4
minDurationMinutes int

Minimum elapsed booking duration.

default: 30
allowed: 15 – 480
example: minDurationMinutes=60
maxDurationMinutes int

Maximum elapsed booking duration; must be at least minDurationMinutes.

default: 120
allowed: 15 – 480
example: maxDurationMinutes=180
windowDays int

Past/future lifecycle horizon around asOf.

default: 30
allowed: 1 – 90
example: windowDays=14
asOf date

Replay instant controlling lifecycle state; defaults to the request clock and is echoed.

example: asOf=2026-07-10T12:00:00.000Z
Universal parameters Shared response and formatting options 7
count int

How many records to generate (1–100).

default: 10
allowed: 1 – 100
example: count=3
seed int

Deterministic output: the same seed always returns the same records. Omit for random (the used seed is echoed in meta.seed).

example: seed=42
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=id,resource
exclude list

Return all fields except these (comma-separated).

example: exclude=cancellationReason
format enum

Response format: json envelope, ndjson (one record per line) or csv.

default: json
allowed: json | ndjson | csv
example: format=csv
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 18
id string

Distinct fictional booking ID.

example: booking_fixture_0_a12b34c56d78ef

resource object

Synthetic resource id, type and display name.

example: {"id":"room_fixture_12ab34cd","type":"room","name":"Room 1"}

status string

Exact booking lifecycle state.

example: confirmed

timezone string

Canonical IANA display timezone.

example: Europe/Copenhagen

partySize integer

Exact requested party size.

example: 4

start string (ISO 8601)

Absolute booking start instant.

example: 2026-07-12T08:00:00.000Z

end string (ISO 8601)

Absolute booking end instant.

example: 2026-07-12T09:00:00.000Z

localStart string

Start rendered as a timezone-local wall-clock timestamp.

example: 2026-07-12T10:00:00

localEnd string

End rendered as a timezone-local wall-clock timestamp.

example: 2026-07-12T11:00:00

durationMinutes integer

Exact elapsed duration.

example: 60

customer object

Synthetic customer id, name and reserved-domain email.

example: {"id":"customer_fixture_12ab34cd","name":"Avery Jensen","email":"customer-a1b2c3d4@example.com"}

createdAt string (ISO 8601)

Creation before booking start.

example: 2026-07-01T08:00:00.000Z

confirmedAt string (ISO 8601) nullable

Confirmation time for every non-pending state.

example: 2026-07-01T09:00:00.000Z

checkedInAt string (ISO 8601) nullable

Check-in time for checked-in or completed states.

example: null

completedAt string (ISO 8601) nullable

End instant for completed state only.

example: null

cancelledAt string (ISO 8601) nullable

Pre-start cancellation time for cancelled state only.

example: null

noShowAt string (ISO 8601) nullable

End instant for no-show state only.

example: null

cancellationReason string nullable

Fixture reason for cancelled state only.

example: null

Documented examples

Build-generated requests and complete responses
2
Future Copenhagen appointments
GET /api/bookings?resource=appointment&status=confirmed&timezone=Europe%2FCopenhagen&count=8&seed=42&asOf=2026-07-10T12%3A00%3A00.000Z
{
  "data": [
    {
      "id": "booking_fixture_0_8016cfb6a5c85e",
      "resource": {
        "id": "appointment_fixture_ac58cdd4",
        "type": "appointment",
        "name": "Appointment 1"
      },
      "status": "confirmed",
      "timezone": "Europe/Copenhagen",
      "partySize": 2,
      "start": "2026-07-30T19:56:54.531Z",
      "end": "2026-07-30T21:09:54.531Z",
      "localStart": "2026-07-30T21:56:54",
      "localEnd": "2026-07-30T23:09:54",
      "durationMinutes": 73,
      "customer": {
        "id": "customer_fixture_0fb15863c1",
        "name": "Kaylie Ziemann",
        "email": "customer-d1cff872@example.com"
      },
      "createdAt": "2026-07-10T12:00:00.000Z",
      "confirmedAt": "2026-07-10T12:00:00.000Z",
      "checkedInAt": null,
      "completedAt": null,
      "cancelledAt": null,
      "noShowAt": null,
      "cancellationReason": null
    },
    {
      "id": "booking_fixture_1_f248abeccba6fd",
      "resource": {
        "id": "appointment_fixture_45df91c3",
        "type": "appointment",
        "name": "Appointment 2"
      },
      "status": "confirmed",
      "timezone": "Europe/Copenhagen",
      "partySize": 2,
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Completed room bookings
GET /api/bookings?resource=room&status=completed&partySize=6&count=5&seed=17&asOf=2026-07-10T12%3A00%3A00.000Z
{
  "data": [
    {
      "id": "booking_fixture_0_abf24f73252bc1",
      "resource": {
        "id": "room_fixture_d3605563",
        "type": "room",
        "name": "Room 1"
      },
      "status": "completed",
      "timezone": "UTC",
      "partySize": 6,
      "start": "2026-06-25T18:16:10.902Z",
      "end": "2026-06-25T19:32:10.902Z",
      "localStart": "2026-06-25T18:16:10",
      "localEnd": "2026-06-25T19:32:10",
      "durationMinutes": 76,
      "customer": {
        "id": "customer_fixture_85bfa67721",
        "name": "Miss Mary Hilpert-Welch",
        "email": "customer-97c4b917@example.com"
      },
      "createdAt": "2026-06-11T13:16:10.902Z",
      "confirmedAt": "2026-06-16T16:21:37.241Z",
      "checkedInAt": "2026-06-25T18:41:37.234Z",
      "completedAt": "2026-06-25T19:32:10.902Z",
      "cancelledAt": null,
      "noShowAt": null,
      "cancellationReason": null
    },
    {
      "id": "booking_fixture_1_7eea1d421a411b",
      "resource": {
        "id": "room_fixture_b239200a",
        "type": "room",
        "name": "Room 2"
      },
      "status": "completed",
      "timezone": "UTC",
      "partySize": 6,
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}

GET /api/bookings/availability

Live requestRuns against the public API
No key required
GET/api/bookings/availability?date=2026-07-13&timezone=Europe%2FCopenhagen&resource=room&openHour=8&closeHour=18&capacity=4

Request parameters

Date-only local calendar value (YYYY-MM-DD), restricted to 1970–2100. Offset timestamps that resolve away from UTC midnight are rejected instead of changing the requested day.

Case-insensitive canonical IANA timezone for the local date/window.

Fixture resource type used to derive capacity occupancy.

Inclusive local opening hour.

Exclusive local closing boundary; must exceed openHour.

Start-time interval measured on the local wall clock.

Exact elapsed duration; must fit inside opening hours.

Exact capacity shared by every slot.

Advanced response options4 options

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/bookings/availability?date=2026-07-13&timezone=Europe%2FCopenhagen&resource=room&openHour=8&closeHour=18&capacity=4"
const res = await fetch("https://randomapi.dev/api/bookings/availability?date=2026-07-13&timezone=Europe%2FCopenhagen&resource=room&openHour=8&closeHour=18&capacity=4");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/bookings/availability?date=2026-07-13&timezone=Europe%2FCopenhagen&resource=room&openHour=8&closeHour=18&capacity=4").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/bookings/availability?date=2026-07-13&timezone=Europe%2FCopenhagen&resource=room&openHour=8&closeHour=18&capacity=4"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 8
date date required

Date-only local calendar value (YYYY-MM-DD), restricted to 1970–2100. Offset timestamps that resolve away from UTC midnight are rejected instead of changing the requested day.

example: date=2026-07-13
timezone string

Case-insensitive canonical IANA timezone for the local date/window.

default: UTC
allowed: 1 – 100
example: timezone=Europe/Copenhagen
resource enum

Fixture resource type used to derive capacity occupancy.

default: appointment
allowed: appointment | room | desk | rental
example: resource=room
openHour int

Inclusive local opening hour.

default: 9
allowed: 0 – 22
example: openHour=8
closeHour int

Exclusive local closing boundary; must exceed openHour.

default: 17
allowed: 1 – 23
example: closeHour=18
slotMinutes int

Start-time interval measured on the local wall clock.

default: 30
allowed: 15 – 120
example: slotMinutes=30
durationMinutes int

Exact elapsed duration; must fit inside opening hours.

default: 60
allowed: 15 – 480
example: durationMinutes=60
capacity int

Exact capacity shared by every slot.

default: 1
allowed: 1 – 20
example: capacity=4
Universal parameters Shared response and formatting options 4
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=date,timezone
exclude list

Return all fields except these (comma-separated).

example: exclude=slots
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 7
date string (YYYY-MM-DD)

Requested local calendar date.

example: 2026-07-13

timezone string

Canonical IANA timezone.

example: Europe/Copenhagen

resource string

Fixture resource type.

example: room

window object

Resolved opening, interval and duration controls.

example: {"openHour":8,"closeHour":18,"slotMinutes":30,"durationMinutes":60}

slotCount integer

Exact returned slot count.

example: 19

availableCount integer

Slots with remaining capacity above zero.

example: 14

slots object[]

Ordered absolute slots with local labels and exact capacity arithmetic.

example: [{"start":"2026-07-13T06:00:00.000Z","end":"2026-07-13T07:00:00.000Z","localStart":"2026-07-13T08:00:00","localEnd":"2026-07-13T09:00:00","offsetMinutes":120,"capacity":4,"booked":1,"remaining":3,"available":true}]

Documented examples

Build-generated requests and complete responses
2
Copenhagen room availability
GET /api/bookings/availability?date=2026-07-13&timezone=Europe%2FCopenhagen&resource=room&openHour=8&closeHour=18&capacity=4
{
  "data": {
    "date": "2026-07-13",
    "timezone": "Europe/Copenhagen",
    "resource": "room",
    "window": {
      "openHour": 8,
      "closeHour": 18,
      "slotMinutes": 30,
      "durationMinutes": 60
    },
    "slotCount": 19,
    "availableCount": 15,
    "slots": [
      {
        "start": "2026-07-13T06:00:00.000Z",
        "end": "2026-07-13T07:00:00.000Z",
        "localStart": "2026-07-13T08:00:00",
        "localEnd": "2026-07-13T09:00:00",
        "offsetMinutes": 120,
        "capacity": 4,
        "booked": 3,
        "remaining": 1,
        "available": true
      },
      {
        "start": "2026-07-13T06:30:00.000Z",
        "end": "2026-07-13T07:30:00.000Z",
        "localStart": "2026-07-13T08:30:00",
        "localEnd": "2026-07-13T09:30:00",
        "offsetMinutes": 120,
        "capacity": 4,
        "booked": 0,
        "remaining": 4,
        "available": true
      },
      {
        "start": "2026-07-13T07:00:00.000Z",
        "end": "2026-07-13T08:00:00.000Z",
        "localStart": "2026-07-13T09:00:00",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
New York DST transition day
GET /api/bookings/availability?date=2026-11-01&timezone=America%2FNew_York&openHour=0&closeHour=6&slotMinutes=30&durationMinutes=30
{
  "data": {
    "date": "2026-11-01",
    "timezone": "America/New_York",
    "resource": "appointment",
    "window": {
      "openHour": 0,
      "closeHour": 6,
      "slotMinutes": 30,
      "durationMinutes": 30
    },
    "slotCount": 14,
    "availableCount": 7,
    "slots": [
      {
        "start": "2026-11-01T04:00:00.000Z",
        "end": "2026-11-01T04:30:00.000Z",
        "localStart": "2026-11-01T00:00:00",
        "localEnd": "2026-11-01T00:30:00",
        "offsetMinutes": -240,
        "capacity": 1,
        "booked": 1,
        "remaining": 0,
        "available": false
      },
      {
        "start": "2026-11-01T04:30:00.000Z",
        "end": "2026-11-01T05:00:00.000Z",
        "localStart": "2026-11-01T00:30:00",
        "localEnd": "2026-11-01T01:00:00",
        "offsetMinutes": -240,
        "capacity": 1,
        "booked": 0,
        "remaining": 1,
        "available": true
      },
      {
        "start": "2026-11-01T05:00:00.000Z",
        "end": "2026-11-01T05:30:00.000Z",
        "localStart": "2026-11-01T01:00:00",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}

About this API

Coverage & behavior

Generates vendor-neutral fictional booking lifecycles for appointments, rooms, desks and rentals. Each status owns a strict timestamp mask: future pending/confirmed bookings have no attendance dates, checked-in bookings contain the replay instant, completed and no-show bookings end no later than asOf, and cancellation metadata exists only for cancelled bookings.

The /availability route is a deterministic compute fixture, not a live inventory feed. It resolves each bounded wall-clock start against the requested IANA timezone, so nonexistent minutes during a DST jump are absent and repeated minutes during a fold remain distinct absolute slots. Capacity, booked and remaining values reconcile exactly for every slot.

All customer identities are synthetic and use reserved domains. Availability generates at most 92 requested wall-clock labels before resolving real gap/fold candidates, and its date range is deliberately 1970–2100. Lifecycle records contain no unbounded event history.

Use it for

  • Populate reservation lists and status-specific booking details
  • Test availability pickers across capacity and DST boundaries
  • Exercise cancellation, check-in, completion and no-show UI states

Frequently asked questions

Do booking timestamps agree with status?

Yes. Every lifecycle state has an exclusive, tested date mask relative to the echoed asOf anchor.

Does availability handle daylight saving time?

Yes. Slots are discovered from absolute instants in the selected IANA zone, so DST gaps are omitted and folded local times remain distinct instants.

Is this live availability?

No. It is deterministic mock capacity data for UI and integration tests, never a claim about a real resource.

Standards & references