Skip to content

One store's creator bookings

GET
/locations/{partner_location_id}/reservations
curl --request GET \
--url 'https://data.creatorain.com/partner/v1/locations/store_123/reservations?from=2026-09-01&to=2026-09-30&status=pending&acknowledged=false&limit=50' \
--header 'Authorization: Bearer <token>'

The main query behind a merchant’s dashboard. Newest touched first.

EITHER CREDENTIAL: the partner key or that store’s own token.

acknowledged=false narrows it to the bookings nobody at the restaurant has confirmed seeing, which is what a merchant’s own “still to confirm” panel filters on.

NO PERSONAL DATA IS RETURNED, and there is no free-text search parameter, because our reservation search index is built from exactly the fields this projection withholds.

partner_location_id
required
string
<= 200 characters

YOUR id for the store, as you sent it to POST /locations.

Example

store_123
from
string format: date

Earliest VISIT DATE to include, YYYY-MM-DD in the store’s own calendar. A value we cannot read is refused rather than ignored: a reconciliation run whose window was silently dropped would read the whole book and report it as one month.

Example

2026-09-01
to
string format: date

Latest VISIT DATE to include, YYYY-MM-DD, inclusive.

Example

2026-09-30
status
string
Allowed values: pending confirmed rejected cancelled completed no_show

Return only bookings in this state.

acknowledged
boolean

true for bookings a human at the restaurant has confirmed seeing (you told us so with POST /reservations/{reservation_id}/acknowledge), false for the ones nobody has. Omit it for both.

1 and 0 are accepted as well. ANY OTHER VALUE IS REFUSED with 400 validation_error rather than ignored, and that is on purpose: a follow-up list that silently returned every booking would show your desk a queue of work that has already been done.

Example

false
cursor
string

The next_cursor from the previous page, sent back UNCHANGED. Omit it for the first page.

It is opaque: do not build one yourself. It names a POSITION in the sort order rather than a count of rows to skip, which is why a page stays stable when a booking is touched between two requests. A cursor we did not issue is refused with 400 validation_error, rather than silently treated as the first page, so a broken client fails loudly instead of looping over page one for ever.

limit
integer
default: 50 >= 1 <= 200

Rows per page. Default 50, maximum 200. A larger value is CLAMPED to 200 rather than refused, so you never have to guess the ceiling.

A page of bookings.

Media typeapplication/json
object
items
required
Array<object>

One creator booking. NO PERSONAL DATA: no guest name, email or phone, no internal notes, and no free-text party note (those routinely carry dietary and medical detail).

object
booked_by

Who made the booking. Every booking on this API is a CreatoRain creator visit, so this is always creatorain. Also on the reservation webhook events.

string
Allowed values: creatorain
no_charge

Always true: the visit is at no charge to the store (show it as “CreatoRain, no charge”). Also on the reservation webhook events.

boolean
reservation_id
string format: uuid
status
string
Allowed values: pending confirmed rejected cancelled completed no_show
arrive_at

RFC 3339 with the STORE’S offset. The digits are the restaurant’s wall clock, so render them as they are; do not convert.

string
nullable
timezone
string
nullable
party_size

How many people are coming, the creator included. Always a number: 2 (the creator plus one guest) when the booking does not state one. The same value the webhook events send.

integer
creator

As much of the creator as an outside system may see. Their contact details are never returned on this API.

object
handle

Their public handle.

string
nullable
followers

Cross-platform follower total, not one platform’s count.

integer
nullable
platforms

The platforms they publish on. Always an array, never null.

Array<string>
dish

The dish chosen for this booking, or null when none was chosen. Never a guess from the store’s menu. The same value the webhook events send.

string
nullable
created_at

RFC 3339 with the store’s offset.

string
nullable
updated_at

RFC 3339 with the store’s offset. This is the sort key of the list.

string
nullable
acknowledged_at

When a human at the restaurant told us they had seen this booking, RFC 3339 with the STORE’S offset. Null when nobody has, which is what acknowledged=false filters on.

THE EARLIEST ACKNOWLEDGEMENT, not the latest. A booking can carry both kinds (forwarded to the manager, and acknowledged), and the question this answers is “has anybody seen this yet, and when”.

string
nullable
acknowledged_kind

Which kind that earliest acknowledgement was. Null when there is none.

string
nullable
Allowed values: forwarded_to_manager acknowledged_self
partner_location_id

Present only on GET /reservations, where a row has to say which store it belongs to.

string
location_id

Present only on GET /reservations.

string format: uuid
next_cursor
required

Send this back as cursor for the next page. NULL means this was the last page, and it is honest about that: we read one row beyond your limit to answer the question, so a page that happens to be exactly full does not cost you an extra empty request.

string
nullable

Example

{
"items": [
{
"booked_by": "creatorain",
"no_charge": true,
"status": "pending",
"arrive_at": "2026-09-14T19:00:00-07:00",
"timezone": "America/Los_Angeles",
"party_size": 2,
"creator": {
"handle": "example_creator",
"followers": 48213,
"platforms": [
"instagram",
"tiktok"
]
},
"acknowledged_at": "2026-09-11T16:04:12-07:00",
"acknowledged_kind": "forwarded_to_manager"
}
]
}

validation_error. field names the offending parameter.

Media typeapplication/json
object
error
required
object
code
required

The stable value to branch on.

string
Allowed values: unauthorized forbidden_ip rate_limited validation_error location_already_exists location_not_found location_terminated reservation_not_found conflict internal_error
message
required

A human sentence. Copy, not contract; it may be reworded.

string
field

The request field at fault, dotted for a nested one (plan.term_months).

string

Example

{
"error": {
"code": "unauthorized"
}
}

unauthorized. A missing, malformed, unknown or revoked key; or an invalid, expired or wrong-store dashboard token. One answer for every case on purpose: the holder of a bad credential learns nothing from the difference.

Media typeapplication/json
object
error
required
object
code
required

The stable value to branch on.

string
Allowed values: unauthorized forbidden_ip rate_limited validation_error location_already_exists location_not_found location_terminated reservation_not_found conflict internal_error
message
required

A human sentence. Copy, not contract; it may be reworded.

string
field

The request field at fault, dotted for a nested one (plan.term_months).

string

Example

{
"error": {
"code": "unauthorized"
}
}

location_not_found. No store of this key carries that partner_location_id.

Media typeapplication/json
object
error
required
object
code
required

The stable value to branch on.

string
Allowed values: unauthorized forbidden_ip rate_limited validation_error location_already_exists location_not_found location_terminated reservation_not_found conflict internal_error
message
required

A human sentence. Copy, not contract; it may be reworded.

string
field

The request field at fault, dotted for a nested one (plan.term_months).

string

Example

{
"error": {
"code": "unauthorized"
}
}

rate_limited. Over this key’s requests-per-minute ceiling.

Media typeapplication/json
object
error
required
object
code
required

The stable value to branch on.

string
Allowed values: unauthorized forbidden_ip rate_limited validation_error location_already_exists location_not_found location_terminated reservation_not_found conflict internal_error
message
required

A human sentence. Copy, not contract; it may be reworded.

string
field

The request field at fault, dotted for a nested one (plan.term_months).

string

Example

{
"error": {
"code": "unauthorized"
}
}