API reference
Endpoints
Generated from the same OpenAPI 3.1 document served at /api/v1/openapi.json — this page can never drift from the contract.
https://curatedlove.party/api/v1/bookingsCreate a booking
Creates a booking for one of the key's own events (eventId is the API-facing identifier; the event must belong to the caller's org). Reuses the exact public-booking availability and validation path. Free events (priceCents 0) confirm instantly and return `booking`; paid events return a Stripe `checkoutUrl` and the booking is confirmed once checkout completes — the API never touches card data.
Request body
eventId· string · requiredname· string · requiredemail· string · requiredseats· integer · requirednotes· string
Responses
201· Either an instantly confirmed free booking, or a Stripe checkout URL for a paid event400· The request body or query parameters failed validation401· Invalid or missing API key404· Unknown event for this org (`not_found`), or the event isn't accepting reservations (`validation_failed`)409· The event is fully booked429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/composeAI-compose an event draft
Generates a draft event (title, description, menu theme, suggested price, FAQs, tags) from a one-sentence prompt. Requires the org's plan to include the `aiMenu` entitlement in addition to API access (entitlement_required 403 otherwise). Model output is sanitized and bounded before it is returned — nothing from the model reaches the caller unchecked, and nothing is persisted automatically.
Request body
prompt· string · required
Responses
200· The generated draft400· The request body or query parameters failed validation401· Invalid or missing API key403· The org's plan doesn't include this capability429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/eventsList events
Events for the authenticated key's org, newest-agnostic order as stored, optionally filtered by status and paginated.
Parameters
status· query · stringlimit· query · integeroffset· query · integer
Responses
200· Events for the key's org401· Invalid or missing API key429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/eventsCreate an event
Creates a draft event for the key's org. Identity/ownership fields (id, orgId, slug, createdAt, status) are never client-settable — status always starts at `draft`; use POST /v1/events/{id}/publish to publish. Subject to the org's plan dinners-per-month limit (entitlement_required 403 if exceeded).
Request body
title· string · requireddate· string · requireddescription· stringmenuTheme· stringvenueName· stringvenueAddress· stringcapacity· integerpriceCents· integerdepositCents· integer | nulldurationMin· integerisPrivate· booleanfaqs· arraytags· array
Responses
201· The created event400· The request body or query parameters failed validation401· Invalid or missing API key403· The org's plan doesn't include this capability429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/events/{id}Get an event
Fetches one event owned by the key's org.
Parameters
id· path · string · required
Responses
200· The event401· Invalid or missing API key404· The resource does not exist, or does not belong to this org429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/events/{id}Update an event
Partially updates an event owned by the key's org. `status` cannot be set through this endpoint — attempting to include it in the body returns 400 validation_failed; use POST /v1/events/{id}/publish to move a draft to published.
Parameters
id· path · string · required
Request body
title· stringdate· stringdescription· stringmenuTheme· stringvenueName· stringvenueAddress· stringcapacity· integerpriceCents· integerdepositCents· integer | nulldurationMin· integerisPrivate· booleanfaqs· arraytags· array
Responses
200· The updated event400· The request body or query parameters failed validation401· Invalid or missing API key404· The resource does not exist, or does not belong to this org429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/events/{id}/bookingsList bookings for an event
All bookings (any status) for one event owned by the key's org, newest first.
Parameters
id· path · string · required
Responses
200· Bookings for the event401· Invalid or missing API key404· The resource does not exist, or does not belong to this org429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/events/{id}/publishPublish a draft event
Moves a `draft` event to `published`. Only draft events may be published — anything else returns 400 validation_failed. This is the only supported way to change an event's status via the API.
Parameters
id· path · string · required
Responses
200· The published event400· The request body or query parameters failed validation401· Invalid or missing API key404· The resource does not exist, or does not belong to this org429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/guestsList the org's Guest Book
Every distinct guest (by email) across the org's confirmed bookings. This is first-party data returned only to the org that owns it — the same data wall enforced on the dashboard; guest PII never crosses org boundaries.
Responses
200· The org's guests401· Invalid or missing API key429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/linksList short links
Short links for the authenticated key's org, each pointing at one of the org's events or an external https URL, with click counts.
Responses
200· Links for the key's org401· Invalid or missing API key429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/linksCreate a short link
Creates a short link for the key's org, pointing at either one of the org's own events (eventId) or an external https URL (url) — exactly one of the two. Identity/ownership fields (id, orgId, code, clickCount, createdAt) are never client-settable; a unique short code is generated server-side.
Request body
eventId· stringurl· stringlabel· string
Responses
201· The created link400· The request body or query parameters failed validation401· Invalid or missing API key404· The resource does not exist, or does not belong to this org429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/orgGet the org profile
The organization profile for the authenticated key.
Responses
200· The organization401· Invalid or missing API key404· The resource does not exist, or does not belong to this org429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.
https://curatedlove.party/api/v1/statsGet org stats
Revenue and totals for the authenticated key's org over a period: money made (revenueCents), plus confirmed bookings, distinct guests, and distinct events.
Parameters
period· query · string
Responses
200· Stats for the key's org over the requested period401· Invalid or missing API key429· Rate limit exceeded (60 req/min standard, 300 req/min elevated). Retry-After header included.