Developer

API

Get request

Fetch a single booking request by id, with contact, address, selected services, preferred times, and intake responses.

Updated Sep 30, 2026

Returns one booking request. The response is the request object itself, with no wrapper.

GET/api/v1/requests/[id]
A single booking request, with all customer-supplied fields.

Path parameters

idrequired
uuid
Request id. Get it from List requests or from data.request_id in a webhook payload. Must be a valid UUID.

Example request

curl https://api.servicereserve.com/api/v1/requests/f0e9c1d8-94c3-4d50-8f81-2b63f4a47a4c \
-H "Authorization: Bearer $SERVICERESERVE_API_KEY"

Example response

{
"id": "f0e9c1d8-94c3-4d50-8f81-2b63f4a47a4c",
"form_id": "bd28906b-7f9a-4aaf-ab86-85c1a1ccd4f2",
"business_profile_id": "52c58cc6-c7fb-4419-ad88-9c4a0e89ad2f",
"first_name": "Jane",
"last_name": "Doe",
"email": "[email protected]",
"phone": "+15555550123",
"company": null,
"address": "123 Main St",
"address_2": "Unit 4",
"city": "Austin",
"state": "TX",
"zip": "78701",
"country": "US",
"source": null,
"status": "complete",
"lead_status": "new",
"selected_services": [
  "6d1f0c2a-3b4e-4f5a-9c8d-7e6f5a4b3c2d"
],
"preferred_times": [
  { "date": "2026-10-06", "slot": "morning" }
],
"intake_responses": [
  {
    "question_id": "0a9b8c7d-6e5f-4a3b-8c2d-1e0f9a8b7c6d",
    "scope": "template",
    "scope_ref_id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
    "scope_ref_name": "Plumbing services",
    "type": "select",
    "question": "How old is the system?",
    "options": ["Under 5 years", "5-10 years", "Over 10 years"],
    "required": true,
    "answer": "5-10 years"
  }
],
"attribution": {
  "source": null,
  "page_url": "https://example.com/book?utm_source=google&utm_medium=cpc",
  "referrer": "https://www.google.com/",
  "utm_source": "google",
  "utm_medium": "cpc"
},
"entrance_info": "Gate code 1234",
"internal_notes": "Customer prefers AM appointments",
"created_at": "2026-09-29T18:33:42.000Z",
"updated_at": "2026-09-29T19:02:10.000Z",
"completed_at": "2026-09-29T18:33:42.000Z"
}

How to use

There are no query parameters. The id is the whole query. Get ids from List requests, or from data.request_id in a webhook payload.

ID=f0e9c1d8-94c3-4d50-8f81-2b63f4a47a4c
curl "https://api.servicereserve.com/api/v1/requests/$ID" \
  -H "Authorization: Bearer $SERVICERESERVE_API_KEY"

The id must be a valid UUID.

Errors

An id that doesn't exist, or that belongs to another workspace, returns 404 (not 403). That way the endpoint doesn't reveal which ids exist in other workspaces.

{ "error": "not_found", "message": "Lead not found" }

See Authentication for the other status codes.

Rate limit

Each API key can make 1 request per second. Excess calls return 429 Too Many Requests with a Retry-After header. Wait that many seconds before you retry.

Field reference

id
uuid
Request id.
form_id
uuid | null
Booking form the request came through.
business_profile_id
uuid | null
Business profile (location) the request was routed to.
first_name, last_name, email, phone, company
string | null
Customer contact fields. Null when the form didn't ask for the field or the customer left it blank.
address, address_2, city, state, zip, country
string | null
Service address, as flat fields.
source
string | null
Channel tag: the ?source= or ?ref= URL parameter, the embed's data-source attribute, or google_rwg for Reserve with Google bookings.
status
string | null
complete for every booking submitted through the widget. Older rows may be incomplete or null.
lead_status
string
Pipeline stage key from your workspace's request statuses. The defaults are new, contacted, qualified, won, and lost.
selected_services
string[] | null
Ids (UUIDs) of the services the customer picked. Only the ids are stored, not names or prices, so resolve them against your own service catalog.
preferred_times
array | null
The customer's chosen time, as { date, slot }. date is YYYY-MM-DD. slot is a start time such as 09:00, or morning / afternoon. Empty array when no time was picked.
intake_responses
array | null
One object per intake question answered: question_id, scope (template, category, or service), scope_ref_id, scope_ref_name, type, question, options, required, answer. answer can be a string, string array, number, object of numbers, or a file object { key, url, name, size, mime_type }.
attribution
object | null
Flat string map captured at submission: source, page_url, referrer, any utm_* tags, and click ids such as gclid or fbclid. Every key is optional.
entrance_info
string | null
Access notes the customer typed (gate code, parking).
internal_notes
string | null
Team-only notes edited from the request detail page. Distinct from entrance_info.
created_at
ISO 8601 string
When the request was created (UTC).
updated_at
ISO 8601 string | null
Last time the row changed.
completed_at
ISO 8601 string | null
When the customer completed the booking.

Related