Download OpenAPI specification:
The Check Cherry Business API allows automated access to events, leads, bookings, and other business-specific features for individual Check Cherry accounts.
Base URL — All API requests should be made to:
https://api.checkcherry.com/api/v1/
All endpoints in this documentation are relative to this base URL.
Setup:
ik_) and use it to authenticate your requestsEach integration key is tied to a specific user, providing an audit trail and user-level permissions. You can create multiple keys and revoke them individually.
Versioning & Stability — This API is under active development. The API surface will evolve as we ship new features and improve existing ones. Please build your integrations with this in mind:
Pass your integration key as an Api-Key HTTP header with every request:
curl -H "Api-Key: ik_your_key_here" https://api.checkcherry.com/api/v1/leads
The key identifies both the business and the user automatically.
Security:
Check Cherry reserves the right to revoke any API key or suspend any account that appears to be compromised, is being used in violation of our terms of service, or is abusing the platform. This includes but is not limited to excessive requests, unauthorized data access, or any activity that degrades the service for other users.
Request format — Send JSON request bodies with the Content-Type: application/json
header for POST, PUT, and PATCH requests.
Response format — All responses follow the JSON:API format:
{
"data": {
"id": "123",
"type": "lead",
"attributes": { "first_name": "Jane", "email": "jane@example.com" },
"relationships": { ... }
}
}
Error responses use this structure:
{
"meta": { "status": "error" },
"status": "unauthorized",
"reason": "api_key_missing",
"message": "API key is required"
}
Pagination — List endpoints support pagination via page and per query parameters.
Responses include a meta object with pagination details:
{
"data": [ ... ],
"meta": { "total_count": 142, "per_page": 25, "page": 1, "total_pages": 6 }
}
Stop paging once page reaches total_pages. Requesting a page beyond the end
of the result set is not useful, and the search index cannot reach past the
first 10,000 results however you page to them.
This API is versioned v1 and that version does not move — we add endpoints and
fields rather than break integrations that work. New endpoints, new fields, and
newly documented behavior are listed at
checkcherry.com/api/changelog.
Check Cherry support can help with:
Check Cherry support cannot help with:
You are responsible for developing and maintaining your own integrations. These API docs include endpoint descriptions, parameter details, and response examples — we recommend using them alongside AI coding assistants (such as ChatGPT or Claude) to help build and troubleshoot your integration.
For platform issues, contact support@checkcherry.com.
Rate limiting — Check Cherry enforces rate limits on API requests. Specific limits
may vary based on your plan and endpoint, but typical usage should not encounter them.
If the rate limit is exceeded, Check Cherry returns a 403 Forbidden with an associated
"Rate Limit Exceeded" message. Back off and retry after a brief delay. Intentional or
repeated abuse of rate limits may result in your API key being revoked or your account
being suspended.
Leads represent potential customer inquiries — someone who has expressed interest in booking an event but hasn't yet committed. A lead captures contact information, event preferences, venue details, and any messages from the initial inquiry.
Use the Leads API to push inquiries from external sources (your website, third-party platforms, advertising campaigns) into Check Cherry, where they enter the business's sales pipeline. Leads can be assigned to staff members for follow-up, filtered and searched, and eventually converted into confirmed events.
Returns the full set of booking questions and their current answers for a lead. Each entry includes the question's column_name, label, kind, current value, and formatted_value.
Use the column_name of each entry as the key when sending updates via the PATCH /api/v1/leads/{lead_id}/booking_questions endpoint.
Required permission: lead_read
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "84",
- "type": "lead_booking_question",
- "attributes": {
- "id": 84,
- "lead_id": 724,
- "booking_question_id": 84,
- "editable": true,
- "column_name": "guest_count",
- "name": "Estimated Guest Count",
- "label": "Estimated guest count",
- "kind": "text",
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_source",
- "type": "lead_booking_question",
- "attributes": {
- "id": "utm_source",
- "lead_id": 724,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_source",
- "name": "UTM Source",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_campaign",
- "type": "lead_booking_question",
- "attributes": {
- "id": "utm_campaign",
- "lead_id": 724,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_campaign",
- "name": "UTM Campaign",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_medium",
- "type": "lead_booking_question",
- "attributes": {
- "id": "utm_medium",
- "lead_id": 724,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_medium",
- "name": "UTM Medium",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_term",
- "type": "lead_booking_question",
- "attributes": {
- "id": "utm_term",
- "lead_id": 724,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_term",
- "name": "UTM Term",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_content",
- "type": "lead_booking_question",
- "attributes": {
- "id": "utm_content",
- "lead_id": 724,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_content",
- "name": "UTM Content",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}
]
}Updates one or more booking question answers on the lead. The body's custom_questions keys must match the column_name of each booking question (as returned by the GET endpoint).
Only the keys you include are touched — other answers on the lead are preserved.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
required | object Keys are booking-question column names; values are the answer to record. |
{- "custom_questions": { }
}{- "meta": {
- "status": "ok"
}
}Returns a paginated list of bookings attached to leads (potential customers who have not yet been converted to a confirmed event). Results can be filtered by date range and brand.
Use the include query parameter to sideload related resources (comma-separated). Available: lead_add_ons, lead_extras, lead_booking_extra_categories, lead_booking_extra_categories.lead_extras, photobooth_background.
Required permission: lead_read
| event_date_start | string Event Date (Start) |
| event_date_end | string Event Date (End) |
| page | integer Page number for pagination (default: 1) |
| per | integer Number of results per page |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "520",
- "type": "lead_booking",
- "attributes": {
- "id": 520,
- "lead_id": 726,
- "event_type_id": 3620,
- "starts_at": "2026-08-27T07:00:00.000-07:00",
- "ends_at": "2026-08-27T12:00:00.000-07:00",
- "staff_id": null,
- "staff_name": null,
- "name": "Saul",
- "service_name": "Photo booth 72",
- "package_group_name": "Sample",
- "title": "John Smith",
- "brand_name": "Okuneva-Kihn 581",
- "date_mode": "date_time",
- "length_in_minutes": null,
- "length_in_days": null,
- "units": null,
- "package_unit_range_id": null,
- "event_type_unit_range": null,
- "formatted_date_range": "Thursday, August 27, 2026",
- "formatted_time_range": "7:00 AM - 12:00 PM",
- "formatted_units": null,
- "preview_image": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "relationships": {
- "lead_add_ons": {
- "data": [ ]
}, - "lead_extras": {
- "data": [ ]
}, - "lead_booking_extra_categories": {
- "data": [ ]
}, - "photobooth_background": {
- "data": null
}
}
}
]
}Returns the full details of a single lead booking.
Use the include query parameter to sideload related resources (comma-separated). Available: lead_add_ons, lead_extras, lead_booking_extra_categories, lead_booking_extra_categories.lead_extras, photobooth_background.
Required permission: lead_read
| lead_booking_id required | integer Lead Booking ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "521",
- "type": "lead_booking",
- "attributes": {
- "id": 521,
- "lead_id": 727,
- "event_type_id": 3621,
- "starts_at": "2026-08-27T07:00:00.000-07:00",
- "ends_at": "2026-08-27T12:00:00.000-07:00",
- "staff_id": null,
- "staff_name": null,
- "name": "Alberta",
- "service_name": "Photo booth 73",
- "package_group_name": "Sample",
- "title": "John Smith",
- "brand_name": "Quitzon-Dicki 585",
- "date_mode": "date_time",
- "length_in_minutes": null,
- "length_in_days": null,
- "units": null,
- "package_unit_range_id": null,
- "event_type_unit_range": null,
- "formatted_date_range": "Thursday, August 27, 2026",
- "formatted_time_range": "7:00 AM - 12:00 PM",
- "formatted_units": null,
- "preview_image": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "relationships": {
- "lead_add_ons": {
- "data": [ ]
}, - "lead_extras": {
- "data": [ ]
}, - "lead_booking_extra_categories": {
- "data": [ ]
}, - "photobooth_background": {
- "data": null
}
}
}
}Updates the package, schedule, length, or requested staff member of an existing lead booking. Only the fields included in the request are changed; send staff_id as an empty string to clear the staff request.
Required permission: lead_write
| lead_booking_id required | integer Lead Booking ID |
| Api-Key required | string Your Integration Key |
| event_type_id | integer Package (event type) ID |
| event_category_id | integer Service (event category) ID |
| package_group_id | integer Package group ID |
| starts_at_date | string Event date (e.g. 2026-09-15) |
| starts_at_time | string Event start time (e.g. 06:00 PM) |
| length_in_minutes | integer Length in minutes (for time-based packages) |
| length_in_days | integer Length in days (for multi-day packages) |
| units | integer Number of units (for per-unit packages) |
| package_unit_range_id | integer Selected package unit range ID |
| staff_id | integer Staff member requested for this package. Send an empty string to clear it. |
{- "event_type_id": 0,
- "event_category_id": 0,
- "package_group_id": 0,
- "starts_at_date": "string",
- "starts_at_time": "string",
- "length_in_minutes": 0,
- "length_in_days": 0,
- "units": 0,
- "package_unit_range_id": 0,
- "staff_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "522",
- "type": "lead_booking",
- "attributes": {
- "id": 522,
- "lead_id": 728,
- "event_type_id": 3622,
- "starts_at": "2026-08-27T21:00:00.000-07:00",
- "ends_at": "2026-08-28T02:00:00.000-07:00",
- "staff_id": 6029,
- "staff_name": "Steve O'Kon",
- "name": "Todd",
- "service_name": "Photo booth 74",
- "package_group_name": "Sample",
- "title": "John Smith",
- "brand_name": "Franecki Inc 589",
- "date_mode": "date_time",
- "length_in_minutes": null,
- "length_in_days": null,
- "units": null,
- "package_unit_range_id": null,
- "event_type_unit_range": null,
- "formatted_date_range": "Thursday, August 27, 2026",
- "formatted_time_range": "9:00 PM - 2:00 AM",
- "formatted_units": null,
- "preview_image": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "relationships": {
- "lead_add_ons": {
- "data": [ ]
}, - "lead_extras": {
- "data": [ ]
}, - "lead_booking_extra_categories": {
- "data": [ ]
}, - "photobooth_background": {
- "data": null
}
}
}
}Adds a new booking (package selection) to an existing lead. Staff is requested per package, so each booking carries its own staff_id.
Required permission: lead_write
| lead_id required | integer Lead ID |
| Api-Key required | string Your Integration Key |
| event_type_id | integer Package (event type) ID |
| event_category_id | integer Service (event category) ID |
| package_group_id | integer Package group ID |
| starts_at_date | string Event date (e.g. 2026-09-15) |
| starts_at_time | string Event start time (e.g. 06:00 PM) |
| length_in_minutes | integer Length in minutes (for time-based packages) |
| length_in_days | integer Length in days (for multi-day packages) |
| units | integer Number of units (for per-unit packages) |
| package_unit_range_id | integer Selected package unit range ID |
| staff_id | integer Staff member requested for this package |
{- "event_type_id": 0,
- "event_category_id": 0,
- "package_group_id": 0,
- "starts_at_date": "string",
- "starts_at_time": "string",
- "length_in_minutes": 0,
- "length_in_days": 0,
- "units": 0,
- "package_unit_range_id": 0,
- "staff_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "525",
- "type": "lead_booking",
- "attributes": {
- "id": 525,
- "lead_id": 730,
- "event_type_id": 3624,
- "starts_at": "2026-09-03T18:00:00.000-07:00",
- "ends_at": "2026-09-03T23:00:00.000-07:00",
- "staff_id": 6031,
- "staff_name": "Fredericka Rempel",
- "name": "Emerita",
- "service_name": "Photo booth 76",
- "package_group_name": "Sample",
- "title": "John Smith",
- "brand_name": "Wiegand, Hand and Veum 597",
- "date_mode": "date_time",
- "length_in_minutes": null,
- "length_in_days": null,
- "units": null,
- "package_unit_range_id": null,
- "event_type_unit_range": null,
- "formatted_date_range": "Thursday, September 3, 2026",
- "formatted_time_range": "6:00 PM - 11:00 PM",
- "formatted_units": null,
- "preview_image": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "relationships": {
- "lead_add_ons": {
- "data": [ ]
}, - "lead_extras": {
- "data": [ ]
}, - "lead_booking_extra_categories": {
- "data": [ ]
}, - "photobooth_background": {
- "data": null
}
}
}
}Adds an add-on to a lead booking.
Required permission: lead_write
| lead_booking_id required | integer Lead Booking ID |
| Api-Key required | string Your Integration Key |
| add_on_id required | integer Add-on ID |
| quantity | integer Quantity (default: 1) |
{- "add_on_id": 0,
- "quantity": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "11",
- "type": "lead_add_on",
- "attributes": {
- "id": 11,
- "quantity": 1,
- "lead_booking_id": 526,
- "name": "Bubble Machine Number 7",
- "add_on_name": "Bubble Machine Number 7",
- "add_on_description": "Thousands of bubbles ready for that special moment",
- "include_at_no_charge": false,
- "automatically_added_by_package": false,
- "add_on_price": "10.00",
- "add_on_price_cents": 1000,
- "add_on_price_currency": "USD",
- "add_on_price_formatted": "$10",
- "taxable": true
}, - "relationships": {
- "add_on": {
- "data": {
- "id": "310",
- "type": "add_on"
}
}, - "lead_booking": {
- "data": {
- "id": "526",
- "type": "lead_booking"
}
}
}
}
}Assigns a photobooth backdrop to a lead booking, replacing any existing selection.
Required permission: lead_write
| lead_booking_id required | integer Lead Booking ID |
| Api-Key required | string Your Integration Key |
| photobooth_background_id required | integer Backdrop (photobooth background) ID |
{- "photobooth_background_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "149",
- "type": "photobooth_background",
- "attributes": {
- "id": 149,
- "name": "Sample Background 3",
- "description": "Sample description",
- "position": 1,
- "backdrop_category_id": 174,
- "video_url": null,
- "third_party_video_id": null,
- "include_at_no_charge_with_certain_packages": false,
- "price": "100.00",
- "price_cents": 10000,
- "price_currency": "USD",
- "price_formatted": "$100",
- "taxable": true,
- "primary_image": {
- "video_variant": null,
- "content_type": "image/png",
}, - "additional_images": [ ],
- "archived": false
}, - "relationships": {
- "backdrop_category": {
- "data": {
- "id": "174",
- "type": "backdrop_category"
}
}
}
}
}Clears the photobooth backdrop selection on a lead booking.
Required permission: lead_write
| lead_booking_id required | integer Lead Booking ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Creates a new lead for the specified business. A lead represents a potential customer inquiry that can later be converted into a confirmed event.
At minimum, an email address is required. All other fields are optional but recommended for a complete lead record.
The staff_id field requests a staff member for the lead's package. It carries through to the booking when the lead converts. The former name employee_id is still accepted for backwards compatibility; staff_id takes precedence if both are sent.
Required permission: lead_create
| Api-Key required | string Your Integration Key |
| first_name | string Contact first name |
| last_name | string Contact last name |
| email required | string Contact email address |
| phone | string Contact phone number |
| company_name | string Business or organization name |
| staff_id | integer Staff member ID requested for the lead's package |
| lead_source | string Enum: "Manual Entry" "Lead Form" "Online Booking" "App" "Zapier" "API" "Wedding Wire" How the lead was acquired |
| contact_preference | string Enum: "Email" "Phone" "Text Message" How the lead prefers to be contacted |
| lead_type | string Custom label for categorizing the lead |
| notes | string Private internal notes about this lead |
| event_date | string Requested event date (YYYY-MM-DD) |
| event_time | string Requested event start time |
| length_in_minutes | integer Requested event duration in minutes |
| estimated_budget | number Estimated event budget |
| estimated_number_guests | integer Estimated number of guests |
| venue_name | string Event venue name |
| venue_address | string Venue street address |
| venue_city | string Venue city |
| venue_state | string Venue state |
| venue_zip | string Venue ZIP code |
| indoor_outdoor | string Enum: "Indoor" "Outdoor" Venue type |
| service_id | integer Service (package group) ID the lead is interested in |
| package_id | integer Package (event type) ID the lead is interested in |
| referred_by_user_id | integer ID of the staff member who referred this lead |
| next_follow_up_on | string Next follow-up date (YYYY-MM-DD) |
| subject | string Message subject from the lead inquiry |
| message | string Message body from the lead inquiry |
| utm_source | string UTM source tracking parameter |
| utm_campaign | string UTM campaign tracking parameter |
| utm_medium | string UTM medium tracking parameter |
| utm_term | string UTM term tracking parameter |
| utm_content | string UTM content tracking parameter |
| gclid | string Google Click ID for ad tracking |
| custom_questions | object Responses to custom booking questions configured by the business, as key-value pairs |
{- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "phone": "string",
- "company_name": "string",
- "staff_id": 0,
- "lead_source": "Manual Entry",
- "contact_preference": "Email",
- "lead_type": "string",
- "notes": "string",
- "event_date": "string",
- "event_time": "string",
- "length_in_minutes": 0,
- "estimated_budget": 0,
- "estimated_number_guests": 0,
- "venue_name": "string",
- "venue_address": "string",
- "venue_city": "string",
- "venue_state": "string",
- "venue_zip": "string",
- "indoor_outdoor": "Indoor",
- "service_id": 0,
- "package_id": 0,
- "referred_by_user_id": 0,
- "next_follow_up_on": "string",
- "subject": "string",
- "message": "string",
- "utm_source": "string",
- "utm_campaign": "string",
- "utm_medium": "string",
- "utm_term": "string",
- "utm_content": "string",
- "gclid": "string",
- "custom_questions": { }
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "734",
- "type": "lead",
- "attributes": {
- "id": 734,
- "email": "jsmith@gmail.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": "Test",
- "notes": "",
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "API",
- "indoor_outdoor": null,
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15120,
- "brand_name": "Nikolaus Group 614",
- "created_at": "2026-08-13T17:24:57.458-07:00",
- "token": "PKG-YFVZ-T76",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": null,
- "phone_normalized": "",
- "starts_at": null,
- "ends_at": null,
- "length_in_hours": null,
- "length_in_minutes": null,
- "length_in_days": null,
- "event_time": null,
- "event_type_id": null,
- "event_date": null,
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": null,
- "formatted_time_range": "",
- "formatted_date_range": "",
- "formatted_datetime_range": "",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-614-56287934.cc.localhost/reservation/resume?lead_id=734&token=PKG-YFVZ-T76"
}, - "relationships": {
- "lead_bookings": {
- "data": [
- {
- "id": "529",
- "type": "lead_booking"
}
]
}
}
}
}Returns a paginated list of leads for the specified business. Results can be filtered by email address for exact matching, or by a text query that performs a full-text search across lead names, email, phone, venue, and notes.
Each lead includes booking details (event date, start/end time, length, package name, service name) from its primary lead booking, flattened directly into the lead attributes.
Use the include query parameter to sideload related resources (comma-separated). Available: lead_bookings.
The response includes meta.total_count (total matching leads) and meta.per_page (results per page) to support pagination.
Required permission: lead_read
string Filter leads by exact email address match | |
| text | string Full-text search across lead name, email, phone, venue, and notes |
| page | integer Page number for pagination (default: 1) |
| per | integer Number of results per page (default: 25) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 1,
- "per_page": 25,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "735",
- "type": "lead",
- "attributes": {
- "id": 735,
- "email": "john.smith250@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15121,
- "brand_name": "Gutmann-Kohler 615",
- "created_at": "2026-08-13T17:24:57.564-07:00",
- "token": "3PT-GWRN-YKQ",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": "2026-08-27T16:00:00.000-07:00",
- "ends_at": "2026-08-28T00:00:00.000-07:00",
- "length_in_hours": 8,
- "length_in_minutes": 480,
- "length_in_days": null,
- "event_time": "4:00pm",
- "event_type_id": null,
- "event_date": "08-27-2026",
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": 8,
- "formatted_time_range": "4:00 PM - 12:00 AM",
- "formatted_date_range": "August 27 - August 28, 2026",
- "formatted_datetime_range": "Thursday, August 27, 2026 • 4:00 PM - 12:00 AM",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-615-95cf8e28.cc.localhost/reservation/resume?lead_id=735&token=3PT-GWRN-YKQ"
}, - "relationships": {
- "lead_bookings": {
- "data": [
- {
- "id": "530",
- "type": "lead_booking"
}
]
}
}
}
]
}Updates an existing lead with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.
Use this to update contact information, venue details, event preferences, status flags (spam, archived), or reassign the lead to a different staff member.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead to update |
| Api-Key required | string Your Integration Key |
| first_name | string Contact first name |
| last_name | string Contact last name |
string Contact email address | |
| phone | string Contact phone number |
| company_name | string Business or organization name |
| staff_id | integer Staff member ID requested for the lead's package |
| lead_source | string How the lead was acquired |
| contact_preference | string Enum: "Email" "Phone" "Text Message" How the lead prefers to be contacted |
| lead_type | string Custom label for categorizing the lead |
| notes | string Private internal notes about this lead |
| starts_at_date | string Requested event date (YYYY-MM-DD) |
| starts_at_time | string Requested event start time |
| length_in_minutes | integer Requested event duration in minutes |
| estimated_budget | number Estimated event budget |
| estimated_number_guests | integer Estimated number of guests |
| venue_name | string Event venue name |
| venue_address | string Venue street address |
| venue_city | string Venue city |
| venue_state | string Venue state |
| venue_zip | string Venue ZIP code |
| indoor_outdoor | string Enum: "Indoor" "Outdoor" Venue type |
| service_id | integer Service (package group) ID the lead is interested in |
| package_id | integer Package (event type) ID the lead is interested in |
| brand_id | integer Brand ID to associate with this lead |
| spam | boolean Mark lead as spam |
| archived | boolean Archive the lead |
| next_follow_up_on | string Next follow-up date (YYYY-MM-DD) |
| custom_questions | object Responses to custom booking questions, as key-value pairs |
{- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "phone": "string",
- "company_name": "string",
- "staff_id": 0,
- "lead_source": "string",
- "contact_preference": "Email",
- "lead_type": "string",
- "notes": "string",
- "starts_at_date": "string",
- "starts_at_time": "string",
- "length_in_minutes": 0,
- "estimated_budget": 0,
- "estimated_number_guests": 0,
- "venue_name": "string",
- "venue_address": "string",
- "venue_city": "string",
- "venue_state": "string",
- "venue_zip": "string",
- "indoor_outdoor": "Indoor",
- "service_id": 0,
- "package_id": 0,
- "brand_id": 0,
- "spam": true,
- "archived": true,
- "next_follow_up_on": "string",
- "custom_questions": { }
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "736",
- "type": "lead",
- "attributes": {
- "id": 736,
- "email": "john.smith252@example.com",
- "first_name": "Jane",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": "Updated via API",
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "Jane Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15124,
- "brand_name": "Shanahan-Wunsch 618",
- "created_at": "2026-08-13T17:24:57.832-07:00",
- "token": "X2Y-H3AP-TK9",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": "2026-08-27T16:00:00.000-07:00",
- "ends_at": "2026-08-28T00:00:00.000-07:00",
- "length_in_hours": 8,
- "length_in_minutes": 480,
- "length_in_days": null,
- "event_time": "4:00pm",
- "event_type_id": null,
- "event_date": "08-27-2026",
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": 8,
- "formatted_time_range": "4:00 PM - 12:00 AM",
- "formatted_date_range": "August 27 - August 28, 2026",
- "formatted_datetime_range": "Thursday, August 27, 2026 • 4:00 PM - 12:00 AM",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-618-239a43d7.cc.localhost/reservation/resume?lead_id=736&token=X2Y-H3AP-TK9"
}, - "relationships": {
- "lead_bookings": {
- "data": [
- {
- "id": "531",
- "type": "lead_booking"
}
]
}
}
}
}Returns the full details of a single lead, including contact information, event details, venue, pricing, status, and any custom question responses.
Use the include query parameter to sideload related resources (comma-separated). Available: lead_bookings.
Required permission: lead_read
| lead_id required | integer The unique ID of the lead to retrieve |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "737",
- "type": "lead",
- "attributes": {
- "id": 737,
- "email": "john.smith254@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15127,
- "brand_name": "Abshire-Lubowitz 621",
- "created_at": "2026-08-13T17:24:57.964-07:00",
- "token": "3Z4-CDWZ-FPQ",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": "2026-08-27T16:00:00.000-07:00",
- "ends_at": "2026-08-28T00:00:00.000-07:00",
- "length_in_hours": 8,
- "length_in_minutes": 480,
- "length_in_days": null,
- "event_time": "4:00pm",
- "event_type_id": null,
- "event_date": "08-27-2026",
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": 8,
- "formatted_time_range": "4:00 PM - 12:00 AM",
- "formatted_date_range": "August 27 - August 28, 2026",
- "formatted_datetime_range": "Thursday, August 27, 2026 • 4:00 PM - 12:00 AM",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-621-5272c06b.cc.localhost/reservation/resume?lead_id=737&token=3Z4-CDWZ-FPQ"
}, - "relationships": {
- "lead_bookings": {
- "data": [
- {
- "id": "532",
- "type": "lead_booking"
}
]
}
}
}
}Marks a lead as archived. Archived leads are hidden from the default lead list.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "738",
- "type": "lead",
- "attributes": {
- "id": 738,
- "email": "john.smith256@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15130,
- "brand_name": "Robel, Brakus and Kuvalis 624",
- "created_at": "2026-08-13T17:24:58.100-07:00",
- "token": "JX6-VTWE-NF3",
- "spam": false,
- "archived": true,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": null,
- "ends_at": null,
- "length_in_hours": null,
- "length_in_minutes": null,
- "length_in_days": null,
- "event_time": null,
- "event_type_id": null,
- "event_date": null,
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": null,
- "formatted_time_range": "",
- "formatted_date_range": "",
- "formatted_datetime_range": "",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-624-95cb39d5.cc.localhost/reservation/resume?lead_id=738&token=JX6-VTWE-NF3"
}, - "relationships": {
- "lead_bookings": {
- "data": [ ]
}
}
}
}Restores an archived lead back to the active lead list.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "739",
- "type": "lead",
- "attributes": {
- "id": 739,
- "email": "john.smith258@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15133,
- "brand_name": "Swift-Treutel 627",
- "created_at": "2026-08-13T17:24:58.233-07:00",
- "token": "CMA-FJW4-27P",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": null,
- "ends_at": null,
- "length_in_hours": null,
- "length_in_minutes": null,
- "length_in_days": null,
- "event_time": null,
- "event_type_id": null,
- "event_date": null,
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": null,
- "formatted_time_range": "",
- "formatted_date_range": "",
- "formatted_datetime_range": "",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-627-7b6523b9.cc.localhost/reservation/resume?lead_id=739&token=CMA-FJW4-27P"
}, - "relationships": {
- "lead_bookings": {
- "data": [ ]
}
}
}
}Marks a lead as spam. Spam leads are filtered out of the default lead list.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "740",
- "type": "lead",
- "attributes": {
- "id": 740,
- "email": "john.smith260@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15136,
- "brand_name": "Ritchie, Botsford and Anderson 630",
- "created_at": "2026-08-13T17:24:58.376-07:00",
- "token": "6XG-CDRK-FT6",
- "spam": true,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": null,
- "ends_at": null,
- "length_in_hours": null,
- "length_in_minutes": null,
- "length_in_days": null,
- "event_time": null,
- "event_type_id": null,
- "event_date": null,
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": null,
- "formatted_time_range": "",
- "formatted_date_range": "",
- "formatted_datetime_range": "",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-630-77ad912e.cc.localhost/reservation/resume?lead_id=740&token=6XG-CDRK-FT6"
}, - "relationships": {
- "lead_bookings": {
- "data": [ ]
}
}
}
}Removes the spam flag from a lead, restoring it to the active lead list.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "741",
- "type": "lead",
- "attributes": {
- "id": 741,
- "email": "john.smith262@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15139,
- "brand_name": "Brown-Gerlach 633",
- "created_at": "2026-08-13T17:24:58.537-07:00",
- "token": "V7E-9PY4-PCD",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": null,
- "ends_at": null,
- "length_in_hours": null,
- "length_in_minutes": null,
- "length_in_days": null,
- "event_time": null,
- "event_type_id": null,
- "event_date": null,
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": null,
- "formatted_time_range": "",
- "formatted_date_range": "",
- "formatted_datetime_range": "",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-633-a19f38b4.cc.localhost/reservation/resume?lead_id=741&token=V7E-9PY4-PCD"
}, - "relationships": {
- "lead_bookings": {
- "data": [ ]
}
}
}
}Removes the "converted to event" flag from a lead, indicating it has not yet been converted.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "742",
- "type": "lead",
- "attributes": {
- "id": 742,
- "email": "john.smith264@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15142,
- "brand_name": "Rath-Schinner 636",
- "created_at": "2026-08-13T17:24:58.739-07:00",
- "token": "FG6-FPXZ-2YW",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": null,
- "ends_at": null,
- "length_in_hours": null,
- "length_in_minutes": null,
- "length_in_days": null,
- "event_time": null,
- "event_type_id": null,
- "event_date": null,
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": null,
- "formatted_time_range": "",
- "formatted_date_range": "",
- "formatted_datetime_range": "",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-636-441c7638.cc.localhost/reservation/resume?lead_id=742&token=FG6-FPXZ-2YW"
}, - "relationships": {
- "lead_bookings": {
- "data": [ ]
}
}
}
}Enables automated messages (emails, texts) for this lead. When enabled, the lead will receive any configured automated follow-up sequences.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "743",
- "type": "lead",
- "attributes": {
- "id": 743,
- "email": "john.smith266@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15145,
- "brand_name": "Mante-Rutherford 639",
- "created_at": "2026-08-13T17:24:58.858-07:00",
- "token": "M7Q-K7QK-CCP",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": null,
- "ends_at": null,
- "length_in_hours": null,
- "length_in_minutes": null,
- "length_in_days": null,
- "event_time": null,
- "event_type_id": null,
- "event_date": null,
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": null,
- "formatted_time_range": "",
- "formatted_date_range": "",
- "formatted_datetime_range": "",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-639-1a6607e3.cc.localhost/reservation/resume?lead_id=743&token=M7Q-K7QK-CCP"
}, - "relationships": {
- "lead_bookings": {
- "data": [ ]
}
}
}
}Disables automated messages for this lead. The lead will no longer receive automated follow-up sequences.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "744",
- "type": "lead",
- "attributes": {
- "id": 744,
- "email": "john.smith268@example.com",
- "first_name": "John",
- "last_name": "Smith",
- "company_name": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_latitude": null,
- "venue_longitude": null,
- "venue_google_place_id": null,
- "estimated_budget": null,
- "estimated_number_guests": null,
- "subject": null,
- "message": null,
- "source": null,
- "notes": null,
- "lead_event_type": null,
- "lead_type": null,
- "last_contact_at": null,
- "next_follow_up_on": null,
- "origin": "Online Booking",
- "indoor_outdoor": "",
- "title": "John Smith",
- "setup_at": null,
- "pickup_at": null,
- "dropoff_at": null,
- "brand_id": 15148,
- "brand_name": "Romaguera, Schuster and Mertz 642",
- "created_at": "2026-08-13T17:24:58.981-07:00",
- "token": "GP4-Q42X-2EV",
- "spam": false,
- "archived": false,
- "converted_to_event": false,
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "phone": "951-555-1212",
- "phone_normalized": "+19515551212",
- "starts_at": null,
- "ends_at": null,
- "length_in_hours": null,
- "length_in_minutes": null,
- "length_in_days": null,
- "event_time": null,
- "event_type_id": null,
- "event_date": null,
- "package_name": null,
- "package_group_name": null,
- "service_name": null,
- "package_names": [ ],
- "service_names": [ ],
- "length": null,
- "formatted_time_range": "",
- "formatted_date_range": "",
- "formatted_datetime_range": "",
- "custom_fields": [ ],
- "created_at_description": "Created less than a minute ago",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "resume_booking_link": "https://test-642-be020ba6.cc.localhost/reservation/resume?lead_id=744&token=GP4-Q42X-2EV"
}, - "relationships": {
- "lead_bookings": {
- "data": [ ]
}
}
}
}Adds an internal note to a lead. Notes are visible to staff members and provide a timeline of follow-up activity. Optionally set or update the next follow-up date.
Required permission: lead_write
| lead_id required | integer The unique ID of the lead |
| Api-Key required | string Your Integration Key |
| note required | string The note text to add |
| next_follow_up_on | string Set or update the next follow-up date (YYYY-MM-DD) |
{- "note": "string",
- "next_follow_up_on": "string"
}{- "meta": {
- "status": "ok"
}
}Events are the core unit of work in Check Cherry, representing both confirmed bookings and proposals. An event includes the client, date and time, venue, assigned staff, selected packages, add-ons, and payment details.
Use the Events API to create new bookings or proposals, retrieve event details, and list events for a business.
Creates a booking -- an event the client has already committed to. For one they still have to accept, use POST /api/v1/proposals.
signature_collected defaults to true, which creates the booking confirmed. Send false when you are still waiting on the contract and it is created awaiting_signature instead.
contact_type decides where the client comes from. It takes one of three exact strings -- anything else is rejected:
contact_type |
What it does |
|---|---|
New Customer |
The default. Creates the client from the contact_* fields, and contact_name is required. If contact_email matches someone the business already has, that person is linked rather than duplicated. |
Existing Customer |
Links a client who already exists. customer_user_id is required, and must be a user on this business. |
None |
Creates the booking with nobody attached. |
Under New Customer, sending contact_email creates a full customer account the client can sign and pay through. Without one you get a plain contact record on the booking instead, which can do neither.
The contact_* address fields hold the client's address. The venue address is separate, in the venue_* fields.
packages is required -- a booking with no package has nothing to price. Each entry needs an event_type_id (a package id from GET /api/v1/packages) and a starts_at_date. Send several to book more than one package on the same event.
Pricing, tax, travel fees and the title are all calculated from the packages and the venue. Send total_amount only to override the calculated total.
Dates are ISO YYYY-MM-DD. Other numeric formats are read according to the business's own date format setting, so 03-04-2027 is March 4th for a US business and April 3rd for an international one. Times take 11:00AM, 2:30pm or 14:30.
Amounts are in the business's currency in whole units rather than cents, so 1250.00 is $1,250.00.
Required permission: event_create
| Api-Key required | string Your Integration Key |
| signature_collected | boolean Has the signature already been collected? Defaults to |
| contact_type | string Default: "New Customer" Enum: "New Customer" "Existing Customer" "None" Where the client comes from. See the description above. |
| customer_user_id | integer The existing client's user ID, which must belong to this business. Required when |
| contact_name | string Client's name. Required when |
| contact_email | string Client's email. Creates a full customer account rather than a plain contact record. |
| contact_phone | string Client's phone |
| contact_company_name | string Client's company name |
| contact_description | string Client's role, e.g. "Bride" or "Father of the Groom" |
| contact_street | string Client's street address |
| contact_city | string Client's city |
| contact_state_code | string Client's state or province code, in whatever form the business's country uses, e.g. |
| contact_postal_code | string Client's postal code |
| send_contact_invitation_to_create_account | boolean Email the client an invitation to create an account. Requires |
| send_booking_confirmation_emails | boolean Send the client the booking confirmation emails. Requires |
| venue_name | string Venue name |
| venue_address | string Venue street address |
| venue_city | string Venue city |
| venue_state | string Venue state or province code, in whatever form the business's country uses, e.g. |
| venue_zip | string Venue postal code |
| venue_google_place_id | string Google Place ID for the venue |
| venue_latitude | number Venue latitude |
| venue_longitude | number Venue longitude |
| add_tax | boolean Apply tax based on the venue's tax zone. Defaults to |
| add_travel | boolean Apply travel fees based on the venue's travel zone. Defaults to |
| public_notes | string Notes visible to the client |
| private_notes | string Notes only staff can see |
| custom_title | string Overrides the generated title |
| brand_id | integer Brand to book under, which must be an active brand of this business. Defaults to the primary brand. |
| lead_id | integer Lead this booking converts, from |
| total_amount | number Overrides the calculated event total. In whole currency units, so |
| paid_amount | number Payment already collected outside Check Cherry, recorded against the booking. In whole currency units. Max 999000. |
| custom_deposit_amount | number Overrides the calculated deposit due. In whole currency units, and capped at the event total. Max 999000. |
required | Array of objects The packages being booked. At least one is required. |
{- "signature_collected": true,
- "contact_type": "New Customer",
- "customer_user_id": 0,
- "contact_name": "string",
- "contact_email": "string",
- "contact_phone": "string",
- "contact_company_name": "string",
- "contact_description": "string",
- "contact_street": "string",
- "contact_city": "string",
- "contact_state_code": "string",
- "contact_postal_code": "string",
- "send_contact_invitation_to_create_account": true,
- "send_booking_confirmation_emails": true,
- "venue_name": "string",
- "venue_address": "string",
- "venue_city": "string",
- "venue_state": "string",
- "venue_zip": "string",
- "venue_google_place_id": "string",
- "venue_latitude": 0,
- "venue_longitude": 0,
- "add_tax": true,
- "add_travel": true,
- "public_notes": "string",
- "private_notes": "string",
- "custom_title": "string",
- "brand_id": 0,
- "lead_id": 0,
- "total_amount": 0,
- "paid_amount": 0,
- "custom_deposit_amount": 0,
- "packages": [
- {
- "event_type_id": "string",
- "starts_at_date": "string",
- "starts_at_time": "string",
- "ends_at_time": "string",
- "length_in_minutes": 0,
- "length_in_days": 0,
- "units": 0,
- "package_unit_range_id": 0,
- "backdrop_id": 0,
- "add_on_ids": "string",
- "staff_id": 0,
- "one_off_custom_title": "string",
- "custom_description_html": "string"
}
]
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3763",
- "type": "event",
- "attributes": {
- "id": 3763,
- "title": "John Smith’s Arron",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:46.141-07:00",
- "created_at": "2026-08-13T17:24:46.143-07:00",
- "created_via": "api",
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": "20260813-01",
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "FNV-C9KP-QRZ",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2027-12-31T11:00:00.000-08:00",
- "ends_at": "2027-12-31T14:00:00.000-08:00",
- "length_in_minutes": "180.0",
- "length_in_hours": "3.0",
- "starting_balance": "100.00",
- "starting_balance_cents": 10000,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$100.00",
- "deposit_amount_due": "25.00",
- "deposit_amount_due_cents": 2500,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$25.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "100.00",
- "balance_amount_due_cents": 10000,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$100.00",
- "starts_at_date": "12-31-2027",
- "starts_at_date_iso8601": "2027-12-31",
- "starts_at_time": "11:00 AM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "Arron",
- "package_group_name": "Sample",
- "service_name": "Photo booth 62",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2027-12-31T00:00:00.000-08:00",
- "customer_ids": "5954",
- "customer_names": "John Smith",
- "customer_emails": "jsmith@example.com",
- "customer_phones": "555-555-5555",
- "customer_addresses": "18 Beacon Street, Boston, MA 02108",
- "customer_and_contact_ids": "5954",
- "customer_and_contact_names": "John Smith",
- "customer_and_contact_emails": "jsmith@example.com",
- "customer_and_contact_phones": "555-555-5555",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 14916,
- "brand_name": "Veum-Hansen 410",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Api",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-410-443a6367.cc.localhost/events/3763-john-smith-s-arron/forms?token=FNV-C9KP-QRZ",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [
- {
- "id": "2672",
- "type": "event_booking"
}
]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [
- {
- "id": "332",
- "type": "event_user"
}
]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Creates a proposal -- an event the client still has to accept. For one they have already committed to, use POST /api/v1/bookings.
proposal_date_reserved decides what happens to the date while they decide. It defaults to false, leaving the date open to other bookings; send true to hold it for them. proposal_valid_through is the last day they can accept, and defaults to the business's own expiry setting. A date after the event is quietly pulled back to the event date; one in the past is rejected.
Creating a proposal sends the business's "New Proposal" automated message and fires the new-proposal webhook.
contact_type decides where the client comes from. It takes one of three exact strings -- anything else is rejected:
contact_type |
What it does |
|---|---|
New Customer |
The default. Creates the client from the contact_* fields, and contact_name is required. If contact_email matches someone the business already has, that person is linked rather than duplicated. |
Existing Customer |
Links a client who already exists. customer_user_id is required, and must be a user on this business. |
None |
Creates the proposal with nobody attached. |
Under New Customer, sending contact_email creates a full customer account the client can accept and pay through. Without one you get a plain contact record on the proposal instead, which can do neither.
The contact_* address fields hold the client's address. The venue address is separate, in the venue_* fields.
packages is required -- a proposal with no package has nothing to price. Each entry needs an event_type_id (a package id from GET /api/v1/packages) and a starts_at_date. Send several to propose more than one package on the same event.
Pricing, tax, travel fees and the title are all calculated from the packages and the venue. Send total_amount only to override the calculated total.
Dates are ISO YYYY-MM-DD. Other numeric formats are read according to the business's own date format setting, so 03-04-2027 is March 4th for a US business and April 3rd for an international one. Times take 11:00AM, 2:30pm or 14:30.
Amounts are in the business's currency in whole units rather than cents, so 1250.00 is $1,250.00.
Required permission: event_create
| Api-Key required | string Your Integration Key |
| proposal_date_reserved | boolean Hold the date while the client decides, blocking other bookings. Defaults to |
| proposal_valid_through | string Last day the client can accept, as |
| contact_type | string Default: "New Customer" Enum: "New Customer" "Existing Customer" "None" Where the client comes from. See the description above. |
| customer_user_id | integer The existing client's user ID, which must belong to this business. Required when |
| contact_name | string Client's name. Required when |
| contact_email | string Client's email. Creates a full customer account rather than a plain contact record. |
| contact_phone | string Client's phone |
| contact_company_name | string Client's company name |
| contact_description | string Client's role, e.g. "Bride" or "Father of the Groom" |
| contact_street | string Client's street address |
| contact_city | string Client's city |
| contact_state_code | string Client's state or province code, in whatever form the business's country uses, e.g. |
| contact_postal_code | string Client's postal code |
| venue_name | string Venue name |
| venue_address | string Venue street address |
| venue_city | string Venue city |
| venue_state | string Venue state or province code, in whatever form the business's country uses, e.g. |
| venue_zip | string Venue postal code |
| venue_google_place_id | string Google Place ID for the venue |
| venue_latitude | number Venue latitude |
| venue_longitude | number Venue longitude |
| add_tax | boolean Apply tax based on the venue's tax zone. Defaults to |
| add_travel | boolean Apply travel fees based on the venue's travel zone. Defaults to |
| public_notes | string Notes visible to the client |
| private_notes | string Notes only staff can see |
| custom_title | string Overrides the generated title |
| brand_id | integer Brand to propose under, which must be an active brand of this business. Defaults to the primary brand. |
| lead_id | integer Lead this proposal converts, from |
| total_amount | number Overrides the calculated event total. In whole currency units, so |
| paid_amount | number Payment already collected outside Check Cherry, recorded against the proposal. In whole currency units. Max 999000. |
| custom_deposit_amount | number Overrides the calculated deposit due. In whole currency units, and capped at the event total. Max 999000. |
required | Array of objects The packages being proposed. At least one is required. |
{- "proposal_date_reserved": true,
- "proposal_valid_through": "string",
- "contact_type": "New Customer",
- "customer_user_id": 0,
- "contact_name": "string",
- "contact_email": "string",
- "contact_phone": "string",
- "contact_company_name": "string",
- "contact_description": "string",
- "contact_street": "string",
- "contact_city": "string",
- "contact_state_code": "string",
- "contact_postal_code": "string",
- "venue_name": "string",
- "venue_address": "string",
- "venue_city": "string",
- "venue_state": "string",
- "venue_zip": "string",
- "venue_google_place_id": "string",
- "venue_latitude": 0,
- "venue_longitude": 0,
- "add_tax": true,
- "add_travel": true,
- "public_notes": "string",
- "private_notes": "string",
- "custom_title": "string",
- "brand_id": 0,
- "lead_id": 0,
- "total_amount": 0,
- "paid_amount": 0,
- "custom_deposit_amount": 0,
- "packages": [
- {
- "event_type_id": "string",
- "starts_at_date": "string",
- "starts_at_time": "string",
- "ends_at_time": "string",
- "length_in_minutes": 0,
- "length_in_days": 0,
- "units": 0,
- "package_unit_range_id": 0,
- "backdrop_id": 0,
- "add_on_ids": "string",
- "staff_id": 0,
- "one_off_custom_title": "string",
- "custom_description_html": "string"
}
]
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3764",
- "type": "event",
- "attributes": {
- "id": 3764,
- "title": "John Smith’s Willard",
- "status": "proposal_date_reserved",
- "formatted_status": "Proposal (Date Reserved)",
- "formatted_status_with_context": "Proposal (Date Reserved)",
- "booked_at": null,
- "created_at": "2026-08-13T17:24:46.598-07:00",
- "created_via": "api",
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": "20260813-01",
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "WKE-RGY3-26C",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2027-12-31T11:00:00.000-08:00",
- "ends_at": "2027-12-31T14:00:00.000-08:00",
- "length_in_minutes": "180.0",
- "length_in_hours": "3.0",
- "starting_balance": "100.00",
- "starting_balance_cents": 10000,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$100.00",
- "deposit_amount_due": "25.00",
- "deposit_amount_due_cents": 2500,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$25.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "100.00",
- "balance_amount_due_cents": 10000,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$100.00",
- "starts_at_date": "12-31-2027",
- "starts_at_date_iso8601": "2027-12-31",
- "starts_at_time": "11:00 AM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "Willard",
- "package_group_name": "Sample",
- "service_name": "Photo booth 64",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2027-12-31T00:00:00.000-08:00",
- "customer_ids": "5957",
- "customer_names": "John Smith",
- "customer_emails": "jsmith@example.com",
- "customer_phones": "555-555-5555",
- "customer_addresses": "",
- "customer_and_contact_ids": "5957",
- "customer_and_contact_names": "John Smith",
- "customer_and_contact_emails": "jsmith@example.com",
- "customer_and_contact_phones": "555-555-5555",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 14920,
- "brand_name": "Hermiston Group 414",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Created less than a minute ago",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-414-5859db78.cc.localhost/events/3764-john-smith-s-willard/forms?token=WKE-RGY3-26C",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [
- {
- "id": "2673",
- "type": "event_booking"
}
]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [
- {
- "id": "333",
- "type": "event_user"
}
]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Returns the full set of booking questions and their current answers for an event. Each entry includes the question's column_name, label, kind, current value, and formatted_value.
Use the column_name of each entry as the key when sending updates via the PATCH /api/v1/events/{event_id}/booking_questions endpoint.
Required permission: assigned_event_read or unassigned_event_read
| event_id required | integer The unique ID of the event |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "82",
- "type": "event_booking_question",
- "attributes": {
- "id": 82,
- "event_id": 3778,
- "booking_question_id": 82,
- "editable": true,
- "column_name": "guest_count",
- "name": "Estimated Guest Count",
- "label": "Estimated guest count",
- "kind": "text",
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_source",
- "type": "event_booking_question",
- "attributes": {
- "id": "utm_source",
- "event_id": 3778,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_source",
- "name": "UTM Source",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_campaign",
- "type": "event_booking_question",
- "attributes": {
- "id": "utm_campaign",
- "event_id": 3778,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_campaign",
- "name": "UTM Campaign",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_medium",
- "type": "event_booking_question",
- "attributes": {
- "id": "utm_medium",
- "event_id": 3778,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_medium",
- "name": "UTM Medium",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_term",
- "type": "event_booking_question",
- "attributes": {
- "id": "utm_term",
- "event_id": 3778,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_term",
- "name": "UTM Term",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "utm_content",
- "type": "event_booking_question",
- "attributes": {
- "id": "utm_content",
- "event_id": 3778,
- "booking_question_id": null,
- "editable": false,
- "column_name": "utm_content",
- "name": "UTM Content",
- "label": null,
- "kind": null,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}
]
}Updates one or more booking question answers on the event. The body's custom_questions keys must match the column_name of each booking question (as returned by the GET endpoint).
Only the keys you include are touched — other answers on the event are preserved.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer The unique ID of the event |
| Api-Key required | string Your Integration Key |
required | object Keys are booking-question column names; values are the answer to record. |
{- "custom_questions": { }
}{- "meta": {
- "status": "ok"
}
}Returns a paginated list of event bookings for the specified business. Results can be filtered by date range.
Use the include query parameter to sideload related resources (comma-separated). Available: event_add_ons, event_extras, event_photobooth_background, event_booking_extra_categories.
Required permission: assigned_event_read or unassigned_event_read
| event_date_start | string Event Date (Start) |
| event_date_end | string Event Date (End) |
| page | integer Page number for pagination (default: 1) |
| per | integer Number of results per page |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "2674",
- "type": "event_booking",
- "attributes": {
- "id": 2674,
- "event_id": 3780,
- "event_type_id": 3614,
- "title": "Sarah and John's Wedding",
- "name": "Soo",
- "starts_at": "2026-09-03T17:24:49.940-07:00",
- "ends_at": "2026-09-03T18:24:49.940-07:00",
- "starts_at_time": "5:24 PM",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "brand_name": "Howell Inc 482",
- "canceled": false,
- "postponed": false,
- "date_mode": "date_time",
- "description_html": "",
- "override_ends_at": null,
- "length_in_minutes": "60.0",
- "length_in_days": 1,
- "event_type_unit_range": null,
- "units": null,
- "formatted_datetime_range": "Thursday, September 3, 2026 • 5:24 PM - 6:24 PM",
- "formatted_date_range": "Thursday, September 3, 2026",
- "formatted_time_range": "5:24 PM - 6:24 PM",
- "formatted_units": null,
- "required_staff_count": 1,
- "override_required_staff_count": null,
- "assigned_staff_count": 0,
- "fully_staffed": false,
- "remaining_staff_needed": 1,
- "staff_assignment_type": "none",
- "staff_may_claim": false,
- "staff_may_request": false,
- "pending_staff_request_count": 0,
- "staffed_by_current_user": false,
- "requested_by_current_user": false,
- "staff_member_ids": [ ],
- "staff_member_names": null,
- "staff_member_abbreviations": null,
- "expired_proposal": false,
- "primary_image_attachment": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"
}, - "package_group_name": "Sample",
- "service_name": "Photo booth 66",
- "default_staff_title": null,
- "override_price": null,
- "override_price_cents": null,
- "override_price_currency": null,
- "override_price_formatted": null,
- "taxable": true
}, - "relationships": {
- "event_add_ons": {
- "data": [ ]
}, - "event_photobooth_background": {
- "data": null
}, - "event_booking_extra_categories": {
- "data": [ ]
}, - "event_extras": {
- "data": [ ]
}
}
}
]
}Returns the full details of a single event booking, including package, schedule, pricing, and venue information.
Use the include query parameter to sideload related resources (comma-separated). Available: event_add_ons, event_extras, event_photobooth_background, event_booking_extra_categories.
Required permission: assigned_event_read or unassigned_event_read
| event_booking_id required | integer Event Booking ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "2675",
- "type": "event_booking",
- "attributes": {
- "id": 2675,
- "event_id": 3781,
- "event_type_id": 3615,
- "title": "Sarah and John's Wedding",
- "name": "Veronika",
- "starts_at": "2026-09-03T17:24:50.135-07:00",
- "ends_at": "2026-09-03T18:24:50.135-07:00",
- "starts_at_time": "5:24 PM",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "brand_name": "Braun and Sons 486",
- "canceled": false,
- "postponed": false,
- "date_mode": "date_time",
- "description_html": "",
- "override_ends_at": null,
- "length_in_minutes": "60.0",
- "length_in_days": 1,
- "event_type_unit_range": null,
- "units": null,
- "formatted_datetime_range": "Thursday, September 3, 2026 • 5:24 PM - 6:24 PM",
- "formatted_date_range": "Thursday, September 3, 2026",
- "formatted_time_range": "5:24 PM - 6:24 PM",
- "formatted_units": null,
- "required_staff_count": 1,
- "override_required_staff_count": null,
- "assigned_staff_count": 0,
- "fully_staffed": false,
- "remaining_staff_needed": 1,
- "staff_assignment_type": "none",
- "staff_may_claim": false,
- "staff_may_request": false,
- "pending_staff_request_count": 0,
- "staffed_by_current_user": false,
- "requested_by_current_user": false,
- "staff_member_ids": [ ],
- "staff_member_names": null,
- "staff_member_abbreviations": null,
- "expired_proposal": false,
- "primary_image_attachment": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"
}, - "package_group_name": "Sample",
- "service_name": "Photo booth 67",
- "default_staff_title": null,
- "override_price": null,
- "override_price_cents": null,
- "override_price_currency": null,
- "override_price_formatted": null,
- "taxable": true
}, - "relationships": {
- "event_add_ons": {
- "data": [ ]
}, - "event_photobooth_background": {
- "data": null
}, - "event_booking_extra_categories": {
- "data": [ ]
}, - "event_extras": {
- "data": [ ]
}
}
}
}Assigns a staff member to an event (booking or proposal). The staff member must belong to the same franchise. Use the role field to label what the staff member is doing on the event (e.g., "DJ", "Photographer", "Assistant"). The same user can be assigned to the same event multiple times with different roles.
By default the staff member is assigned to the whole event (every package). To scope the assignment to specific packages, send all_event_bookings: false together with event_booking_ids listing the packages (EventBooking IDs) they cover; ids that don't belong to this event are ignored. Arrival time is per-package: set arrival times via event_booking_arrives_at_times, an object keyed by EventBooking ID (e.g. { "123": "5:30 PM" }). An all-packages member may set per-package arrivals too.
For confirmed bookings, assigning a staff member also applies any configured staff expenses, sends the "Employee Assigned" automated message, dispatches push notifications, and fires the staff-assigned webhook. None of these side effects run for proposals.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer The ID of the event to assign the staff member to |
| Api-Key required | string Your Integration Key |
| staff_id required | integer The ID of the staff user to assign |
| role | string The role this staff member will fill on the event (e.g., "DJ", "Photographer") |
| all_event_bookings | boolean Assign to every package on the event (default true). Send false with event_booking_ids to scope to specific packages. |
| event_booking_ids | Array of integers When all_event_bookings is false, the EventBooking (package) IDs this staff member covers. |
object Optional per-package arrival times, keyed by EventBooking ID, e.g. { "123": "5:30 PM" }. |
{- "staff_id": 0,
- "role": "string",
- "all_event_bookings": true,
- "event_booking_ids": [
- 0
], - "event_booking_arrives_at_times": {
- "property1": "string",
- "property2": "string"
}
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "868",
- "type": "event_staff_member",
- "attributes": {
- "role": "DJ",
- "all_event_bookings": true,
- "event_booking_ids": [ ],
- "arrives_at_by_event_booking": { },
- "response": null,
- "awaiting_response": false,
- "response_by_event_booking": { },
- "decline_reason": null,
- "decline_reason_by_event_booking": { },
- "can_respond_current_user": false
}, - "relationships": {
- "event": {
- "data": {
- "id": "3784",
- "type": "event"
}
}, - "user": {
- "data": {
- "id": "5991",
- "type": "user"
}
}
}
}
}Updates an existing staff assignment's package scope and/or arrival times. Send all_event_bookings: false with event_booking_ids to scope the staff member to specific packages, or all_event_bookings: true to cover the whole event again. event_booking_arrives_at_times sets (or, when blank, clears) per-package arrivals keyed by EventBooking ID. This does not change who is assigned or their role, and does not re-send the "Employee Assigned" notifications.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer The ID of the event the assignment belongs to |
| id required | integer The unique ID of the EventStaffMember assignment |
| Api-Key required | string Your Integration Key |
| all_event_bookings | boolean Assign to every package (true) or scope to specific packages (false, with event_booking_ids). |
| event_booking_ids | Array of integers When all_event_bookings is false, the EventBooking (package) IDs this staff member covers. |
object Per-package arrival times, keyed by EventBooking ID. Send an empty string for a package to clear it. |
{- "all_event_bookings": true,
- "event_booking_ids": [
- 0
], - "event_booking_arrives_at_times": {
- "property1": "string",
- "property2": "string"
}
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "870",
- "type": "event_staff_member",
- "attributes": {
- "role": null,
- "all_event_bookings": false,
- "event_booking_ids": [
- 2678
], - "arrives_at_by_event_booking": {
- "2678": "5:30 PM"
}, - "response": null,
- "awaiting_response": false,
- "response_by_event_booking": { },
- "decline_reason": null,
- "decline_reason_by_event_booking": { },
- "can_respond_current_user": false
}, - "relationships": {
- "event": {
- "data": {
- "id": "3786",
- "type": "event"
}
}, - "user": {
- "data": {
- "id": "5994",
- "type": "user"
}
}
}
}
}Removes a previously-assigned staff member from an event. When the authenticated user is assigned to the event, assigned_event_write is required; otherwise unassigned_event_write is required.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer The ID of the event the assignment belongs to |
| id required | integer The unique ID of the EventStaffMember assignment |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Returns a paginated list of events for the specified business. Results can be filtered by status, cancellation, date range, and text search.
Cancelled bookings are excluded by default. Cancellation is tracked separately from status -- a cancelled booking keeps the status it had when it was cancelled -- so it is filtered with canceled_status, not event_status. Pass canceled_status=show_canceled_only to list only cancelled bookings, or canceled_status=show_all to include them alongside everything else. The two filters combine: event_status=confirmed&canceled_status=show_canceled_only returns cancelled confirmed bookings.
The response includes meta.total_count (total matching events) and meta.per_page (results per page) to support pagination.
Use the include query parameter to sideload related resources (comma-separated). Available: event_bookings, proposal_alternatives, event_users, event_staff_members, event_staff_requests, contacts, notes. The event's customers are sideloaded via event_users — there is no customer include.
Required permission: assigned_event_read or unassigned_event_read
| event_status | string Status filter. Does not filter cancellation -- use
|
| canceled_status | string Cancellation filter. Defaults to |
| postponed_status | string Postponement filter. Defaults to |
| expired_status | string Expired-proposal filter. Defaults to |
| past_or_future | string When filter. Defaults to |
| event_date_start | string Event Date (Start) |
| event_date_end | string Event Date (End) |
| booked_date_start | string Booked Date (Start) |
| booked_date_end | string Booked Date (End) |
| search_text | string Text Search |
| id | integer Return only the event with this ID |
| brand_id | integer Limit to events on this brand |
| client_id | integer Limit to events for this client |
| staff_id | integer Limit to events this staff member is assigned to |
| awaiting_deposit | boolean Only events whose deposit is unpaid |
| balance_outstanding | boolean Only events with a balance still owed |
| past_due | boolean Only events with a past due payment |
| has_unselected_templates | boolean Only events with a design template still unselected |
| has_pending_artwork | boolean Only events with artwork pending |
| has_unapproved_artwork | boolean Only events with artwork awaiting approval |
| unsubmitted_forms | boolean Only events with an unsubmitted form |
| no_staff_assigned | boolean Only events with no staff assigned |
| no_backdrop_assigned | boolean Only events with no backdrop assigned |
| sort_by | string Sort Order. Defaults to |
| page | integer Page number for pagination (default: 1) |
| per | integer Number of results per page (default: 25) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 1,
- "per_page": 10,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "3788",
- "type": "event",
- "attributes": {
- "id": 3788,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:51.938-07:00",
- "created_at": "2026-08-13T17:24:51.939-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "PAM-CRVH-XGC",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:51.890-07:00",
- "ends_at": "2026-08-20T20:24:51.890-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15024,
- "brand_name": "Fadel, Leannon and Gleason 517",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-518-715d2694.cc.localhost/events/3788-sarah-and-john-s-wedding/forms?token=PAM-CRVH-XGC",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
]
}Returns the full details of a single event, including status, venue, pricing, and contact information.
Use the include query parameter to sideload related resources (comma-separated). Available: event_bookings, proposal_alternatives, event_users, event_staff_members, event_staff_requests, contacts, notes. Nested includes are also supported — e.g. ?include=event_bookings.event_add_ons will include add-ons within each booking. Other nested includes: event_bookings.event_extras, event_bookings.event_photobooth_background, event_bookings.event_booking_extra_categories. The event's customers are sideloaded via event_users — there is no customer include.
Required permission: assigned_event_read or unassigned_event_read
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3789",
- "type": "event",
- "attributes": {
- "id": 3789,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:52.217-07:00",
- "created_at": "2026-08-13T17:24:52.218-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "CAG-YPJG-VDY",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:52.163-07:00",
- "ends_at": "2026-08-20T20:24:52.163-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15027,
- "brand_name": "Glover-Kunze 520",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-521-b5376529.cc.localhost/events/3789-sarah-and-john-s-wedding/forms?token=CAG-YPJG-VDY",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
| public_notes | string Public notes visible to the customer |
| photo_album_url | string URL to the photo album |
| photo_album_instructions | string Instructions for the photo album |
| video_url | string URL to the video |
| video_album_instructions | string Instructions for the video album |
| next_follow_up_on | string Next follow-up date (YYYY-MM-DD) |
{- "public_notes": "string",
- "photo_album_url": "string",
- "photo_album_instructions": "string",
- "video_url": "string",
- "video_album_instructions": "string",
- "next_follow_up_on": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3790",
- "type": "event",
- "attributes": {
- "id": 3790,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:52.351-07:00",
- "created_at": "2026-08-13T17:24:52.352-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": "Updated notes for the customer",
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "A4J-CNEY-P23",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:52.304-07:00",
- "ends_at": "2026-08-20T20:24:52.304-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15030,
- "brand_name": "Koss LLC 523",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-524-8fa1df83.cc.localhost/events/3790-sarah-and-john-s-wedding/forms?token=A4J-CNEY-P23",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Update the venue/location for an event. Can optionally recalculate tax and travel fees based on the new location.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
| google_place_id | string Google Place ID for the venue |
| venue_name | string Name of the venue |
| venue_address | string Street address |
| venue_city | string City |
| venue_state | string State |
| venue_zip | string ZIP/Postal code |
| latitude | number Latitude coordinate |
| longitude | number Longitude coordinate |
| recalculate_tax | boolean Recalculate tax based on new location |
| recalculate_travel | boolean Recalculate travel fee based on new location |
{- "google_place_id": "string",
- "venue_name": "string",
- "venue_address": "string",
- "venue_city": "string",
- "venue_state": "string",
- "venue_zip": "string",
- "latitude": 0,
- "longitude": 0,
- "recalculate_tax": true,
- "recalculate_travel": true
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3792",
- "type": "event",
- "attributes": {
- "id": 3792,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:52.632-07:00",
- "created_at": "2026-08-13T17:24:52.634-07:00",
- "created_via": "quick_add",
- "venue_name": "The Grand Ballroom",
- "venue_address": "123 Main St",
- "venue_city": "Austin",
- "venue_state": "TX",
- "venue_zip": "78701",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "AHR-6PMY-3KE",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:52.583-07:00",
- "ends_at": "2026-08-20T20:24:52.583-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15036,
- "brand_name": "Thompson, Jones and Kautzer 529",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-530-fadb1081.cc.localhost/events/3792-sarah-and-john-s-wedding/forms?token=AHR-6PMY-3KE",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Update the status of an event (e.g. convert a proposal to a confirmed booking).
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
| status | string New status for the event |
| postponed | boolean Mark as postponed |
| canceled | boolean Mark as canceled |
| send_booking_confirmation_emails | boolean Send booking confirmation emails |
| send_contact_invitation_to_create_account | boolean Send contact an invitation to create an account |
{- "status": "string",
- "postponed": true,
- "canceled": true,
- "send_booking_confirmation_emails": true,
- "send_contact_invitation_to_create_account": true
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3793",
- "type": "event",
- "attributes": {
- "id": 3793,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:52.839-07:00",
- "created_at": "2026-08-13T17:24:52.797-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "P9D-YKEV-ZX4",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:52.744-07:00",
- "ends_at": "2026-08-20T20:24:52.744-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15039,
- "brand_name": "Howell, Hansen and Corkery 532",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-533-ed33db2f.cc.localhost/events/3793-sarah-and-john-s-wedding/forms?token=P9D-YKEV-ZX4",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Update event settings such as title, due date, invoice date, deposit amount, tax rate, and brand.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
| title | string Event title |
| due_at | string Payment due date (YYYY-MM-DD) |
| invoice_date | string Invoice date (YYYY-MM-DD) |
| proposal_valid_through | string Proposal valid through date (YYYY-MM-DD) |
| custom_deposit_amount | number Custom deposit amount |
| tax_rate | number Tax rate (e.g. 8.25) |
| tax_exempt | boolean Whether the booking is tax exempt (suppresses tax while retaining the resolved rate) |
| tax_exemption_type | string Reason for exemption: resale, nonprofit, government, out_of_state, or other |
| brand_id | integer Brand ID |
{- "title": "string",
- "due_at": "string",
- "invoice_date": "string",
- "proposal_valid_through": "string",
- "custom_deposit_amount": 0,
- "tax_rate": 0,
- "tax_exempt": true,
- "tax_exemption_type": "string",
- "brand_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3794",
- "type": "event",
- "attributes": {
- "id": 3794,
- "title": "Updated Event Title",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:52.948-07:00",
- "created_at": "2026-08-13T17:24:52.949-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "GC2-F4AX-EZF",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:52.898-07:00",
- "ends_at": "2026-08-20T20:24:52.898-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15042,
- "brand_name": "White Inc 535",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-536-bde40c53.cc.localhost/events/3794-updated-event-title/forms?token=GC2-F4AX-EZF",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Cancel an event with an optional reason and option to send cancellation messages to contacts.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
| cancel_reason | string Reason for cancellation |
| send_cancellation_messages | boolean Send cancellation messages to contacts |
{- "cancel_reason": "string",
- "send_cancellation_messages": true
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3796",
- "type": "event",
- "attributes": {
- "id": 3796,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Canceled Booking",
- "booked_at": "2026-08-13T17:24:53.254-07:00",
- "created_at": "2026-08-13T17:24:53.255-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": true,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "G7F-TH7W-KZK",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:53.209-07:00",
- "ends_at": "2026-08-20T20:24:53.209-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15048,
- "brand_name": "Thompson, Kertzmann and Purdy 541",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-542-57897081.cc.localhost/events/3796-sarah-and-john-s-wedding/forms?token=G7F-TH7W-KZK",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Remove the canceled status from a previously canceled event.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3797",
- "type": "event",
- "attributes": {
- "id": 3797,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:53.402-07:00",
- "created_at": "2026-08-13T17:24:53.403-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "YNM-4HXX-RDX",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:53.354-07:00",
- "ends_at": "2026-08-20T20:24:53.354-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15051,
- "brand_name": "Hoeger and Sons 544",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-545-52377e3c.cc.localhost/events/3797-sarah-and-john-s-wedding/forms?token=YNM-4HXX-RDX",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Mark an event as postponed.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3798",
- "type": "event",
- "attributes": {
- "id": 3798,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Postponed Booking",
- "booked_at": "2026-08-13T17:24:53.547-07:00",
- "created_at": "2026-08-13T17:24:53.548-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": true,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "3HN-W2JR-QD3",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:53.497-07:00",
- "ends_at": "2026-08-20T20:24:53.497-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15054,
- "brand_name": "Pfeffer-Hauck 547",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-548-feee19f0.cc.localhost/events/3798-sarah-and-john-s-wedding/forms?token=3HN-W2JR-QD3",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Remove the postponed status from a previously postponed event.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3799",
- "type": "event",
- "attributes": {
- "id": 3799,
- "title": "Sarah and John's Wedding",
- "status": "confirmed",
- "formatted_status": "Confirmed",
- "formatted_status_with_context": "Confirmed",
- "booked_at": "2026-08-13T17:24:53.692-07:00",
- "created_at": "2026-08-13T17:24:53.693-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "RZN-EQGM-JFT",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:53.643-07:00",
- "ends_at": "2026-08-20T20:24:53.643-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15057,
- "brand_name": "Bins, Treutel and Wolff 550",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Booked less than a minute ago via Quick add",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-551-fa136da5.cc.localhost/events/3799-sarah-and-john-s-wedding/forms?token=RZN-EQGM-JFT",
- "proposal_url": null,
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Approve a proposal that is currently in the awaiting review state.
Required permission: assigned_event_write or unassigned_event_write
| event_id required | integer Event ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3800",
- "type": "event",
- "attributes": {
- "id": 3800,
- "title": "Sarah and John's Wedding",
- "status": "proposal_date_reserved",
- "formatted_status": "Proposal (Date Reserved)",
- "formatted_status_with_context": "Proposal (Date Reserved)",
- "booked_at": null,
- "created_at": "2026-08-13T17:24:53.845-07:00",
- "created_via": "quick_add",
- "venue_name": "The Mission Inn",
- "venue_address": "123 Some St",
- "venue_city": "Riverside",
- "venue_state": "CA",
- "venue_zip": "92506",
- "venue_google_place_id": null,
- "public_notes": null,
- "private_notes": "",
- "coupon_code": null,
- "photo_album_url": null,
- "photo_album_instructions": null,
- "video_url": null,
- "video_album_instructions": null,
- "media_first_set_at": null,
- "media_last_updated_at": null,
- "completed": false,
- "canceled": false,
- "archived": false,
- "postponed": false,
- "invoice_number": null,
- "billable_distance": null,
- "total_distance": null,
- "distance_unit": null,
- "latitude": null,
- "longitude": null,
- "tax_rate": "0.0",
- "tax_exempt": false,
- "tax_exemption_type": null,
- "tax_exemption_type_other": null,
- "humanized_tax_exemption_type": null,
- "source": null,
- "estimated_number_guests": null,
- "indoor_outdoor": null,
- "lead_event_type": null,
- "contact_preference": null,
- "po_number": null,
- "stair_setup": null,
- "token": "7TD-WP39-DXJ",
- "utm_source": null,
- "utm_campaign": null,
- "utm_medium": null,
- "utm_term": null,
- "utm_content": null,
- "gclid": null,
- "starts_at": "2026-08-20T17:24:53.793-07:00",
- "ends_at": "2026-08-20T20:24:53.793-07:00",
- "length_in_minutes": "",
- "length_in_hours": "",
- "starting_balance": "0.00",
- "starting_balance_cents": 0,
- "starting_balance_currency": "USD",
- "starting_balance_formatted": "$0.00",
- "deposit_amount_due": "0.00",
- "deposit_amount_due_cents": 0,
- "deposit_amount_due_currency": "USD",
- "deposit_amount_due_formatted": "$0.00",
- "custom_deposit_amount": null,
- "custom_deposit_amount_cents": null,
- "custom_deposit_amount_currency": null,
- "custom_deposit_amount_formatted": null,
- "balance_amount_due": "0.00",
- "balance_amount_due_cents": 0,
- "balance_amount_due_currency": "USD",
- "balance_amount_due_formatted": "$0.00",
- "starts_at_date": "08-20-2026",
- "starts_at_date_iso8601": "2026-08-20",
- "starts_at_time": "5:24 PM",
- "invoice_date": "08-13-2026",
- "invoice_date_iso8601": "2026-08-13",
- "proposal_theme": "classic",
- "proposal_valid_through": null,
- "proposal_viewed_at": null,
- "next_follow_up_on": null,
- "package_name": "",
- "package_group_name": "",
- "service_name": "",
- "package_description_html": "",
- "add_on_names": "",
- "add_on_quantities_name_and_price": "",
- "extra_names": "",
- "extra_quantities_name_and_price": "",
- "backdrop_names": "",
- "backdrop_name_and_price": "",
- "design_statuses": null,
- "due_at": "2026-08-20T00:00:00.000-07:00",
- "customer_ids": "",
- "customer_names": "",
- "customer_emails": "",
- "customer_phones": "",
- "customer_addresses": "",
- "customer_and_contact_ids": "",
- "customer_and_contact_names": "",
- "customer_and_contact_emails": "",
- "customer_and_contact_phones": "",
- "additional_contact_ids": "",
- "additional_contact_names": "",
- "additional_contact_emails": "",
- "additional_contact_phones": "",
- "assigned_staff_ids": "",
- "assigned_staff_names": "",
- "assigned_staff_abbreviations": "",
- "assigned_staff_emails": "",
- "change_summary": null,
- "brand_id": 15060,
- "brand_name": "Gutkowski-Gorczany 553",
- "primary_image": {
- "hero_variant": null
}, - "booked_at_description": "Created less than a minute ago",
- "current_user_assigned": false,
- "current_user_actively_assigned": false,
- "questionnaires_url": "https://test-554-4a2f8fd2.cc.localhost/events/3800-sarah-and-john-s-wedding/forms?token=7TD-WP39-DXJ",
- "referred_by_user_id": null,
- "referred_by_user_name": null,
- "referred_by_user_email": null,
- "custom_fields": [ ]
}, - "relationships": {
- "event_bookings": {
- "data": [ ]
}, - "proposal_alternatives": {
- "data": [ ]
}, - "event_users": {
- "data": [ ]
}, - "event_staff_members": {
- "data": [ ]
}, - "event_staff_requests": {
- "data": [ ]
}, - "contacts": {
- "data": [ ]
}, - "notes": {
- "data": [ ]
}
}
}
}Adds a private internal note to a booking. Notes are visible to staff members only and are never shown to customers. Use them to log internal observations, follow-up activity, or any staff-only context tied to the booking.
Each call appends a new note record with its own author and timestamp (a running timeline), which is distinct from the booking's free-form public_notes / private_notes text fields on the event itself (those are edited via PUT /api/v1/events/{event_id}).
Optionally set or update the booking's next follow-up date in the same call.
Required permission: assigned_event_read or unassigned_event_read
| event_id required | integer The unique ID of the booking |
| Api-Key required | string Your Integration Key |
| note required | string The note text to add (private internal note, staff-only) |
| next_follow_up_on | string Set or update the booking's next follow-up date (YYYY-MM-DD) |
{- "note": "string",
- "next_follow_up_on": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "25",
- "type": "note",
- "attributes": {
- "id": 25,
- "content": "Confirmed load-in time with venue manager",
- "user_id": 6011,
- "byline": "08-13-2026 5:24 PM by Joe Dicki",
- "created_at": "2026-08-13T17:24:54.039-07:00"
}
}
}Updates the content of a private internal note on a booking. Notes are visible to staff members only and are never shown to customers.
Only the note's original author can update it (mirrors the web admin's edit rule).
Required permission: assigned_event_read or unassigned_event_read (in addition, the authenticated user must be the note's original author)
| event_id required | integer The unique ID of the booking |
| id required | integer The unique ID of the note |
| Api-Key required | string Your Integration Key |
| content required | string The new note text (private internal note, staff-only) |
{- "content": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "26",
- "type": "note",
- "attributes": {
- "id": 26,
- "content": "Updated content",
- "user_id": 6012,
- "byline": "08-13-2026 5:24 PM by Stephen Denesik",
- "created_at": "2026-08-13T17:24:54.162-07:00"
}
}
}Deletes a private internal note from a booking. Notes are visible to staff members only and are never shown to customers.
Only the note's original author can delete it (mirrors the web admin's edit rule).
Required permission: assigned_event_read or unassigned_event_read (in addition, the authenticated user must be the note's original author)
| event_id required | integer The unique ID of the booking |
| id required | integer The unique ID of the note |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Appointments represent scheduled meetings between staff and guests (e.g., consultations, site visits, tastings). Each appointment has a guest, date/time, location, and one or more assigned staff members. Appointments can be created, updated, canceled, uncanceled, duplicated, and deleted.
Returns the full set of booking questions and their current answers for an appointment, as configured on the appointment's calendar. Each entry includes the question's column_name, label, kind, intent, built_in flag, current value, and formatted_value.
Use the column_name of each entry as the key when sending updates via the PATCH /api/v1/appointments/{appointment_id}/booking_questions endpoint.
Note: booking questions are sourced from the appointment's calendar. Appointments not created from a calendar (e.g. Quick Add) have no associated questions and will return an empty list.
Required permission: assigned_appointment_read or unassigned_appointment_read
| appointment_id required | integer The unique ID of the appointment |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "499",
- "type": "appointment_booking_question",
- "attributes": {
- "id": 499,
- "appointment_id": 75,
- "booking_question_id": null,
- "editable": false,
- "column_name": "location",
- "name": "Appointment Location",
- "label": "Appointment Location",
- "kind": "text",
- "intent": "Appointment Location",
- "built_in": true,
- "link": null,
- "value": "Phone",
- "formatted_value": "Phone",
- "options": null,
- "archived": false
}
}, - {
- "id": "500",
- "type": "appointment_booking_question",
- "attributes": {
- "id": 500,
- "appointment_id": 75,
- "booking_question_id": null,
- "editable": false,
- "column_name": "guest_name",
- "name": "Name",
- "label": "Name",
- "kind": "text",
- "intent": "Name",
- "built_in": true,
- "link": null,
- "value": "John Doe",
- "formatted_value": "John Doe",
- "options": null,
- "archived": false
}
}, - {
- "id": "501",
- "type": "appointment_booking_question",
- "attributes": {
- "id": 501,
- "appointment_id": 75,
- "booking_question_id": null,
- "editable": false,
- "column_name": "guest_email",
- "name": "Email",
- "label": "Email",
- "kind": "text",
- "intent": "Email",
- "built_in": true,
- "link": null,
- "value": "jdoe@example.com",
- "formatted_value": "jdoe@example.com",
- "options": null,
- "archived": false
}
}, - {
- "id": "502",
- "type": "appointment_booking_question",
- "attributes": {
- "id": 502,
- "appointment_id": 75,
- "booking_question_id": null,
- "editable": false,
- "column_name": "guest_phone",
- "name": "Phone",
- "label": "Phone",
- "kind": "text",
- "intent": "Phone",
- "built_in": true,
- "link": null,
- "value": "555-555-5555",
- "formatted_value": "555-555-5555",
- "options": null,
- "archived": false
}
}, - {
- "id": "503",
- "type": "appointment_booking_question",
- "attributes": {
- "id": 503,
- "appointment_id": 75,
- "booking_question_id": null,
- "editable": false,
- "column_name": "additional_guests",
- "name": "Guest Email(s)",
- "label": "Guest Email(s)",
- "kind": "text",
- "intent": "Guest Email(s)",
- "built_in": true,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}, - {
- "id": "504",
- "type": "appointment_booking_question",
- "attributes": {
- "id": 504,
- "appointment_id": 75,
- "booking_question_id": null,
- "editable": false,
- "column_name": "message",
- "name": "Additional Notes",
- "label": "Additional Notes",
- "kind": "textarea",
- "intent": "Additional Notes",
- "built_in": true,
- "link": null,
- "value": null,
- "formatted_value": null,
- "options": null,
- "archived": false
}
}
]
}Updates one or more booking question answers on the appointment. The body's custom_questions keys must match the column_name of each booking question (as returned by the GET endpoint). Built-in fields (e.g. guest_phone, event_date, venue_name) are also accepted here.
Only the keys you include are touched — other answers on the appointment are preserved.
Note: booking questions are sourced from the appointment's calendar. Appointments not created from a calendar (e.g. Quick Add) have no associated questions, so this endpoint is a no-op for them — use PATCH /api/v1/appointments/{id} to update guest/venue/event fields directly in that case.
Required permission: assigned_appointment_write or unassigned_appointment_write
| appointment_id required | integer The unique ID of the appointment |
| Api-Key required | string Your Integration Key |
required | object Keys are booking-question column names; values are the answer to record. |
{- "custom_questions": { }
}{- "meta": {
- "status": "ok"
}
}Returns a paginated list of appointments for the business. Results can be filtered by date range, staff member, brand, cancellation status, and text search.
Set staff_id to my to return only appointments assigned to the authenticated user.
The response includes meta.total_count and meta.per_page for pagination.
Required permission: assigned_appointment_read or unassigned_appointment_read
| start_date | string Filter by start date (YYYY-MM-DD) |
| end_date | string Filter by end date (YYYY-MM-DD) |
| staff_id | string Filter by staff member ID, or 'my' for the authenticated user |
| brand_id | integer Filter by brand ID |
| canceled_status | string Filter by cancellation status |
| past_or_future | string Filter to past or future appointments |
| search_text | string Full-text search across appointment details |
| page | integer Page number for pagination (default: 1) |
| per | integer Number of results per page (default: 25) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 1,
- "per_page": 10,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "77",
- "type": "appointment",
- "attributes": {
- "id": 77,
- "title": null,
- "guest_name": "John Doe",
- "guest_email": "jdoe@example.com",
- "guest_phone": "555-555-5555",
- "starts_at": "2026-08-20T17:24:44.552-07:00",
- "ends_at": "2026-08-20T18:24:44.552-07:00",
- "length_in_minutes": 60,
- "brand_id": 14902,
- "brand_name": "Skiles-Carter 396",
- "additional_guests": null,
- "additional_guest_list": [ ],
- "location": "Phone",
- "location_details": null,
- "private_notes": null,
- "canceled": false,
- "zoom_meeting_id": null,
- "zoom_meeting_invitation": null,
- "zoom_join_url": null,
- "google_meet_link": null,
- "google_meet_conference_id": null,
- "google_meet_invitation": null,
- "user_appointment_calendar_id": null,
- "event_time": null,
- "event_length": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "event_date": null,
- "event_date_iso8601": null,
- "available_locations": [
- "In Person",
- "Phone"
], - "formatted_date": "Thursday, August 20, 2026",
- "formatted_datetime_range": "Thursday, August 20, 2026 • 5:24 PM - 6:24 PM",
- "formatted_time_range": "5:24 PM - 6:24 PM",
- "staff_member_abbreviations": "DF",
- "custom_questions": { }
}, - "relationships": {
- "user_appointments": {
- "data": [
- {
- "id": "77",
- "type": "user_appointment"
}
]
}
}
}
]
}Creates a new appointment for the business. The appointment is assigned to the authenticated user by default, or to a specific user via user_id.
The location field specifies where the appointment takes place (e.g., "Phone", "In Person", a Zoom link, etc.).
Required permission: appointment_create
| Api-Key required | string Your Integration Key |
| guest_name required | string Guest name |
| guest_email required | string Guest email address |
| guest_phone | string Guest phone number |
| additional_guests | string Additional guest names or details |
| starts_at_date required | string Appointment date (YYYY-MM-DD) |
| starts_at_time required | string Appointment start time (e.g., "2:00 PM") |
| length_in_minutes required | integer Duration in minutes |
| location | string Appointment location (e.g., "Phone", "In Person") |
| private_notes | string Private internal notes |
| message | string Message to the guest |
| user_id | integer Staff member ID to assign (defaults to authenticated user) |
| brand_id | integer Brand ID (defaults to the primary brand) |
| user_appointment_calendar_id | integer Appointment calendar ID for scheduling |
| created_via required | string Enum: "quick_add" "widget" "app" How the appointment was created |
{- "guest_name": "string",
- "guest_email": "string",
- "guest_phone": "string",
- "additional_guests": "string",
- "starts_at_date": "string",
- "starts_at_time": "string",
- "length_in_minutes": 0,
- "location": "string",
- "private_notes": "string",
- "message": "string",
- "user_id": 0,
- "brand_id": 0,
- "user_appointment_calendar_id": 0,
- "created_via": "quick_add"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "78",
- "type": "appointment",
- "attributes": {
- "id": 78,
- "title": "Jane Smith’s Phone Appointment",
- "guest_name": "Jane Smith",
- "guest_email": "jane@example.com",
- "guest_phone": "555-123-4567",
- "starts_at": "2026-08-20T14:00:00.000-07:00",
- "ends_at": "2026-08-20T14:30:00.000-07:00",
- "length_in_minutes": 30,
- "brand_id": 14903,
- "brand_name": "Emmerich, Stanton and Koss 397",
- "additional_guests": null,
- "additional_guest_list": [ ],
- "location": "Phone",
- "location_details": null,
- "private_notes": "",
- "canceled": false,
- "zoom_meeting_id": null,
- "zoom_meeting_invitation": null,
- "zoom_join_url": null,
- "google_meet_link": null,
- "google_meet_conference_id": null,
- "google_meet_invitation": null,
- "user_appointment_calendar_id": null,
- "event_time": null,
- "event_length": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "event_date": null,
- "event_date_iso8601": null,
- "available_locations": [
- "In Person",
- "Phone"
], - "formatted_date": "Thursday, August 20, 2026",
- "formatted_datetime_range": "Thursday, August 20, 2026 • 2:00 PM - 2:30 PM",
- "formatted_time_range": "2:00 PM - 2:30 PM",
- "staff_member_abbreviations": "MA",
- "custom_questions": { }
}, - "relationships": {
- "user_appointments": {
- "data": [
- {
- "id": "78",
- "type": "user_appointment"
}
]
}
}
}
}Returns the full details of a single appointment, including guest information, date/time, location, meeting links (Zoom, Google Meet), and assigned staff.
Use the include query parameter to sideload related resources (comma-separated). Available: user_appointments.
Required permission: assigned_appointment_read or unassigned_appointment_read
| id required | integer The unique ID of the appointment |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "79",
- "type": "appointment",
- "attributes": {
- "id": 79,
- "title": null,
- "guest_name": "John Doe",
- "guest_email": "jdoe@example.com",
- "guest_phone": "555-555-5555",
- "starts_at": "2026-08-20T17:24:44.819-07:00",
- "ends_at": "2026-08-20T18:24:44.819-07:00",
- "length_in_minutes": 60,
- "brand_id": 14904,
- "brand_name": "Abbott, Hintz and Klein 398",
- "additional_guests": null,
- "additional_guest_list": [ ],
- "location": "Phone",
- "location_details": null,
- "private_notes": null,
- "canceled": false,
- "zoom_meeting_id": null,
- "zoom_meeting_invitation": null,
- "zoom_join_url": null,
- "google_meet_link": null,
- "google_meet_conference_id": null,
- "google_meet_invitation": null,
- "user_appointment_calendar_id": null,
- "event_time": null,
- "event_length": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "event_date": null,
- "event_date_iso8601": null,
- "available_locations": [
- "In Person",
- "Phone"
], - "formatted_date": "Thursday, August 20, 2026",
- "formatted_datetime_range": "Thursday, August 20, 2026 • 5:24 PM - 6:24 PM",
- "formatted_time_range": "5:24 PM - 6:24 PM",
- "staff_member_abbreviations": "AT",
- "custom_questions": { }
}, - "relationships": {
- "user_appointments": {
- "data": [
- {
- "id": "79",
- "type": "user_appointment"
}
]
}
}
}
}Updates an existing appointment. Only the fields provided will be changed. If the start time or end time changes, a rescheduled notification is automatically sent.
Required permission: assigned_appointment_write or unassigned_appointment_write
| id required | integer The unique ID of the appointment |
| Api-Key required | string Your Integration Key |
| guest_name | string Guest name |
| guest_email | string Guest email address |
| guest_phone | string Guest phone number |
| additional_guests | string Additional guest names or details |
| starts_at_date | string New appointment date (YYYY-MM-DD) |
| starts_at_time | string New appointment start time (e.g., "2:00 PM") |
| length_in_minutes | integer Duration in minutes |
| location | string Appointment location |
| location_details | string Additional location details |
| private_notes | string Private internal notes |
| custom_title | string Custom title override |
| brand_id | integer Brand ID |
{- "guest_name": "string",
- "guest_email": "string",
- "guest_phone": "string",
- "additional_guests": "string",
- "starts_at_date": "string",
- "starts_at_time": "string",
- "length_in_minutes": 0,
- "location": "string",
- "location_details": "string",
- "private_notes": "string",
- "custom_title": "string",
- "brand_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "80",
- "type": "appointment",
- "attributes": {
- "id": 80,
- "title": "Updated Name’s Phone Appointment",
- "guest_name": "Updated Name",
- "guest_email": "jdoe@example.com",
- "guest_phone": "555-555-5555",
- "starts_at": "2026-08-20T17:24:44.889-07:00",
- "ends_at": "2026-08-20T18:24:44.889-07:00",
- "length_in_minutes": 60,
- "brand_id": 14905,
- "brand_name": "Raynor, Ratke and Towne 399",
- "additional_guests": null,
- "additional_guest_list": [ ],
- "location": "Phone",
- "location_details": null,
- "private_notes": null,
- "canceled": false,
- "zoom_meeting_id": null,
- "zoom_meeting_invitation": null,
- "zoom_join_url": null,
- "google_meet_link": null,
- "google_meet_conference_id": null,
- "google_meet_invitation": null,
- "user_appointment_calendar_id": null,
- "event_time": null,
- "event_length": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "event_date": null,
- "event_date_iso8601": null,
- "available_locations": [
- "In Person",
- "Phone"
], - "formatted_date": "Thursday, August 20, 2026",
- "formatted_datetime_range": "Thursday, August 20, 2026 • 5:24 PM - 6:24 PM",
- "formatted_time_range": "5:24 PM - 6:24 PM",
- "staff_member_abbreviations": "EH",
- "custom_questions": { }
}, - "relationships": {
- "user_appointments": {
- "data": [
- {
- "id": "80",
- "type": "user_appointment"
}
]
}
}
}
}Soft-deletes an appointment. The appointment is marked as deleted but not permanently removed.
Required permission: assigned_appointment_write or unassigned_appointment_write
| id required | integer The unique ID of the appointment |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "81",
- "type": "appointment",
- "attributes": {
- "id": 81,
- "title": null,
- "guest_name": "John Doe",
- "guest_email": "jdoe@example.com",
- "guest_phone": "555-555-5555",
- "starts_at": "2026-08-20T17:24:44.961-07:00",
- "ends_at": "2026-08-20T18:24:44.961-07:00",
- "length_in_minutes": 60,
- "brand_id": 14906,
- "brand_name": "Jacobson, Hahn and Macejkovic 400",
- "additional_guests": null,
- "additional_guest_list": [ ],
- "location": "Phone",
- "location_details": null,
- "private_notes": null,
- "canceled": false,
- "zoom_meeting_id": null,
- "zoom_meeting_invitation": null,
- "zoom_join_url": null,
- "google_meet_link": null,
- "google_meet_conference_id": null,
- "google_meet_invitation": null,
- "user_appointment_calendar_id": null,
- "event_time": null,
- "event_length": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "event_date": null,
- "event_date_iso8601": null,
- "available_locations": [
- "In Person",
- "Phone"
], - "formatted_date": "Thursday, August 20, 2026",
- "formatted_datetime_range": "Thursday, August 20, 2026 • 5:24 PM - 6:24 PM",
- "formatted_time_range": "5:24 PM - 6:24 PM",
- "staff_member_abbreviations": "JD",
- "custom_questions": { }
}, - "relationships": {
- "user_appointments": {
- "data": [
- {
- "id": "81",
- "type": "user_appointment"
}
]
}
}
}
}Cancels an appointment and sends cancellation notifications to the guest.
Required permission: assigned_appointment_write or unassigned_appointment_write
| id required | integer The unique ID of the appointment |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "82",
- "type": "appointment",
- "attributes": {
- "id": 82,
- "title": null,
- "guest_name": "John Doe",
- "guest_email": "jdoe@example.com",
- "guest_phone": "555-555-5555",
- "starts_at": "2026-08-20T17:24:45.029-07:00",
- "ends_at": "2026-08-20T18:24:45.029-07:00",
- "length_in_minutes": 60,
- "brand_id": 14907,
- "brand_name": "Bashirian Group 401",
- "additional_guests": null,
- "additional_guest_list": [ ],
- "location": "Phone",
- "location_details": null,
- "private_notes": null,
- "canceled": true,
- "zoom_meeting_id": null,
- "zoom_meeting_invitation": null,
- "zoom_join_url": null,
- "google_meet_link": null,
- "google_meet_conference_id": null,
- "google_meet_invitation": null,
- "user_appointment_calendar_id": null,
- "event_time": null,
- "event_length": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "event_date": null,
- "event_date_iso8601": null,
- "available_locations": [
- "In Person",
- "Phone"
], - "formatted_date": "Thursday, August 20, 2026",
- "formatted_datetime_range": "Thursday, August 20, 2026 • 5:24 PM - 6:24 PM",
- "formatted_time_range": "5:24 PM - 6:24 PM",
- "staff_member_abbreviations": "JT",
- "custom_questions": { }
}, - "relationships": {
- "user_appointments": {
- "data": [
- {
- "id": "82",
- "type": "user_appointment"
}
]
}
}
}
}Restores a previously canceled appointment.
Required permission: assigned_appointment_write or unassigned_appointment_write
| id required | integer The unique ID of the appointment |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "83",
- "type": "appointment",
- "attributes": {
- "id": 83,
- "title": null,
- "guest_name": "John Doe",
- "guest_email": "jdoe@example.com",
- "guest_phone": "555-555-5555",
- "starts_at": "2026-08-20T17:24:45.107-07:00",
- "ends_at": "2026-08-20T18:24:45.107-07:00",
- "length_in_minutes": 60,
- "brand_id": 14908,
- "brand_name": "Moore and Sons 402",
- "additional_guests": null,
- "additional_guest_list": [ ],
- "location": "Phone",
- "location_details": null,
- "private_notes": null,
- "canceled": false,
- "zoom_meeting_id": null,
- "zoom_meeting_invitation": null,
- "zoom_join_url": null,
- "google_meet_link": null,
- "google_meet_conference_id": null,
- "google_meet_invitation": null,
- "user_appointment_calendar_id": null,
- "event_time": null,
- "event_length": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "event_date": null,
- "event_date_iso8601": null,
- "available_locations": [
- "In Person",
- "Phone"
], - "formatted_date": "Thursday, August 20, 2026",
- "formatted_datetime_range": "Thursday, August 20, 2026 • 5:24 PM - 6:24 PM",
- "formatted_time_range": "5:24 PM - 6:24 PM",
- "staff_member_abbreviations": "KB",
- "custom_questions": { }
}, - "relationships": {
- "user_appointments": {
- "data": [
- {
- "id": "83",
- "type": "user_appointment"
}
]
}
}
}
}Creates a copy of an existing appointment with a new date and time. The guest details and other settings are carried over from the original.
Required permission: unassigned_appointment_write
| id required | integer The unique ID of the appointment to duplicate |
| Api-Key required | string Your Integration Key |
| starts_at_date required | string Date for the new appointment (YYYY-MM-DD) |
| starts_at_time required | string Start time for the new appointment (e.g., "2:00 PM") |
{- "starts_at_date": "string",
- "starts_at_time": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "85",
- "type": "appointment",
- "attributes": {
- "id": 85,
- "title": "John Doe’s Phone Appointment",
- "guest_name": "John Doe",
- "guest_email": "jdoe@example.com",
- "guest_phone": "555-555-5555",
- "starts_at": "2026-08-27T15:00:00.000-07:00",
- "ends_at": "2026-08-27T16:00:00.000-07:00",
- "length_in_minutes": 60,
- "brand_id": 14909,
- "brand_name": "Klocko, Osinski and Bauch 403",
- "additional_guests": null,
- "additional_guest_list": [ ],
- "location": "Phone",
- "location_details": null,
- "private_notes": null,
- "canceled": false,
- "zoom_meeting_id": null,
- "zoom_meeting_invitation": null,
- "zoom_join_url": null,
- "google_meet_link": null,
- "google_meet_conference_id": null,
- "google_meet_invitation": null,
- "user_appointment_calendar_id": null,
- "event_time": null,
- "event_length": null,
- "venue_name": null,
- "venue_address": null,
- "venue_city": null,
- "venue_state": null,
- "venue_zip": null,
- "event_date": null,
- "event_date_iso8601": null,
- "available_locations": [
- "In Person",
- "Phone"
], - "formatted_date": "Thursday, August 27, 2026",
- "formatted_datetime_range": "Thursday, August 27, 2026 • 3:00 PM - 4:00 PM",
- "formatted_time_range": "3:00 PM - 4:00 PM",
- "staff_member_abbreviations": "RD",
- "custom_questions": { }
}, - "relationships": {
- "user_appointments": {
- "data": [
- {
- "id": "85",
- "type": "user_appointment"
}
]
}
}
}
}Check real-time availability for the business. Query by date, package, staff member, add-on, or backdrop to determine what time slots are open. Use available slots endpoints to build booking interfaces where customers pick a time.
Checks whether the business has availability on a given date or date range for a specific package. Returns inventory information indicating whether the date is available, partially available, or fully booked.
Provide either a single event_date or a range via starts_at and ends_at.
Required permission: availability_read
| event_date | string Date to check (YYYY-MM-DD) |
| starts_at | string Start of date range (YYYY-MM-DD) |
| ends_at | string End of date range (YYYY-MM-DD) |
| package_id | integer Package (event type) ID to check availability for |
| Api-Key required | string Your Integration Key |
{- "data": {
- "id": "201a05f6-2dfb-4745-aa74-05cd48bb1549",
- "type": "availability_result",
- "attributes": {
- "id": "201a05f6-2dfb-4745-aa74-05cd48bb1549",
- "available": true,
- "event_type_id": 3607,
- "starts_at": "2026-09-13T00:00:00.000-07:00",
- "ends_at": "2026-09-13T23:59:59.999-07:00"
}, - "relationships": {
- "event_type": {
- "data": {
- "id": "3607",
- "type": "event_type"
}
}
}
}
}Returns detailed availability information for a specific date, time, and resource combination. Use this to check whether a particular staff member, add-on, or backdrop is available for a given time slot.
This endpoint supports multiple lookup types and can check availability for packages, add-ons, backdrops, and specific staff members simultaneously.
Required permission: availability_read
| starts_at_date | string Date to check (YYYY-MM-DD) |
| starts_at_time | string Start time to check |
| ends_at_time | string End time to check |
| starts_at | string Start datetime (ISO 8601) |
| ends_at | string End datetime (ISO 8601) |
| package_id | integer Package (event type) ID |
| add_on_id | integer Add-on ID to check availability for |
| backdrop_id | integer Backdrop ID to check availability for |
| staff_id | integer Staff member ID to check availability for |
| lookup_type | string Type of availability lookup |
| quantity | integer Quantity to check availability for |
| Api-Key required | string Your Integration Key |
{- "available": true,
- "messages": [ ],
- "overlapping_bookings": [ ]
}Returns the available time slots for a specific date and package. Each slot includes the start time, availability status, and formatted display name.
This is useful for building booking interfaces where customers select a time slot.
Required permission: availability_read
| event_date required | string Date to check (YYYY-MM-DD) |
| package_id required | integer Package (event type) ID |
| length_in_minutes | integer Event duration in minutes (overrides package default) |
| Api-Key required | string Your Integration Key |
{- "data": [
- {
- "id": "4b87c106-d9ae-4867-b2f1-b10360a539fb",
- "type": "availability_slot",
- "attributes": {
- "id": "4b87c106-d9ae-4867-b2f1-b10360a539fb",
- "available": true,
- "starts_at": "2026-09-13T00:00:00.000-07:00",
- "formatted_slot_name": "12:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "12:00 AM"
}
}, - {
- "id": "f2e6d81c-a303-441e-9645-88cef662672a",
- "type": "availability_slot",
- "attributes": {
- "id": "f2e6d81c-a303-441e-9645-88cef662672a",
- "available": true,
- "starts_at": "2026-09-13T00:30:00.000-07:00",
- "formatted_slot_name": "12:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "12:30 AM"
}
}, - {
- "id": "891a6da9-6f6f-48eb-a139-533673032c01",
- "type": "availability_slot",
- "attributes": {
- "id": "891a6da9-6f6f-48eb-a139-533673032c01",
- "available": true,
- "starts_at": "2026-09-13T01:00:00.000-07:00",
- "formatted_slot_name": "1:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "1:00 AM"
}
}, - {
- "id": "c9142cb2-8cd4-4902-ad4b-15767f6b4c4d",
- "type": "availability_slot",
- "attributes": {
- "id": "c9142cb2-8cd4-4902-ad4b-15767f6b4c4d",
- "available": true,
- "starts_at": "2026-09-13T01:30:00.000-07:00",
- "formatted_slot_name": "1:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "1:30 AM"
}
}, - {
- "id": "d43928d6-8fb7-4c7a-8900-7938e758d575",
- "type": "availability_slot",
- "attributes": {
- "id": "d43928d6-8fb7-4c7a-8900-7938e758d575",
- "available": true,
- "starts_at": "2026-09-13T02:00:00.000-07:00",
- "formatted_slot_name": "2:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "2:00 AM"
}
}, - {
- "id": "519116ea-35e4-4d6a-ba8f-671088dfa6a8",
- "type": "availability_slot",
- "attributes": {
- "id": "519116ea-35e4-4d6a-ba8f-671088dfa6a8",
- "available": true,
- "starts_at": "2026-09-13T02:30:00.000-07:00",
- "formatted_slot_name": "2:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "2:30 AM"
}
}, - {
- "id": "e9cfd2c4-dbd9-4497-af38-184a98ff3695",
- "type": "availability_slot",
- "attributes": {
- "id": "e9cfd2c4-dbd9-4497-af38-184a98ff3695",
- "available": true,
- "starts_at": "2026-09-13T03:00:00.000-07:00",
- "formatted_slot_name": "3:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "3:00 AM"
}
}, - {
- "id": "101b99e7-5559-47b1-9b1e-a8c0a05410f9",
- "type": "availability_slot",
- "attributes": {
- "id": "101b99e7-5559-47b1-9b1e-a8c0a05410f9",
- "available": true,
- "starts_at": "2026-09-13T03:30:00.000-07:00",
- "formatted_slot_name": "3:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "3:30 AM"
}
}, - {
- "id": "53984c27-7e64-433f-a1f1-1de1ff07a109",
- "type": "availability_slot",
- "attributes": {
- "id": "53984c27-7e64-433f-a1f1-1de1ff07a109",
- "available": true,
- "starts_at": "2026-09-13T04:00:00.000-07:00",
- "formatted_slot_name": "4:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "4:00 AM"
}
}, - {
- "id": "c37bd1a0-62ad-46e5-9ee7-470685b1546d",
- "type": "availability_slot",
- "attributes": {
- "id": "c37bd1a0-62ad-46e5-9ee7-470685b1546d",
- "available": true,
- "starts_at": "2026-09-13T04:30:00.000-07:00",
- "formatted_slot_name": "4:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "4:30 AM"
}
}, - {
- "id": "eff91366-b81d-4f43-8fce-def8abcbfaf3",
- "type": "availability_slot",
- "attributes": {
- "id": "eff91366-b81d-4f43-8fce-def8abcbfaf3",
- "available": true,
- "starts_at": "2026-09-13T05:00:00.000-07:00",
- "formatted_slot_name": "5:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "5:00 AM"
}
}, - {
- "id": "0c40981a-ce48-432c-939a-80ed3e522182",
- "type": "availability_slot",
- "attributes": {
- "id": "0c40981a-ce48-432c-939a-80ed3e522182",
- "available": true,
- "starts_at": "2026-09-13T05:30:00.000-07:00",
- "formatted_slot_name": "5:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "5:30 AM"
}
}, - {
- "id": "8f83197b-56eb-440b-b5a5-9db77aef23fb",
- "type": "availability_slot",
- "attributes": {
- "id": "8f83197b-56eb-440b-b5a5-9db77aef23fb",
- "available": true,
- "starts_at": "2026-09-13T06:00:00.000-07:00",
- "formatted_slot_name": "6:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "6:00 AM"
}
}, - {
- "id": "956c96e9-9494-468d-b22e-1594fbfa4c67",
- "type": "availability_slot",
- "attributes": {
- "id": "956c96e9-9494-468d-b22e-1594fbfa4c67",
- "available": true,
- "starts_at": "2026-09-13T06:30:00.000-07:00",
- "formatted_slot_name": "6:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "6:30 AM"
}
}, - {
- "id": "a4e1e809-b3ca-4078-ac37-f29b26fee58e",
- "type": "availability_slot",
- "attributes": {
- "id": "a4e1e809-b3ca-4078-ac37-f29b26fee58e",
- "available": true,
- "starts_at": "2026-09-13T07:00:00.000-07:00",
- "formatted_slot_name": "7:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "7:00 AM"
}
}, - {
- "id": "57ff0a11-3682-431e-ba1e-4e671f5c928a",
- "type": "availability_slot",
- "attributes": {
- "id": "57ff0a11-3682-431e-ba1e-4e671f5c928a",
- "available": true,
- "starts_at": "2026-09-13T07:30:00.000-07:00",
- "formatted_slot_name": "7:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "7:30 AM"
}
}, - {
- "id": "94b51dc0-80ba-4ccd-84cf-856bbb1f9f11",
- "type": "availability_slot",
- "attributes": {
- "id": "94b51dc0-80ba-4ccd-84cf-856bbb1f9f11",
- "available": true,
- "starts_at": "2026-09-13T08:00:00.000-07:00",
- "formatted_slot_name": "8:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "8:00 AM"
}
}, - {
- "id": "26e5954b-2b14-40d6-8b4e-ac6e14a5e357",
- "type": "availability_slot",
- "attributes": {
- "id": "26e5954b-2b14-40d6-8b4e-ac6e14a5e357",
- "available": true,
- "starts_at": "2026-09-13T08:30:00.000-07:00",
- "formatted_slot_name": "8:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "8:30 AM"
}
}, - {
- "id": "8f71c9df-6cf6-4c7f-bd50-8982ba471ab0",
- "type": "availability_slot",
- "attributes": {
- "id": "8f71c9df-6cf6-4c7f-bd50-8982ba471ab0",
- "available": true,
- "starts_at": "2026-09-13T09:00:00.000-07:00",
- "formatted_slot_name": "9:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "9:00 AM"
}
}, - {
- "id": "01da9b41-6072-49e0-a9cc-f39ba35d8454",
- "type": "availability_slot",
- "attributes": {
- "id": "01da9b41-6072-49e0-a9cc-f39ba35d8454",
- "available": true,
- "starts_at": "2026-09-13T09:30:00.000-07:00",
- "formatted_slot_name": "9:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "9:30 AM"
}
}, - {
- "id": "2e270545-affd-41b1-8d9e-e627d060b745",
- "type": "availability_slot",
- "attributes": {
- "id": "2e270545-affd-41b1-8d9e-e627d060b745",
- "available": true,
- "starts_at": "2026-09-13T10:00:00.000-07:00",
- "formatted_slot_name": "10:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "10:00 AM"
}
}, - {
- "id": "e4972c9d-a865-4cea-99a4-ea45a41f8ec9",
- "type": "availability_slot",
- "attributes": {
- "id": "e4972c9d-a865-4cea-99a4-ea45a41f8ec9",
- "available": true,
- "starts_at": "2026-09-13T10:30:00.000-07:00",
- "formatted_slot_name": "10:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "10:30 AM"
}
}, - {
- "id": "7282a0e7-f36a-498a-9074-6afec32169dc",
- "type": "availability_slot",
- "attributes": {
- "id": "7282a0e7-f36a-498a-9074-6afec32169dc",
- "available": true,
- "starts_at": "2026-09-13T11:00:00.000-07:00",
- "formatted_slot_name": "11:00 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "11:00 AM"
}
}, - {
- "id": "f2a1ab89-a07a-477f-8c59-9a85a2009f95",
- "type": "availability_slot",
- "attributes": {
- "id": "f2a1ab89-a07a-477f-8c59-9a85a2009f95",
- "available": true,
- "starts_at": "2026-09-13T11:30:00.000-07:00",
- "formatted_slot_name": "11:30 AM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "11:30 AM"
}
}, - {
- "id": "b6e9f163-2743-4ae5-ac7a-93b576f05ab2",
- "type": "availability_slot",
- "attributes": {
- "id": "b6e9f163-2743-4ae5-ac7a-93b576f05ab2",
- "available": true,
- "starts_at": "2026-09-13T12:00:00.000-07:00",
- "formatted_slot_name": "12:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "12:00 PM"
}
}, - {
- "id": "6e7b9ec4-e646-4f02-9149-7b751ce6964a",
- "type": "availability_slot",
- "attributes": {
- "id": "6e7b9ec4-e646-4f02-9149-7b751ce6964a",
- "available": true,
- "starts_at": "2026-09-13T12:30:00.000-07:00",
- "formatted_slot_name": "12:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "12:30 PM"
}
}, - {
- "id": "c57fc5d4-6ce3-480a-90aa-4bfee0324959",
- "type": "availability_slot",
- "attributes": {
- "id": "c57fc5d4-6ce3-480a-90aa-4bfee0324959",
- "available": true,
- "starts_at": "2026-09-13T13:00:00.000-07:00",
- "formatted_slot_name": "1:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "1:00 PM"
}
}, - {
- "id": "11594eea-d5f5-4370-9bc8-0e46381b61cb",
- "type": "availability_slot",
- "attributes": {
- "id": "11594eea-d5f5-4370-9bc8-0e46381b61cb",
- "available": true,
- "starts_at": "2026-09-13T13:30:00.000-07:00",
- "formatted_slot_name": "1:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "1:30 PM"
}
}, - {
- "id": "efb67ea1-4b70-4ee4-ad94-cd70db4594f4",
- "type": "availability_slot",
- "attributes": {
- "id": "efb67ea1-4b70-4ee4-ad94-cd70db4594f4",
- "available": true,
- "starts_at": "2026-09-13T14:00:00.000-07:00",
- "formatted_slot_name": "2:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "2:00 PM"
}
}, - {
- "id": "4a0a3ac3-0153-4713-8464-3bbbe1aaf9f8",
- "type": "availability_slot",
- "attributes": {
- "id": "4a0a3ac3-0153-4713-8464-3bbbe1aaf9f8",
- "available": true,
- "starts_at": "2026-09-13T14:30:00.000-07:00",
- "formatted_slot_name": "2:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "2:30 PM"
}
}, - {
- "id": "e3965d58-2744-42e6-8fa2-5c1bbe418d6a",
- "type": "availability_slot",
- "attributes": {
- "id": "e3965d58-2744-42e6-8fa2-5c1bbe418d6a",
- "available": true,
- "starts_at": "2026-09-13T15:00:00.000-07:00",
- "formatted_slot_name": "3:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "3:00 PM"
}
}, - {
- "id": "0bb23429-631d-4339-97b5-f9e2f59bb000",
- "type": "availability_slot",
- "attributes": {
- "id": "0bb23429-631d-4339-97b5-f9e2f59bb000",
- "available": true,
- "starts_at": "2026-09-13T15:30:00.000-07:00",
- "formatted_slot_name": "3:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "3:30 PM"
}
}, - {
- "id": "5d3c24ad-be36-4c31-8a3e-86636323dcbb",
- "type": "availability_slot",
- "attributes": {
- "id": "5d3c24ad-be36-4c31-8a3e-86636323dcbb",
- "available": true,
- "starts_at": "2026-09-13T16:00:00.000-07:00",
- "formatted_slot_name": "4:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "4:00 PM"
}
}, - {
- "id": "83516248-a16b-42da-b33d-5f65b41c6731",
- "type": "availability_slot",
- "attributes": {
- "id": "83516248-a16b-42da-b33d-5f65b41c6731",
- "available": true,
- "starts_at": "2026-09-13T16:30:00.000-07:00",
- "formatted_slot_name": "4:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "4:30 PM"
}
}, - {
- "id": "064c30ac-e4ce-485c-9678-ed52987b0b69",
- "type": "availability_slot",
- "attributes": {
- "id": "064c30ac-e4ce-485c-9678-ed52987b0b69",
- "available": true,
- "starts_at": "2026-09-13T17:00:00.000-07:00",
- "formatted_slot_name": "5:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "5:00 PM"
}
}, - {
- "id": "4cbdd21c-b604-4247-a21e-983ddad5a31f",
- "type": "availability_slot",
- "attributes": {
- "id": "4cbdd21c-b604-4247-a21e-983ddad5a31f",
- "available": true,
- "starts_at": "2026-09-13T17:30:00.000-07:00",
- "formatted_slot_name": "5:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "5:30 PM"
}
}, - {
- "id": "90392a33-352d-4caa-a17f-10e9abce3c32",
- "type": "availability_slot",
- "attributes": {
- "id": "90392a33-352d-4caa-a17f-10e9abce3c32",
- "available": true,
- "starts_at": "2026-09-13T18:00:00.000-07:00",
- "formatted_slot_name": "6:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "6:00 PM"
}
}, - {
- "id": "50e7d940-35b4-4252-8567-1711919e8696",
- "type": "availability_slot",
- "attributes": {
- "id": "50e7d940-35b4-4252-8567-1711919e8696",
- "available": true,
- "starts_at": "2026-09-13T18:30:00.000-07:00",
- "formatted_slot_name": "6:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "6:30 PM"
}
}, - {
- "id": "74fa8de8-b5c7-4c65-94d6-028685eb9e66",
- "type": "availability_slot",
- "attributes": {
- "id": "74fa8de8-b5c7-4c65-94d6-028685eb9e66",
- "available": true,
- "starts_at": "2026-09-13T19:00:00.000-07:00",
- "formatted_slot_name": "7:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "7:00 PM"
}
}, - {
- "id": "abd3759e-a6a0-4bcf-a5ad-21fb462879a8",
- "type": "availability_slot",
- "attributes": {
- "id": "abd3759e-a6a0-4bcf-a5ad-21fb462879a8",
- "available": true,
- "starts_at": "2026-09-13T19:30:00.000-07:00",
- "formatted_slot_name": "7:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "7:30 PM"
}
}, - {
- "id": "8a7285db-edff-44d4-a4fd-e3fb70bcead0",
- "type": "availability_slot",
- "attributes": {
- "id": "8a7285db-edff-44d4-a4fd-e3fb70bcead0",
- "available": true,
- "starts_at": "2026-09-13T20:00:00.000-07:00",
- "formatted_slot_name": "8:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "8:00 PM"
}
}, - {
- "id": "2ee26c61-d419-432e-9035-7da00bae0a29",
- "type": "availability_slot",
- "attributes": {
- "id": "2ee26c61-d419-432e-9035-7da00bae0a29",
- "available": true,
- "starts_at": "2026-09-13T20:30:00.000-07:00",
- "formatted_slot_name": "8:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "8:30 PM"
}
}, - {
- "id": "e91e1ff4-6d0f-4d61-aa31-3533dca01df7",
- "type": "availability_slot",
- "attributes": {
- "id": "e91e1ff4-6d0f-4d61-aa31-3533dca01df7",
- "available": true,
- "starts_at": "2026-09-13T21:00:00.000-07:00",
- "formatted_slot_name": "9:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "9:00 PM"
}
}, - {
- "id": "98dab06c-26c2-4b0c-983b-ffe7de2de977",
- "type": "availability_slot",
- "attributes": {
- "id": "98dab06c-26c2-4b0c-983b-ffe7de2de977",
- "available": true,
- "starts_at": "2026-09-13T21:30:00.000-07:00",
- "formatted_slot_name": "9:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "9:30 PM"
}
}, - {
- "id": "d636fec9-b46c-464c-a89b-16ee344229c5",
- "type": "availability_slot",
- "attributes": {
- "id": "d636fec9-b46c-464c-a89b-16ee344229c5",
- "available": true,
- "starts_at": "2026-09-13T22:00:00.000-07:00",
- "formatted_slot_name": "10:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "10:00 PM"
}
}, - {
- "id": "984a3524-e2dc-45b0-a7bd-955fcfa077df",
- "type": "availability_slot",
- "attributes": {
- "id": "984a3524-e2dc-45b0-a7bd-955fcfa077df",
- "available": true,
- "starts_at": "2026-09-13T22:30:00.000-07:00",
- "formatted_slot_name": "10:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "10:30 PM"
}
}, - {
- "id": "35d36001-f6c9-47c2-acc3-c8eaded2f3b5",
- "type": "availability_slot",
- "attributes": {
- "id": "35d36001-f6c9-47c2-acc3-c8eaded2f3b5",
- "available": true,
- "starts_at": "2026-09-13T23:00:00.000-07:00",
- "formatted_slot_name": "11:00 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "11:00 PM"
}
}, - {
- "id": "a6b8e2e4-e82b-462b-ad26-2e8203410e28",
- "type": "availability_slot",
- "attributes": {
- "id": "a6b8e2e4-e82b-462b-ad26-2e8203410e28",
- "available": true,
- "starts_at": "2026-09-13T23:30:00.000-07:00",
- "formatted_slot_name": "11:30 PM",
- "length_in_minutes": 60,
- "localized_date": "09-13-2026",
- "localized_time": "11:30 PM"
}
}
]
}Returns available appointment time slots for a specific staff member's appointment calendar on a given date. Each slot shows whether it is available or already booked.
Requires a user_id and user_appointment_calendar_id to identify which staff member's calendar to check.
Required permission: user_appointment_calendar_read
| user_id required | integer Staff member user ID |
| user_appointment_calendar_id required | integer Appointment calendar ID for the staff member |
| selected_date required | string Date to check (YYYY-MM-DD) |
| Api-Key required | string Your Integration Key |
{- "data": [
- {
- "id": "d6235bdb-1c4e-4ca6-968b-466cefce7234",
- "type": "availability_slot",
- "attributes": {
- "id": "d6235bdb-1c4e-4ca6-968b-466cefce7234",
- "available": true,
- "starts_at": "2026-09-13T00:00:00.000-07:00",
- "formatted_slot_name": "12:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "12:00 AM"
}
}, - {
- "id": "5d773055-8fca-4e6f-a423-b847570b7701",
- "type": "availability_slot",
- "attributes": {
- "id": "5d773055-8fca-4e6f-a423-b847570b7701",
- "available": true,
- "starts_at": "2026-09-13T00:30:00.000-07:00",
- "formatted_slot_name": "12:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "12:30 AM"
}
}, - {
- "id": "39c62899-9319-486b-8891-2fe3393c7ad8",
- "type": "availability_slot",
- "attributes": {
- "id": "39c62899-9319-486b-8891-2fe3393c7ad8",
- "available": true,
- "starts_at": "2026-09-13T01:00:00.000-07:00",
- "formatted_slot_name": "1:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "1:00 AM"
}
}, - {
- "id": "74e32c09-b31f-4253-896c-c3ffde1604f3",
- "type": "availability_slot",
- "attributes": {
- "id": "74e32c09-b31f-4253-896c-c3ffde1604f3",
- "available": true,
- "starts_at": "2026-09-13T01:30:00.000-07:00",
- "formatted_slot_name": "1:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "1:30 AM"
}
}, - {
- "id": "de999880-db43-4f94-8a4c-5a5c2fec63a9",
- "type": "availability_slot",
- "attributes": {
- "id": "de999880-db43-4f94-8a4c-5a5c2fec63a9",
- "available": true,
- "starts_at": "2026-09-13T02:00:00.000-07:00",
- "formatted_slot_name": "2:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "2:00 AM"
}
}, - {
- "id": "ee71e34d-2fa3-423c-839d-51e3a49500d3",
- "type": "availability_slot",
- "attributes": {
- "id": "ee71e34d-2fa3-423c-839d-51e3a49500d3",
- "available": true,
- "starts_at": "2026-09-13T02:30:00.000-07:00",
- "formatted_slot_name": "2:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "2:30 AM"
}
}, - {
- "id": "82cb2586-0538-447b-bfda-fd54c216e7e3",
- "type": "availability_slot",
- "attributes": {
- "id": "82cb2586-0538-447b-bfda-fd54c216e7e3",
- "available": true,
- "starts_at": "2026-09-13T03:00:00.000-07:00",
- "formatted_slot_name": "3:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "3:00 AM"
}
}, - {
- "id": "6f27090d-a514-4896-9597-d4b183d5f65b",
- "type": "availability_slot",
- "attributes": {
- "id": "6f27090d-a514-4896-9597-d4b183d5f65b",
- "available": true,
- "starts_at": "2026-09-13T03:30:00.000-07:00",
- "formatted_slot_name": "3:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "3:30 AM"
}
}, - {
- "id": "29294751-8dea-451c-87ab-b4cfdfa76c1d",
- "type": "availability_slot",
- "attributes": {
- "id": "29294751-8dea-451c-87ab-b4cfdfa76c1d",
- "available": true,
- "starts_at": "2026-09-13T04:00:00.000-07:00",
- "formatted_slot_name": "4:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "4:00 AM"
}
}, - {
- "id": "dddc55bd-8e0e-48e5-bd6d-043df2ec5ff6",
- "type": "availability_slot",
- "attributes": {
- "id": "dddc55bd-8e0e-48e5-bd6d-043df2ec5ff6",
- "available": true,
- "starts_at": "2026-09-13T04:30:00.000-07:00",
- "formatted_slot_name": "4:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "4:30 AM"
}
}, - {
- "id": "ee78e3bc-f9cb-4ffa-b0e8-3ece312c9524",
- "type": "availability_slot",
- "attributes": {
- "id": "ee78e3bc-f9cb-4ffa-b0e8-3ece312c9524",
- "available": true,
- "starts_at": "2026-09-13T05:00:00.000-07:00",
- "formatted_slot_name": "5:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "5:00 AM"
}
}, - {
- "id": "7f91e5c1-f74d-4249-b42f-ac629e2cb2a1",
- "type": "availability_slot",
- "attributes": {
- "id": "7f91e5c1-f74d-4249-b42f-ac629e2cb2a1",
- "available": true,
- "starts_at": "2026-09-13T05:30:00.000-07:00",
- "formatted_slot_name": "5:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "5:30 AM"
}
}, - {
- "id": "3773829d-82ef-4f40-8aac-1f443d3f1215",
- "type": "availability_slot",
- "attributes": {
- "id": "3773829d-82ef-4f40-8aac-1f443d3f1215",
- "available": true,
- "starts_at": "2026-09-13T06:00:00.000-07:00",
- "formatted_slot_name": "6:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "6:00 AM"
}
}, - {
- "id": "18f59fae-563d-4986-a652-285a1ff828e5",
- "type": "availability_slot",
- "attributes": {
- "id": "18f59fae-563d-4986-a652-285a1ff828e5",
- "available": true,
- "starts_at": "2026-09-13T06:30:00.000-07:00",
- "formatted_slot_name": "6:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "6:30 AM"
}
}, - {
- "id": "a4491de0-175f-4202-b14b-a030979b16bb",
- "type": "availability_slot",
- "attributes": {
- "id": "a4491de0-175f-4202-b14b-a030979b16bb",
- "available": true,
- "starts_at": "2026-09-13T07:00:00.000-07:00",
- "formatted_slot_name": "7:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "7:00 AM"
}
}, - {
- "id": "4a0c931f-8313-44eb-9e49-a57cc427855f",
- "type": "availability_slot",
- "attributes": {
- "id": "4a0c931f-8313-44eb-9e49-a57cc427855f",
- "available": true,
- "starts_at": "2026-09-13T07:30:00.000-07:00",
- "formatted_slot_name": "7:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "7:30 AM"
}
}, - {
- "id": "2cca1191-cb70-48e1-aea2-14667da53cfa",
- "type": "availability_slot",
- "attributes": {
- "id": "2cca1191-cb70-48e1-aea2-14667da53cfa",
- "available": true,
- "starts_at": "2026-09-13T08:00:00.000-07:00",
- "formatted_slot_name": "8:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "8:00 AM"
}
}, - {
- "id": "3f417c16-8ad5-4481-bbd9-923348306ade",
- "type": "availability_slot",
- "attributes": {
- "id": "3f417c16-8ad5-4481-bbd9-923348306ade",
- "available": true,
- "starts_at": "2026-09-13T08:30:00.000-07:00",
- "formatted_slot_name": "8:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "8:30 AM"
}
}, - {
- "id": "19a7062d-e01d-4236-9ea4-45db13cd8854",
- "type": "availability_slot",
- "attributes": {
- "id": "19a7062d-e01d-4236-9ea4-45db13cd8854",
- "available": true,
- "starts_at": "2026-09-13T09:00:00.000-07:00",
- "formatted_slot_name": "9:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "9:00 AM"
}
}, - {
- "id": "2141ecf3-d5a8-4ee8-bfa9-1fe395a11f85",
- "type": "availability_slot",
- "attributes": {
- "id": "2141ecf3-d5a8-4ee8-bfa9-1fe395a11f85",
- "available": true,
- "starts_at": "2026-09-13T09:30:00.000-07:00",
- "formatted_slot_name": "9:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "9:30 AM"
}
}, - {
- "id": "6ce1b0af-8f22-4c2e-acae-88fd8f84faef",
- "type": "availability_slot",
- "attributes": {
- "id": "6ce1b0af-8f22-4c2e-acae-88fd8f84faef",
- "available": true,
- "starts_at": "2026-09-13T10:00:00.000-07:00",
- "formatted_slot_name": "10:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "10:00 AM"
}
}, - {
- "id": "a2422f39-5789-4a56-8aed-708ab75b6471",
- "type": "availability_slot",
- "attributes": {
- "id": "a2422f39-5789-4a56-8aed-708ab75b6471",
- "available": true,
- "starts_at": "2026-09-13T10:30:00.000-07:00",
- "formatted_slot_name": "10:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "10:30 AM"
}
}, - {
- "id": "0daac9c8-4e4b-43e4-ac52-804bbb2cf85e",
- "type": "availability_slot",
- "attributes": {
- "id": "0daac9c8-4e4b-43e4-ac52-804bbb2cf85e",
- "available": true,
- "starts_at": "2026-09-13T11:00:00.000-07:00",
- "formatted_slot_name": "11:00 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "11:00 AM"
}
}, - {
- "id": "75a4fd7a-57e6-4e3b-9539-e4ccc886a8aa",
- "type": "availability_slot",
- "attributes": {
- "id": "75a4fd7a-57e6-4e3b-9539-e4ccc886a8aa",
- "available": true,
- "starts_at": "2026-09-13T11:30:00.000-07:00",
- "formatted_slot_name": "11:30 AM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "11:30 AM"
}
}, - {
- "id": "dfbf0bd1-3083-4f7c-b731-87e2a75716ad",
- "type": "availability_slot",
- "attributes": {
- "id": "dfbf0bd1-3083-4f7c-b731-87e2a75716ad",
- "available": true,
- "starts_at": "2026-09-13T12:00:00.000-07:00",
- "formatted_slot_name": "12:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "12:00 PM"
}
}, - {
- "id": "2d964b5d-6fa3-4a6b-8314-d9e997ff680a",
- "type": "availability_slot",
- "attributes": {
- "id": "2d964b5d-6fa3-4a6b-8314-d9e997ff680a",
- "available": true,
- "starts_at": "2026-09-13T12:30:00.000-07:00",
- "formatted_slot_name": "12:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "12:30 PM"
}
}, - {
- "id": "7ec3e545-5d8f-4d6d-8f69-075e8917f6b3",
- "type": "availability_slot",
- "attributes": {
- "id": "7ec3e545-5d8f-4d6d-8f69-075e8917f6b3",
- "available": true,
- "starts_at": "2026-09-13T13:00:00.000-07:00",
- "formatted_slot_name": "1:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "1:00 PM"
}
}, - {
- "id": "70e7ab68-3e25-4330-a796-6eff146dd4c3",
- "type": "availability_slot",
- "attributes": {
- "id": "70e7ab68-3e25-4330-a796-6eff146dd4c3",
- "available": true,
- "starts_at": "2026-09-13T13:30:00.000-07:00",
- "formatted_slot_name": "1:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "1:30 PM"
}
}, - {
- "id": "c136dcb1-75af-472c-b348-79fdcf2a3c3b",
- "type": "availability_slot",
- "attributes": {
- "id": "c136dcb1-75af-472c-b348-79fdcf2a3c3b",
- "available": true,
- "starts_at": "2026-09-13T14:00:00.000-07:00",
- "formatted_slot_name": "2:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "2:00 PM"
}
}, - {
- "id": "899c18d1-e25f-4f52-afdb-eadcce77371e",
- "type": "availability_slot",
- "attributes": {
- "id": "899c18d1-e25f-4f52-afdb-eadcce77371e",
- "available": true,
- "starts_at": "2026-09-13T14:30:00.000-07:00",
- "formatted_slot_name": "2:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "2:30 PM"
}
}, - {
- "id": "5f2f9ab2-d564-4144-814f-4b1e52bd835b",
- "type": "availability_slot",
- "attributes": {
- "id": "5f2f9ab2-d564-4144-814f-4b1e52bd835b",
- "available": true,
- "starts_at": "2026-09-13T15:00:00.000-07:00",
- "formatted_slot_name": "3:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "3:00 PM"
}
}, - {
- "id": "0c2d8b00-4333-4571-a682-8f33bcec7280",
- "type": "availability_slot",
- "attributes": {
- "id": "0c2d8b00-4333-4571-a682-8f33bcec7280",
- "available": true,
- "starts_at": "2026-09-13T15:30:00.000-07:00",
- "formatted_slot_name": "3:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "3:30 PM"
}
}, - {
- "id": "bb50dc23-3a4a-478c-a3c5-e7237ef10efa",
- "type": "availability_slot",
- "attributes": {
- "id": "bb50dc23-3a4a-478c-a3c5-e7237ef10efa",
- "available": true,
- "starts_at": "2026-09-13T16:00:00.000-07:00",
- "formatted_slot_name": "4:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "4:00 PM"
}
}, - {
- "id": "e5e58771-a643-46fa-b9a5-15b9c4b7ed69",
- "type": "availability_slot",
- "attributes": {
- "id": "e5e58771-a643-46fa-b9a5-15b9c4b7ed69",
- "available": true,
- "starts_at": "2026-09-13T16:30:00.000-07:00",
- "formatted_slot_name": "4:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "4:30 PM"
}
}, - {
- "id": "ae3c7a00-7308-40ad-8c3c-c7c14aa5c42b",
- "type": "availability_slot",
- "attributes": {
- "id": "ae3c7a00-7308-40ad-8c3c-c7c14aa5c42b",
- "available": true,
- "starts_at": "2026-09-13T17:00:00.000-07:00",
- "formatted_slot_name": "5:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "5:00 PM"
}
}, - {
- "id": "adccc2b2-cb7f-44c9-9638-02206d0f7962",
- "type": "availability_slot",
- "attributes": {
- "id": "adccc2b2-cb7f-44c9-9638-02206d0f7962",
- "available": true,
- "starts_at": "2026-09-13T17:30:00.000-07:00",
- "formatted_slot_name": "5:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "5:30 PM"
}
}, - {
- "id": "04e14633-3f52-48ac-91bf-2cc0e2ec5411",
- "type": "availability_slot",
- "attributes": {
- "id": "04e14633-3f52-48ac-91bf-2cc0e2ec5411",
- "available": true,
- "starts_at": "2026-09-13T18:00:00.000-07:00",
- "formatted_slot_name": "6:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "6:00 PM"
}
}, - {
- "id": "2f0d4660-9885-408d-8793-0ea863e52dc4",
- "type": "availability_slot",
- "attributes": {
- "id": "2f0d4660-9885-408d-8793-0ea863e52dc4",
- "available": true,
- "starts_at": "2026-09-13T18:30:00.000-07:00",
- "formatted_slot_name": "6:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "6:30 PM"
}
}, - {
- "id": "6bf42c1f-2272-4dbc-8e09-237a0ccc1fe0",
- "type": "availability_slot",
- "attributes": {
- "id": "6bf42c1f-2272-4dbc-8e09-237a0ccc1fe0",
- "available": true,
- "starts_at": "2026-09-13T19:00:00.000-07:00",
- "formatted_slot_name": "7:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "7:00 PM"
}
}, - {
- "id": "969a4f87-ca22-4bc7-8502-684a1e49a8e7",
- "type": "availability_slot",
- "attributes": {
- "id": "969a4f87-ca22-4bc7-8502-684a1e49a8e7",
- "available": true,
- "starts_at": "2026-09-13T19:30:00.000-07:00",
- "formatted_slot_name": "7:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "7:30 PM"
}
}, - {
- "id": "1690b4d8-b91f-4fb7-9486-590b62bf7692",
- "type": "availability_slot",
- "attributes": {
- "id": "1690b4d8-b91f-4fb7-9486-590b62bf7692",
- "available": true,
- "starts_at": "2026-09-13T20:00:00.000-07:00",
- "formatted_slot_name": "8:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "8:00 PM"
}
}, - {
- "id": "afaa2a2f-ad7f-4d03-91c9-391da5ca320e",
- "type": "availability_slot",
- "attributes": {
- "id": "afaa2a2f-ad7f-4d03-91c9-391da5ca320e",
- "available": true,
- "starts_at": "2026-09-13T20:30:00.000-07:00",
- "formatted_slot_name": "8:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "8:30 PM"
}
}, - {
- "id": "6e4f23df-12b2-43c7-a9ff-77ea5853c73a",
- "type": "availability_slot",
- "attributes": {
- "id": "6e4f23df-12b2-43c7-a9ff-77ea5853c73a",
- "available": true,
- "starts_at": "2026-09-13T21:00:00.000-07:00",
- "formatted_slot_name": "9:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "9:00 PM"
}
}, - {
- "id": "07a6d29d-5bf3-494f-9935-48b5eaf5be23",
- "type": "availability_slot",
- "attributes": {
- "id": "07a6d29d-5bf3-494f-9935-48b5eaf5be23",
- "available": true,
- "starts_at": "2026-09-13T21:30:00.000-07:00",
- "formatted_slot_name": "9:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "9:30 PM"
}
}, - {
- "id": "e8380a7a-a247-4ee3-93a4-b0b923e33bd7",
- "type": "availability_slot",
- "attributes": {
- "id": "e8380a7a-a247-4ee3-93a4-b0b923e33bd7",
- "available": true,
- "starts_at": "2026-09-13T22:00:00.000-07:00",
- "formatted_slot_name": "10:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "10:00 PM"
}
}, - {
- "id": "eeb2c47a-4a40-42f8-97fd-2697ff4de39c",
- "type": "availability_slot",
- "attributes": {
- "id": "eeb2c47a-4a40-42f8-97fd-2697ff4de39c",
- "available": true,
- "starts_at": "2026-09-13T22:30:00.000-07:00",
- "formatted_slot_name": "10:30 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "10:30 PM"
}
}, - {
- "id": "8701f248-9c0b-4a9c-b47e-5a56938dd4cd",
- "type": "availability_slot",
- "attributes": {
- "id": "8701f248-9c0b-4a9c-b47e-5a56938dd4cd",
- "available": true,
- "starts_at": "2026-09-13T23:00:00.000-07:00",
- "formatted_slot_name": "11:00 PM",
- "length_in_minutes": 1800,
- "localized_date": "09-13-2026",
- "localized_time": "11:00 PM"
}
}
]
}Services, package groups, and packages define what a business offers. Services (event categories) are the top-level grouping (e.g., "DJ Services", "Photo Booth"). Each service contains package groups, which in turn contain individual packages (event types) with pricing, duration, and availability settings.
Returns all active services (event categories) for the business, ordered by position.
Services are the top-level grouping for your offerings (e.g., "DJ Services", "Photo Booth", "Lighting"). Each service contains one or more package groups, which in turn contain individual packages (event types).
Required permission: offerings_read
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "3724",
- "type": "event_category",
- "attributes": {
- "id": 3724,
- "name": "DJ Services",
- "position": 1,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "package_groups": {
- "data": [ ]
}
}
}, - {
- "id": "3725",
- "type": "event_category",
- "attributes": {
- "id": 3725,
- "name": "Photo Booth",
- "position": 2,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "package_groups": {
- "data": [ ]
}
}
}
]
}Creates a new service (event category) for the business. A service is the top-level grouping for your offerings; packages and package groups are added to it separately.
Only name is required. A default placeholder image is attached automatically — you can replace it from the Package Manager in the app. New services are appended to the end of the service list.
Required permission: offerings_write
| Api-Key required | string Your Integration Key |
| name required | string The name of the service (e.g., "DJ Services") |
| sub_header | string Short sub-heading shown under the service name on booking pages (max 90 characters) |
| status | string Enum: "public" "private" "disabled" Booking-page visibility |
| show_title_on_booking_page | boolean Whether to show the service title on the booking page |
| location_type | string Enum: "venue" "location" "property" How the event location is labeled |
| location_booking_type | string Enum: "yes" "places" "places_or_custom" "brand_address" "no" How customers provide a location during booking |
| allow_skip_venue | boolean Allow customers to skip the venue/location step |
| has_designs | boolean Whether this service includes a design selection step |
| staff_assignment_type | string Enum: "customer_choice" "assign_predefined_staff" "staff_may_request" "staff_may_claim" "none" How staff are assigned to bookings |
| staff_title | string Label used for the staff role on this service (e.g., "DJ", "Attendant") |
| staff_allows_overbooking | boolean Allow bookings even when staff may be fully booked |
{- "name": "string",
- "sub_header": "string",
- "status": "public",
- "show_title_on_booking_page": true,
- "location_type": "venue",
- "location_booking_type": "yes",
- "allow_skip_venue": true,
- "has_designs": true,
- "staff_assignment_type": "customer_choice",
- "staff_title": "string",
- "staff_allows_overbooking": true
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3726",
- "type": "event_category",
- "attributes": {
- "id": 3726,
- "name": "Lighting",
- "position": 1,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "package_groups": {
- "data": [ ]
}
}
}
}Returns the details of a single service (event category), including its name, position, and primary image.
Use the include query parameter to sideload related resources (comma-separated). Available: package_groups.
Required permission: offerings_read
| id required | integer The unique ID of the service |
| Api-Key required | string Your Integration Key |
{- "data": {
- "id": "3727",
- "type": "event_category",
- "attributes": {
- "id": 3727,
- "name": "DJ Services",
- "position": 1,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "package_groups": {
- "data": [ ]
}
}
}
}Updates an existing service (event category) with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.
Use this to rename a service, change its booking-page visibility, or adjust its location and staff-assignment settings.
Required permission: offerings_write
| id required | integer The unique ID of the service to update |
| Api-Key required | string Your Integration Key |
| name | string The name of the service |
| sub_header | string Short sub-heading shown under the service name on booking pages (max 90 characters) |
| status | string Enum: "public" "private" "disabled" Booking-page visibility |
| show_title_on_booking_page | boolean Whether to show the service title on the booking page |
| location_type | string Enum: "venue" "location" "property" How the event location is labeled |
| location_booking_type | string Enum: "yes" "places" "places_or_custom" "brand_address" "no" How customers provide a location during booking |
| allow_skip_venue | boolean Allow customers to skip the venue/location step |
| has_designs | boolean Whether this service includes a design selection step |
| staff_assignment_type | string Enum: "customer_choice" "assign_predefined_staff" "staff_may_request" "staff_may_claim" "none" How staff are assigned to bookings |
| staff_title | string Label used for the staff role on this service |
| staff_allows_overbooking | boolean Allow bookings even when staff may be fully booked |
{- "name": "string",
- "sub_header": "string",
- "status": "public",
- "show_title_on_booking_page": true,
- "location_type": "venue",
- "location_booking_type": "yes",
- "allow_skip_venue": true,
- "has_designs": true,
- "staff_assignment_type": "customer_choice",
- "staff_title": "string",
- "staff_allows_overbooking": true
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3728",
- "type": "event_category",
- "attributes": {
- "id": 3728,
- "name": "DJ & MC Services",
- "position": 1,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "package_groups": {
- "data": [ ]
}
}
}
}Deletes (archives) a service. The service and all of its package groups and packages are archived together and removed from booking pages. Existing bookings are unaffected.
Required permission: offerings_write
| id required | integer The unique ID of the service to delete |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Returns all publicly visible package groups for the business.
Package groups organize packages (event types) within a service (event category). For example, a "DJ Services" service might have package groups like "Wedding Packages" and "Corporate Packages".
Use the include query parameter to sideload related resources (comma-separated). Available: event_types, event_category.
Required permission: offerings_read
| Api-Key required | string Your Integration Key |
{- "data": [
- {
- "id": "3557",
- "type": "package_group",
- "attributes": {
- "id": 3557,
- "name": "Wedding Packages",
- "position": 1,
- "package_sort_preference": "price",
- "event_category_id": 3747,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "event_category": {
- "data": {
- "id": "3747",
- "type": "event_category"
}
}, - "event_types": {
- "data": [
- {
- "id": "3633",
- "type": "event_type"
}
]
}
}
}
]
}Creates a new package group within a service (event category). A package group organizes related packages (event types) — for example, a "DJ Services" service might contain "Wedding Packages" and "Corporate Packages".
The event_category_id of the parent service is required, along with a name. New package groups are appended to the end of the service's package-group list.
Required permission: offerings_write
| Api-Key required | string Your Integration Key |
| event_category_id required | integer ID of the parent service (event category) this package group belongs to |
| name required | string The name of the package group (e.g., "Wedding Packages") |
| sub_header | string Short sub-heading shown under the package-group name on booking pages (max 100 characters) |
| show_on_booking_page | boolean Whether this package group is shown on public booking pages |
| show_title_on_booking_page | boolean Whether to show the package-group title on the booking page |
| package_sort_preference | string Enum: "name" "price" "manual" How packages within this group are ordered |
| pricing_mode | string Enum: "show" "delay" Whether pricing is shown or delayed during booking |
{- "event_category_id": 0,
- "name": "string",
- "sub_header": "string",
- "show_on_booking_page": true,
- "show_title_on_booking_page": true,
- "package_sort_preference": "name",
- "pricing_mode": "show"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3558",
- "type": "package_group",
- "attributes": {
- "id": 3558,
- "name": "Corporate Packages",
- "position": 1,
- "package_sort_preference": "price",
- "event_category_id": 3748,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "event_category": {
- "data": {
- "id": "3748",
- "type": "event_category"
}
}, - "event_types": {
- "data": [ ]
}
}
}
}Returns the details of a single package group, including its name, description, and associated service.
Use the include query parameter to sideload related resources (comma-separated). Available: event_types, event_category.
Required permission: offerings_read
| id required | integer The unique ID of the package group |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3559",
- "type": "package_group",
- "attributes": {
- "id": 3559,
- "name": "Wedding Packages",
- "position": 1,
- "package_sort_preference": "price",
- "event_category_id": 3749,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "event_category": {
- "data": {
- "id": "3749",
- "type": "event_category"
}
}, - "event_types": {
- "data": [ ]
}
}
}
}Updates an existing package group with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.
Use this to rename a package group, toggle its booking-page visibility, or change how its packages are sorted and priced. To move a package group to a different service, manage it from the Package Manager in the app.
Required permission: offerings_write
| id required | integer The unique ID of the package group to update |
| Api-Key required | string Your Integration Key |
| name | string The name of the package group |
| sub_header | string Short sub-heading shown under the package-group name on booking pages (max 100 characters) |
| show_on_booking_page | boolean Whether this package group is shown on public booking pages |
| show_title_on_booking_page | boolean Whether to show the package-group title on the booking page |
| package_sort_preference | string Enum: "name" "price" "manual" How packages within this group are ordered |
| pricing_mode | string Enum: "show" "delay" Whether pricing is shown or delayed during booking |
{- "name": "string",
- "sub_header": "string",
- "show_on_booking_page": true,
- "show_title_on_booking_page": true,
- "package_sort_preference": "name",
- "pricing_mode": "show"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3560",
- "type": "package_group",
- "attributes": {
- "id": 3560,
- "name": "Wedding & Elopement Packages",
- "position": 1,
- "package_sort_preference": "price",
- "event_category_id": 3750,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "event_category": {
- "data": {
- "id": "3750",
- "type": "event_category"
}
}, - "event_types": {
- "data": [ ]
}
}
}
}Deletes (archives) a package group. The package group and all of its packages are archived together and removed from booking pages. Existing bookings are unaffected.
Required permission: offerings_write
| id required | integer The unique ID of the package group to delete |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Moves a package group into a different service (event category). The package group is appended to the end of the target service's package-group list, and the remaining package groups in its original service close up to preserve their ordering.
The target service must belong to the same business. Use this instead of updating event_category_id directly — a direct update would not re-sort the package group within either service.
Required permission: offerings_write
| id required | integer The unique ID of the package group to move |
| Api-Key required | string Your Integration Key |
| event_category_id required | integer ID of the service (event category) to move this package group into |
{- "event_category_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3562",
- "type": "package_group",
- "attributes": {
- "id": 3562,
- "name": "Wedding Packages",
- "position": 1,
- "package_sort_preference": "price",
- "event_category_id": 3753,
- "primary_image": {
- "panel_variant": null
},
}, - "relationships": {
- "event_category": {
- "data": {
- "id": "3753",
- "type": "event_category"
}
}, - "event_types": {
- "data": [ ]
}
}
}
}Returns all packages (event types) for the business. Packages define the services offered, including pricing, duration, availability windows, and booking configuration.
Results can be filtered by visibility (e.g., public-only packages shown on the booking page vs. all packages including private ones).
Use the include query parameter to sideload related resources (comma-separated). Available: package_group, package_unit_ranges, event_type_extra_categories.
Required permission: offerings_read
| visibility | string Filter by visibility (e.g., 'public_only') |
| Api-Key required | string Your Integration Key |
{- "data": [
- {
- "id": "3634",
- "type": "event_type",
- "attributes": {
- "id": 3634,
- "name": "4-Hour DJ Package",
- "description_html": null,
- "advertised_rate": "$100 includes 5 hours",
- "base_rate_cents": 10000,
- "position": 1,
- "hourly": true,
- "package_group_id": 3563,
- "default_length": 300,
- "min_length": 60,
- "max_length": null,
- "step": 60,
- "default_length_in_minutes": 300,
- "min_length_in_minutes": 60,
- "max_length_in_minutes": null,
- "min_length_in_days": 1,
- "max_length_in_days": 1,
- "default_length_in_days": 1,
- "date_mode": "date_time",
- "calendar_mode": "minimal",
- "deposit_method": "percent",
- "deposit_multiplier_percent": 25,
- "enable_customer_can_book_extra_hours": true,
- "enable_customer_can_book_extra_days": false,
- "deposit_amount": "0.00",
- "deposit_amount_cents": 0,
- "deposit_amount_currency": "USD",
- "deposit_amount_formatted": "$0",
- "base_rate": "100.00",
- "base_rate_currency": "USD",
- "base_rate_formatted": "$100",
- "price_per_extra_hour": "50.00",
- "price_per_extra_hour_cents": 5000,
- "price_per_extra_hour_currency": "USD",
- "price_per_extra_hour_formatted": "$50",
- "price_per_extra_day": "0.00",
- "price_per_extra_day_cents": 0,
- "price_per_extra_day_currency": "USD",
- "price_per_extra_day_formatted": "$0",
- "taxable": true,
- "step_in_minutes": 60,
- "slot_interval_minutes": 30,
- "available_every_day_of_the_week": "yes",
- "available_starts_at_time": null,
- "available_ends_at_time": null,
- "available_sunday": "yes",
- "available_sunday_starts_at_time": null,
- "available_sunday_ends_at_time": null,
- "available_monday": "yes",
- "available_monday_starts_at_time": null,
- "available_monday_ends_at_time": null,
- "available_tuesday": "yes",
- "available_tuesday_starts_at_time": null,
- "available_tuesday_ends_at_time": null,
- "available_wednesday": "yes",
- "available_wednesday_starts_at_time": null,
- "available_wednesday_ends_at_time": null,
- "available_thursday": "yes",
- "available_thursday_starts_at_time": null,
- "available_thursday_ends_at_time": null,
- "available_friday": "yes",
- "available_friday_starts_at_time": null,
- "available_friday_ends_at_time": null,
- "available_saturday": "yes",
- "available_saturday_starts_at_time": null,
- "available_saturday_ends_at_time": null,
- "enable_customer_can_book_per_unit": false,
- "unit_name": "unit",
- "enable_customer_can_book_per_unit_range": false,
- "primary_image": {
- "large_variant": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "has_backdrops": false,
- "unit_title": "Unit",
- "units_title": "Units",
- "units_how_many": "How many units would you like to book?",
- "location_booking_type": "yes",
}, - "relationships": {
- "package_unit_ranges": {
- "data": [ ]
}, - "event_type_extra_categories": {
- "data": [ ]
}, - "package_group": {
- "data": {
- "id": "3563",
- "type": "package_group"
}
}
}
}
]
}Creates a new package (event type) within a package group. A package defines a bookable offering — its name, pricing, duration, and deposit terms.
The package_group_id of the parent package group is required, along with a name. Sensible defaults are applied for anything you omit: new packages are public, charge a base rate of 0, default to a 60-minute length, and take no deposit — adjust these via the pricing fields or a follow-up update. New packages are appended to the end of the group.
Required permission: offerings_write
| Api-Key required | string Your Integration Key |
| package_group_id required | integer ID of the parent package group this package belongs to |
| name required | string The name of the package (e.g., "4-Hour DJ Package") |
| sub_header | string Short sub-heading shown under the package name (max 100 characters) |
| description_html | string Rich-text (HTML) description of the package |
| show_name | boolean Whether the package name is shown on the booking page |
| status | string Enum: "public" "private" "disabled" Booking-page visibility |
| online_booking_mode | string Enum: "allow_online_booking" "request_for_proposal" "show_contact_form" How customers engage this package online |
| contact_form_id | integer Lead form to display (required when online_booking_mode is show_contact_form) |
| taxable | boolean Whether the package is taxable |
| base_rate | number Base price of the package, in dollars |
| deposit_method | string Enum: "none" "flat_rate" "percent" How the booking deposit is calculated |
| deposit_amount | number Fixed deposit amount in dollars (when deposit_method is flat_rate) |
| deposit_multiplier_percent | integer Deposit percentage (when deposit_method is percent) |
| date_mode | string Enum: "date_time" "date_only" Whether the package is booked by time-of-day or by whole days |
| default_length_in_minutes | integer Default booking length in minutes (defaults to 60) |
| calendar_mode | string Enum: "minimal" "automatic_slots" "predefined_slots" How bookable start times are presented: minimal (no slots), automatic_slots (generated from availability + slot_interval_minutes), or predefined_slots (manually defined slots) |
| slot_interval_minutes | integer Enum: 15 30 60 120 180 240 Spacing between automatically generated start times, in minutes (used when calendar_mode is automatic_slots) |
| enable_customer_can_book_extra_hours | boolean Allow customers to choose a duration (hourly packages) |
| min_length_in_minutes | integer Minimum bookable length in minutes (when extra hours are enabled) |
| max_length_in_minutes | integer Maximum bookable length in minutes (when extra hours are enabled) |
| step_in_minutes | integer Enum: 15 30 60 120 180 240 Increment customers can adjust the length by, in minutes |
| price_per_extra_hour | number Price charged per additional hour, in dollars |
| enable_customer_can_book_extra_days | boolean Allow customers to choose a number of days (multi-day packages) |
| default_length_in_days | integer Default number of days (required when date_mode is date_only) |
| min_length_in_days | integer Minimum bookable number of days (when extra days are enabled) |
| max_length_in_days | integer Maximum bookable number of days (when extra days are enabled) |
| price_per_extra_day | number Price charged per additional day, in dollars |
| enable_customer_can_book_per_unit | boolean Allow customers to book a quantity of units (e.g. per booth, per person) |
| unit_name | string Label for a single unit when per-unit booking is enabled (e.g. "booth", "guest") |
| enable_customer_can_book_per_unit_range | boolean Allow per-unit pricing tiers (ranges) rather than a single per-unit price |
| available_every_day_of_the_week | string Enum: "yes" "yes_certain_hours" "no" Availability pattern across the week |
| available_starts_at_time | string Earliest bookable time of day (e.g. "09:00") when availability is limited to certain hours |
| available_ends_at_time | string Latest bookable time of day (e.g. "17:00") when availability is limited to certain hours |
{- "package_group_id": 0,
- "name": "string",
- "sub_header": "string",
- "description_html": "string",
- "show_name": true,
- "status": "public",
- "online_booking_mode": "allow_online_booking",
- "contact_form_id": 0,
- "taxable": true,
- "base_rate": 0,
- "deposit_method": "none",
- "deposit_amount": 0,
- "deposit_multiplier_percent": 0,
- "date_mode": "date_time",
- "default_length_in_minutes": 0,
- "calendar_mode": "minimal",
- "slot_interval_minutes": 15,
- "enable_customer_can_book_extra_hours": true,
- "min_length_in_minutes": 0,
- "max_length_in_minutes": 0,
- "step_in_minutes": 15,
- "price_per_extra_hour": 0,
- "enable_customer_can_book_extra_days": true,
- "default_length_in_days": 0,
- "min_length_in_days": 0,
- "max_length_in_days": 0,
- "price_per_extra_day": 0,
- "enable_customer_can_book_per_unit": true,
- "unit_name": "string",
- "enable_customer_can_book_per_unit_range": true,
- "available_every_day_of_the_week": "yes",
- "available_starts_at_time": "string",
- "available_ends_at_time": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3635",
- "type": "event_type",
- "attributes": {
- "id": 3635,
- "name": "4-Hour DJ Package",
- "description_html": null,
- "advertised_rate": "$1,200.00",
- "base_rate_cents": 120000,
- "position": 1,
- "hourly": false,
- "package_group_id": 3564,
- "default_length": 60,
- "min_length": null,
- "max_length": null,
- "step": 60,
- "default_length_in_minutes": 60,
- "min_length_in_minutes": null,
- "max_length_in_minutes": null,
- "min_length_in_days": 1,
- "max_length_in_days": 1,
- "default_length_in_days": 1,
- "date_mode": "date_time",
- "calendar_mode": "minimal",
- "deposit_method": "none",
- "deposit_multiplier_percent": null,
- "enable_customer_can_book_extra_hours": false,
- "enable_customer_can_book_extra_days": false,
- "deposit_amount": "0.00",
- "deposit_amount_cents": 0,
- "deposit_amount_currency": "USD",
- "deposit_amount_formatted": "$0",
- "base_rate": "1200.00",
- "base_rate_currency": "USD",
- "base_rate_formatted": "$1,200",
- "price_per_extra_hour": "0.00",
- "price_per_extra_hour_cents": 0,
- "price_per_extra_hour_currency": "USD",
- "price_per_extra_hour_formatted": "$0",
- "price_per_extra_day": "0.00",
- "price_per_extra_day_cents": 0,
- "price_per_extra_day_currency": "USD",
- "price_per_extra_day_formatted": "$0",
- "taxable": true,
- "step_in_minutes": 60,
- "slot_interval_minutes": 30,
- "available_every_day_of_the_week": "yes",
- "available_starts_at_time": null,
- "available_ends_at_time": null,
- "available_sunday": "yes",
- "available_sunday_starts_at_time": null,
- "available_sunday_ends_at_time": null,
- "available_monday": "yes",
- "available_monday_starts_at_time": null,
- "available_monday_ends_at_time": null,
- "available_tuesday": "yes",
- "available_tuesday_starts_at_time": null,
- "available_tuesday_ends_at_time": null,
- "available_wednesday": "yes",
- "available_wednesday_starts_at_time": null,
- "available_wednesday_ends_at_time": null,
- "available_thursday": "yes",
- "available_thursday_starts_at_time": null,
- "available_thursday_ends_at_time": null,
- "available_friday": "yes",
- "available_friday_starts_at_time": null,
- "available_friday_ends_at_time": null,
- "available_saturday": "yes",
- "available_saturday_starts_at_time": null,
- "available_saturday_ends_at_time": null,
- "enable_customer_can_book_per_unit": false,
- "unit_name": "unit",
- "enable_customer_can_book_per_unit_range": false,
- "primary_image": {
- "large_variant": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "has_backdrops": false,
- "unit_title": "Unit",
- "units_title": "Units",
- "units_how_many": "How many units would you like to book?",
- "location_booking_type": "yes",
}, - "relationships": {
- "package_unit_ranges": {
- "data": [ ]
}, - "event_type_extra_categories": {
- "data": [ ]
}, - "package_group": {
- "data": {
- "id": "3564",
- "type": "package_group"
}
}
}
}
}Returns the full details of a single package (event type), including pricing, duration settings, availability windows, deposit configuration, and booking options.
Use the include query parameter to sideload related resources (comma-separated). Available: package_group, package_unit_ranges, event_type_extra_categories.
Required permission: offerings_read
| id required | integer The unique ID of the package |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3636",
- "type": "event_type",
- "attributes": {
- "id": 3636,
- "name": "4-Hour DJ Package",
- "description_html": null,
- "advertised_rate": "$100 includes 5 hours",
- "base_rate_cents": 10000,
- "position": 1,
- "hourly": true,
- "package_group_id": 3565,
- "default_length": 300,
- "min_length": 60,
- "max_length": null,
- "step": 60,
- "default_length_in_minutes": 300,
- "min_length_in_minutes": 60,
- "max_length_in_minutes": null,
- "min_length_in_days": 1,
- "max_length_in_days": 1,
- "default_length_in_days": 1,
- "date_mode": "date_time",
- "calendar_mode": "minimal",
- "deposit_method": "percent",
- "deposit_multiplier_percent": 25,
- "enable_customer_can_book_extra_hours": true,
- "enable_customer_can_book_extra_days": false,
- "deposit_amount": "0.00",
- "deposit_amount_cents": 0,
- "deposit_amount_currency": "USD",
- "deposit_amount_formatted": "$0",
- "base_rate": "100.00",
- "base_rate_currency": "USD",
- "base_rate_formatted": "$100",
- "price_per_extra_hour": "50.00",
- "price_per_extra_hour_cents": 5000,
- "price_per_extra_hour_currency": "USD",
- "price_per_extra_hour_formatted": "$50",
- "price_per_extra_day": "0.00",
- "price_per_extra_day_cents": 0,
- "price_per_extra_day_currency": "USD",
- "price_per_extra_day_formatted": "$0",
- "taxable": true,
- "step_in_minutes": 60,
- "slot_interval_minutes": 30,
- "available_every_day_of_the_week": "yes",
- "available_starts_at_time": null,
- "available_ends_at_time": null,
- "available_sunday": "yes",
- "available_sunday_starts_at_time": null,
- "available_sunday_ends_at_time": null,
- "available_monday": "yes",
- "available_monday_starts_at_time": null,
- "available_monday_ends_at_time": null,
- "available_tuesday": "yes",
- "available_tuesday_starts_at_time": null,
- "available_tuesday_ends_at_time": null,
- "available_wednesday": "yes",
- "available_wednesday_starts_at_time": null,
- "available_wednesday_ends_at_time": null,
- "available_thursday": "yes",
- "available_thursday_starts_at_time": null,
- "available_thursday_ends_at_time": null,
- "available_friday": "yes",
- "available_friday_starts_at_time": null,
- "available_friday_ends_at_time": null,
- "available_saturday": "yes",
- "available_saturday_starts_at_time": null,
- "available_saturday_ends_at_time": null,
- "enable_customer_can_book_per_unit": false,
- "unit_name": "unit",
- "enable_customer_can_book_per_unit_range": false,
- "primary_image": {
- "large_variant": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "has_backdrops": false,
- "unit_title": "Unit",
- "units_title": "Units",
- "units_how_many": "How many units would you like to book?",
- "location_booking_type": "yes",
}, - "relationships": {
- "package_unit_ranges": {
- "data": [ ]
}, - "event_type_extra_categories": {
- "data": [ ]
}, - "package_group": {
- "data": {
- "id": "3565",
- "type": "package_group"
}
}
}
}
}Updates an existing package (event type) with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.
Use this to rename a package, change its visibility, adjust pricing and deposit terms, or reconfigure its duration and availability. To move a package to a different package group, manage it from the Package Manager in the app.
Required permission: offerings_write
| id required | integer The unique ID of the package to update |
| Api-Key required | string Your Integration Key |
| name | string The name of the package (e.g., "4-Hour DJ Package") |
| sub_header | string Short sub-heading shown under the package name (max 100 characters) |
| description_html | string Rich-text (HTML) description of the package |
| show_name | boolean Whether the package name is shown on the booking page |
| status | string Enum: "public" "private" "disabled" Booking-page visibility |
| online_booking_mode | string Enum: "allow_online_booking" "request_for_proposal" "show_contact_form" How customers engage this package online |
| contact_form_id | integer Lead form to display (required when online_booking_mode is show_contact_form) |
| taxable | boolean Whether the package is taxable |
| base_rate | number Base price of the package, in dollars |
| deposit_method | string Enum: "none" "flat_rate" "percent" How the booking deposit is calculated |
| deposit_amount | number Fixed deposit amount in dollars (when deposit_method is flat_rate) |
| deposit_multiplier_percent | integer Deposit percentage (when deposit_method is percent) |
| date_mode | string Enum: "date_time" "date_only" Whether the package is booked by time-of-day or by whole days |
| default_length_in_minutes | integer Default booking length in minutes (defaults to 60) |
| calendar_mode | string Enum: "minimal" "automatic_slots" "predefined_slots" How bookable start times are presented: minimal (no slots), automatic_slots (generated from availability + slot_interval_minutes), or predefined_slots (manually defined slots) |
| slot_interval_minutes | integer Enum: 15 30 60 120 180 240 Spacing between automatically generated start times, in minutes (used when calendar_mode is automatic_slots) |
| enable_customer_can_book_extra_hours | boolean Allow customers to choose a duration (hourly packages) |
| min_length_in_minutes | integer Minimum bookable length in minutes (when extra hours are enabled) |
| max_length_in_minutes | integer Maximum bookable length in minutes (when extra hours are enabled) |
| step_in_minutes | integer Enum: 15 30 60 120 180 240 Increment customers can adjust the length by, in minutes |
| price_per_extra_hour | number Price charged per additional hour, in dollars |
| enable_customer_can_book_extra_days | boolean Allow customers to choose a number of days (multi-day packages) |
| default_length_in_days | integer Default number of days (required when date_mode is date_only) |
| min_length_in_days | integer Minimum bookable number of days (when extra days are enabled) |
| max_length_in_days | integer Maximum bookable number of days (when extra days are enabled) |
| price_per_extra_day | number Price charged per additional day, in dollars |
| enable_customer_can_book_per_unit | boolean Allow customers to book a quantity of units (e.g. per booth, per person) |
| unit_name | string Label for a single unit when per-unit booking is enabled (e.g. "booth", "guest") |
| enable_customer_can_book_per_unit_range | boolean Allow per-unit pricing tiers (ranges) rather than a single per-unit price |
| available_every_day_of_the_week | string Enum: "yes" "yes_certain_hours" "no" Availability pattern across the week |
| available_starts_at_time | string Earliest bookable time of day (e.g. "09:00") when availability is limited to certain hours |
| available_ends_at_time | string Latest bookable time of day (e.g. "17:00") when availability is limited to certain hours |
{- "name": "string",
- "sub_header": "string",
- "description_html": "string",
- "show_name": true,
- "status": "public",
- "online_booking_mode": "allow_online_booking",
- "contact_form_id": 0,
- "taxable": true,
- "base_rate": 0,
- "deposit_method": "none",
- "deposit_amount": 0,
- "deposit_multiplier_percent": 0,
- "date_mode": "date_time",
- "default_length_in_minutes": 0,
- "calendar_mode": "minimal",
- "slot_interval_minutes": 15,
- "enable_customer_can_book_extra_hours": true,
- "min_length_in_minutes": 0,
- "max_length_in_minutes": 0,
- "step_in_minutes": 15,
- "price_per_extra_hour": 0,
- "enable_customer_can_book_extra_days": true,
- "default_length_in_days": 0,
- "min_length_in_days": 0,
- "max_length_in_days": 0,
- "price_per_extra_day": 0,
- "enable_customer_can_book_per_unit": true,
- "unit_name": "string",
- "enable_customer_can_book_per_unit_range": true,
- "available_every_day_of_the_week": "yes",
- "available_starts_at_time": "string",
- "available_ends_at_time": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3637",
- "type": "event_type",
- "attributes": {
- "id": 3637,
- "name": "5-Hour DJ Package",
- "description_html": null,
- "advertised_rate": "$1,500 includes 5 hours",
- "base_rate_cents": 150000,
- "position": 1,
- "hourly": true,
- "package_group_id": 3566,
- "default_length": 300,
- "min_length": 60,
- "max_length": null,
- "step": 60,
- "default_length_in_minutes": 300,
- "min_length_in_minutes": 60,
- "max_length_in_minutes": null,
- "min_length_in_days": 1,
- "max_length_in_days": 1,
- "default_length_in_days": 1,
- "date_mode": "date_time",
- "calendar_mode": "minimal",
- "deposit_method": "percent",
- "deposit_multiplier_percent": 25,
- "enable_customer_can_book_extra_hours": true,
- "enable_customer_can_book_extra_days": false,
- "deposit_amount": "0.00",
- "deposit_amount_cents": 0,
- "deposit_amount_currency": "USD",
- "deposit_amount_formatted": "$0",
- "base_rate": "1500.00",
- "base_rate_currency": "USD",
- "base_rate_formatted": "$1,500",
- "price_per_extra_hour": "50.00",
- "price_per_extra_hour_cents": 5000,
- "price_per_extra_hour_currency": "USD",
- "price_per_extra_hour_formatted": "$50",
- "price_per_extra_day": "0.00",
- "price_per_extra_day_cents": 0,
- "price_per_extra_day_currency": "USD",
- "price_per_extra_day_formatted": "$0",
- "taxable": true,
- "step_in_minutes": 60,
- "slot_interval_minutes": 30,
- "available_every_day_of_the_week": "yes",
- "available_starts_at_time": null,
- "available_ends_at_time": null,
- "available_sunday": "yes",
- "available_sunday_starts_at_time": null,
- "available_sunday_ends_at_time": null,
- "available_monday": "yes",
- "available_monday_starts_at_time": null,
- "available_monday_ends_at_time": null,
- "available_tuesday": "yes",
- "available_tuesday_starts_at_time": null,
- "available_tuesday_ends_at_time": null,
- "available_wednesday": "yes",
- "available_wednesday_starts_at_time": null,
- "available_wednesday_ends_at_time": null,
- "available_thursday": "yes",
- "available_thursday_starts_at_time": null,
- "available_thursday_ends_at_time": null,
- "available_friday": "yes",
- "available_friday_starts_at_time": null,
- "available_friday_ends_at_time": null,
- "available_saturday": "yes",
- "available_saturday_starts_at_time": null,
- "available_saturday_ends_at_time": null,
- "enable_customer_can_book_per_unit": false,
- "unit_name": "unit",
- "enable_customer_can_book_per_unit_range": false,
- "primary_image": {
- "large_variant": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "has_backdrops": false,
- "unit_title": "Unit",
- "units_title": "Units",
- "units_how_many": "How many units would you like to book?",
- "location_booking_type": "yes",
}, - "relationships": {
- "package_unit_ranges": {
- "data": [ ]
}, - "event_type_extra_categories": {
- "data": [ ]
}, - "package_group": {
- "data": {
- "id": "3566",
- "type": "package_group"
}
}
}
}
}Deletes (archives) a package. The package is archived and removed from booking pages. Existing bookings are unaffected.
Required permission: offerings_write
| id required | integer The unique ID of the package to delete |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Moves a package (event type) into a different package group. The package is appended to the end of the target group's package list, and the remaining packages in its original group close up to preserve their ordering.
The target package group must belong to the same business. Use this instead of updating package_group_id directly — a direct update would not re-sort the package within either group.
Required permission: offerings_write
| id required | integer The unique ID of the package to move |
| Api-Key required | string Your Integration Key |
| package_group_id required | integer ID of the package group to move this package into |
{- "package_group_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "3639",
- "type": "event_type",
- "attributes": {
- "id": 3639,
- "name": "4-Hour DJ Package",
- "description_html": null,
- "advertised_rate": "$100 includes 5 hours",
- "base_rate_cents": 10000,
- "position": 1,
- "hourly": true,
- "package_group_id": 3569,
- "default_length": 300,
- "min_length": 60,
- "max_length": null,
- "step": 60,
- "default_length_in_minutes": 300,
- "min_length_in_minutes": 60,
- "max_length_in_minutes": null,
- "min_length_in_days": 1,
- "max_length_in_days": 1,
- "default_length_in_days": 1,
- "date_mode": "date_time",
- "calendar_mode": "minimal",
- "deposit_method": "percent",
- "deposit_multiplier_percent": 25,
- "enable_customer_can_book_extra_hours": true,
- "enable_customer_can_book_extra_days": false,
- "deposit_amount": "0.00",
- "deposit_amount_cents": 0,
- "deposit_amount_currency": "USD",
- "deposit_amount_formatted": "$0",
- "base_rate": "100.00",
- "base_rate_currency": "USD",
- "base_rate_formatted": "$100",
- "price_per_extra_hour": "50.00",
- "price_per_extra_hour_cents": 5000,
- "price_per_extra_hour_currency": "USD",
- "price_per_extra_hour_formatted": "$50",
- "price_per_extra_day": "0.00",
- "price_per_extra_day_cents": 0,
- "price_per_extra_day_currency": "USD",
- "price_per_extra_day_formatted": "$0",
- "taxable": true,
- "step_in_minutes": 60,
- "slot_interval_minutes": 30,
- "available_every_day_of_the_week": "yes",
- "available_starts_at_time": null,
- "available_ends_at_time": null,
- "available_sunday": "yes",
- "available_sunday_starts_at_time": null,
- "available_sunday_ends_at_time": null,
- "available_monday": "yes",
- "available_monday_starts_at_time": null,
- "available_monday_ends_at_time": null,
- "available_tuesday": "yes",
- "available_tuesday_starts_at_time": null,
- "available_tuesday_ends_at_time": null,
- "available_wednesday": "yes",
- "available_wednesday_starts_at_time": null,
- "available_wednesday_ends_at_time": null,
- "available_thursday": "yes",
- "available_thursday_starts_at_time": null,
- "available_thursday_ends_at_time": null,
- "available_friday": "yes",
- "available_friday_starts_at_time": null,
- "available_friday_ends_at_time": null,
- "available_saturday": "yes",
- "available_saturday_starts_at_time": null,
- "available_saturday_ends_at_time": null,
- "enable_customer_can_book_per_unit": false,
- "unit_name": "unit",
- "enable_customer_can_book_per_unit_range": false,
- "primary_image": {
- "large_variant": "/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"
}, - "has_backdrops": false,
- "unit_title": "Unit",
- "units_title": "Units",
- "units_how_many": "How many units would you like to book?",
- "location_booking_type": "yes",
}, - "relationships": {
- "package_unit_ranges": {
- "data": [ ]
}, - "event_type_extra_categories": {
- "data": [ ]
}, - "package_group": {
- "data": {
- "id": "3569",
- "type": "package_group"
}
}
}
}
}Add-ons are optional upgrades or equipment that can be added to an event (e.g., extra speakers, uplighting, fog machine). Add-ons are organized into categories and support flat-rate, hourly, or daily pricing.
Returns all active add-on categories for the business, ordered by position.
Add-on categories organize add-ons into logical groups (e.g., "Lighting", "Equipment Upgrades"). Each category contains one or more add-ons.
Use the include query parameter to sideload related resources (comma-separated). Available: add_ons.
Required permission: offerings_read
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "378",
- "type": "add_on_category",
- "attributes": {
- "id": 378,
- "name": "Lighting",
- "position": 1
}, - "relationships": {
- "add_ons": {
- "data": [ ]
}
}
}, - {
- "id": "379",
- "type": "add_on_category",
- "attributes": {
- "id": 379,
- "name": "Equipment Upgrades",
- "position": 2
}, - "relationships": {
- "add_ons": {
- "data": [ ]
}
}
}
]
}Creates a new add-on category for the business. Add-on categories organize add-ons into logical groups (e.g., "Lighting", "Equipment Upgrades"). New categories are appended to the end of the category list.
Required permission: offerings_write
| Api-Key required | string Your Integration Key |
| name required | string The name of the add-on category |
{- "name": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "380",
- "type": "add_on_category",
- "attributes": {
- "id": 380,
- "name": "Lighting",
- "position": 1
}, - "relationships": {
- "add_ons": {
- "data": [ ]
}
}
}
}Returns the details of a single add-on category, including its name and position.
Use the include query parameter to sideload related resources (comma-separated). Available: add_ons.
Required permission: offerings_read
| id required | integer The unique ID of the add-on category |
| Api-Key required | string Your Integration Key |
{- "data": {
- "id": "381",
- "type": "add_on_category",
- "attributes": {
- "id": 381,
- "name": "Lighting",
- "position": 1
}, - "relationships": {
- "add_ons": {
- "data": [ ]
}
}
}
}Updates an existing add-on category. Currently the category name is the only editable field.
Required permission: offerings_write
| id required | integer The unique ID of the add-on category to update |
| Api-Key required | string Your Integration Key |
| name | string The name of the add-on category |
{- "name": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "382",
- "type": "add_on_category",
- "attributes": {
- "id": 382,
- "name": "Lighting & Effects",
- "position": 1
}, - "relationships": {
- "add_ons": {
- "data": [ ]
}
}
}
}Deletes an add-on category. The category and all of the add-ons within it are removed together. Existing bookings that already include those add-ons are unaffected.
Required permission: offerings_write
| id required | integer The unique ID of the add-on category to delete |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Returns all active add-ons for the business. Add-ons are optional upgrades or equipment that can be added to an event (e.g., extra speakers, uplighting, fog machine).
Results can be filtered by text search, widget visibility, category, and sort order.
Required permission: offerings_read
| text | string Search add-ons by name |
| only_widget_visible | boolean Only return add-ons visible on the booking widget |
| order | string Sort order for results |
| category_ids[] | Array of arrays Filter by add-on category IDs |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "304",
- "type": "add_on",
- "attributes": {
- "id": 304,
- "name": "Uplighting Package",
- "description": "Thousands of bubbles ready for that special moment",
- "position": 1,
- "price_method": "flat_rate",
- "third_party_video_id": null,
- "price": "10.00",
- "price_cents": 1000,
- "price_currency": "USD",
- "price_formatted": "$10",
- "hourly_price": "0.00",
- "hourly_price_cents": 0,
- "hourly_price_currency": "USD",
- "hourly_price_formatted": "$0",
- "daily_price": "0.00",
- "daily_price_cents": 0,
- "daily_price_currency": "USD",
- "daily_price_formatted": "$0",
- "primary_image": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png",
- "url": null,
- "content_type": null
}, - "additional_images": [ ]
}, - "relationships": {
- "add_on_category": {
- "data": {
- "id": "384",
- "type": "add_on_category"
}
}
}
}
]
}Creates a new add-on within an add-on category. Add-ons are optional upgrades or equipment customers can add to a booking.
The add_on_category_id of the parent category is required, along with a name and a description. Pricing defaults to a flat rate of 0 — set price_method and the matching price field to charge for it. New add-ons are appended to the end of the category.
Required permission: offerings_write
| Api-Key required | string Your Integration Key |
| add_on_category_id required | integer ID of the parent add-on category this add-on belongs to |
| name required | string The name of the add-on (e.g., "Uplighting Package") |
| description required | string Customer-facing description of the add-on |
| status | string Enum: "Active" "Archived" Whether the add-on is active or archived |
| price_method | string Enum: "flat_rate" "hourly" "daily" How the add-on is priced |
| price | number Flat-rate price in dollars (used when price_method is flat_rate) |
| hourly_price | number Per-hour price in dollars (used when price_method is hourly) |
| daily_price | number Per-day price in dollars (used when price_method is daily) |
| taxable | boolean Whether the add-on is taxable |
| maximum_quantity | integer Maximum quantity a customer can book (must be >= 1) |
| multiply_by_number_of_units | boolean Multiply the price by the quantity booked |
| visible_on_widget | boolean Whether the add-on is shown on the booking widget |
| adds_minutes_to_event_length | boolean Whether booking this add-on extends the event length |
| minutes_to_be_added_to_event_length | integer Minutes added to the event length when adds_minutes_to_event_length is true |
| requires_lead_time | boolean Whether the add-on requires advance lead time to book |
| lead_time_days | integer Required lead time in days (when requires_lead_time is true) |
| video_url | string YouTube URL for a demo video of the add-on |
{- "add_on_category_id": 0,
- "name": "string",
- "description": "string",
- "status": "Active",
- "price_method": "flat_rate",
- "price": 0,
- "hourly_price": 0,
- "daily_price": 0,
- "taxable": true,
- "maximum_quantity": 0,
- "multiply_by_number_of_units": true,
- "visible_on_widget": true,
- "adds_minutes_to_event_length": true,
- "minutes_to_be_added_to_event_length": 0,
- "requires_lead_time": true,
- "lead_time_days": 0,
- "video_url": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "305",
- "type": "add_on",
- "attributes": {
- "id": 305,
- "name": "Uplighting Package",
- "description": "Color-matched uplighting around the room",
- "position": 1,
- "price_method": "flat_rate",
- "third_party_video_id": null,
- "price": "250.00",
- "price_cents": 25000,
- "price_currency": "USD",
- "price_formatted": "$250",
- "hourly_price": "0.00",
- "hourly_price_cents": 0,
- "hourly_price_currency": "USD",
- "hourly_price_formatted": "$0",
- "daily_price": "0.00",
- "daily_price_cents": 0,
- "daily_price_currency": "USD",
- "daily_price_formatted": "$0",
- "primary_image": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png",
- "url": null,
- "content_type": null
}, - "additional_images": [ ]
}, - "relationships": {
- "add_on_category": {
- "data": {
- "id": "385",
- "type": "add_on_category"
}
}
}
}
}Returns the full details of a single add-on, including its name, description, pricing (flat rate, hourly, or daily), position, and images.
Use the include query parameter to sideload related resources (comma-separated). Available: add_on_category.
Required permission: offerings_read
| id required | integer The unique ID of the add-on |
| Api-Key required | string Your Integration Key |
{- "data": {
- "id": "306",
- "type": "add_on",
- "attributes": {
- "id": 306,
- "name": "Uplighting Package",
- "description": "Thousands of bubbles ready for that special moment",
- "position": 1,
- "price_method": "flat_rate",
- "third_party_video_id": null,
- "price": "10.00",
- "price_cents": 1000,
- "price_currency": "USD",
- "price_formatted": "$10",
- "hourly_price": "0.00",
- "hourly_price_cents": 0,
- "hourly_price_currency": "USD",
- "hourly_price_formatted": "$0",
- "daily_price": "0.00",
- "daily_price_cents": 0,
- "daily_price_currency": "USD",
- "daily_price_formatted": "$0",
- "primary_image": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png",
- "url": null,
- "content_type": null
}, - "additional_images": [ ]
}, - "relationships": {
- "add_on_category": {
- "data": {
- "id": "386",
- "type": "add_on_category"
}
}
}
}
}Updates an existing add-on with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.
Use this to rename an add-on, change its pricing, toggle widget visibility, or archive it (set status to Archived). To move an add-on to a different category, use the move endpoint.
Required permission: offerings_write
| id required | integer The unique ID of the add-on to update |
| Api-Key required | string Your Integration Key |
| name | string The name of the add-on (e.g., "Uplighting Package") |
| description | string Customer-facing description of the add-on |
| status | string Enum: "Active" "Archived" Whether the add-on is active or archived |
| price_method | string Enum: "flat_rate" "hourly" "daily" How the add-on is priced |
| price | number Flat-rate price in dollars (used when price_method is flat_rate) |
| hourly_price | number Per-hour price in dollars (used when price_method is hourly) |
| daily_price | number Per-day price in dollars (used when price_method is daily) |
| taxable | boolean Whether the add-on is taxable |
| maximum_quantity | integer Maximum quantity a customer can book (must be >= 1) |
| multiply_by_number_of_units | boolean Multiply the price by the quantity booked |
| visible_on_widget | boolean Whether the add-on is shown on the booking widget |
| adds_minutes_to_event_length | boolean Whether booking this add-on extends the event length |
| minutes_to_be_added_to_event_length | integer Minutes added to the event length when adds_minutes_to_event_length is true |
| requires_lead_time | boolean Whether the add-on requires advance lead time to book |
| lead_time_days | integer Required lead time in days (when requires_lead_time is true) |
| video_url | string YouTube URL for a demo video of the add-on |
{- "name": "string",
- "description": "string",
- "status": "Active",
- "price_method": "flat_rate",
- "price": 0,
- "hourly_price": 0,
- "daily_price": 0,
- "taxable": true,
- "maximum_quantity": 0,
- "multiply_by_number_of_units": true,
- "visible_on_widget": true,
- "adds_minutes_to_event_length": true,
- "minutes_to_be_added_to_event_length": 0,
- "requires_lead_time": true,
- "lead_time_days": 0,
- "video_url": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "307",
- "type": "add_on",
- "attributes": {
- "id": 307,
- "name": "Premium Uplighting",
- "description": "Thousands of bubbles ready for that special moment",
- "position": 1,
- "price_method": "flat_rate",
- "third_party_video_id": null,
- "price": "350.00",
- "price_cents": 35000,
- "price_currency": "USD",
- "price_formatted": "$350",
- "hourly_price": "0.00",
- "hourly_price_cents": 0,
- "hourly_price_currency": "USD",
- "hourly_price_formatted": "$0",
- "daily_price": "0.00",
- "daily_price_cents": 0,
- "daily_price_currency": "USD",
- "daily_price_formatted": "$0",
- "primary_image": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png",
- "url": null,
- "content_type": null
}, - "additional_images": [ ]
}, - "relationships": {
- "add_on_category": {
- "data": {
- "id": "387",
- "type": "add_on_category"
}
}
}
}
}Deletes an add-on. The add-on is removed from the catalog and booking pages. Existing bookings that already include it are unaffected.
Required permission: offerings_write
| id required | integer The unique ID of the add-on to delete |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Moves an add-on into a different add-on category. The add-on is appended to the end of the target category, and the remaining add-ons in its original category close up to preserve their ordering.
The target category must belong to the same business. Use this instead of updating the category directly — a direct update would not re-sort the add-on within either category.
Required permission: offerings_write
| id required | integer The unique ID of the add-on to move |
| Api-Key required | string Your Integration Key |
| add_on_category_id required | integer ID of the add-on category to move this add-on into |
{- "add_on_category_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "309",
- "type": "add_on",
- "attributes": {
- "id": 309,
- "name": "Uplighting Package",
- "description": "Thousands of bubbles ready for that special moment",
- "position": 1,
- "price_method": "flat_rate",
- "third_party_video_id": null,
- "price": "10.00",
- "price_cents": 1000,
- "price_currency": "USD",
- "price_formatted": "$10",
- "hourly_price": "0.00",
- "hourly_price_cents": 0,
- "hourly_price_currency": "USD",
- "hourly_price_formatted": "$0",
- "daily_price": "0.00",
- "daily_price_cents": 0,
- "daily_price_currency": "USD",
- "daily_price_formatted": "$0",
- "primary_image": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png",
- "url": null,
- "content_type": null
}, - "additional_images": [ ]
}, - "relationships": {
- "add_on_category": {
- "data": {
- "id": "390",
- "type": "add_on_category"
}
}
}
}
}Photo booth backdrops available for events. Backdrops are organized into categories and include pricing, images, and optional video previews.
Returns all active backdrop categories for the business, ordered by position.
Backdrop categories organize photo booth backdrops into groups (e.g., "Sequin Walls", "Flower Walls", "Custom Prints"). Each category contains one or more backdrops.
Use the include query parameter to sideload related resources (comma-separated). Available: photobooth_backgrounds.
Required permission: offerings_read
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "171",
- "type": "backdrop_category",
- "attributes": {
- "id": 171,
- "name": "Sequin Walls",
- "sub_header": null,
- "position": 1,
- "sync_with_pb_backdrops": false,
- "recently_created": true
}, - "relationships": {
- "photobooth_backgrounds": {
- "data": [ ]
}
}
}, - {
- "id": "172",
- "type": "backdrop_category",
- "attributes": {
- "id": 172,
- "name": "Flower Walls",
- "sub_header": null,
- "position": 2,
- "sync_with_pb_backdrops": false,
- "recently_created": true
}, - "relationships": {
- "photobooth_backgrounds": {
- "data": [ ]
}
}
}
]
}Returns the details of a single backdrop category, including its name, position, and whether it syncs with Photo Booth backdrops.
Use the include query parameter to sideload related resources (comma-separated). Available: photobooth_backgrounds.
Required permission: offerings_read
| id required | integer The unique ID of the backdrop category |
| Api-Key required | string Your Integration Key |
{- "data": {
- "id": "173",
- "type": "backdrop_category",
- "attributes": {
- "id": 173,
- "name": "Sequin Walls",
- "sub_header": null,
- "position": 1,
- "sync_with_pb_backdrops": false,
- "recently_created": true
}, - "relationships": {
- "photobooth_backgrounds": {
- "data": [ ]
}
}
}
}Returns all photo booth backdrops for the business. Backdrops are the visual background options available for photo booth events.
Results can be filtered by text search, widget visibility, and sort order.
Required permission: offerings_read
| text | string Search backdrops by name |
| only_widget_visible | boolean Only return backdrops visible on the booking widget |
| order | string Sort order for results |
| Api-Key required | string Your Integration Key |
{- "data": [
- {
- "id": "151",
- "type": "photobooth_background",
- "attributes": {
- "id": 151,
- "name": "Gold Sequin Wall",
- "description": "Sample description",
- "position": 1,
- "backdrop_category_id": 176,
- "video_url": null,
- "third_party_video_id": null,
- "include_at_no_charge_with_certain_packages": false,
- "price": "100.00",
- "price_cents": 10000,
- "price_currency": "USD",
- "price_formatted": "$100",
- "taxable": true,
- "primary_image": {
- "video_variant": null,
- "content_type": "image/png",
}, - "additional_images": [ ],
- "archived": false
}, - "relationships": {
- "backdrop_category": {
- "data": {
- "id": "176",
- "type": "backdrop_category"
}
}
}
}
]
}Returns the full details of a single photo booth backdrop, including its name, description, pricing, images, and video information.
Use the include query parameter to sideload related resources (comma-separated). Available: backdrop_category.
Required permission: offerings_read
| id required | integer The unique ID of the backdrop |
| Api-Key required | string Your Integration Key |
{- "data": {
- "id": "152",
- "type": "photobooth_background",
- "attributes": {
- "id": 152,
- "name": "Gold Sequin Wall",
- "description": "Sample description",
- "position": 1,
- "backdrop_category_id": 177,
- "video_url": null,
- "third_party_video_id": null,
- "include_at_no_charge_with_certain_packages": false,
- "price": "100.00",
- "price_cents": 10000,
- "price_currency": "USD",
- "price_formatted": "$100",
- "taxable": true,
- "primary_image": {
- "video_variant": null,
- "content_type": "image/png",
}, - "additional_images": [ ],
- "archived": false
}, - "relationships": {
- "backdrop_category": {
- "data": {
- "id": "177",
- "type": "backdrop_category"
}
}
}
}
}Extras are additional items or services customers can select when booking (e.g., premium props, custom signage, themed decorations). Extras are organized into categories with customer visibility controls and support flat-rate, hourly, or daily pricing.
Returns all active extra categories for the business, ordered by position.
Extra categories organize extras into groups (e.g., "Props", "Signage", "Decorations"). Each category has a customer visibility setting that controls when it is shown to customers during the booking process.
Use the include query parameter to sideload related resources (comma-separated). Available: extras, extra_groups.
Required permission: offerings_read
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "25878",
- "type": "extra_category",
- "attributes": {
- "id": 25878,
- "name": "Props",
- "position": 3,
- "customer_visibility": "always_show"
}, - "relationships": {
- "franchise": {
- "data": {
- "id": "13004",
- "type": "franchise"
}
}, - "extra_groups": {
- "data": [ ]
}, - "extras": {
- "data": [ ]
}
}
}, - {
- "id": "25879",
- "type": "extra_category",
- "attributes": {
- "id": 25879,
- "name": "Signage",
- "position": 4,
- "customer_visibility": "always_show"
}, - "relationships": {
- "franchise": {
- "data": {
- "id": "13004",
- "type": "franchise"
}
}, - "extra_groups": {
- "data": [ ]
}, - "extras": {
- "data": [ ]
}
}
}
]
}Returns the details of a single extra category, including its name, position, and customer visibility setting.
Use the include query parameter to sideload related resources (comma-separated). Available: extras, extra_groups.
Required permission: offerings_read
| id required | integer The unique ID of the extra category |
| Api-Key required | string Your Integration Key |
{- "data": {
- "id": "25882",
- "type": "extra_category",
- "attributes": {
- "id": 25882,
- "name": "Props",
- "position": 3,
- "customer_visibility": "always_show"
}, - "relationships": {
- "franchise": {
- "data": {
- "id": "13005",
- "type": "franchise"
}
}, - "extra_groups": {
- "data": [ ]
}, - "extras": {
- "data": [ ]
}
}
}
}Returns all active extras for the business. Extras are additional items or services that customers can select when booking (e.g., premium props, custom signage, themed decorations).
Results can be filtered by text search, widget visibility, category, and sort order.
Required permission: offerings_read
| text | string Search extras by name |
| only_widget_visible | boolean Only return extras visible on the booking widget |
| order | string Sort order for results |
| extra_category_id | integer Filter by a specific extra category ID |
| category_ids[] | Array of arrays Filter by extra category IDs |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "46",
- "type": "extra",
- "attributes": {
- "id": 46,
- "name": "Premium Props Package",
- "description": "A special extra item for your event",
- "position": 1,
- "price_method": "flat_rate",
- "include_at_no_charge_with_certain_packages": false,
- "price": "25.00",
- "price_cents": 2500,
- "price_currency": "USD",
- "price_formatted": "$25",
- "hourly_price": "0.00",
- "hourly_price_cents": 0,
- "hourly_price_currency": "USD",
- "hourly_price_formatted": "$0",
- "daily_price": "0.00",
- "daily_price_cents": 0,
- "daily_price_currency": "USD",
- "daily_price_formatted": "$0",
- "primary_image": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"
}
}, - "relationships": {
- "extra_group": {
- "data": {
- "id": "56",
- "type": "extra_group"
}
}, - "extra_category": {
- "data": {
- "id": "25885",
- "type": "extra_category"
}
}
}
}
]
}Returns the full details of a single extra, including its name, description, pricing (flat rate, hourly, or daily), position, and images.
Use the include query parameter to sideload related resources (comma-separated). Available: extra_group, extra_category.
Required permission: offerings_read
| id required | integer The unique ID of the extra |
| Api-Key required | string Your Integration Key |
{- "data": {
- "id": "47",
- "type": "extra",
- "attributes": {
- "id": 47,
- "name": "Premium Props Package",
- "description": "A special extra item for your event",
- "position": 1,
- "price_method": "flat_rate",
- "include_at_no_charge_with_certain_packages": false,
- "price": "25.00",
- "price_cents": 2500,
- "price_currency": "USD",
- "price_formatted": "$25",
- "hourly_price": "0.00",
- "hourly_price_cents": 0,
- "hourly_price_currency": "USD",
- "hourly_price_formatted": "$0",
- "daily_price": "0.00",
- "daily_price_cents": 0,
- "daily_price_currency": "USD",
- "daily_price_formatted": "$0",
- "primary_image": {
- "video_variant": "/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"
}
}, - "relationships": {
- "extra_group": {
- "data": {
- "id": "57",
- "type": "extra_group"
}
}, - "extra_category": {
- "data": {
- "id": "25888",
- "type": "extra_category"
}
}
}
}
}Discount codes (coupons) are reusable promotions a business can apply to events. Each code defines how the discount is calculated — a flat amount or a percentage — and what it applies to: the complete booking, an entire package and its add-ons/backdrops, or specific items. Codes also carry a validity window and an active/expired/deactivated status.
Use the Discount Codes API to list the business's codes (active by default) and look up an individual code's details.
Returns the business's discount codes (coupons), ordered by code.
By default only active codes are returned — those that have not been deactivated and whose validity window includes today. Use the visibility parameter to return expired, deactivated, or all codes instead.
Each code describes how the discount is calculated (adjust_based_on of flat_rate or percent), what it applies to (applies_to_type), and its validity window. To apply a code to an event, use the event discount code endpoint.
Required permission: offerings_read
| visibility | string Which discount codes to return. Defaults to
|
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "67",
- "type": "discount_code",
- "attributes": {
- "id": 67,
- "code": "SAVE10",
- "description": "MyString",
- "status": "active",
- "adjust_based_on": "flat_rate",
- "discount_amount": "50.00",
- "discount_amount_cents": 5000,
- "discount_amount_currency": "USD",
- "discount_amount_formatted": "$50",
- "discount_percent": null,
- "applies_to_type": "specific_items",
- "applies_to_type_formatted": "Each Specific Item",
- "validity_based_on": "event_date",
- "valid_starting": "2026-07-13",
- "valid_thru": "2026-09-13",
- "valid_starting_formatted": "07-13-2026",
- "valid_thru_formatted": "09-13-2026",
- "expired": false
}
}, - {
- "id": "68",
- "type": "discount_code",
- "attributes": {
- "id": 68,
- "code": "WELCOME25",
- "description": "MyString",
- "status": "active",
- "adjust_based_on": "flat_rate",
- "discount_amount": "50.00",
- "discount_amount_cents": 5000,
- "discount_amount_currency": "USD",
- "discount_amount_formatted": "$50",
- "discount_percent": null,
- "applies_to_type": "specific_items",
- "applies_to_type_formatted": "Each Specific Item",
- "validity_based_on": "event_date",
- "valid_starting": "2026-07-13",
- "valid_thru": "2026-09-13",
- "valid_starting_formatted": "07-13-2026",
- "valid_thru_formatted": "09-13-2026",
- "expired": false
}
}
]
}Returns the details of a single discount code, including its discount amount or percent, what it applies to, and its validity window.
Required permission: offerings_read
| id required | integer The unique ID of the discount code |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "69",
- "type": "discount_code",
- "attributes": {
- "id": 69,
- "code": "SAVE10",
- "description": "MyString",
- "status": "active",
- "adjust_based_on": "flat_rate",
- "discount_amount": "50.00",
- "discount_amount_cents": 5000,
- "discount_amount_currency": "USD",
- "discount_amount_formatted": "$50",
- "discount_percent": null,
- "applies_to_type": "full_event",
- "applies_to_type_formatted": "Complete Booking",
- "validity_based_on": "event_date",
- "valid_starting": "2026-07-13",
- "valid_thru": "2026-09-13",
- "valid_starting_formatted": "07-13-2026",
- "valid_thru_formatted": "09-13-2026",
- "expired": false
}
}
}Expenses track business costs such as equipment purchases, venue fees, staff payments, and other expenditures. Each expense has a payee (custom text or a staff member reference), amount, payment date, reference number, and optional category and event associations.
Expense categories provide a hierarchical grouping for expenses, allowing businesses to organize and report on spending by type.
Returns all expense categories for the business. Categories can be nested — each category may have a parent category, forming a hierarchy. The nested_name attribute shows the full path (e.g., "Equipment → Audio").
Required permission: expense_read
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "42",
- "type": "expense_category",
- "attributes": {
- "id": 42,
- "name": "Equipment",
- "nested_name": "Equipment"
}, - "relationships": {
- "parent_expense_category": {
- "data": null
}, - "expenses": {
- "data": [ ]
}
}
}, - {
- "id": "43",
- "type": "expense_category",
- "attributes": {
- "id": 43,
- "name": "Audio",
- "nested_name": "Equipment → Audio"
}, - "relationships": {
- "parent_expense_category": {
- "data": {
- "id": "42",
- "type": "expense_category"
}
}, - "expenses": {
- "data": [ ]
}
}
}
]
}Returns the details of a single expense category.
Required permission: expense_read
| id required | integer The unique ID of the expense category |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "44",
- "type": "expense_category",
- "attributes": {
- "id": 44,
- "name": "Equipment",
- "nested_name": "Equipment"
}, - "relationships": {
- "parent_expense_category": {
- "data": null
}, - "expenses": {
- "data": [ ]
}
}
}
}Returns a paginated list of expenses for the business. Results can be filtered by event, expense category, date range, or full-text search.
The response includes meta.total_count and meta.per_page for pagination.
Required permission: expense_read
| event_id | integer Filter expenses by event ID |
| expense_category_id | integer Filter expenses by category ID |
| payment_date_start | string Filter expenses on or after this date (YYYY-MM-DD) |
| payment_date_end | string Filter expenses on or before this date (YYYY-MM-DD) |
| query | string Full-text search across reference number, payee, and description |
| sort_by | string Sort order:
|
| page | integer Page number for pagination (default: 1) |
| per | integer Number of results per page (default: 50) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 1,
- "per_page": 50,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "21",
- "type": "expense",
- "attributes": {
- "id": 21,
- "payment_date": "2026-08-06",
- "amount": "100.00",
- "amount_cents": 10000,
- "amount_currency": "USD",
- "amount_formatted": "$100",
- "payee_type": "custom",
- "payee_value": "John Smith",
- "payee": "John Smith",
- "ref_no": "abc123",
- "description": "Hello abc123",
- "expense_category_name": "Equipment",
- "event_id": null,
- "event_title": null,
- "expense_category_id": 45,
- "attachments": [ ]
}, - "relationships": {
- "event": {
- "data": null
}, - "created_by": {
- "data": {
- "id": "6016",
- "type": "user"
}
}, - "expense_category": {
- "data": {
- "id": "45",
- "type": "expense_category"
}
}, - "staff": {
- "data": null
}
}
}
]
}Create a new expense record for the business. Expenses track costs like equipment purchases, venue fees, staff payments, and other business expenditures.
The payee can be either a custom text value or a reference to a staff member. Set payee_type to "custom" and provide payee_value, or set payee_type to "staff" and provide staff_id.
Required permission: expense_create
| Api-Key required | string Your Integration Key |
| payee_type | string Enum: "custom" "staff" Payee type |
| payee_value | string Payee name (required when payee_type is "custom") |
| staff_id | integer Staff member ID (required when payee_type is "staff") |
| payment_date required | string Date of payment (YYYY-MM-DD) |
| payment_method | string Payment method (e.g., "Cash", "Check", "Credit Card") |
| amount required | number Expense amount |
| ref_no required | string Reference number |
| description | string Description of the expense |
| expense_category_id | integer Expense category ID |
| event_id | integer Associated event ID (optional) |
{- "payee_type": "custom",
- "payee_value": "string",
- "staff_id": 0,
- "payment_date": "string",
- "payment_method": "string",
- "amount": 0,
- "ref_no": "string",
- "description": "string",
- "expense_category_id": 0,
- "event_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "22",
- "type": "expense",
- "attributes": {
- "id": 22,
- "payment_date": "2026-08-06",
- "amount": "250.00",
- "amount_cents": 25000,
- "amount_currency": "USD",
- "amount_formatted": "$250",
- "payee_type": "custom",
- "payee_value": "Best Buy",
- "payee": "Best Buy",
- "ref_no": "INV-2024-001",
- "description": "Speaker cables and adapters",
- "expense_category_name": "Equipment",
- "event_id": null,
- "event_title": null,
- "expense_category_id": 46,
- "attachments": [ ]
}, - "relationships": {
- "event": {
- "data": null
}, - "created_by": {
- "data": null
}, - "expense_category": {
- "data": {
- "id": "46",
- "type": "expense_category"
}
}, - "staff": {
- "data": null
}
}
}
}Returns the full details of a single expense record.
Required permission: expense_read
| id required | integer The unique ID of the expense |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "23",
- "type": "expense",
- "attributes": {
- "id": 23,
- "payment_date": "2026-08-06",
- "amount": "100.00",
- "amount_cents": 10000,
- "amount_currency": "USD",
- "amount_formatted": "$100",
- "payee_type": "custom",
- "payee_value": "John Smith",
- "payee": "John Smith",
- "ref_no": "abc123",
- "description": "Hello abc123",
- "expense_category_name": "Equipment",
- "event_id": null,
- "event_title": null,
- "expense_category_id": 47,
- "attachments": [ ]
}, - "relationships": {
- "event": {
- "data": null
}, - "created_by": {
- "data": {
- "id": "6018",
- "type": "user"
}
}, - "expense_category": {
- "data": {
- "id": "47",
- "type": "expense_category"
}
}, - "staff": {
- "data": null
}
}
}
}Update an existing expense record.
Required permission: expense_write
| id required | integer The unique ID of the expense |
| Api-Key required | string Your Integration Key |
| payee_type | string Enum: "custom" "staff" Payee type |
| payee_value | string Payee name |
| staff_id | integer Staff member ID |
| payment_date | string Date of payment (YYYY-MM-DD) |
| payment_method | string Payment method |
| amount | number Expense amount |
| ref_no | string Reference number |
| description | string Description of the expense |
| expense_category_id | integer Expense category ID |
| event_id | integer Associated event ID |
{- "payee_type": "custom",
- "payee_value": "string",
- "staff_id": 0,
- "payment_date": "string",
- "payment_method": "string",
- "amount": 0,
- "ref_no": "string",
- "description": "string",
- "expense_category_id": 0,
- "event_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "24",
- "type": "expense",
- "attributes": {
- "id": 24,
- "payment_date": "2026-08-06",
- "amount": "375.00",
- "amount_cents": 37500,
- "amount_currency": "USD",
- "amount_formatted": "$375",
- "payee_type": "custom",
- "payee_value": "John Smith",
- "payee": "John Smith",
- "ref_no": "abc123",
- "description": "Updated description",
- "expense_category_name": "Equipment",
- "event_id": null,
- "event_title": null,
- "expense_category_id": 48,
- "attachments": [ ]
}, - "relationships": {
- "event": {
- "data": null
}, - "created_by": {
- "data": {
- "id": "6019",
- "type": "user"
}
}, - "expense_category": {
- "data": {
- "id": "48",
- "type": "expense_category"
}
}, - "staff": {
- "data": null
}
}
}
}Soft-deletes an expense record. The expense will no longer appear in listings but is retained in the database for record-keeping.
Required permission: expense_write
| id required | integer The unique ID of the expense |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Questionnaires collect the details a business needs after a booking is secured — timelines, song requests, contact lists, setup notes, signatures. Each one is attached to a single booking or proposal.
Most questionnaires are copies of a questionnaire template the business has built. Attaching one copies the template's questions and its permission settings onto the booking; later edits to the template do not flow through on their own. Use GET /api/v1/questionnaire_templates to list what is available to copy.
A questionnaire's kind tells you how to handle it:
data.fieldGroups, and answers are stored in values keyed by field UUID.title and an external_url and nothing more; data.fieldGroups is empty, pdf_url is null, and Check Cherry never sees the answers. Open external_url rather than trying to render the questions. provider names the third party that created it, when one did.Visibility follows the authenticated user's role and the per-questionnaire allow_staff_view, allow_customer_view, allow_staff_edit, and allow_customer_edit flags. show_before_or_after further limits a questionnaire to before or after the booking date, so a questionnaire that exists may still be absent from the list at a given moment.
Marking one complete locks it against further customer edits and fires the business's "Questionnaire Submitted" automated messages and staff push notifications. For an external questionnaire this is the only completion signal Check Cherry can get, so an integration that hosts the form should call it once the guest has finished.
Changing a questionnaire's permission settings requires the "Manage business settings" permission, which integration keys cannot hold — those changes are made in the Check Cherry admin UI.
Two objects do the work.
data holds the structure: the tabs, the questions, the explainer text, and everything else that gets rendered. Every questionnaire carries its own full copy of that structure, which is why template edits do not flow through, and why one booking's questionnaire can be reworded without touching anyone else's.
values holds the answers, each one paired with the question it belongs to.
datadata.fieldGroups is the list of tabs. A field group is a tab: it is what the business adds with "Add Tab" when building the questionnaire, and what the customer clicks through when filling it in. A questionnaire can have a single tab or many.
Each tab has a name, the label shown on the tab itself, and fields, the things on that tab in the order they appear.
Not every field asks a question. Headers, explainer text, images and separators are fields too: they exist to be rendered and they store no answer. A field's type tells you which kind you are looking at, and the table below marks the ones that hold nothing.
valuesAnswers are keyed by the uuid of the question they answer:
{
"data": {
"fieldGroups": [
{
"name": "Reception",
"fields": [
{ "uuid": "f47ac10b", "type": "text_field", "name": "Colour Scheme" }
]
}
]
},
"values": {
"f47ac10b": [{ "text": "Navy and gold" }]
}
}
Two things about that answer catch people out.
It is wrapped in an array. A question can be asked more than once when its allowMultipleEntries is set, and each repeat is one entry in that array. A question answered once still has an array of one.
The inner key is neither the uuid nor the question's name. It is the element the question stores its answer in, and which element that is depends entirely on the question's type. A text_field stores its answer under text, a dropdown under dropdown, and a signature under three elements at once. Send an answer under any other name and the write is rejected:
| Field type | Answer stored under |
|---|---|
header |
nothing; it only displays something |
subheader |
nothing; it only displays something |
separator |
nothing; it only displays something |
plain_text |
nothing; it only displays something |
rich_text |
nothing; it only displays something |
static_image |
nothing; it only displays something |
text_field |
text |
double_text_field |
text, text2 |
triple_text_field |
text, text2, text3 |
quadruple_text_field |
text, text2, text3, text4 |
text_box |
text |
dropdown |
dropdown |
radio_group |
radio |
checkbox |
checkbox |
checkbox_group |
checkbox |
date_field |
text |
time_field |
text |
color_picker_field |
text |
file_uploader_field |
file |
image_uploader_field |
file |
e_sign_field |
signer, timestamp, ip |
song |
songName, songArtistName, songAlbumName, songId, songProvider, spotifyUrl, appleMusicUrl, youtubeUrl, soundCloudUrl, songAlbumUrl, songPreviewUrl, songDurationSeconds, songSuggestionListId, publicNotes, selectionNotes |
song_list |
songName, songArtistName, songAlbumName, songId, songProvider, spotifyUrl, appleMusicUrl, youtubeUrl, soundCloudUrl, songAlbumUrl, songPreviewUrl, songDurationSeconds, songSuggestionListId, publicNotes, selectionNotes |
spotify_playlist |
spotify |
apple_music_playlist |
appleMusic |
youtube_music_playlist |
youtubeMusic |
music_playlist |
musicPlaylist |
A question with timelineEnabled also carries a time, under an element decided by timelineSettings.timelineMode:
timelineMode |
Also stores |
|---|---|
length |
timelineLength |
start_time |
timelineStartsAt |
start_and_end_time |
timelineStartsAt, timelineEndsAt |
null clears an answer and is accepted anywhere. A question whose type is not in the table above is one this documentation predates; read its answers defensively and leave them alone.
A song or song_list question usually draws from a suggestion list — the set of songs the business is willing to play. The question names one with suggestionListId; GET /api/v1/suggestion_lists/{id} returns the songs on it, and GET /api/v1/suggestion_lists lists what the business has. A question with no suggestionListId takes any song the customer names.
allowCustomSongEntry decides whether an answer may go outside the list. When it is false, the answer has to be one of the list's songs.
Two names one word apart do different jobs, and getting them the wrong way round is the usual mistake:
suggestionListId sits on the field, in data.fieldGroups[].fields[]. It is the list the question draws from.songSuggestionListId sits on the answer, in values. It records which list the chosen song came from.Write both the song's details and songSuggestionListId when recording a choice, so the answer can be traced back to the list it came from.
Lists the business's questionnaire templates, ordered by title. Use this to find the questionnaire_template_id to pass when attaching a questionnaire to a booking.
Each template carries its full question structure in data, so a single call gives you everything needed to show a chooser or preview the questions — there is no need to fetch each template separately.
Deleted templates are never returned. Keys belonging to a non-admin user only see templates with allow_staff_view enabled.
Required permission: planning_read.
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "160",
- "type": "form_template",
- "attributes": {
- "id": 160,
- "title": "Event Planning Form",
- "data": {
- "title": "Event Planning Form",
- "fieldGroups": [
- {
- "name": "Reception",
- "fields": [
- {
- "name": "Colour Scheme",
- "type": "text_field",
- "uuid": "f47ac10b",
- "required": true,
- "placeholder": "Navy and gold"
}, - {
- "name": "Main Course",
- "type": "dropdown",
- "uuid": "9c8b7a65",
- "values": [
- "Beef",
- "Fish",
- "Vegetarian"
]
}, - {
- "name": "Extras",
- "type": "checkbox_group",
- "uuid": "3e2d1c0b",
- "values": [
- "Napkins",
- "Chargers"
]
}, - {
- "name": "Toast Time",
- "type": "text_field",
- "uuid": "5f4e3d2c",
- "timelineEnabled": true,
- "timelineSettings": {
- "timelineMode": "start_time"
}
}
]
}, - {
- "name": "Music",
- "fields": [
- {
- "name": "Must Play",
- "type": "song_list",
- "uuid": "7a6b5c4d",
- "allowMultipleEntries": true
}
]
}
]
}, - "allow_staff_view": true,
- "allow_staff_edit": true,
- "allow_customer_view": true,
- "allow_customer_edit": true,
- "show_before_or_after": "all",
- "hide_until_booking_completed": false
}
}
]
}Returns a single questionnaire template, including its question structure (data) and the permission and visibility defaults it will pass on to any questionnaire created from it.
Required permission: planning_read. Templates belonging to another business are not accessible.
| id required | integer The unique ID of the questionnaire template |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "161",
- "type": "form_template",
- "attributes": {
- "id": 161,
- "title": "Event Planning Form",
- "data": {
- "title": "Event Planning Form",
- "fieldGroups": [
- {
- "name": "Reception",
- "fields": [
- {
- "name": "Colour Scheme",
- "type": "text_field",
- "uuid": "f47ac10b",
- "required": true,
- "placeholder": "Navy and gold"
}, - {
- "name": "Main Course",
- "type": "dropdown",
- "uuid": "9c8b7a65",
- "values": [
- "Beef",
- "Fish",
- "Vegetarian"
]
}, - {
- "name": "Extras",
- "type": "checkbox_group",
- "uuid": "3e2d1c0b",
- "values": [
- "Napkins",
- "Chargers"
]
}, - {
- "name": "Toast Time",
- "type": "text_field",
- "uuid": "5f4e3d2c",
- "timelineEnabled": true,
- "timelineSettings": {
- "timelineMode": "start_time"
}
}
]
}, - {
- "name": "Music",
- "fields": [
- {
- "name": "Must Play",
- "type": "song_list",
- "uuid": "7a6b5c4d",
- "allowMultipleEntries": true
}
]
}
]
}, - "allow_staff_view": true,
- "allow_staff_edit": true,
- "allow_customer_view": true,
- "allow_customer_edit": true,
- "show_before_or_after": "all",
- "hide_until_booking_completed": false
}
}
}Returns the questionnaires attached to a single booking or proposal, ordered by ID. An event_id is required — there is no franchise-wide listing.
Results are filtered automatically for the authenticated user. Admins see every questionnaire on the booking; staff see the ones with allow_staff_view; customers see the ones with allow_customer_view. Questionnaires restricted by show_before_or_after are also hidden outside their window, so a "before" questionnaire drops off the list once the booking starts.
Deleted questionnaires are never returned.
Required permission: assigned_event_read (when the authenticated user is assigned to the booking) or unassigned_event_read (otherwise).
| event_id required | integer The booking to list questionnaires for |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "187",
- "type": "form",
- "attributes": {
- "id": 187,
- "title": "Event Planning Form",
- "complete": false,
- "data": {
- "title": "Event Planning Form",
- "fieldGroups": [
- {
- "name": "Reception",
- "fields": [
- {
- "name": "Colour Scheme",
- "type": "text_field",
- "uuid": "f47ac10b",
- "required": true,
- "placeholder": "Navy and gold"
}, - {
- "name": "Main Course",
- "type": "dropdown",
- "uuid": "9c8b7a65",
- "values": [
- "Beef",
- "Fish",
- "Vegetarian"
]
}, - {
- "name": "Extras",
- "type": "checkbox_group",
- "uuid": "3e2d1c0b",
- "values": [
- "Napkins",
- "Chargers"
]
}, - {
- "name": "Toast Time",
- "type": "text_field",
- "uuid": "5f4e3d2c",
- "timelineEnabled": true,
- "timelineSettings": {
- "timelineMode": "start_time"
}
}
]
}, - {
- "name": "Music",
- "fields": [
- {
- "name": "Must Play",
- "type": "song_list",
- "uuid": "7a6b5c4d",
- "allowMultipleEntries": true
}
]
}
]
}, - "values": { },
- "event_id": 3804,
- "kind": "standard",
- "external_url": null,
- "provider": null,
- "allow_staff_view": true,
- "allow_staff_edit": true,
- "allow_customer_view": true,
- "allow_customer_edit": true,
- "show_before_or_after": "all",
- "hide_until_booking_completed": false,
- "associated_record_ids": {
- "event_type_ids": [ ],
- "package_group_ids": [ ],
- "event_category_ids": [ ],
- "add_on_category_ids": [ ],
- "add_on_ids": [ ],
- "backdrop_category_ids": [ ],
- "backdrop_ids": [ ]
}
}
}
]
}Copies one of the business's questionnaire templates onto a booking. The new questionnaire takes its questions and its permission and visibility settings from the template at the moment it is attached — later edits to the template do not flow through automatically.
Use GET /api/v1/questionnaire_templates to look up the available questionnaire_template_id values. Non-admin users can only attach templates with allow_staff_view enabled.
To attach a questionnaire hosted on another site instead, use POST /api/v1/questionnaires/create_external.
Required permission: assigned_event_write or unassigned_event_write.
| Api-Key required | string Your Integration Key |
| event_id required | integer The booking to attach the questionnaire to |
| questionnaire_template_id required | integer The questionnaire template to copy |
{- "event_id": 0,
- "questionnaire_template_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "188",
- "type": "form",
- "attributes": {
- "id": 188,
- "title": "New Questionnaire",
- "complete": false,
- "data": {
- "title": "New Questionnaire",
- "fieldGroups": [
- {
- "name": "PRE-EVENT CHECKLIST",
- "fields": [ ],
- "editing": false
}
]
}, - "values": { },
- "event_id": 3805,
- "kind": "standard",
- "external_url": null,
- "provider": null,
- "allow_staff_view": true,
- "allow_staff_edit": true,
- "allow_customer_view": true,
- "allow_customer_edit": true,
- "show_before_or_after": "all",
- "hide_until_booking_completed": false,
- "associated_record_ids": {
- "event_type_ids": [ ],
- "package_group_ids": [ ],
- "event_category_ids": [ ],
- "add_on_category_ids": [ ],
- "add_on_ids": [ ],
- "backdrop_category_ids": [ ],
- "backdrop_ids": [ ]
}
}
}
}Attaches a questionnaire that lives on another site — a Google Form, a Typeform, or your own hosted form. No template is involved and Check Cherry stores no answers; the questionnaire is a name and a link, and the guest is sent to that link to fill it out.
The response carries kind: "external" so clients know to open external_url directly rather than rendering the Check Cherry form builder. data.fieldGroups is empty on these records and pdf_url is null.
external_url may be sent without a scheme — forms.gle/abc is stored as https://forms.gle/abc. Set provider to identify your integration as the source; it is a free-form string and is left blank for links a business adds by hand.
Required permission: assigned_event_write or unassigned_event_write.
| Api-Key required | string Your Integration Key |
| event_id required | integer The booking to attach the questionnaire to |
| title required | string Name shown to staff and customers |
| external_url required | string Where the questionnaire is hosted. Assumed to be https when no scheme is given. |
| provider | string Optional name of the third party the questionnaire came from |
{- "event_id": 0,
- "title": "string",
- "external_url": "string",
- "provider": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "189",
- "type": "form",
- "attributes": {
- "id": 189,
- "title": "Event Planning Form",
- "complete": false,
- "data": {
- "title": "Event Planning Form",
- "fieldGroups": [ ]
}, - "values": { },
- "event_id": 3806,
- "kind": "external",
- "provider": "acme",
- "allow_staff_view": true,
- "allow_staff_edit": true,
- "allow_customer_view": true,
- "allow_customer_edit": true,
- "show_before_or_after": "all",
- "hide_until_booking_completed": false,
- "pdf_url": null,
- "associated_record_ids": {
- "event_type_ids": [ ],
- "package_group_ids": [ ],
- "event_category_ids": [ ],
- "add_on_category_ids": [ ],
- "add_on_ids": [ ],
- "backdrop_category_ids": [ ],
- "backdrop_ids": [ ]
}
}
}
}Returns a single questionnaire, including its question structure (data) and the answers collected so far (values).
kind tells you what you are looking at. A standard questionnaire carries its questions in data.fieldGroups, keyed by field UUID in values. An external one carries no questions — open external_url instead.
url is a browser link to the questionnaire that works for the customer without a login. For external questionnaires it redirects to external_url.
Required permission: assigned_event_read or unassigned_event_read. Customers can always read questionnaires on their own bookings where allow_customer_view is set.
| id required | integer The unique ID of the questionnaire |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "190",
- "type": "form",
- "attributes": {
- "id": 190,
- "title": "Event Planning Form",
- "complete": false,
- "data": {
- "title": "Event Planning Form",
- "fieldGroups": [
- {
- "name": "Reception",
- "fields": [
- {
- "name": "Colour Scheme",
- "type": "text_field",
- "uuid": "f47ac10b",
- "required": true,
- "placeholder": "Navy and gold"
}, - {
- "name": "Main Course",
- "type": "dropdown",
- "uuid": "9c8b7a65",
- "values": [
- "Beef",
- "Fish",
- "Vegetarian"
]
}, - {
- "name": "Extras",
- "type": "checkbox_group",
- "uuid": "3e2d1c0b",
- "values": [
- "Napkins",
- "Chargers"
]
}, - {
- "name": "Toast Time",
- "type": "text_field",
- "uuid": "5f4e3d2c",
- "timelineEnabled": true,
- "timelineSettings": {
- "timelineMode": "start_time"
}
}
]
}, - {
- "name": "Music",
- "fields": [
- {
- "name": "Must Play",
- "type": "song_list",
- "uuid": "7a6b5c4d",
- "allowMultipleEntries": true
}
]
}
]
}, - "values": { },
- "event_id": 3807,
- "kind": "standard",
- "external_url": null,
- "provider": null,
- "allow_staff_view": true,
- "allow_staff_edit": true,
- "allow_customer_view": true,
- "allow_customer_edit": true,
- "show_before_or_after": "all",
- "hide_until_booking_completed": false,
- "associated_record_ids": {
- "event_type_ids": [ ],
- "package_group_ids": [ ],
- "event_category_ids": [ ],
- "add_on_category_ids": [ ],
- "add_on_ids": [ ],
- "backdrop_category_ids": [ ],
- "backdrop_ids": [ ]
}
}
}
}Saves answers onto a standard questionnaire.
Answers merge into what is already stored. A uuid you leave out keeps the answer it already has, so you can send just the field you changed without re-sending the rest of the questionnaire.
Merging is per field, not per element. The array under a uuid you send replaces that field's answers whole, so sending {"text": "…"} for a double_text_field still drops that entry's text2. Send a field's entries complete. Removing a repeat works the same way — send the shorter array — and [] clears a field.
Pass replace: true to go back to the old behaviour and have values stand for the entire questionnaire, deleting any answer you leave out.
values is keyed by the field's uuid from data.fieldGroups. Each key holds an array, one entry per repeat of that field, and each entry is an object keyed by element — not by the uuid and not by the question's name. Which element a question stores its answer under is decided entirely by its type:
| Field type | Answer stored under |
|---|---|
header |
nothing; it only displays something |
subheader |
nothing; it only displays something |
separator |
nothing; it only displays something |
plain_text |
nothing; it only displays something |
rich_text |
nothing; it only displays something |
static_image |
nothing; it only displays something |
text_field |
text |
double_text_field |
text, text2 |
triple_text_field |
text, text2, text3 |
quadruple_text_field |
text, text2, text3, text4 |
text_box |
text |
dropdown |
dropdown |
radio_group |
radio |
checkbox |
checkbox |
checkbox_group |
checkbox |
date_field |
text |
time_field |
text |
color_picker_field |
text |
file_uploader_field |
file |
image_uploader_field |
file |
e_sign_field |
signer, timestamp, ip |
song |
songName, songArtistName, songAlbumName, songId, songProvider, spotifyUrl, appleMusicUrl, youtubeUrl, soundCloudUrl, songAlbumUrl, songPreviewUrl, songDurationSeconds, songSuggestionListId, publicNotes, selectionNotes |
song_list |
songName, songArtistName, songAlbumName, songId, songProvider, spotifyUrl, appleMusicUrl, youtubeUrl, soundCloudUrl, songAlbumUrl, songPreviewUrl, songDurationSeconds, songSuggestionListId, publicNotes, selectionNotes |
spotify_playlist |
spotify |
apple_music_playlist |
appleMusic |
youtube_music_playlist |
youtubeMusic |
music_playlist |
musicPlaylist |
A question with timelineEnabled also carries a time, under an element decided by timelineSettings.timelineMode:
timelineMode |
Also stores |
|---|---|
length |
timelineLength |
start_time |
timelineStartsAt |
start_and_end_time |
timelineStartsAt, timelineEndsAt |
Answers are checked against the field they belong to, and the call is rejected with a 422 if they do not fit:
dropdown field will not accept an answer under radioUse null to clear an answer; it is accepted for any element. Answers already stored under an element the field no longer declares can be sent back unchanged, so fetching a questionnaire and returning it is always safe, but you cannot introduce a new one.
External questionnaires reject this call with a 422 too: their answers live on the site that hosts them, not in Check Cherry.
Required permission: assigned_event_read or unassigned_event_read, with a key belonging to a staff user and allow_staff_edit set on the questionnaire. Customers can submit answers on their own bookings where allow_customer_edit is set and the questionnaire is not yet complete.
| id required | integer The unique ID of the questionnaire |
| Api-Key required | string Your Integration Key |
required | object (QuestionnaireAnswers) Answers, keyed by the field's |
| replace | boolean Default: false Treat |
{- "values": {
- "f47ac10b": [
- {
- "text": "Navy and gold"
}
], - "9c8b7a65": [
- {
- "dropdown": "Beef"
}
], - "3e2d1c0b": [
- {
- "checkbox": [
- "Napkins",
- "Chargers"
]
}
], - "7a6b5c4d": [
- {
- "songName": "Uptown Funk",
- "songArtistName": "Bruno Mars",
- "selectionNotes": "First dance"
}, - {
- "songName": "September",
- "songArtistName": "Earth, Wind & Fire",
- "selectionNotes": null
}
]
}, - "replace": false
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "191",
- "type": "form",
- "attributes": {
- "id": 191,
- "title": "Event Planning Form",
- "complete": false,
- "data": {
- "title": "Event Planning Form",
- "fieldGroups": [
- {
- "name": "Details",
- "fields": [
- {
- "name": "Color Scheme",
- "type": "text_field",
- "uuid": "f47ac10b"
}
]
}
]
}, - "values": {
- "f47ac10b": [
- {
- "text": "Navy and gold"
}
]
}, - "event_id": 3808,
- "kind": "standard",
- "external_url": null,
- "provider": null,
- "allow_staff_view": true,
- "allow_staff_edit": true,
- "allow_customer_view": true,
- "allow_customer_edit": true,
- "show_before_or_after": "all",
- "hide_until_booking_completed": false,
- "associated_record_ids": {
- "event_type_ids": [ ],
- "package_group_ids": [ ],
- "event_category_ids": [ ],
- "add_on_category_ids": [ ],
- "add_on_ids": [ ],
- "backdrop_category_ids": [ ],
- "backdrop_ids": [ ]
}
}
}
}Detaches the questionnaire from the booking. Any answers already collected go with it, and the removal is recorded on the booking's change history. The questionnaire template it came from is untouched.
Required permission: assigned_event_write or unassigned_event_write, plus admin or extended staff permissions. Customers cannot remove questionnaires.
| id required | integer The unique ID of the questionnaire |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Marks the questionnaire complete. Customers can no longer change their answers, and any "Questionnaire Submitted" automated messages and staff push notifications fire.
This is how an external questionnaire gets closed out — Check Cherry cannot see whether the guest finished a form hosted elsewhere, so your integration should call this once it knows they have.
Required permission: assigned_event_read or unassigned_event_read. Fails if the questionnaire is already complete.
| id required | integer The unique ID of the questionnaire |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Reopens a completed questionnaire so answers can be changed again. No automated messages fire.
Required permission: assigned_event_read or unassigned_event_read. Fails if the questionnaire is not currently complete.
| id required | integer The unique ID of the questionnaire |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Returns the signer name, a server timestamp, and the requesting IP address for an e-signature field. This call records nothing on its own — take the values it returns and write them into the signature field's entry in values (as signer, timestamp, and ip) using Submit answers, so the signature is stamped by Check Cherry rather than by the client's clock.
Required permission: same as Submit answers.
| id required | integer The unique ID of the questionnaire |
| Api-Key required | string Your Integration Key |
| signer required | string Name typed by the person signing |
{- "signer": "string"
}{- "meta": {
- "status": "ok"
}, - "data": {
- "signer": "Jordan Reyes",
- "timestamp": "08-13-2026 5:25 PM",
- "ip": "127.0.0.1"
}
}Erases every answer on the questionnaire and reloads the current version of its template, so any questions the business has added or changed since it was attached take effect. The reset is recorded on the booking's change history.
Only works on questionnaires that came from a template — external questionnaires and ones whose template has been deleted cannot be reset.
Required permission: assigned_event_write or unassigned_event_write, plus admin or extended staff permissions.
| id required | integer The unique ID of the questionnaire |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Lists the business's suggestion lists, ordered by title. A suggestion list is the set of songs a questionnaire's song or song_list question lets a customer pick from — the question names one through its suggestionListId.
The songs themselves are not returned here, only title and item_count. A list holds up to 1000 songs and a business can have many, so fetch a single list when you need what is on it.
Deleted lists are never returned, and only lists the business owns are listed.
Required permission: planning_read.
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "110",
- "type": "suggestion_list_summary",
- "attributes": {
- "id": 110,
- "title": "Do Not Play",
- "description": null,
- "item_count": 0
}
}, - {
- "id": "109",
- "type": "suggestion_list_summary",
- "attributes": {
- "id": 109,
- "title": "First Dance Ideas",
- "description": "Slow songs couples come back to",
- "item_count": 2
}
}
]
}Returns a single suggestion list with every song on it in data, in the order the business arranged them. Use this to show a customer what a song or song_list question offers, or to check what an answer was picked from.
Each item in data carries id, name, artistName, albumName, songNotes, spotifyUrl, youtubeUrl, appleMusicUrl and soundCloudUrl. Anything the business left blank is null.
songNotes belongs to the list, not to the answer. It is the business's own note about the song — "requires the clean edit", "played at every reception" — and it is never stored as part of a questionnaire answer. A customer's note about their choice is selectionNotes in the questionnaire's values.
Recording an answer means writing the song's fields into values under the question's uuid, along with songSuggestionListId set to this list's id.
Required permission: planning_read.
| id required | integer The unique ID of the suggestion list |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "111",
- "type": "suggestion_list",
- "attributes": {
- "id": 111,
- "title": "First Dance Ideas",
- "description": "Slow songs couples come back to",
- "item_count": 2,
- "data": [
- {
- "id": "3f1a9c02-6b4e-4f4a-9a1d-2c7f5e8b1d44",
- "name": "At Last",
- "albumName": "At Last!",
- "songNotes": "Classic first dance",
- "artistName": "Etta James",
- "appleMusicUrl": null,
- "soundCloudUrl": null
}, - {
- "id": "b6d0e7a1-52c8-4f0e-8f2b-9d3a4c6e7f10",
- "name": "Make You Feel My Love",
- "albumName": "19",
- "songNotes": null,
- "artistName": "Adele",
- "youtubeUrl": null,
- "appleMusicUrl": null,
- "soundCloudUrl": null
}
]
}
}
}Checklists organize tasks and reminders for a business. The Checklists API covers three related resources:
Checklists are the containers. Each one is attached to a single record (the "checkable") that determines its scope:
Checklist items are the actual to-do entries inside a checklist. Each item has a title, optional notes, optional due date, optional assigned staff, and a checked/unchecked state. Items always belong to exactly one checklist and inherit that checklist's visibility and edit settings.
Checklist categories are reusable templates. Creating a checklist from a category seeds the new checklist with the category's name, view/edit flags, and starting set of items. Categories are managed in the Check Cherry admin UI; the API exposes a read-only list so integrations can show their users which template to start from.
Visibility is automatic based on the authenticated user's role: admins see every checklist; staff see their personal checklist plus event checklists they're assigned to or that allow staff view; customers see their event checklists where customer view is allowed. Per-checklist allow_staff_view, allow_customer_view, allow_staff_edit, and allow_customer_edit flags further control what staff and customers can see and modify, and which item-level actions they can perform — see and check go together, while editing, adding, and removing items require the edit flag.
Returns the checklist categories visible to the authenticated user. Categories are the templates new checklists can be seeded from — pass a category's id as checklist_category_id when creating a checklist to copy its items and view/edit flags onto the new checklist.
Admin users see every category; non-admin staff (and integration keys minted by them) only see categories with allow_staff_view enabled.
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": [
- {
- "id": "180",
- "type": "checklist_category",
- "attributes": {
- "id": 180,
- "name": "Day-of Setup"
}
}
]
}Returns a paginated list of checklist items visible to the authenticated user. Results can be scoped to a single checklist, filtered by status, assignment, or full-text search, and sorted by due date, event date, or recency.
Visibility is determined automatically based on the authenticated user's role: admins see every item; staff see items on their personal checklist, items assigned to them, and items on event or franchise checklists they have view access to; customers see items on their event checklists where customer view is allowed.
The response includes meta.total_count and meta.per_page for pagination.
| checklist_id | integer Filter to items on a single checklist |
| checkable_type | string Filter to items whose checklist is attached to this type:
|
| checkable_id | integer Filter to items whose checklist is attached to the record with this ID |
| filter | string Status filter |
| assigned_filter | string Assignment filter relative to the authenticated user |
| query | string Full-text search across item titles and notes |
| sort_by | string Sort order |
| show_proposals | boolean Include items on proposal-status event checklists (default: true) |
| only_show_items_in_global_list | boolean Only return items flagged to appear in the global task list |
| page | integer Page number for pagination (default: 1) |
| per | integer Number of results per page (default: 50) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 1,
- "per_page": 50,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "140",
- "type": "checklist_item",
- "attributes": {
- "id": 140,
- "title": "Confirm venue arrival time",
- "notes": null,
- "checked_at": null,
- "deleted": false,
- "position": 0,
- "due_on": null,
- "taskable_type": null,
- "taskable_id": null,
- "taskable_description": null,
- "checklist_id": 164,
- "user_ids": [ ],
- "updated_at": "2026-08-13T17:24:47.158-07:00",
- "created_at": "2026-08-13T17:24:47.158-07:00",
- "checkable_description": "Sarah and John's Wedding on Aug 20 / Sample Checklist",
- "checked": false,
- "editable": true,
- "checkable_id": 3765,
- "checkable_type": "Event",
- "checkable_status": "confirmed",
- "checklist_name": "Sample Checklist",
- "user_full_names": [ ]
}, - "relationships": {
- "checklist": {
- "data": {
- "id": "164",
- "type": "checklist"
}
}, - "users": {
- "data": [ ]
}
}
}
]
}Adds a new item to a checklist. When checklist_id is supplied, the item is added to that checklist. When it's omitted, the item is added to the franchise-wide "Shared Checklist" (created on first use).
Required permission: assigned_event_write (when the authenticated user is assigned to the target checklist's event) or unassigned_event_write (otherwise). Staff users without admin role also need the per-checklist allow_staff_edit flag; customers need allow_customer_edit. Items on user-checklists (personal task lists) can only be created by their owner.
| Api-Key required | string Your Integration Key |
| title required | string Item title |
| notes | string Free-form notes |
| due_on | string Due date (YYYY-MM-DD) |
| checklist_id | integer Optional ID of the checklist to add the item to. Omit to use the franchise-wide Shared Checklist. |
| checked | boolean Whether the new item should start in the checked state |
| user_ids | Array of integers Staff member IDs to assign to this item |
{- "title": "string",
- "notes": "string",
- "due_on": "string",
- "checklist_id": 0,
- "checked": true,
- "user_ids": [
- 0
]
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "141",
- "type": "checklist_item",
- "attributes": {
- "id": 141,
- "title": "Confirm venue arrival time",
- "notes": null,
- "checked_at": null,
- "deleted": false,
- "position": 0,
- "due_on": null,
- "taskable_type": null,
- "taskable_id": null,
- "taskable_description": null,
- "checklist_id": 165,
- "user_ids": [ ],
- "updated_at": "2026-08-13T17:24:47.486-07:00",
- "created_at": "2026-08-13T17:24:47.486-07:00",
- "checkable_description": "Sarah and John's Wedding on Aug 20 / Sample Checklist",
- "checked": false,
- "editable": true,
- "checkable_id": 3766,
- "checkable_type": "Event",
- "checkable_status": "confirmed",
- "checklist_name": "Sample Checklist",
- "user_full_names": [ ]
}, - "relationships": {
- "checklist": {
- "data": {
- "id": "165",
- "type": "checklist"
}
}, - "users": {
- "data": [ ]
}
}
}
}Returns the full details of a single checklist item, including its title, notes, due date, checked state, assigned staff, and the type/status of the record its checklist is attached to.
Visibility is inherited from the parent checklist — see the Checklists tag overview for details.
Required permission: assigned_event_read (when the authenticated user is assigned to the item's checklist's event) or unassigned_event_read (otherwise). Items on user-checklists (personal task lists) are only visible to their owner.
| id required | integer The unique ID of the checklist item |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "142",
- "type": "checklist_item",
- "attributes": {
- "id": 142,
- "title": "Confirm venue arrival time",
- "notes": null,
- "checked_at": null,
- "deleted": false,
- "position": 0,
- "due_on": null,
- "taskable_type": null,
- "taskable_id": null,
- "taskable_description": null,
- "checklist_id": 166,
- "user_ids": [ ],
- "updated_at": "2026-08-13T17:24:47.622-07:00",
- "created_at": "2026-08-13T17:24:47.622-07:00",
- "checkable_description": "Sarah and John's Wedding on Aug 20 / Sample Checklist",
- "checked": false,
- "editable": true,
- "checkable_id": 3767,
- "checkable_type": "Event",
- "checkable_status": "confirmed",
- "checklist_name": "Sample Checklist",
- "user_full_names": [ ]
}, - "relationships": {
- "checklist": {
- "data": {
- "id": "166",
- "type": "checklist"
}
}, - "users": {
- "data": [ ]
}
}
}
}Updates an existing checklist item. Only fields included in the request body are modified — omitted fields remain unchanged. Use this to change the title, notes, due date, checked state, or assigned staff. Toggling checked is also exposed as dedicated /mark_as_checked and /mark_as_unchecked endpoints.
Required permission: assigned_event_write (when the authenticated user is assigned to the item's checklist's event) or unassigned_event_write (otherwise). Staff users without admin role also need the per-checklist allow_staff_edit flag; customers need allow_customer_edit. Items on user-checklists (personal task lists) can only be edited by their owner.
| id required | integer The unique ID of the checklist item |
| Api-Key required | string Your Integration Key |
| title | string Item title |
| notes | string Free-form notes |
| due_on | string Due date (YYYY-MM-DD) |
| checked | boolean Whether the item is checked |
| user_ids | Array of integers Staff member IDs assigned to this item |
{- "title": "string",
- "notes": "string",
- "due_on": "string",
- "checked": true,
- "user_ids": [
- 0
]
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "143",
- "type": "checklist_item",
- "attributes": {
- "id": 143,
- "title": "Confirm venue arrival time and load-in door",
- "notes": "Loading dock is on 4th St",
- "checked_at": null,
- "deleted": false,
- "position": 0,
- "due_on": null,
- "taskable_type": null,
- "taskable_id": null,
- "taskable_description": null,
- "checklist_id": 167,
- "user_ids": [ ],
- "updated_at": "2026-08-13T17:24:47.824-07:00",
- "created_at": "2026-08-13T17:24:47.787-07:00",
- "checkable_description": "Sarah and John's Wedding on Aug 20 / Sample Checklist",
- "checked": false,
- "editable": true,
- "checkable_id": 3768,
- "checkable_type": "Event",
- "checkable_status": "confirmed",
- "checklist_name": "Sample Checklist",
- "user_full_names": [ ]
}, - "relationships": {
- "checklist": {
- "data": {
- "id": "167",
- "type": "checklist"
}
}, - "users": {
- "data": [ ]
}
}
}
}Soft-deletes a checklist item. The item is hidden from listings but retained in the database for record-keeping.
Required permission: assigned_event_write (when the authenticated user is assigned to the item's checklist's event) or unassigned_event_write (otherwise). Staff users without admin role also need the per-checklist allow_staff_edit flag; customers need allow_customer_edit. Items on user-checklists (personal task lists) can only be deleted by their owner.
| id required | integer The unique ID of the checklist item |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Reorders the checklist item within its checklist by inserting it at the given zero-indexed position. Other items shift to make room.
Required permission: assigned_event_write (when the authenticated user is assigned to the item's checklist's event) or unassigned_event_write (otherwise). Reordering is treated as editing the list — staff users without admin role also need the per-checklist allow_staff_edit flag, and customers need allow_customer_edit. Items on user-checklists can only be reordered by their owner.
| id required | integer The unique ID of the checklist item |
| Api-Key required | string Your Integration Key |
| position required | integer Zero-indexed position to move the item to |
{- "position": 0
}{- "meta": {
- "status": "ok"
}
}Marks a checklist item as checked. This is the same as updating the item with checked: true, but exposed as a dedicated endpoint for convenience.
Checking and unchecking items is treated as part of viewing a checklist — staff and customers only need the per-checklist allow_staff_view or allow_customer_view flag plus the corresponding event-read permission.
Required permission: assigned_event_read (when the authenticated user is assigned to the item's checklist's event) or unassigned_event_read (otherwise). Items on user-checklists can only be checked by their owner.
| id required | integer The unique ID of the checklist item |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "146",
- "type": "checklist_item",
- "attributes": {
- "id": 146,
- "title": "Confirm venue arrival time",
- "notes": null,
- "checked_at": "2026-08-13T17:24:48.330-07:00",
- "deleted": false,
- "position": 0,
- "due_on": null,
- "taskable_type": null,
- "taskable_id": null,
- "taskable_description": null,
- "checklist_id": 170,
- "user_ids": [ ],
- "updated_at": "2026-08-13T17:24:48.330-07:00",
- "created_at": "2026-08-13T17:24:48.296-07:00",
- "checkable_description": "Sarah and John's Wedding on Aug 20 / Sample Checklist",
- "checked": true,
- "editable": true,
- "checkable_id": 3771,
- "checkable_type": "Event",
- "checkable_status": "confirmed",
- "checklist_name": "Sample Checklist",
- "user_full_names": [ ]
}, - "relationships": {
- "checklist": {
- "data": {
- "id": "170",
- "type": "checklist"
}
}, - "users": {
- "data": [ ]
}
}
}
}Marks a checklist item as unchecked. This is the same as updating the item with checked: false, but exposed as a dedicated endpoint for convenience.
Checking and unchecking items is treated as part of viewing a checklist — staff and customers only need the per-checklist allow_staff_view or allow_customer_view flag plus the corresponding event-read permission.
Required permission: assigned_event_read (when the authenticated user is assigned to the item's checklist's event) or unassigned_event_read (otherwise). Items on user-checklists can only be unchecked by their owner.
| id required | integer The unique ID of the checklist item |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "147",
- "type": "checklist_item",
- "attributes": {
- "id": 147,
- "title": "Confirm venue arrival time",
- "notes": null,
- "checked_at": null,
- "deleted": false,
- "position": 0,
- "due_on": null,
- "taskable_type": null,
- "taskable_id": null,
- "taskable_description": null,
- "checklist_id": 171,
- "user_ids": [ ],
- "updated_at": "2026-08-13T17:24:48.500-07:00",
- "created_at": "2026-08-13T17:24:48.465-07:00",
- "checkable_description": "Sarah and John's Wedding on Aug 20 / Sample Checklist",
- "checked": false,
- "editable": true,
- "checkable_id": 3772,
- "checkable_type": "Event",
- "checkable_status": "confirmed",
- "checklist_name": "Sample Checklist",
- "user_full_names": [ ]
}, - "relationships": {
- "checklist": {
- "data": {
- "id": "171",
- "type": "checklist"
}
}, - "users": {
- "data": [ ]
}
}
}
}Returns the checklists visible to the authenticated user. Pass an event_id to limit results to checklists attached to a specific event (booking or proposal); omit it to get every checklist the user can see across the franchise (event checklists, the user's personal staff checklist, and any franchise-level checklists).
Visibility is determined automatically based on the authenticated user's role: admins see every checklist; staff see their personal checklist plus event checklists they're assigned to or that allow staff view; customers see their event checklists where customer view is allowed.
Each checklist includes a complete_count (number of checked items) and count (total items) to support progress displays without a separate request.
| event_id | integer Filter checklists by event ID |
| page | integer Page number (default: 1) |
| per | integer Results per page (default: 50) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 1,
- "per_page": 50,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "172",
- "type": "checklist",
- "attributes": {
- "id": 172,
- "name": "Day-of Setup",
- "checkable_type": "Event",
- "checkable_id": 3773,
- "allow_edit": true,
- "complete_count": 0,
- "count": 0
}
}
]
}Creates a new checklist on an event. When a checklist_category_id is supplied, the new checklist's items, view/edit flags, and name are seeded from the chosen category. When it's omitted, an empty checklist named "Checklist" is created with no items.
Required permission: assigned_event_write (when the authenticated user is assigned to the event) or unassigned_event_write (otherwise). If a checklist_category_id is supplied, the category must also be accessible to the user — admins can use any category; non-admin staff can only use categories with allow_staff_view enabled.
| Api-Key required | string Your Integration Key |
| event_id required | integer ID of the event the checklist should be attached to |
| checklist_category_id | integer Optional checklist category to seed the new checklist from |
{- "event_id": 0,
- "checklist_category_id": 0
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "173",
- "type": "checklist",
- "attributes": {
- "id": 173,
- "name": "Day-of Setup",
- "checkable_type": "Event",
- "checkable_id": 3774,
- "allow_edit": true,
- "complete_count": 0,
- "count": 0
}
}
}Returns a single checklist along with its name, checkable_type/checkable_id (the record the checklist is attached to), allow_edit for the authenticated user, and progress counts (complete_count and count).
Visibility is determined automatically based on the authenticated user's role and the checklist's view flags — see the Checklists tag overview for details.
Required permission: assigned_event_read (when the authenticated user is assigned to the checklist's event) or unassigned_event_read (otherwise). User-checklists (personal task lists) are only visible to their owner.
| id required | integer The unique ID of the checklist |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "174",
- "type": "checklist",
- "attributes": {
- "id": 174,
- "name": "Day-of Setup",
- "checkable_type": "Event",
- "checkable_id": 3775,
- "allow_edit": true,
- "complete_count": 0,
- "count": 0
}
}
}Permanently removes a checklist and all of its items. The deletion is logged on the attached event's change history when applicable.
Required permission: assigned_event_write (when the authenticated user is assigned to the checklist's event) or unassigned_event_write (otherwise). Staff users without admin role also need the per-checklist allow_staff_edit flag. Customers cannot delete checklists. User-checklists (personal task lists) cannot be deleted via the API — they are singletons that recreate themselves on next access.
| id required | integer The unique ID of the checklist |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Resets the checklist back to its starting state. All existing items are deleted — any notes, due dates, or staff assignments on those items are lost. If the checklist was seeded from a checklist category, items are repopulated from the category template and the checklist's name plus view/edit flags are restored to the category defaults. If no category is associated, the result is an empty checklist. The reset is logged on the attached event's change history when applicable.
Required permission: assigned_event_write (when the authenticated user is assigned to the checklist's event) or unassigned_event_write (otherwise). Staff users without admin role also need the per-checklist allow_staff_edit flag. Customers cannot reset checklists. User-checklists (personal task lists) can only be reset by their owner.
| id required | integer The unique ID of the checklist |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}
}Payments represent financial transactions recorded against events — charges, tips, and refunds. Payments can be manual (cash, check, other) or processed through a payment gateway (Stripe, Square, PayPal). Each payment includes amount breakdowns, tax details, and processor information.
Use the Payments API to list payments across all events, look up individual payment records, and filter by event or date range.
Returns a paginated list of payments across all events for the business. Results can be filtered by event ID or date range.
Each payment includes amount breakdowns (charge, tip, tax, fees, net), processor details, and associated event information.
The response includes meta.total_count and meta.per_page for pagination.
Required permission: assigned_event_read_pricing or unassigned_event_read_pricing
| event_id | integer Filter payments by event ID |
| payment_date_start | string Filter payments on or after this date (YYYY-MM-DD) |
| payment_date_end | string Filter payments on or before this date (YYYY-MM-DD) |
| page | integer Page number for pagination (default: 1) |
| per | integer Number of results per page (default: 25) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 1,
- "per_page": 25,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "286",
- "type": "event_payment",
- "attributes": {
- "id": 286,
- "event_id": 3782,
- "paid_at": "2026-08-13T17:24:50.661-07:00",
- "payment_method": "Other",
- "reference": "Check Number #123",
- "processor": null,
- "refund": false,
- "amount": "30.00",
- "amount_cents": 3000,
- "amount_currency": "USD",
- "amount_formatted": "$30",
- "tip_amount": "0.00",
- "tip_amount_cents": 0,
- "tip_amount_currency": "USD",
- "tip_amount_formatted": "$0",
- "total_amount": "0.00",
- "total_amount_cents": 0,
- "total_amount_currency": "USD",
- "total_amount_formatted": "$0",
- "paid_by": "Oretha Grimes",
- "paid_at_formatted": "08-13-2026 5:24 PM",
- "event_starts_at": "2026-08-20T17:24:50.600-07:00",
- "invoice_number": null,
- "event_title": "Sarah and John's Wedding",
- "event_total": "0.00",
- "event_total_cents": 0,
- "event_total_currency": "USD",
- "event_total_formatted": "$0",
- "taxable_amount": "0.00",
- "taxable_amount_cents": 0,
- "taxable_amount_currency": "USD",
- "taxable_amount_formatted": "$0",
- "non_taxable_amount": "0.00",
- "non_taxable_amount_cents": 0,
- "non_taxable_amount_currency": "USD",
- "non_taxable_amount_formatted": "$0",
- "tax_rate": "0.0",
- "tax_collected": "0.00",
- "tax_collected_cents": 0,
- "tax_collected_currency": "USD",
- "tax_collected_formatted": "$0",
- "amount_collected_excluding_tax": "30.00",
- "amount_collected_excluding_tax_cents": 3000,
- "amount_collected_excluding_tax_currency": "USD",
- "amount_collected_excluding_tax_formatted": "$30",
- "processing_fees": null,
- "processing_fees_cents": null,
- "processing_fees_currency": null,
- "processing_fees_formatted": "$0",
- "net_amount": "30.00",
- "net_amount_cents": 3000,
- "net_amount_currency": "USD",
- "net_amount_formatted": "$30",
- "taxjar_city": null,
- "taxjar_county": null,
- "taxjar_state": null,
- "taxjar_country": null,
- "taxjar_postal_code": null,
- "taxjar_city_rate": null,
- "taxjar_county_rate": null,
- "taxjar_state_rate": null,
- "taxjar_country_rate": null,
- "taxjar_combined_district_rate": null,
- "taxjar_combined_rate": null,
- "brand_id": 15002,
- "brand_name": "Kutch and Sons 495",
- "check_cherry_payment_id": "1b90bc45-f958-4a2a-aa61-3faba84b13d1"
}
}
]
}Returns the full details of a single payment, including amount breakdowns, tax information, processor details, and associated event data.
Required permission: assigned_event_read_pricing or unassigned_event_read_pricing
| id required | integer The unique ID of the payment to retrieve |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "287",
- "type": "event_payment",
- "attributes": {
- "id": 287,
- "event_id": 3783,
- "paid_at": "2026-08-13T17:24:50.795-07:00",
- "payment_method": "Other",
- "reference": "Check Number #123",
- "processor": null,
- "refund": false,
- "amount": "30.00",
- "amount_cents": 3000,
- "amount_currency": "USD",
- "amount_formatted": "$30",
- "tip_amount": "0.00",
- "tip_amount_cents": 0,
- "tip_amount_currency": "USD",
- "tip_amount_formatted": "$0",
- "total_amount": "0.00",
- "total_amount_cents": 0,
- "total_amount_currency": "USD",
- "total_amount_formatted": "$0",
- "paid_by": "Vincenzo Lesch",
- "paid_at_formatted": "08-13-2026 5:24 PM",
- "event_starts_at": "2026-08-20T17:24:50.734-07:00",
- "invoice_number": null,
- "event_title": "Sarah and John's Wedding",
- "event_total": "0.00",
- "event_total_cents": 0,
- "event_total_currency": "USD",
- "event_total_formatted": "$0",
- "taxable_amount": "0.00",
- "taxable_amount_cents": 0,
- "taxable_amount_currency": "USD",
- "taxable_amount_formatted": "$0",
- "non_taxable_amount": "0.00",
- "non_taxable_amount_cents": 0,
- "non_taxable_amount_currency": "USD",
- "non_taxable_amount_formatted": "$0",
- "tax_rate": "0.0",
- "tax_collected": "0.00",
- "tax_collected_cents": 0,
- "tax_collected_currency": "USD",
- "tax_collected_formatted": "$0",
- "amount_collected_excluding_tax": "30.00",
- "amount_collected_excluding_tax_cents": 3000,
- "amount_collected_excluding_tax_currency": "USD",
- "amount_collected_excluding_tax_formatted": "$30",
- "processing_fees": null,
- "processing_fees_cents": null,
- "processing_fees_currency": null,
- "processing_fees_formatted": "$0",
- "net_amount": "30.00",
- "net_amount_cents": 3000,
- "net_amount_currency": "USD",
- "net_amount_formatted": "$30",
- "taxjar_city": null,
- "taxjar_county": null,
- "taxjar_state": null,
- "taxjar_country": null,
- "taxjar_postal_code": null,
- "taxjar_city_rate": null,
- "taxjar_county_rate": null,
- "taxjar_state_rate": null,
- "taxjar_country_rate": null,
- "taxjar_combined_district_rate": null,
- "taxjar_combined_rate": null,
- "brand_id": 15005,
- "brand_name": "Goodwin, Schuppe and Willms 498",
- "check_cherry_payment_id": "a3a517ca-cd23-4840-9a31-ee47d1061fd7"
}
}
}Reporting endpoints surface aggregated, read-only summaries of a business's data — revenue projections, lead and proposal counts, payment receipts, booked-on activity, staff productivity, package utilization, and more. They are intended for dashboards, BI tools, and AI assistants that need to answer "how is the business doing?" questions without paging through individual events, leads, or payments.
All reporting endpoints require the reports_read permission on the integration key. Most accept a date range (starts_at / ends_at) and an optional brand_id filter, and return raw JSON (not JSON:API) shaped for chart-friendly consumption.
Returns revenue totals bucketed by when a booking was sold (the booked_at date), rather than when the event runs. Each bucket reports the amount already collected, the amount still expected from non-postponed bookings (split into projected vs. past due), the amount tied up in postponed bookings, and the count of bookings.
This is the right endpoint for sales-pipeline questions like "how much did we sell last month?" or "what was our best booking week?". For event-date-based projections, use revenue_projection_summary instead.
Proposals are excluded. Only confirmed (non-archived) bookings with a due_on set are considered. All monetary fields are reported in cents.
Required permission: reports_read
| interval | string Default: "month" Enum: "year" "quarter" "month" "week" "day" Time-bucket size. Defaults to |
| starts_at | string Start of the date range (YYYY-MM-DD), applied against |
| ends_at | string End of the date range (YYYY-MM-DD), applied against |
| brand_id | integer Limit results to a single brand. Omit to include all brands on the account. |
| Api-Key required | string Your Integration Key |
{- "results": [
- {
- "name": "Jun 2026",
- "amount_paid_cents": 0,
- "projected_cents": 0,
- "postponed_cents": 0,
- "past_due_cents": 0,
- "total_cents": 0,
- "event_count": 0,
- "report_path": "/report/events?query%5Bbooked_at_dynamic%5D=custom&query%5Bbooked_at_end%5D=06-30-2026&query%5Bbooked_at_start%5D=06-01-2026&query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=booked_at&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstatus%5D=not_proposal"
}, - {
- "name": "Jul 2026",
- "amount_paid_cents": 0,
- "projected_cents": 0,
- "postponed_cents": 0,
- "past_due_cents": 0,
- "total_cents": 0,
- "event_count": 1,
- "report_path": "/report/events?query%5Bbooked_at_dynamic%5D=custom&query%5Bbooked_at_end%5D=07-31-2026&query%5Bbooked_at_start%5D=07-01-2026&query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=booked_at&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstatus%5D=not_proposal"
}, - {
- "name": "Aug 2026",
- "amount_paid_cents": 0,
- "projected_cents": 0,
- "postponed_cents": 0,
- "past_due_cents": 0,
- "total_cents": 0,
- "event_count": 0,
- "report_path": "/report/events?query%5Bbooked_at_dynamic%5D=custom&query%5Bbooked_at_end%5D=08-31-2026&query%5Bbooked_at_start%5D=08-01-2026&query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=booked_at&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstatus%5D=not_proposal"
}
]
}Returns the number of leads, bucketed by time interval. Useful for spotting trends in lead volume — answering "are we getting more inquiries lately?" or "how many leads did we get last quarter?".
Spam-flagged and franchise-hidden leads are excluded. Use chart_type to choose whether leads are bucketed by when they were created (the default — measures inquiry volume) or when the requested event would happen (measures demand by event date).
Required permission: reports_read
| interval | string Default: "month" Enum: "year" "quarter" "month" "week" "day" Time-bucket size. Defaults to |
| starts_at | string Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen |
| ends_at | string End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen |
| chart_type | string Default: "created_on" Enum: "created_on" "scheduled_on" Which date drives bucketing. |
| brand_id | integer Limit results to a single brand. Omit to include all brands on the account. |
| Api-Key required | string Your Integration Key |
{- "results": [
- {
- "name": "Jun 2026",
- "lead_count": 0,
- "report_path": "/report/leads?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=06-30-2026&query%5Bstarts_at_start%5D=06-01-2026&query%5Bstatus%5D=not_proposal"
}, - {
- "name": "Jul 2026",
- "lead_count": 0,
- "report_path": "/report/leads?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=07-31-2026&query%5Bstarts_at_start%5D=07-01-2026&query%5Bstatus%5D=not_proposal"
}, - {
- "name": "Aug 2026",
- "lead_count": 0,
- "report_path": "/report/leads?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=08-31-2026&query%5Bstarts_at_start%5D=08-01-2026&query%5Bstatus%5D=not_proposal"
}
]
}Returns the total payments actually collected, bucketed by time interval. Each bucket reports the amount received and the number of distinct payment records that landed in the bucket.
Payments are bucketed by paid_at (when the money was actually received), not by the event date. Refunds and zero-amount records are excluded. Payments tied to archived or recurring template events are excluded. All monetary fields are reported in cents.
Pairs well with revenue_projection_summary: this endpoint answers "how much came in?", the projection endpoint answers "how much do we still expect?".
Required permission: reports_read
| interval | string Default: "month" Enum: "year" "quarter" "month" "week" "day" Time-bucket size. Defaults to |
| starts_at | string Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen |
| ends_at | string End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen |
| brand_id | integer Limit results to a single brand. Omit to include all brands on the account. |
| Api-Key required | string Your Integration Key |
{- "results": [
- {
- "name": "Jun 2026",
- "amount_paid_cents": 0,
- "payment_count": 0,
- "report_path": "/report/event_payments?query%5Bbrand_id%5D=&query%5Bpaid_at_dynamic%5D=custom&query%5Bpaid_at_end%5D=06-30-2026&query%5Bpaid_at_start%5D=06-01-2026"
}, - {
- "name": "Jul 2026",
- "amount_paid_cents": 50000,
- "payment_count": 1,
- "report_path": "/report/event_payments?query%5Bbrand_id%5D=&query%5Bpaid_at_dynamic%5D=custom&query%5Bpaid_at_end%5D=07-31-2026&query%5Bpaid_at_start%5D=07-01-2026"
}, - {
- "name": "Aug 2026",
- "amount_paid_cents": 0,
- "payment_count": 0,
- "report_path": "/report/event_payments?query%5Bbrand_id%5D=&query%5Bpaid_at_dynamic%5D=custom&query%5Bpaid_at_end%5D=08-31-2026&query%5Bpaid_at_start%5D=08-01-2026"
}
]
}Returns the number of proposals, bucketed by time interval. Useful for measuring how many proposals the business is sending out — answering "are we quoting more this quarter?" or "how many proposals went out last week?".
Includes all non-archived proposals (any of proposal_date_reserved, proposal_date_open, or proposal_awaiting_review). Use chart_type to choose whether proposals are bucketed by when they were created (the default — measures sales-team activity) or when the proposed event would happen (measures pipeline by event date).
Required permission: reports_read
| interval | string Default: "month" Enum: "year" "quarter" "month" "week" "day" Time-bucket size. Defaults to |
| starts_at | string Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen |
| ends_at | string End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen |
| chart_type | string Default: "created_on" Enum: "created_on" "scheduled_on" Which date drives bucketing. |
| brand_id | integer Limit results to a single brand. Omit to include all brands on the account. |
| Api-Key required | string Your Integration Key |
{- "results": [
- {
- "name": "Jun 2026",
- "proposal_count": 0,
- "report_path": "/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bcreated_at_dynamic%5D=custom&query%5Bcreated_at_end%5D=06-30-2026&query%5Bcreated_at_start%5D=06-01-2026&query%5Bstatus%5D=ever_proposal"
}, - {
- "name": "Jul 2026",
- "proposal_count": 1,
- "report_path": "/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bcreated_at_dynamic%5D=custom&query%5Bcreated_at_end%5D=07-31-2026&query%5Bcreated_at_start%5D=07-01-2026&query%5Bstatus%5D=ever_proposal"
}, - {
- "name": "Aug 2026",
- "proposal_count": 0,
- "report_path": "/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bcreated_at_dynamic%5D=custom&query%5Bcreated_at_end%5D=08-31-2026&query%5Bcreated_at_start%5D=08-01-2026&query%5Bstatus%5D=ever_proposal"
}
]
}Returns projected revenue for the business, bucketed by time interval. Each bucket reports the amount already collected, the amount still expected from confirmed bookings, the amount that has slipped past due, and the amount tied up in postponed bookings — along with the number of bookings in that interval.
Proposals are excluded. Only confirmed (non-archived) bookings whose earliest_starts_at falls within the bucket contribute to the totals. All monetary fields are reported in cents.
Useful for dashboards, cash-flow forecasting, and answering questions like "how much do we expect to bring in next quarter?" or "how much is past due from last month?".
Required permission: reports_read
| interval | string Default: "month" Enum: "year" "quarter" "month" "week" "day" Time-bucket size for the projection. Defaults to |
| starts_at | string Start of the date range to project over (YYYY-MM-DD). Defaults to one year ago. The range is snapped to the beginning of the chosen |
| ends_at | string End of the date range to project over (YYYY-MM-DD). Defaults to today. The range is snapped to the end of the chosen |
| brand_id | integer Limit the projection to a single brand. Omit to include all brands on the account. |
| Api-Key required | string Your Integration Key |
{- "results": [
- {
- "name": "Jun 2026",
- "amount_paid_cents": 0,
- "projected_cents": 0,
- "postponed_cents": 0,
- "past_due_cents": 0,
- "total_cents": 0,
- "event_count": 0,
- "report_path": "/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=06-30-2026&query%5Bstarts_at_start%5D=06-01-2026&query%5Bstatus%5D=not_proposal"
}, - {
- "name": "Jul 2026",
- "amount_paid_cents": 0,
- "projected_cents": 0,
- "postponed_cents": 0,
- "past_due_cents": 0,
- "total_cents": 0,
- "event_count": 0,
- "report_path": "/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=07-31-2026&query%5Bstarts_at_start%5D=07-01-2026&query%5Bstatus%5D=not_proposal"
}, - {
- "name": "Aug 2026",
- "amount_paid_cents": 0,
- "projected_cents": 0,
- "postponed_cents": 0,
- "past_due_cents": 0,
- "total_cents": 0,
- "event_count": 1,
- "report_path": "/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=08-31-2026&query%5Bstarts_at_start%5D=08-01-2026&query%5Bstatus%5D=not_proposal"
}, - {
- "name": "Sep 2026",
- "amount_paid_cents": 0,
- "projected_cents": 0,
- "postponed_cents": 0,
- "past_due_cents": 0,
- "total_cents": 0,
- "event_count": 0,
- "report_path": "/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=09-30-2026&query%5Bstarts_at_start%5D=09-01-2026&query%5Bstatus%5D=not_proposal"
}
]
}Design Templates available to a specific business. These are templates that have been made available through the App Platform and enabled for the business's account.
Fetch all design templates for a business.
Required permission: design_template_read
| Api-Key required | string Your Integration Key |
{- "data": [
- {
- "id": "65",
- "type": "design_template",
- "attributes": {
- "id": 65,
- "name": "Sample Template",
- "description": "Sample description",
- "video_url": null,
- "number_of_photos": 3,
- "design_category_tag_ids": [ ],
- "design_category_tag_names": [ ],
- "design_category_layout_ids": [ ],
- "design_category_layout_names": [ ],
- "primary_image": {
- "video_variant": null
}, - "additional_images": [ ]
}, - "relationships": {
- "design_template_category": {
- "data": {
- "id": "121",
- "type": "design_template_category"
}
}, - "design_category_tags": {
- "data": [ ]
}, - "design_category_layouts": {
- "data": [ ]
}
}
}
]
}Template Selections track which design templates a business has chosen for their account. Use this endpoint to submit a template selection on behalf of a business.
After a customer chooses a template, this API endpoint should be called.
Required permission: design_template_select
| Api-Key required | string Your Integration Key |
object |
{- "template_selection": {
- "event_booking_id": 0,
- "design_id": 0,
- "user_id": 0,
- "template_name": "string",
- "template_image_url": "string",
- "account_number": "string",
- "template_purchase_url": "string",
- "additional_params": {
- "additional_information": "Please use gold text and the couple's monogram"
}
}
}{- "meta": {
- "status": "ok"
}
}Returns the canonical public URLs for each active brand on the franchise — the online booking flow, sign-in page, availability calendar, mini sessions index, add-on gallery, photo booth backdrop gallery, design template gallery, and team page. Use this when a customer asks "what's the link to my X" or when an agent needs to point a user at the right hosted page.
A franchise can have multiple brands, each with its own custom domain. The response includes one entry per active brand with that brand's links resolved against its primary custom domain.
Required permission: offerings_read
| Api-Key required | string Your Integration Key |
{- "data": [
- {
- "id": "14924",
- "type": "brand_links",
- "attributes": {
- "name": "Farrell and Sons 418",
- "host": "test-418-4051d206.cc.localhost",
- "primary": true,
- "links": {
- "lead_forms": [
- {
- "id": 26,
- "name": "Wedding Inquiry",
- "default": false,
}
], - "appointment_schedulers": [
- {
- "id": 80,
- "title": "30-minute consult",
- "user_id": 5959,
- "user_full_name": "Armando Leannon",
}
]
}
}
}
]
}Returns a paginated list of the authenticated user's own staff check-in shifts, most recent first. Each shift spans a check-in and (once closed) a check-out; a shift whose check_out_at is null is still open (the user is currently checked in). Include ?include=event,notes to embed the linked booking and the shift's notes/photos.
The response includes meta.total_count and meta.per_page for pagination.
Available only when the franchise has staff check-in enabled, and only to staff/admin users.
| page | integer Page number for pagination (default: 1) |
| per | integer Results per page (default: 25, max: 100) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 1,
- "per_page": 25,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "333",
- "type": "staff_check_in",
- "attributes": {
- "check_in_at": "2026-08-13T16:25:03.852-07:00",
- "check_out_at": "2026-08-13T17:25:03.852-07:00",
- "open": false,
- "closed": true,
- "status_label": "Checked out",
- "check_in_at_formatted": "08-13-2026 4:25 PM",
- "check_out_at_formatted": "08-13-2026 5:25 PM",
- "event_title": "Sarah and John's Wedding",
- "duration_seconds": 3600,
- "duration_formatted": "1h 0m",
- "check_in_latitude": null,
- "check_in_longitude": null,
- "check_in_location_accuracy": null,
- "check_in_location_available": false,
- "check_out_latitude": null,
- "check_out_longitude": null,
- "check_out_location_accuracy": null,
- "check_out_location_available": false
}, - "relationships": {
- "user": {
- "data": {
- "id": "6085",
- "type": "user"
}
}, - "event": {
- "data": {
- "id": "3819",
- "type": "event"
}
}, - "submitted_by": {
- "data": {
- "id": "6085",
- "type": "user"
}
}, - "notes": {
- "data": [ ]
}
}
}
]
}Records a staff punch for the authenticated user. One endpoint drives all three actions via kind:
check_in — open a new shift. Fails if the user already has an open shift.check_out — close the user's currently-open shift.status_update — add a note and/or photo to the open shift (a note or attachment is required).event_id optionally links the shift to a booking (there is no assignment gate — any staffer may check in to any event, or none). Location (latitude, longitude, location_accuracy) is best-effort — omit it and the punch still succeeds. Times are always server-stamped; any client-supplied time is ignored. note and attachments (ActiveStorage signed ids) may accompany a check-in or check-out too, and are stored as a note on the shift.
Available only when the franchise has staff check-in enabled, and only to staff/admin users.
| Api-Key required | string Your Integration Key |
| kind required | string Enum: "check_in" "check_out" "status_update" The punch type |
| event_id | integer Optional booking (Event) to link the shift to |
| latitude | number Best-effort latitude at the moment of the punch |
| longitude | number Best-effort longitude at the moment of the punch |
| location_accuracy | number Best-effort location accuracy in meters |
| note | string Optional note (required for status_update if no attachment) |
| attachments | Array of strings ActiveStorage signed ids for photos/files |
{- "kind": "check_in",
- "event_id": 0,
- "latitude": 0,
- "longitude": 0,
- "location_accuracy": 0,
- "note": "string",
- "attachments": [
- "string"
]
}{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "334",
- "type": "staff_check_in",
- "attributes": {
- "check_in_at": "2026-08-13T17:25:03.974-07:00",
- "check_out_at": null,
- "open": true,
- "closed": false,
- "status_label": "Checked in",
- "check_in_at_formatted": "08-13-2026 5:25 PM",
- "check_out_at_formatted": null,
- "event_title": "Sarah and John's Wedding",
- "duration_seconds": 0.001477,
- "duration_formatted": "0h 0m",
- "check_in_latitude": null,
- "check_in_longitude": null,
- "check_in_location_accuracy": null,
- "check_in_location_available": false,
- "check_out_latitude": null,
- "check_out_longitude": null,
- "check_out_location_accuracy": null,
- "check_out_location_available": false
}, - "relationships": {
- "user": {
- "data": {
- "id": "6086",
- "type": "user"
}
}, - "event": {
- "data": {
- "id": "3820",
- "type": "event"
}
}, - "submitted_by": {
- "data": {
- "id": "6086",
- "type": "user"
}
}, - "notes": {
- "data": [ ]
}
}
}
}Returns one of the authenticated user's own check-in shifts. Include ?include=notes to embed the shift's notes/photos. A shift belonging to another user is not accessible.
| id required | integer The check-in shift ID |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "336",
- "type": "staff_check_in",
- "attributes": {
- "check_in_at": "2026-08-13T16:25:04.077-07:00",
- "check_out_at": "2026-08-13T17:25:04.077-07:00",
- "open": false,
- "closed": true,
- "status_label": "Checked out",
- "check_in_at_formatted": "08-13-2026 4:25 PM",
- "check_out_at_formatted": "08-13-2026 5:25 PM",
- "event_title": null,
- "duration_seconds": 3600,
- "duration_formatted": "1h 0m",
- "check_in_latitude": null,
- "check_in_longitude": null,
- "check_in_location_accuracy": null,
- "check_in_location_available": false,
- "check_out_latitude": null,
- "check_out_longitude": null,
- "check_out_location_accuracy": null,
- "check_out_location_available": false
}, - "relationships": {
- "user": {
- "data": {
- "id": "6088",
- "type": "user"
}
}, - "event": {
- "data": null
}, - "submitted_by": {
- "data": {
- "id": "6088",
- "type": "user"
}
}, - "notes": {
- "data": [ ]
}
}
}
}Returns published, non-internal Check Cherry help center articles. Use this to answer customer questions about how the platform works (booking flow, payments, leads, integrations, etc.) instead of guessing.
Filter by category to scope the list, or pass text to run a full-text search across the article title, body, and meta description. When text is present results are ranked by relevance; otherwise articles are returned in display order within their category.
Required permission: global
| text | string Full-text search query across article title, body, and meta description |
| category | string Filter by article category (e.g., bookings, leads, payments) |
| page | integer Page number (default: 1) |
| per | integer Results per page (default: 20) |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok",
- "total_count": 2,
- "per_page": 20,
- "page": 1,
- "total_pages": 1
}, - "data": [
- {
- "id": "238",
- "type": "support_article",
- "attributes": {
- "title": "How to create a booking",
- "slug": "how-to-create-a-booking",
- "category": "bookings",
- "category_label": "Bookings",
- "meta_description": "Ut esse quae culpa.",
- "body_text": "Aut sunt recusandae. Accusamus sint possimus. Quia rerum adipisci. Section Step one. Step two.",
- "body_html": "<p>Aut sunt recusandae. Accusamus sint possimus. Quia rerum adipisci.</p>\n<h2 id=\"section\">Section</h2>\n<div class=\"steps\"><div class=\"step\"><div class=\"step-content\">Step one.</div></div>\n<div class=\"step\"><div class=\"step-content\">Step two.</div></div></div>",
- "published_at": "2026-08-13T17:25:04.244-07:00",
- "updated_at": "2026-08-13T17:25:04.245-07:00"
}
}, - {
- "id": "239",
- "type": "support_article",
- "attributes": {
- "title": "Lead capture forms",
- "slug": "lead-capture-forms",
- "category": "leads",
- "category_label": "Leads",
- "meta_description": "Fuga et quia dolorem.",
- "body_text": "Deleniti hic eum. Rerum est molestias. Et eaque consequuntur. Section Step one. Step two.",
- "body_html": "<p>Deleniti hic eum. Rerum est molestias. Et eaque consequuntur.</p>\n<h2 id=\"section\">Section</h2>\n<div class=\"steps\"><div class=\"step\"><div class=\"step-content\">Step one.</div></div>\n<div class=\"step\"><div class=\"step-content\">Step two.</div></div></div>",
- "published_at": "2026-08-13T17:25:04.246-07:00",
- "updated_at": "2026-08-13T17:25:04.246-07:00"
}
}
]
}Returns a single published help center article by its slug. The response includes both a plain-text body (best for AI assistants to read) and a rendered HTML body (for display).
Required permission: global
| slug required | string The article's URL slug |
| Api-Key required | string Your Integration Key |
{- "meta": {
- "status": "ok"
}, - "data": {
- "id": "240",
- "type": "support_article",
- "attributes": {
- "title": "How to create a booking",
- "slug": "how-to-create-a-booking",
- "category": "bookings",
- "category_label": "Bookings",
- "meta_description": "Vel consequatur omnis iste.",
- "body_text": "Eum dolor dolorem. Odio et dolores. Iste quibusdam voluptatem. Section Step one. Step two.",
- "body_html": "<p>Eum dolor dolorem. Odio et dolores. Iste quibusdam voluptatem.</p>\n<h2 id=\"section\">Section</h2>\n<div class=\"steps\"><div class=\"step\"><div class=\"step-content\">Step one.</div></div>\n<div class=\"step\"><div class=\"step-content\">Step two.</div></div></div>",
- "published_at": "2026-08-13T17:25:04.313-07:00",
- "updated_at": "2026-08-13T17:25:04.314-07:00"
}
}
}