Check Cherry Business API (v1)

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.

Getting Started

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:

  1. Log in to your Check Cherry account
  2. Navigate to Manage → Business Settings → Integrations
  3. Create a new Integration Key
  4. Copy the key (it starts with ik_) and use it to authenticate your requests

Each 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:

  • Additive changes happen without notice. New fields, endpoints, and optional parameters may appear at any time. Your integration should ignore unknown fields rather than breaking on them.
  • We will try to give 30 days notice for breaking changes (removing or renaming fields, changing response structure, removing endpoints), but this is best-effort, not a guarantee.
  • Build defensively. Don't assume field lists are frozen. Don't break on unknown fields or new enum values.

Authentication

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:

  • Your key is your identity. Anyone with your integration key has full access to your Check Cherry account. You are responsible for all activity that occurs using your key.
  • Keep your key secret. Never expose integration keys in client-side code, public repositories, or anywhere they could be accessed by unauthorized parties.
  • HTTPS only. All API requests must be made over HTTPS. Plain HTTP requests will be rejected.
  • Rotate and revoke. If a key may have been compromised, revoke it immediately from Business Settings and create a new one. Don't reuse keys across unrelated integrations.
  • Store keys securely. Use environment variables or a secrets manager — never commit keys to source control or store them in plain text.
  • Monitor usage. Keys track last-used timestamps. Review your active keys periodically and revoke any that are no longer in use.

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.

Making Requests

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 }
}

Support

Check Cherry support can help with:

  • Account and billing issues
  • Integration key management (creating, revoking)
  • Reporting bugs or unexpected behavior in the API

Check Cherry support cannot help with:

  • Building or designing your custom integration
  • Debugging your application code
  • Troubleshooting third-party libraries or frameworks

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

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.

Fetch booking question answers for a lead

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

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Update booking question answers for a lead

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

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
required
object

Keys are booking-question column names; values are the answer to record.

Responses

Request samples

Content type
application/json
{
  • "custom_questions": { }
}

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Add a lead to the database

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 employee_id field assigns a staff member as the host/owner of the lead for follow-up purposes.

Required permission: lead_create

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

employee_id
integer

Staff member ID to assign as lead owner

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

Responses

Request samples

Content type
application/json
{
  • "first_name": "string",
  • "last_name": "string",
  • "email": "string",
  • "phone": "string",
  • "company_name": "string",
  • "employee_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": { }
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch all leads

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

query Parameters
email
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)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Update a lead

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

path Parameters
lead_id
required
integer

The unique ID of the lead to update

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
first_name
string

Contact first name

last_name
string

Contact last name

email
string

Contact email address

phone
string

Contact phone number

company_name
string

Business or organization name

employee_id
integer

Staff member ID to assign as lead owner

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

Responses

Request samples

Content type
application/json
{
  • "first_name": "string",
  • "last_name": "string",
  • "email": "string",
  • "phone": "string",
  • "company_name": "string",
  • "employee_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": { }
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch lead by ID

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

path Parameters
lead_id
required
integer

The unique ID of the lead to retrieve

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Archive a lead

Marks a lead as archived. Archived leads are hidden from the default lead list.

Required permission: lead_write

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Unarchive a lead

Restores an archived lead back to the active lead list.

Required permission: lead_write

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Flag a lead as spam

Marks a lead as spam. Spam leads are filtered out of the default lead list.

Required permission: lead_write

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Unflag a lead as spam

Removes the spam flag from a lead, restoring it to the active lead list.

Required permission: lead_write

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Remove converted-to-event flag

Removes the "converted to event" flag from a lead, indicating it has not yet been converted.

Required permission: lead_write

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Enable automated messages

Enables automated messages (emails, texts) for this lead. When enabled, the lead will receive any configured automated follow-up sequences.

Required permission: lead_write

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Disable automated messages

Disables automated messages for this lead. The lead will no longer receive automated follow-up sequences.

Required permission: lead_write

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Add a note to a lead

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

path Parameters
lead_id
required
integer

The unique ID of the lead

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
note
required
string

The note text to add

next_follow_up_on
string

Set or update the next follow-up date (YYYY-MM-DD)

Responses

Request samples

Content type
application/json
{
  • "note": "string",
  • "next_follow_up_on": "string"
}

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Proposals/Confirmed Bookings

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.

Fetch booking question answers for an event

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

path Parameters
event_id
required
integer

The unique ID of the event

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Update booking question answers for an event

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

path Parameters
event_id
required
integer

The unique ID of the event

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
required
object

Keys are booking-question column names; values are the answer to record.

Responses

Request samples

Content type
application/json
{
  • "custom_questions": { }
}

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Fetch all event bookings

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

query Parameters
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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch event booking by ID

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

path Parameters
event_booking_id
required
integer

Event Booking ID

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Assign a staff member to an event

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.

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

path Parameters
event_id
required
integer

The ID of the event to assign the staff member to

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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")

Responses

Request samples

Content type
application/json
{
  • "staff_id": 0,
  • "role": "string"
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Remove a staff member from an event

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

path Parameters
event_id
required
integer

The ID of the event the assignment belongs to

id
required
integer

The unique ID of the EventStaffMember assignment

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Fetch all events

Returns a paginated list of events for the specified business. Results can be filtered by status, date range, package, and text search.

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.

Required permission: assigned_event_read or unassigned_event_read

query Parameters
event_status
string

Status filter

past_or_future
string

When filter

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)

package_id
integer

Package ID

text
string

Text Search

sort_by
string

Sort Order

page
integer

Page number for pagination (default: 1)

per
integer

Number of results per page (default: 25)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Create an event

Required permission: event_create

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
is_proposal
boolean

Set to true to create a proposal

proposal_date_reserved
boolean

Reserve the date?

signature_collected
boolean

Has signature been collected?

contact_type
required
string

Contact Type

contact_name
string

Contact's Name

contact_email
string

Contact's Email

contact_phone
string

Contact's Phone

send_contact_invitation_to_create_account
boolean
send_booking_confirmation_emails
boolean
Array of objects

Responses

Request samples

Content type
application/json
{
  • "is_proposal": true,
  • "proposal_date_reserved": true,
  • "signature_collected": true,
  • "contact_type": "string",
  • "contact_name": "string",
  • "contact_email": "string",
  • "contact_phone": "string",
  • "send_contact_invitation_to_create_account": true,
  • "send_booking_confirmation_emails": true,
  • "quick_event_bookings_attributes": [
    ]
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch event by ID

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.

Required permission: assigned_event_read or unassigned_event_read

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Update an event

Required permission: assigned_event_write or unassigned_event_write

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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)

Responses

Request samples

Content type
application/json
{
  • "public_notes": "string",
  • "photo_album_url": "string",
  • "photo_album_instructions": "string",
  • "video_url": "string",
  • "video_album_instructions": "string",
  • "next_follow_up_on": "string"
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Delete an event

Required permission: assigned_event_write or unassigned_event_write

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Update event location

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

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Update event status

Update the status of an event (e.g. convert a proposal to a confirmed booking).

Required permission: assigned_event_write or unassigned_event_write

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "status": "string",
  • "postponed": true,
  • "canceled": true,
  • "send_booking_confirmation_emails": true,
  • "send_contact_invitation_to_create_account": true
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Update event settings

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

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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)

brand_id
integer

Brand ID

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "due_at": "string",
  • "invoice_date": "string",
  • "proposal_valid_through": "string",
  • "custom_deposit_amount": 0,
  • "tax_rate": 0,
  • "brand_id": 0
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Cancel an event

Cancel an event with an optional reason and option to send cancellation messages to contacts.

Required permission: assigned_event_write or unassigned_event_write

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
cancel_reason
string

Reason for cancellation

send_cancellation_messages
boolean

Send cancellation messages to contacts

Responses

Request samples

Content type
application/json
{
  • "cancel_reason": "string",
  • "send_cancellation_messages": true
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Uncancel an event

Remove the canceled status from a previously canceled event.

Required permission: assigned_event_write or unassigned_event_write

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Postpone an event

Mark an event as postponed.

Required permission: assigned_event_write or unassigned_event_write

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Unpostpone an event

Remove the postponed status from a previously postponed event.

Required permission: assigned_event_write or unassigned_event_write

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Approve a proposal awaiting review

Approve a proposal that is currently in the awaiting review state.

Required permission: assigned_event_write or unassigned_event_write

path Parameters
event_id
required
integer

Event ID

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Add a note to a booking

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

path Parameters
event_id
required
integer

The unique ID of the booking

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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)

Responses

Request samples

Content type
application/json
{
  • "note": "string",
  • "next_follow_up_on": "string"
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Update a booking note

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)

path Parameters
event_id
required
integer

The unique ID of the booking

id
required
integer

The unique ID of the note

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
content
required
string

The new note text (private internal note, staff-only)

Responses

Request samples

Content type
application/json
{
  • "content": "string"
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Delete a booking note

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)

path Parameters
event_id
required
integer

The unique ID of the booking

id
required
integer

The unique ID of the note

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Appointments

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.

Fetch booking question answers for an appointment

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

path Parameters
appointment_id
required
integer

The unique ID of the appointment

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Update booking question answers for an appointment

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

path Parameters
appointment_id
required
integer

The unique ID of the appointment

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
required
object

Keys are booking-question column names; values are the answer to record.

Responses

Request samples

Content type
application/json
{
  • "custom_questions": { }
}

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Fetch all appointments

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

query Parameters
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)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Create an 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

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "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"
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch an appointment by ID

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

path Parameters
id
required
integer

The unique ID of the appointment

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Update an 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

path Parameters
id
required
integer

The unique ID of the appointment

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Delete an appointment

Soft-deletes an appointment. The appointment is marked as deleted but not permanently removed.

Required permission: assigned_appointment_write or unassigned_appointment_write

path Parameters
id
required
integer

The unique ID of the appointment

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Cancel an appointment

Cancels an appointment and sends cancellation notifications to the guest.

Required permission: assigned_appointment_write or unassigned_appointment_write

path Parameters
id
required
integer

The unique ID of the appointment

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Uncancel an appointment

Restores a previously canceled appointment.

Required permission: assigned_appointment_write or unassigned_appointment_write

path Parameters
id
required
integer

The unique ID of the appointment

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Duplicate an 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

path Parameters
id
required
integer

The unique ID of the appointment to duplicate

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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")

Responses

Request samples

Content type
application/json
{
  • "starts_at_date": "string",
  • "starts_at_time": "string"
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Availability

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.

Check availability for a date

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

query Parameters
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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Check detailed availability

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

query Parameters
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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "available": true,
  • "messages": [ ],
  • "overlapping_bookings": [ ]
}

Fetch available time slots for a date

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

query Parameters
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)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Fetch available appointment slots

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

query Parameters
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)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Packages & Services

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.

Fetch all services

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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch a service by ID

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

path Parameters
id
required
integer

The unique ID of the service

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Fetch all packages

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

query Parameters
visibility
string

Filter by visibility (e.g., 'public_only')

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Fetch a package by ID

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

path Parameters
id
required
integer

The unique ID of the package

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch all package groups

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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Fetch package group by ID

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

path Parameters
id
required
integer

The unique ID of the package group

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Add-Ons

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.

Fetch all add-on categories

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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch an add-on category by ID

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

path Parameters
id
required
integer

The unique ID of the add-on category

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Fetch all add-ons

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

query Parameters
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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch an add-on by ID

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

path Parameters
id
required
integer

The unique ID of the add-on

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Backdrops

Photo booth backdrops available for events. Backdrops are organized into categories and include pricing, images, and optional video previews.

Fetch all backdrop categories

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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch a backdrop category by ID

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

path Parameters
id
required
integer

The unique ID of the backdrop category

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Fetch all backdrops

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

query Parameters
text
string

Search backdrops by name

only_widget_visible
boolean

Only return backdrops visible on the booking widget

order
string

Sort order for results

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{}

Fetch a backdrop by ID

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

path Parameters
id
required
integer

The unique ID of the backdrop

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{}

Extras

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.

Fetch all extra categories

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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch an extra category by ID

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

path Parameters
id
required
integer

The unique ID of the extra category

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Fetch all extras

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

query Parameters
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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch an extra by ID

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

path Parameters
id
required
integer

The unique ID of the extra

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Expenses

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.

Fetch all expense categories

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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch expense category by ID

Returns the details of a single expense category.

Required permission: expense_read

path Parameters
id
required
integer

The unique ID of the expense category

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch all expenses

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

query Parameters
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:

  • paid_at_asc
  • paid_at_desc
  • relevance
page
integer

Page number for pagination (default: 1)

per
integer

Number of results per page (default: 50)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Create an expense

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

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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)

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch expense by ID

Returns the full details of a single expense record.

Required permission: expense_read

path Parameters
id
required
integer

The unique ID of the expense

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Update an expense

Update an existing expense record.

Required permission: expense_write

path Parameters
id
required
integer

The unique ID of the expense

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "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
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Delete an expense

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

path Parameters
id
required
integer

The unique ID of the expense

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Checklists

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:

  • Event checklists are tied to a confirmed booking or proposal and usually capture the work surrounding that one event.
  • User checklists are personal task lists scoped to a single staff member. There is at most one per user and it is created lazily the first time the owner views it.
  • Franchise checklists (the "Shared Checklist") are scoped to the franchise and shared across the team.

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.

Fetch checklist categories

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.

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch checklist items

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.

query Parameters
checklist_id
integer

Filter to items on a single checklist

checkable_type
string

Filter to items whose checklist is attached to this type:

  • Event
  • User
  • Franchise
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)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Create a checklist item

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.

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "notes": "string",
  • "due_on": "string",
  • "checklist_id": 0,
  • "checked": true,
  • "user_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch checklist item by ID

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.

path Parameters
id
required
integer

The unique ID of the checklist item

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Update a checklist item

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.

path Parameters
id
required
integer

The unique ID of the checklist item

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "notes": "string",
  • "due_on": "string",
  • "checked": true,
  • "user_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Delete a checklist item

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.

path Parameters
id
required
integer

The unique ID of the checklist item

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Move a checklist item to a new position

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.

path Parameters
id
required
integer

The unique ID of the checklist item

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
position
required
integer

Zero-indexed position to move the item to

Responses

Request samples

Content type
application/json
{
  • "position": 0
}

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Mark a checklist item as checked

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.

path Parameters
id
required
integer

The unique ID of the checklist item

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Mark a checklist item as unchecked

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.

path Parameters
id
required
integer

The unique ID of the checklist item

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch checklists

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.

query Parameters
event_id
integer

Filter checklists by event ID

page
integer

Page number (default: 1)

per
integer

Results per page (default: 50)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Create a checklist

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.

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
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

Responses

Request samples

Content type
application/json
{
  • "event_id": 0,
  • "checklist_category_id": 0
}

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Fetch checklist by ID

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.

path Parameters
id
required
integer

The unique ID of the checklist

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Delete a checklist

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.

path Parameters
id
required
integer

The unique ID of the checklist

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Reset a checklist

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.

path Parameters
id
required
integer

The unique ID of the checklist

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Payments

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.

Fetch all payments

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

query Parameters
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)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch payment by ID

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

path Parameters
id
required
integer

The unique ID of the payment to retrieve

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}

Reporting

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.

Booked-on summary

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

query Parameters
interval
string
Default: "month"
Enum: "year" "quarter" "month" "week" "day"

Time-bucket size. Defaults to month.

starts_at
string

Start of the date range (YYYY-MM-DD), applied against booked_at. Defaults to one year ago. Snapped to the beginning of the chosen interval.

ends_at
string

End of the date range (YYYY-MM-DD), applied against booked_at. Defaults to today. Snapped to the end of the chosen interval.

brand_id
integer

Limit results to a single brand. Omit to include all brands on the account.

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "results": [
    ]
}

Lead count summary

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

query Parameters
interval
string
Default: "month"
Enum: "year" "quarter" "month" "week" "day"

Time-bucket size. Defaults to month.

starts_at
string

Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen interval.

ends_at
string

End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen interval.

chart_type
string
Default: "created_on"
Enum: "created_on" "scheduled_on"

Which date drives bucketing. created_on (default) buckets by lead creation date. scheduled_on buckets by the lead's requested event date.

brand_id
integer

Limit results to a single brand. Omit to include all brands on the account.

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "results": [
    ]
}

Payment receipt summary

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

query Parameters
interval
string
Default: "month"
Enum: "year" "quarter" "month" "week" "day"

Time-bucket size. Defaults to month.

starts_at
string

Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen interval.

ends_at
string

End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen interval.

brand_id
integer

Limit results to a single brand. Omit to include all brands on the account.

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "results": [
    ]
}

Proposal count summary

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

query Parameters
interval
string
Default: "month"
Enum: "year" "quarter" "month" "week" "day"

Time-bucket size. Defaults to month.

starts_at
string

Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen interval.

ends_at
string

End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen interval.

chart_type
string
Default: "created_on"
Enum: "created_on" "scheduled_on"

Which date drives bucketing. created_on (default) buckets by proposal creation date. scheduled_on buckets by the proposal's event date.

brand_id
integer

Limit results to a single brand. Omit to include all brands on the account.

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "results": [
    ]
}

Revenue projection summary

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

query Parameters
interval
string
Default: "month"
Enum: "year" "quarter" "month" "week" "day"

Time-bucket size for the projection. Defaults to month.

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 interval.

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 interval.

brand_id
integer

Limit the projection to a single brand. Omit to include all brands on the account.

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "results": [
    ]
}

Design Templates

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

Fetch all design templates for a business.

Required permission: design_template_read

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Fetch all design templates with includes

Can fetch categories and tags for design templates.

Required permission: design_template_read

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "included": [
    ]
}

Template Selections

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.

Submit a template selection

After a customer chooses a template, this API endpoint should be called.

Required permission: design_template_select

header Parameters
Api-Key
required
string

Your Integration Key

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{
  • "template_selection": {
    }
}

Response samples

Content type
application/json
{
  • "meta": {
    }
}

Brands

List public-facing links for every brand on the account

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

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{}

Support Articles

Search and list help center articles

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

query Parameters
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)

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": [
    ]
}

Fetch a help center article by slug

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

path Parameters
slug
required
string

The article's URL slug

header Parameters
Api-Key
required
string

Your Integration Key

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "data": {
    }
}