{"openapi":"3.0.1","info":{"title":"Check Cherry Business API","version":"v1","description":"The Check Cherry Business API allows automated access to events, leads, bookings,\nand other business-specific features for individual Check Cherry accounts.\n\n## Getting Started\n\n**Base URL** — All API requests should be made to:\n\n```\nhttps://api.checkcherry.com/api/v1/\n```\n\nAll endpoints in this documentation are relative to this base URL.\n\n**Setup:**\n\n1. Log in to your Check Cherry account\n2. Navigate to **Manage → Business Settings → Integrations → API Overview → API Keys**\n3. Create a new **Integration Key** and select the permissions it should have\n4. Copy the key (it starts with `ik_`) and use it to authenticate your requests\n\nEach integration key is tied to the user who created it, providing an audit trail.\nYou can create multiple keys and revoke them individually.\n\n**Permissions:**\n\nEvery key carries its own set of permissions, chosen when you create it and\neditable at any time. A key can never exceed the permissions of the user who\ncreated it, but it can be narrower. Grant only what the integration needs.\n\nPermissions are per resource and split into read and write, so a read-only key is\na matter of selecting read permissions only. Use **Toggle all read** on the key's\nedit page to do that in one step. Viewing pricing is its own permission\n(`assigned_event_read_pricing` / `unassigned_event_read_pricing`), independent of\nthe permission to edit bookings.\n\nEach endpoint below lists the permission it requires. A request the key is not\npermitted to make returns `403`, and fields the key is not permitted to read\n(pricing, for example) come back as `null`.\n\n**Versioning & Stability** — This API is under active development. The API surface\nwill evolve as we ship new features and improve existing ones. Please build your\nintegrations with this in mind:\n\n- **Additive changes happen without notice.** New fields, endpoints, and optional\n  parameters may appear at any time. Your integration should ignore unknown fields\n  rather than breaking on them.\n- **We will try to give 30 days notice for breaking changes** (removing or renaming\n  fields, changing response structure, removing endpoints), but this is best-effort,\n  not a guarantee.\n- **Build defensively.** Don't assume field lists are frozen. Don't break on unknown\n  fields or new enum values.\n\n## Authentication\n\nPass your integration key as an `Api-Key` HTTP header with every request:\n\n```\ncurl -H \"Api-Key: ik_your_key_here\" https://api.checkcherry.com/api/v1/leads\n```\n\nThe key identifies both the business and the user automatically.\n\n**Security:**\n\n- **Your key is your identity.** Anyone with your integration key has full access\n  to your Check Cherry account. You are responsible for all activity that occurs\n  using your key.\n- **Keep your key secret.** Never expose integration keys in client-side code,\n  public repositories, or anywhere they could be accessed by unauthorized parties.\n- **HTTPS only.** All API requests must be made over HTTPS. Plain HTTP requests\n  will be rejected.\n- **Rotate and revoke.** If a key may have been compromised, revoke it immediately\n  from Business Settings and create a new one. Don't reuse keys across unrelated\n  integrations.\n- **Store keys securely.** Use environment variables or a secrets manager — never\n  commit keys to source control or store them in plain text.\n- **Monitor usage.** Keys track last-used timestamps. Review your active keys\n  periodically and revoke any that are no longer in use.\n\nCheck Cherry reserves the right to revoke any API key or suspend any account\nthat appears to be compromised, is being used in violation of our terms of service,\nor is abusing the platform. This includes but is not limited to excessive requests,\nunauthorized data access, or any activity that degrades the service for other users.\n\n## Making Requests\n\n**Request format** — Send JSON request bodies with the `Content-Type: application/json`\nheader for POST, PUT, and PATCH requests.\n\n**Response format** — All responses follow the [JSON:API](https://jsonapi.org/) format:\n\n```json\n{\n  \"data\": {\n    \"id\": \"123\",\n    \"type\": \"lead\",\n    \"attributes\": { \"first_name\": \"Jane\", \"email\": \"jane@example.com\" },\n    \"relationships\": { ... }\n  }\n}\n```\n\nError responses use this structure:\n\n```json\n{\n  \"meta\": { \"status\": \"error\" },\n  \"status\": \"unauthorized\",\n  \"reason\": \"api_key_missing\",\n  \"message\": \"API key is required\"\n}\n```\n\n**Pagination** — List endpoints support pagination via `page` and `per` query parameters.\nResponses include a `meta` object with pagination details:\n\n```json\n{\n  \"data\": [ ... ],\n  \"meta\": { \"total_count\": 142, \"per_page\": 25, \"page\": 1, \"total_pages\": 6 }\n}\n```\n\nStop paging once `page` reaches `total_pages`. Requesting a page beyond the end\nof the result set is not useful, and the search index cannot reach past the\nfirst 10,000 results however you page to them.\n\n## What's New\n\nThis API is versioned `v1` and that version does not move — we add endpoints and\nfields rather than break integrations that work. New endpoints, new fields, and\nnewly documented behavior are listed at\n[checkcherry.com/api/changelog](https://www.checkcherry.com/api/changelog).\n\n## Support\n\nCheck Cherry support can help with:\n\n- Account and billing issues\n- Integration key management (creating, revoking)\n- Reporting bugs or unexpected behavior in the API\n\nCheck Cherry support **cannot** help with:\n\n- Building or designing your custom integration\n- Debugging your application code\n- Troubleshooting third-party libraries or frameworks\n\nYou are responsible for developing and maintaining your own integrations. These\nAPI docs include endpoint descriptions, parameter details, and response examples —\nwe recommend using them alongside AI coding assistants (such as ChatGPT or Claude)\nto help build and troubleshoot your integration.\n\nFor platform issues, contact `support@checkcherry.com`.\n\n**Rate limiting** — Check Cherry enforces rate limits on API requests, and typical\nusage should not encounter them. If a limit is exceeded, Check Cherry returns a\n`429 Too Many Requests` with a `Retry-After` header. Back off and retry after that\ndelay. Intentional or repeated abuse of rate limits may result in your API key being\nrevoked or your account being suspended.\n"},"paths":{"/api/v1/add_on_categories":{"get":{"summary":"Fetch all add-on categories","tags":["Add-Ons"],"description":"Returns all active add-on categories for the business, ordered by position.\n\nAdd-on categories organize add-ons into logical groups (e.g., \"Lighting\", \"Equipment Upgrades\"). Each category contains one or more add-ons.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `add_ons`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"add-on categories found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"77","type":"add_on_category","attributes":{"id":77,"name":"Lighting","position":1},"relationships":{"add_ons":{"data":[]}}},{"id":"78","type":"add_on_category","attributes":{"id":78,"name":"Equipment Upgrades","position":2},"relationships":{"add_ons":{"data":[]}}}]}}}}}},"post":{"summary":"Create an add-on category","tags":["Add-Ons"],"description":"Creates a new add-on category for the business. Add-on categories organize add-ons into logical groups (e.g., \"Lighting\", \"Equipment Upgrades\"). New categories are appended to the end of the category list.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"add-on category created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"79","type":"add_on_category","attributes":{"id":79,"name":"Lighting","position":1},"relationships":{"add_ons":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the add-on category"}},"required":["name"]}}}}}},"/api/v1/add_on_categories/{id}":{"get":{"summary":"Fetch an add-on category by ID","tags":["Add-Ons"],"description":"Returns the details of a single add-on category, including its name and position.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `add_ons`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the add-on category","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"add-on category found","content":{"application/json":{"example":{"data":{"id":"80","type":"add_on_category","attributes":{"id":80,"name":"Lighting","position":1},"relationships":{"add_ons":{"data":[]}}}}}}}}},"put":{"summary":"Update an add-on category","tags":["Add-Ons"],"description":"Updates an existing add-on category. Currently the category `name` is the only editable field.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the add-on category to update","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"add-on category updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"81","type":"add_on_category","attributes":{"id":81,"name":"Lighting & Effects","position":1},"relationships":{"add_ons":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the add-on category"}}}}}}},"delete":{"summary":"Delete an add-on category","tags":["Add-Ons"],"description":"Deletes an add-on category. The category and all of the add-ons within it are removed together. Existing bookings that already include those add-ons are unaffected.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the add-on category to delete","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"add-on category deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/add_ons":{"get":{"summary":"Fetch all add-ons","tags":["Add-Ons"],"description":"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).\n\nResults can be filtered by text search, widget visibility, category, and sort order.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"text","in":"query","description":"Search add-ons by name","required":false,"schema":{"type":"string"}},{"name":"only_widget_visible","in":"query","description":"Only return add-ons visible on the booking widget","required":false,"schema":{"type":"boolean"}},{"name":"order","in":"query","description":"Sort order for results","required":false,"schema":{"type":"string"}},{"name":"category_ids[]","in":"query","items":{"type":"integer"},"description":"Filter by add-on category IDs","required":false,"schema":{"type":"array"}}],"responses":{"200":{"description":"add-ons found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"57","type":"add_on","attributes":{"id":57,"name":"Uplighting Package","description":"Thousands of bubbles ready for that special moment","position":1,"price_method":"flat_rate","third_party_video_id":null,"price":"10.00","price_cents":1000,"price_currency":"USD","price_formatted":"$10","hourly_price":"0.00","hourly_price_cents":0,"hourly_price_currency":"USD","hourly_price_formatted":"$0","daily_price":"0.00","daily_price_cents":0,"daily_price_currency":"USD","daily_price_formatted":"$0","primary_image":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png","url":null,"content_type":null},"additional_images":[]},"relationships":{"add_on_category":{"data":{"id":"83","type":"add_on_category"}}}}]}}}}}},"post":{"summary":"Create an add-on","tags":["Add-Ons"],"description":"Creates a new add-on within an add-on category. Add-ons are optional upgrades or equipment customers can add to a booking.\n\nThe `add_on_category_id` of the parent category is required, along with a `name` and a `description`. Pricing defaults to a flat rate of 0 — set `price_method` and the matching price field to charge for it. New add-ons are appended to the end of the category.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"add-on created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"58","type":"add_on","attributes":{"id":58,"name":"Uplighting Package","description":"Color-matched uplighting around the room","position":1,"price_method":"flat_rate","third_party_video_id":null,"price":"250.00","price_cents":25000,"price_currency":"USD","price_formatted":"$250","hourly_price":"0.00","hourly_price_cents":0,"hourly_price_currency":"USD","hourly_price_formatted":"$0","daily_price":"0.00","daily_price_cents":0,"daily_price_currency":"USD","daily_price_formatted":"$0","primary_image":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png","url":null,"content_type":null},"additional_images":[]},"relationships":{"add_on_category":{"data":{"id":"84","type":"add_on_category"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"add_on_category_id":{"type":"integer","description":"ID of the parent add-on category this add-on belongs to"},"name":{"type":"string","description":"The name of the add-on (e.g., \"Uplighting Package\")"},"description":{"type":"string","description":"Customer-facing description of the add-on"},"status":{"type":"string","description":"Whether the add-on is active or archived","enum":["Active","Archived"]},"price_method":{"type":"string","description":"How the add-on is priced","enum":["flat_rate","hourly","daily"]},"price":{"type":"number","description":"Flat-rate price in dollars (used when price_method is flat_rate)"},"hourly_price":{"type":"number","description":"Per-hour price in dollars (used when price_method is hourly)"},"daily_price":{"type":"number","description":"Per-day price in dollars (used when price_method is daily)"},"taxable":{"type":"boolean","description":"Whether the add-on is taxable"},"maximum_quantity":{"type":"integer","description":"Maximum quantity a customer can book (must be >= 1)"},"multiply_by_number_of_units":{"type":"boolean","description":"Multiply the price by the quantity booked"},"visible_on_widget":{"type":"boolean","description":"Whether the add-on is shown on the booking widget"},"adds_minutes_to_event_length":{"type":"boolean","description":"Whether booking this add-on extends the event length"},"minutes_to_be_added_to_event_length":{"type":"integer","description":"Minutes added to the event length when adds_minutes_to_event_length is true"},"requires_lead_time":{"type":"boolean","description":"Whether the add-on requires advance lead time to book"},"lead_time_days":{"type":"integer","description":"Required lead time in days (when requires_lead_time is true)"},"video_url":{"type":"string","description":"YouTube URL for a demo video of the add-on"}},"required":["add_on_category_id","name","description"]}}}}}},"/api/v1/add_ons/{id}":{"get":{"summary":"Fetch an add-on by ID","tags":["Add-Ons"],"description":"Returns the full details of a single add-on, including its name, description, pricing (flat rate, hourly, or daily), position, and images.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `add_on_category`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the add-on","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"add-on found","content":{"application/json":{"example":{"data":{"id":"59","type":"add_on","attributes":{"id":59,"name":"Uplighting Package","description":"Thousands of bubbles ready for that special moment","position":1,"price_method":"flat_rate","third_party_video_id":null,"price":"10.00","price_cents":1000,"price_currency":"USD","price_formatted":"$10","hourly_price":"0.00","hourly_price_cents":0,"hourly_price_currency":"USD","hourly_price_formatted":"$0","daily_price":"0.00","daily_price_cents":0,"daily_price_currency":"USD","daily_price_formatted":"$0","primary_image":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png","url":null,"content_type":null},"additional_images":[]},"relationships":{"add_on_category":{"data":{"id":"85","type":"add_on_category"}}}}}}}}}},"put":{"summary":"Update an add-on","tags":["Add-Ons"],"description":"Updates an existing add-on with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.\n\nUse this to rename an add-on, change its pricing, toggle widget visibility, or archive it (set `status` to `Archived`). To move an add-on to a different category, use the move endpoint.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the add-on to update","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"add-on updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"60","type":"add_on","attributes":{"id":60,"name":"Premium Uplighting","description":"Thousands of bubbles ready for that special moment","position":1,"price_method":"flat_rate","third_party_video_id":null,"price":"350.00","price_cents":35000,"price_currency":"USD","price_formatted":"$350","hourly_price":"0.00","hourly_price_cents":0,"hourly_price_currency":"USD","hourly_price_formatted":"$0","daily_price":"0.00","daily_price_cents":0,"daily_price_currency":"USD","daily_price_formatted":"$0","primary_image":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png","url":null,"content_type":null},"additional_images":[]},"relationships":{"add_on_category":{"data":{"id":"86","type":"add_on_category"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the add-on (e.g., \"Uplighting Package\")"},"description":{"type":"string","description":"Customer-facing description of the add-on"},"status":{"type":"string","description":"Whether the add-on is active or archived","enum":["Active","Archived"]},"price_method":{"type":"string","description":"How the add-on is priced","enum":["flat_rate","hourly","daily"]},"price":{"type":"number","description":"Flat-rate price in dollars (used when price_method is flat_rate)"},"hourly_price":{"type":"number","description":"Per-hour price in dollars (used when price_method is hourly)"},"daily_price":{"type":"number","description":"Per-day price in dollars (used when price_method is daily)"},"taxable":{"type":"boolean","description":"Whether the add-on is taxable"},"maximum_quantity":{"type":"integer","description":"Maximum quantity a customer can book (must be >= 1)"},"multiply_by_number_of_units":{"type":"boolean","description":"Multiply the price by the quantity booked"},"visible_on_widget":{"type":"boolean","description":"Whether the add-on is shown on the booking widget"},"adds_minutes_to_event_length":{"type":"boolean","description":"Whether booking this add-on extends the event length"},"minutes_to_be_added_to_event_length":{"type":"integer","description":"Minutes added to the event length when adds_minutes_to_event_length is true"},"requires_lead_time":{"type":"boolean","description":"Whether the add-on requires advance lead time to book"},"lead_time_days":{"type":"integer","description":"Required lead time in days (when requires_lead_time is true)"},"video_url":{"type":"string","description":"YouTube URL for a demo video of the add-on"}}}}}}},"delete":{"summary":"Delete an add-on","tags":["Add-Ons"],"description":"Deletes an add-on. The add-on is removed from the catalog and booking pages. Existing bookings that already include it are unaffected.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the add-on to delete","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"add-on deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/add_ons/{id}/move":{"put":{"summary":"Move an add-on to a different category","tags":["Add-Ons"],"description":"Moves an add-on into a different add-on category. The add-on is appended to the end of the target category, and the remaining add-ons in its original category close up to preserve their ordering.\n\nThe target category must belong to the same business. Use this instead of updating the category directly — a direct update would not re-sort the add-on within either category.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the add-on to move","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"add-on moved","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"62","type":"add_on","attributes":{"id":62,"name":"Uplighting Package","description":"Thousands of bubbles ready for that special moment","position":1,"price_method":"flat_rate","third_party_video_id":null,"price":"10.00","price_cents":1000,"price_currency":"USD","price_formatted":"$10","hourly_price":"0.00","hourly_price_cents":0,"hourly_price_currency":"USD","hourly_price_formatted":"$0","daily_price":"0.00","daily_price_cents":0,"daily_price_currency":"USD","daily_price_formatted":"$0","primary_image":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png","url":null,"content_type":null},"additional_images":[]},"relationships":{"add_on_category":{"data":{"id":"89","type":"add_on_category"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"add_on_category_id":{"type":"integer","description":"ID of the add-on category to move this add-on into"}},"required":["add_on_category_id"]}}}}}},"/api/v1/appointments/{appointment_id}/booking_questions":{"get":{"summary":"Fetch booking question answers for an appointment","tags":["Appointments"],"description":"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`.\n\nUse the `column_name` of each entry as the key when sending updates via the `PATCH /api/v1/appointments/{appointment_id}/booking_questions` endpoint.\n\n**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.\n\n**Required permission:** `assigned_appointment_read` or `unassigned_appointment_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"appointment_id","in":"path","description":"The unique ID of the appointment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"booking questions returned","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"55","type":"appointment_booking_question","attributes":{"id":55,"appointment_id":12,"booking_question_id":null,"editable":false,"column_name":"location","name":"Appointment Location","label":"Appointment Location","kind":"text","intent":"Appointment Location","built_in":true,"link":null,"value":"Phone","formatted_value":"Phone","options":null,"archived":false}},{"id":"56","type":"appointment_booking_question","attributes":{"id":56,"appointment_id":12,"booking_question_id":null,"editable":false,"column_name":"guest_name","name":"Name","label":"Name","kind":"text","intent":"Name","built_in":true,"link":null,"value":"John Doe","formatted_value":"John Doe","options":null,"archived":false}},{"id":"57","type":"appointment_booking_question","attributes":{"id":57,"appointment_id":12,"booking_question_id":null,"editable":false,"column_name":"guest_email","name":"Email","label":"Email","kind":"text","intent":"Email","built_in":true,"link":null,"value":"jdoe@example.com","formatted_value":"jdoe@example.com","options":null,"archived":false}},{"id":"58","type":"appointment_booking_question","attributes":{"id":58,"appointment_id":12,"booking_question_id":null,"editable":false,"column_name":"guest_phone","name":"Phone","label":"Phone","kind":"text","intent":"Phone","built_in":true,"link":null,"value":"555-555-5555","formatted_value":"555-555-5555","options":null,"archived":false}},{"id":"59","type":"appointment_booking_question","attributes":{"id":59,"appointment_id":12,"booking_question_id":null,"editable":false,"column_name":"additional_guests","name":"Guest Email(s)","label":"Guest Email(s)","kind":"text","intent":"Guest Email(s)","built_in":true,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"60","type":"appointment_booking_question","attributes":{"id":60,"appointment_id":12,"booking_question_id":null,"editable":false,"column_name":"message","name":"Additional Notes","label":"Additional Notes","kind":"textarea","intent":"Additional Notes","built_in":true,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}}]}}}}}},"patch":{"summary":"Update booking question answers for an appointment","tags":["Appointments"],"description":"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.\n\nOnly the keys you include are touched — other answers on the appointment are preserved.\n\n**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.\n\n**Required permission:** `assigned_appointment_write` or `unassigned_appointment_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"appointment_id","in":"path","description":"The unique ID of the appointment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"booking questions updated","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"custom_questions":{"type":"object","description":"Keys are booking-question column names; values are the answer to record.","additionalProperties":true}},"required":["custom_questions"]}}}}}},"/api/v1/appointments":{"get":{"summary":"Fetch all appointments","tags":["Appointments"],"description":"Returns a paginated list of appointments for the business. Results can be filtered by date range, staff member, brand, cancellation status, and text search.\n\nSet `staff_id` to `my` to return only appointments assigned to the authenticated user.\n\nThe response includes `meta.total_count` and `meta.per_page` for pagination.\n\n**Required permission:** `assigned_appointment_read` or `unassigned_appointment_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"start_date","in":"query","description":"Filter by start date (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"end_date","in":"query","description":"Filter by end date (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"staff_id","in":"query","description":"Filter by staff member ID, or 'my' for the authenticated user","required":false,"schema":{"type":"string"}},{"name":"brand_id","in":"query","description":"Filter by brand ID","required":false,"schema":{"type":"integer"}},{"name":"canceled_status","in":"query","description":"Filter by cancellation status","required":false,"schema":{"type":"string"}},{"name":"past_or_future","in":"query","description":"Filter to past or future appointments","required":false,"schema":{"type":"string"}},{"name":"search_text","in":"query","description":"Full-text search across appointment details","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Number of results per page (default: 25)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"appointments found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":1,"per_page":10,"page":1,"total_pages":1},"data":[{"id":"14","type":"appointment","attributes":{"id":14,"title":null,"guest_name":"John Doe","guest_email":"jdoe@example.com","guest_phone":"555-555-5555","starts_at":"2026-09-03T14:57:44.087-07:00","ends_at":"2026-09-03T15:57:44.087-07:00","length_in_minutes":60,"brand_id":4134,"brand_name":"Sauer, Lakin and Lang 410","additional_guests":null,"additional_guest_list":[],"location":"Phone","location_details":null,"private_notes":null,"canceled":false,"zoom_meeting_id":null,"zoom_meeting_invitation":null,"zoom_join_url":null,"google_meet_link":null,"google_meet_conference_id":null,"google_meet_invitation":null,"user_appointment_calendar_id":null,"event_time":null,"event_length":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"event_date":null,"event_date_iso8601":null,"available_locations":["In Person","Phone"],"formatted_date":"Thursday, September 3, 2026","formatted_datetime_range":"Thursday, September 3, 2026 • 2:57 PM - 3:57 PM","formatted_time_range":"2:57 PM - 3:57 PM","staff_member_abbreviations":"EK","custom_questions":{}},"relationships":{"user_appointments":{"data":[{"id":"14","type":"user_appointment"}]}}}]}}}}}},"post":{"summary":"Create an appointment","tags":["Appointments"],"description":"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`.\n\nThe `location` field specifies where the appointment takes place (e.g., \"Phone\", \"In Person\", a Zoom link, etc.).\n\n**Required permission:** `appointment_create`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"appointment created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"15","type":"appointment","attributes":{"id":15,"title":"Jane Smith’s Phone Appointment","guest_name":"Jane Smith","guest_email":"jane@example.com","guest_phone":"555-123-4567","starts_at":"2026-09-03T14:00:00.000-07:00","ends_at":"2026-09-03T14:30:00.000-07:00","length_in_minutes":30,"brand_id":4135,"brand_name":"Zulauf, Bahringer and Von 411","additional_guests":null,"additional_guest_list":[],"location":"Phone","location_details":null,"private_notes":"","canceled":false,"zoom_meeting_id":null,"zoom_meeting_invitation":null,"zoom_join_url":null,"google_meet_link":null,"google_meet_conference_id":null,"google_meet_invitation":null,"user_appointment_calendar_id":null,"event_time":null,"event_length":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"event_date":null,"event_date_iso8601":null,"available_locations":["In Person","Phone"],"formatted_date":"Thursday, September 3, 2026","formatted_datetime_range":"Thursday, September 3, 2026 • 2:00 PM - 2:30 PM","formatted_time_range":"2:00 PM - 2:30 PM","staff_member_abbreviations":"AK","custom_questions":{}},"relationships":{"user_appointments":{"data":[{"id":"15","type":"user_appointment"}]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"guest_name":{"type":"string","description":"Guest name"},"guest_email":{"type":"string","description":"Guest email address"},"guest_phone":{"type":"string","description":"Guest phone number"},"additional_guests":{"type":"string","description":"Additional guest names or details"},"starts_at_date":{"type":"string","description":"Appointment date (YYYY-MM-DD)"},"starts_at_time":{"type":"string","description":"Appointment start time (e.g., \"2:00 PM\")"},"length_in_minutes":{"type":"integer","description":"Duration in minutes"},"location":{"type":"string","description":"Appointment location (e.g., \"Phone\", \"In Person\")"},"private_notes":{"type":"string","description":"Private internal notes"},"message":{"type":"string","description":"Message to the guest"},"user_id":{"type":"integer","description":"Staff member ID to assign (defaults to authenticated user)"},"brand_id":{"type":"integer","description":"Brand ID (defaults to the primary brand)"},"user_appointment_calendar_id":{"type":"integer","description":"Appointment calendar ID for scheduling"},"created_via":{"type":"string","description":"How the appointment was created","enum":["quick_add","widget","app"]}},"required":["guest_name","guest_email","starts_at_date","starts_at_time","length_in_minutes","created_via"]}}}}}},"/api/v1/appointments/{id}":{"get":{"summary":"Fetch an appointment by ID","tags":["Appointments"],"description":"Returns the full details of a single appointment, including guest information, date/time, location, meeting links (Zoom, Google Meet), and assigned staff.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `user_appointments`.\n\n**Required permission:** `assigned_appointment_read` or `unassigned_appointment_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the appointment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"appointment found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"16","type":"appointment","attributes":{"id":16,"title":null,"guest_name":"John Doe","guest_email":"jdoe@example.com","guest_phone":"555-555-5555","starts_at":"2026-09-03T14:57:44.347-07:00","ends_at":"2026-09-03T15:57:44.347-07:00","length_in_minutes":60,"brand_id":4136,"brand_name":"Stokes-Toy 412","additional_guests":null,"additional_guest_list":[],"location":"Phone","location_details":null,"private_notes":null,"canceled":false,"zoom_meeting_id":null,"zoom_meeting_invitation":null,"zoom_join_url":null,"google_meet_link":null,"google_meet_conference_id":null,"google_meet_invitation":null,"user_appointment_calendar_id":null,"event_time":null,"event_length":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"event_date":null,"event_date_iso8601":null,"available_locations":["In Person","Phone"],"formatted_date":"Thursday, September 3, 2026","formatted_datetime_range":"Thursday, September 3, 2026 • 2:57 PM - 3:57 PM","formatted_time_range":"2:57 PM - 3:57 PM","staff_member_abbreviations":"BH","custom_questions":{}},"relationships":{"user_appointments":{"data":[{"id":"16","type":"user_appointment"}]}}}}}}}}},"put":{"summary":"Update an appointment","tags":["Appointments"],"description":"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.\n\n**Required permission:** `assigned_appointment_write` or `unassigned_appointment_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the appointment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"appointment updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"17","type":"appointment","attributes":{"id":17,"title":"Updated Name’s Phone Appointment","guest_name":"Updated Name","guest_email":"jdoe@example.com","guest_phone":"555-555-5555","starts_at":"2026-09-03T14:57:44.417-07:00","ends_at":"2026-09-03T15:57:44.417-07:00","length_in_minutes":60,"brand_id":4137,"brand_name":"Medhurst-Huel 413","additional_guests":null,"additional_guest_list":[],"location":"Phone","location_details":null,"private_notes":null,"canceled":false,"zoom_meeting_id":null,"zoom_meeting_invitation":null,"zoom_join_url":null,"google_meet_link":null,"google_meet_conference_id":null,"google_meet_invitation":null,"user_appointment_calendar_id":null,"event_time":null,"event_length":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"event_date":null,"event_date_iso8601":null,"available_locations":["In Person","Phone"],"formatted_date":"Thursday, September 3, 2026","formatted_datetime_range":"Thursday, September 3, 2026 • 2:57 PM - 3:57 PM","formatted_time_range":"2:57 PM - 3:57 PM","staff_member_abbreviations":"MO","custom_questions":{}},"relationships":{"user_appointments":{"data":[{"id":"17","type":"user_appointment"}]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"guest_name":{"type":"string","description":"Guest name"},"guest_email":{"type":"string","description":"Guest email address"},"guest_phone":{"type":"string","description":"Guest phone number"},"additional_guests":{"type":"string","description":"Additional guest names or details"},"starts_at_date":{"type":"string","description":"New appointment date (YYYY-MM-DD)"},"starts_at_time":{"type":"string","description":"New appointment start time (e.g., \"2:00 PM\")"},"length_in_minutes":{"type":"integer","description":"Duration in minutes"},"location":{"type":"string","description":"Appointment location"},"location_details":{"type":"string","description":"Additional location details"},"private_notes":{"type":"string","description":"Private internal notes"},"custom_title":{"type":"string","description":"Custom title override"},"brand_id":{"type":"integer","description":"Brand ID"}}}}}}},"delete":{"summary":"Delete an appointment","tags":["Appointments"],"description":"Soft-deletes an appointment. The appointment is marked as deleted but not permanently removed.\n\n**Required permission:** `assigned_appointment_write` or `unassigned_appointment_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the appointment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"appointment deleted","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"18","type":"appointment","attributes":{"id":18,"title":null,"guest_name":"John Doe","guest_email":"jdoe@example.com","guest_phone":"555-555-5555","starts_at":"2026-09-03T14:57:44.514-07:00","ends_at":"2026-09-03T15:57:44.514-07:00","length_in_minutes":60,"brand_id":4138,"brand_name":"Ziemann-Watsica 414","additional_guests":null,"additional_guest_list":[],"location":"Phone","location_details":null,"private_notes":null,"canceled":false,"zoom_meeting_id":null,"zoom_meeting_invitation":null,"zoom_join_url":null,"google_meet_link":null,"google_meet_conference_id":null,"google_meet_invitation":null,"user_appointment_calendar_id":null,"event_time":null,"event_length":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"event_date":null,"event_date_iso8601":null,"available_locations":["In Person","Phone"],"formatted_date":"Thursday, September 3, 2026","formatted_datetime_range":"Thursday, September 3, 2026 • 2:57 PM - 3:57 PM","formatted_time_range":"2:57 PM - 3:57 PM","staff_member_abbreviations":"RW","custom_questions":{}},"relationships":{"user_appointments":{"data":[{"id":"18","type":"user_appointment"}]}}}}}}}}}},"/api/v1/appointments/{id}/cancel":{"put":{"summary":"Cancel an appointment","tags":["Appointments"],"description":"Cancels an appointment and sends cancellation notifications to the guest.\n\n**Required permission:** `assigned_appointment_write` or `unassigned_appointment_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the appointment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"appointment canceled","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"19","type":"appointment","attributes":{"id":19,"title":null,"guest_name":"John Doe","guest_email":"jdoe@example.com","guest_phone":"555-555-5555","starts_at":"2026-09-03T14:57:44.614-07:00","ends_at":"2026-09-03T15:57:44.614-07:00","length_in_minutes":60,"brand_id":4139,"brand_name":"Schowalter Inc 415","additional_guests":null,"additional_guest_list":[],"location":"Phone","location_details":null,"private_notes":null,"canceled":true,"zoom_meeting_id":null,"zoom_meeting_invitation":null,"zoom_join_url":null,"google_meet_link":null,"google_meet_conference_id":null,"google_meet_invitation":null,"user_appointment_calendar_id":null,"event_time":null,"event_length":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"event_date":null,"event_date_iso8601":null,"available_locations":["In Person","Phone"],"formatted_date":"Thursday, September 3, 2026","formatted_datetime_range":"Thursday, September 3, 2026 • 2:57 PM - 3:57 PM","formatted_time_range":"2:57 PM - 3:57 PM","staff_member_abbreviations":"LC","custom_questions":{}},"relationships":{"user_appointments":{"data":[{"id":"19","type":"user_appointment"}]}}}}}}}}}},"/api/v1/appointments/{id}/uncancel":{"put":{"summary":"Uncancel an appointment","tags":["Appointments"],"description":"Restores a previously canceled appointment.\n\n**Required permission:** `assigned_appointment_write` or `unassigned_appointment_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the appointment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"appointment uncanceled","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"20","type":"appointment","attributes":{"id":20,"title":null,"guest_name":"John Doe","guest_email":"jdoe@example.com","guest_phone":"555-555-5555","starts_at":"2026-09-03T14:57:44.734-07:00","ends_at":"2026-09-03T15:57:44.734-07:00","length_in_minutes":60,"brand_id":4140,"brand_name":"Kilback and Sons 416","additional_guests":null,"additional_guest_list":[],"location":"Phone","location_details":null,"private_notes":null,"canceled":false,"zoom_meeting_id":null,"zoom_meeting_invitation":null,"zoom_join_url":null,"google_meet_link":null,"google_meet_conference_id":null,"google_meet_invitation":null,"user_appointment_calendar_id":null,"event_time":null,"event_length":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"event_date":null,"event_date_iso8601":null,"available_locations":["In Person","Phone"],"formatted_date":"Thursday, September 3, 2026","formatted_datetime_range":"Thursday, September 3, 2026 • 2:57 PM - 3:57 PM","formatted_time_range":"2:57 PM - 3:57 PM","staff_member_abbreviations":"BM","custom_questions":{}},"relationships":{"user_appointments":{"data":[{"id":"20","type":"user_appointment"}]}}}}}}}}}},"/api/v1/appointments/{id}/duplicate":{"post":{"summary":"Duplicate an appointment","tags":["Appointments"],"description":"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.\n\n**Required permission:** `unassigned_appointment_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the appointment to duplicate","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"appointment duplicated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"22","type":"appointment","attributes":{"id":22,"title":"John Doe’s Phone Appointment","guest_name":"John Doe","guest_email":"jdoe@example.com","guest_phone":"555-555-5555","starts_at":"2026-09-10T15:00:00.000-07:00","ends_at":"2026-09-10T16:00:00.000-07:00","length_in_minutes":60,"brand_id":4141,"brand_name":"VonRueden Group 417","additional_guests":null,"additional_guest_list":[],"location":"Phone","location_details":null,"private_notes":null,"canceled":false,"zoom_meeting_id":null,"zoom_meeting_invitation":null,"zoom_join_url":null,"google_meet_link":null,"google_meet_conference_id":null,"google_meet_invitation":null,"user_appointment_calendar_id":null,"event_time":null,"event_length":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"event_date":null,"event_date_iso8601":null,"available_locations":["In Person","Phone"],"formatted_date":"Thursday, September 10, 2026","formatted_datetime_range":"Thursday, September 10, 2026 • 3:00 PM - 4:00 PM","formatted_time_range":"3:00 PM - 4:00 PM","staff_member_abbreviations":"DZ","custom_questions":{}},"relationships":{"user_appointments":{"data":[{"id":"22","type":"user_appointment"}]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"starts_at_date":{"type":"string","description":"Date for the new appointment (YYYY-MM-DD)"},"starts_at_time":{"type":"string","description":"Start time for the new appointment (e.g., \"2:00 PM\")"}},"required":["starts_at_date","starts_at_time"]}}}}}},"/api/v1/availability":{"get":{"summary":"Check availability for a date","tags":["Availability"],"description":"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.\n\nProvide either a single `event_date` or a range via `starts_at` and `ends_at`.\n\n**Required permission:** `availability_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_date","in":"query","description":"Date to check (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"starts_at","in":"query","description":"Start of date range (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"ends_at","in":"query","description":"End of date range (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"package_id","in":"query","description":"Package (event type) ID to check availability for","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"availability result","content":{"application/json":{"example":{"data":{"id":"c1c91fb8-6acf-4a8d-9ab2-a017fe053249","type":"availability_result","attributes":{"id":"c1c91fb8-6acf-4a8d-9ab2-a017fe053249","available":true,"event_type_id":836,"starts_at":"2026-09-27T00:00:00.000-07:00","ends_at":"2026-09-27T23:59:59.999-07:00"},"relationships":{"event_type":{"data":{"id":"836","type":"event_type"}}}}}}}}}}},"/api/v1/availability/detailed":{"get":{"summary":"Check detailed availability","tags":["Availability"],"description":"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.\n\nThis endpoint supports multiple lookup types and can check availability for packages, add-ons, backdrops, and specific staff members simultaneously.\n\n**Required permission:** `availability_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"starts_at_date","in":"query","description":"Date to check (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"starts_at_time","in":"query","description":"Start time to check","required":false,"schema":{"type":"string"}},{"name":"ends_at_time","in":"query","description":"End time to check","required":false,"schema":{"type":"string"}},{"name":"starts_at","in":"query","description":"Start datetime (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"ends_at","in":"query","description":"End datetime (ISO 8601)","required":false,"schema":{"type":"string"}},{"name":"package_id","in":"query","description":"Package (event type) ID","required":false,"schema":{"type":"integer"}},{"name":"add_on_id","in":"query","description":"Add-on ID to check availability for","required":false,"schema":{"type":"integer"}},{"name":"backdrop_id","in":"query","description":"Backdrop ID to check availability for","required":false,"schema":{"type":"integer"}},{"name":"staff_id","in":"query","description":"Staff member ID to check availability for","required":false,"schema":{"type":"integer"}},{"name":"lookup_type","in":"query","description":"Type of availability lookup","required":false,"schema":{"type":"string"}},{"name":"quantity","in":"query","description":"Quantity to check availability for","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"detailed availability result","content":{"application/json":{"example":{"available":true,"messages":[],"overlapping_bookings":[]}}}}}}},"/api/v1/available_slots":{"get":{"summary":"Fetch available time slots for a date","tags":["Availability"],"description":"Returns the available time slots for a specific date and package. Each slot includes the start time, availability status, and formatted display name.\n\nThis is useful for building booking interfaces where customers select a time slot.\n\n**Required permission:** `availability_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_date","in":"query","description":"Date to check (YYYY-MM-DD)","required":true,"schema":{"type":"string"}},{"name":"package_id","in":"query","description":"Package (event type) ID","required":true,"schema":{"type":"integer"}},{"name":"length_in_minutes","in":"query","description":"Event duration in minutes (overrides package default)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"available slots found","content":{"application/json":{"example":{"data":[{"id":"576ccb1b-e149-4981-bd3c-e274cf76a061","type":"availability_slot","attributes":{"id":"576ccb1b-e149-4981-bd3c-e274cf76a061","available":true,"starts_at":"2026-09-27T00:00:00.000-07:00","formatted_slot_name":"12:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"12:00 AM"}},{"id":"e5002c2a-7f06-45b0-945f-264476e04dd2","type":"availability_slot","attributes":{"id":"e5002c2a-7f06-45b0-945f-264476e04dd2","available":true,"starts_at":"2026-09-27T00:30:00.000-07:00","formatted_slot_name":"12:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"12:30 AM"}},{"id":"d664585e-e38b-4ad3-af0f-fa47aca2789a","type":"availability_slot","attributes":{"id":"d664585e-e38b-4ad3-af0f-fa47aca2789a","available":true,"starts_at":"2026-09-27T01:00:00.000-07:00","formatted_slot_name":"1:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"1:00 AM"}},{"id":"dc135045-162a-420b-8c2d-c2a2054571f4","type":"availability_slot","attributes":{"id":"dc135045-162a-420b-8c2d-c2a2054571f4","available":true,"starts_at":"2026-09-27T01:30:00.000-07:00","formatted_slot_name":"1:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"1:30 AM"}},{"id":"aa8c8989-6f3d-4849-8bb9-5393fb19935a","type":"availability_slot","attributes":{"id":"aa8c8989-6f3d-4849-8bb9-5393fb19935a","available":true,"starts_at":"2026-09-27T02:00:00.000-07:00","formatted_slot_name":"2:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"2:00 AM"}},{"id":"5191c7d0-6a72-4166-8d74-ffb55ab282d6","type":"availability_slot","attributes":{"id":"5191c7d0-6a72-4166-8d74-ffb55ab282d6","available":true,"starts_at":"2026-09-27T02:30:00.000-07:00","formatted_slot_name":"2:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"2:30 AM"}},{"id":"6fdd26f1-ff17-4d63-aaba-453b4d660577","type":"availability_slot","attributes":{"id":"6fdd26f1-ff17-4d63-aaba-453b4d660577","available":true,"starts_at":"2026-09-27T03:00:00.000-07:00","formatted_slot_name":"3:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"3:00 AM"}},{"id":"290ac2e1-bdfb-4b79-a87c-89668941d0ba","type":"availability_slot","attributes":{"id":"290ac2e1-bdfb-4b79-a87c-89668941d0ba","available":true,"starts_at":"2026-09-27T03:30:00.000-07:00","formatted_slot_name":"3:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"3:30 AM"}},{"id":"7e1aecb2-a902-469d-b930-476e446f8da4","type":"availability_slot","attributes":{"id":"7e1aecb2-a902-469d-b930-476e446f8da4","available":true,"starts_at":"2026-09-27T04:00:00.000-07:00","formatted_slot_name":"4:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"4:00 AM"}},{"id":"d8124630-0d06-469f-91a0-024d7cac10de","type":"availability_slot","attributes":{"id":"d8124630-0d06-469f-91a0-024d7cac10de","available":true,"starts_at":"2026-09-27T04:30:00.000-07:00","formatted_slot_name":"4:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"4:30 AM"}},{"id":"480babf0-f029-4b53-adf2-2ca3459f7daf","type":"availability_slot","attributes":{"id":"480babf0-f029-4b53-adf2-2ca3459f7daf","available":true,"starts_at":"2026-09-27T05:00:00.000-07:00","formatted_slot_name":"5:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"5:00 AM"}},{"id":"7e9416c3-6daf-4a23-843d-20c10cdaa312","type":"availability_slot","attributes":{"id":"7e9416c3-6daf-4a23-843d-20c10cdaa312","available":true,"starts_at":"2026-09-27T05:30:00.000-07:00","formatted_slot_name":"5:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"5:30 AM"}},{"id":"aadc4a19-4061-4552-a559-b08d2df278ad","type":"availability_slot","attributes":{"id":"aadc4a19-4061-4552-a559-b08d2df278ad","available":true,"starts_at":"2026-09-27T06:00:00.000-07:00","formatted_slot_name":"6:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"6:00 AM"}},{"id":"5d650195-1d9e-4902-8b32-f75cf9dd4ffb","type":"availability_slot","attributes":{"id":"5d650195-1d9e-4902-8b32-f75cf9dd4ffb","available":true,"starts_at":"2026-09-27T06:30:00.000-07:00","formatted_slot_name":"6:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"6:30 AM"}},{"id":"04d7d0c0-5241-4c15-a9b3-2029f0fbd4bf","type":"availability_slot","attributes":{"id":"04d7d0c0-5241-4c15-a9b3-2029f0fbd4bf","available":true,"starts_at":"2026-09-27T07:00:00.000-07:00","formatted_slot_name":"7:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"7:00 AM"}},{"id":"c3ba4f92-08fb-4f6a-854c-72a07ebacc3c","type":"availability_slot","attributes":{"id":"c3ba4f92-08fb-4f6a-854c-72a07ebacc3c","available":true,"starts_at":"2026-09-27T07:30:00.000-07:00","formatted_slot_name":"7:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"7:30 AM"}},{"id":"97d3f5d6-2d78-41a8-864e-67dcaa93cdf1","type":"availability_slot","attributes":{"id":"97d3f5d6-2d78-41a8-864e-67dcaa93cdf1","available":true,"starts_at":"2026-09-27T08:00:00.000-07:00","formatted_slot_name":"8:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"8:00 AM"}},{"id":"50e5a990-d54b-40c2-8f5f-07b406b063fb","type":"availability_slot","attributes":{"id":"50e5a990-d54b-40c2-8f5f-07b406b063fb","available":true,"starts_at":"2026-09-27T08:30:00.000-07:00","formatted_slot_name":"8:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"8:30 AM"}},{"id":"c05b1b7e-30a8-45e0-9b27-cee290f53207","type":"availability_slot","attributes":{"id":"c05b1b7e-30a8-45e0-9b27-cee290f53207","available":true,"starts_at":"2026-09-27T09:00:00.000-07:00","formatted_slot_name":"9:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"9:00 AM"}},{"id":"c54f9354-13ae-4577-884e-1e80df88c9ac","type":"availability_slot","attributes":{"id":"c54f9354-13ae-4577-884e-1e80df88c9ac","available":true,"starts_at":"2026-09-27T09:30:00.000-07:00","formatted_slot_name":"9:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"9:30 AM"}},{"id":"aefbf15f-d86f-44f1-aea6-3561a89ae557","type":"availability_slot","attributes":{"id":"aefbf15f-d86f-44f1-aea6-3561a89ae557","available":true,"starts_at":"2026-09-27T10:00:00.000-07:00","formatted_slot_name":"10:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"10:00 AM"}},{"id":"95dfdc20-ae69-4258-9c39-cdff6b770a2d","type":"availability_slot","attributes":{"id":"95dfdc20-ae69-4258-9c39-cdff6b770a2d","available":true,"starts_at":"2026-09-27T10:30:00.000-07:00","formatted_slot_name":"10:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"10:30 AM"}},{"id":"5db82672-94c8-4cba-83a2-4e59460406d6","type":"availability_slot","attributes":{"id":"5db82672-94c8-4cba-83a2-4e59460406d6","available":true,"starts_at":"2026-09-27T11:00:00.000-07:00","formatted_slot_name":"11:00 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"11:00 AM"}},{"id":"c1fa49b8-38db-4cad-a26f-6834b3f6cfd8","type":"availability_slot","attributes":{"id":"c1fa49b8-38db-4cad-a26f-6834b3f6cfd8","available":true,"starts_at":"2026-09-27T11:30:00.000-07:00","formatted_slot_name":"11:30 AM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"11:30 AM"}},{"id":"5ccd6536-04e8-40d8-a21b-cb0eca222e74","type":"availability_slot","attributes":{"id":"5ccd6536-04e8-40d8-a21b-cb0eca222e74","available":true,"starts_at":"2026-09-27T12:00:00.000-07:00","formatted_slot_name":"12:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"12:00 PM"}},{"id":"1a870593-d49b-40f3-aaf3-1de4e46f5263","type":"availability_slot","attributes":{"id":"1a870593-d49b-40f3-aaf3-1de4e46f5263","available":true,"starts_at":"2026-09-27T12:30:00.000-07:00","formatted_slot_name":"12:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"12:30 PM"}},{"id":"e3800aa3-98c9-479f-acda-6d275bc95c3f","type":"availability_slot","attributes":{"id":"e3800aa3-98c9-479f-acda-6d275bc95c3f","available":true,"starts_at":"2026-09-27T13:00:00.000-07:00","formatted_slot_name":"1:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"1:00 PM"}},{"id":"807cbbde-4d4c-40a6-b368-c68b9c80881d","type":"availability_slot","attributes":{"id":"807cbbde-4d4c-40a6-b368-c68b9c80881d","available":true,"starts_at":"2026-09-27T13:30:00.000-07:00","formatted_slot_name":"1:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"1:30 PM"}},{"id":"7966fbf7-c0e2-453d-acdd-304b1a78f9d6","type":"availability_slot","attributes":{"id":"7966fbf7-c0e2-453d-acdd-304b1a78f9d6","available":true,"starts_at":"2026-09-27T14:00:00.000-07:00","formatted_slot_name":"2:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"2:00 PM"}},{"id":"58514a16-0b74-471d-83a1-9647c4fc0c19","type":"availability_slot","attributes":{"id":"58514a16-0b74-471d-83a1-9647c4fc0c19","available":true,"starts_at":"2026-09-27T14:30:00.000-07:00","formatted_slot_name":"2:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"2:30 PM"}},{"id":"365b2d69-a627-47ec-a4b0-e70ebc03a641","type":"availability_slot","attributes":{"id":"365b2d69-a627-47ec-a4b0-e70ebc03a641","available":true,"starts_at":"2026-09-27T15:00:00.000-07:00","formatted_slot_name":"3:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"3:00 PM"}},{"id":"dbe6807d-d031-4d62-a786-cd132658fe67","type":"availability_slot","attributes":{"id":"dbe6807d-d031-4d62-a786-cd132658fe67","available":true,"starts_at":"2026-09-27T15:30:00.000-07:00","formatted_slot_name":"3:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"3:30 PM"}},{"id":"64ba58c4-6ebd-4403-9a21-2820ede7a30c","type":"availability_slot","attributes":{"id":"64ba58c4-6ebd-4403-9a21-2820ede7a30c","available":true,"starts_at":"2026-09-27T16:00:00.000-07:00","formatted_slot_name":"4:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"4:00 PM"}},{"id":"056de7e4-36df-4634-bf07-e165b825de18","type":"availability_slot","attributes":{"id":"056de7e4-36df-4634-bf07-e165b825de18","available":true,"starts_at":"2026-09-27T16:30:00.000-07:00","formatted_slot_name":"4:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"4:30 PM"}},{"id":"1246fec6-a1ea-44c7-9673-ac7973428406","type":"availability_slot","attributes":{"id":"1246fec6-a1ea-44c7-9673-ac7973428406","available":true,"starts_at":"2026-09-27T17:00:00.000-07:00","formatted_slot_name":"5:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"5:00 PM"}},{"id":"6fe366fd-b856-4c5c-81d4-37cb58e99b22","type":"availability_slot","attributes":{"id":"6fe366fd-b856-4c5c-81d4-37cb58e99b22","available":true,"starts_at":"2026-09-27T17:30:00.000-07:00","formatted_slot_name":"5:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"5:30 PM"}},{"id":"54df476f-b5fd-4c43-9252-9afed065c081","type":"availability_slot","attributes":{"id":"54df476f-b5fd-4c43-9252-9afed065c081","available":true,"starts_at":"2026-09-27T18:00:00.000-07:00","formatted_slot_name":"6:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"6:00 PM"}},{"id":"833c1da8-fdeb-4329-b48f-d17ddbe3876f","type":"availability_slot","attributes":{"id":"833c1da8-fdeb-4329-b48f-d17ddbe3876f","available":true,"starts_at":"2026-09-27T18:30:00.000-07:00","formatted_slot_name":"6:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"6:30 PM"}},{"id":"1bcef4c9-e7e9-46f9-bd39-a82007a52bb3","type":"availability_slot","attributes":{"id":"1bcef4c9-e7e9-46f9-bd39-a82007a52bb3","available":true,"starts_at":"2026-09-27T19:00:00.000-07:00","formatted_slot_name":"7:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"7:00 PM"}},{"id":"d1231223-701e-4ad3-b5e1-e05ab00a4f25","type":"availability_slot","attributes":{"id":"d1231223-701e-4ad3-b5e1-e05ab00a4f25","available":true,"starts_at":"2026-09-27T19:30:00.000-07:00","formatted_slot_name":"7:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"7:30 PM"}},{"id":"ae90caa4-a803-40d3-be8d-452f93ed303c","type":"availability_slot","attributes":{"id":"ae90caa4-a803-40d3-be8d-452f93ed303c","available":true,"starts_at":"2026-09-27T20:00:00.000-07:00","formatted_slot_name":"8:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"8:00 PM"}},{"id":"c70425bd-7657-4713-8232-199ef2a586ba","type":"availability_slot","attributes":{"id":"c70425bd-7657-4713-8232-199ef2a586ba","available":true,"starts_at":"2026-09-27T20:30:00.000-07:00","formatted_slot_name":"8:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"8:30 PM"}},{"id":"3cca7ebf-10ab-4307-9d3c-9acdc1b472d6","type":"availability_slot","attributes":{"id":"3cca7ebf-10ab-4307-9d3c-9acdc1b472d6","available":true,"starts_at":"2026-09-27T21:00:00.000-07:00","formatted_slot_name":"9:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"9:00 PM"}},{"id":"5df01179-4610-41c6-9a76-88eedabf225a","type":"availability_slot","attributes":{"id":"5df01179-4610-41c6-9a76-88eedabf225a","available":true,"starts_at":"2026-09-27T21:30:00.000-07:00","formatted_slot_name":"9:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"9:30 PM"}},{"id":"587df3f6-174e-443a-963d-5df1d850dfb6","type":"availability_slot","attributes":{"id":"587df3f6-174e-443a-963d-5df1d850dfb6","available":true,"starts_at":"2026-09-27T22:00:00.000-07:00","formatted_slot_name":"10:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"10:00 PM"}},{"id":"9970ee8b-5c2f-40fb-87b5-0c779de1f400","type":"availability_slot","attributes":{"id":"9970ee8b-5c2f-40fb-87b5-0c779de1f400","available":true,"starts_at":"2026-09-27T22:30:00.000-07:00","formatted_slot_name":"10:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"10:30 PM"}},{"id":"f81911fc-0add-4b06-b8a9-50b8f633776e","type":"availability_slot","attributes":{"id":"f81911fc-0add-4b06-b8a9-50b8f633776e","available":true,"starts_at":"2026-09-27T23:00:00.000-07:00","formatted_slot_name":"11:00 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"11:00 PM"}},{"id":"ddc2ff7d-d893-407d-abee-a7545cda02c3","type":"availability_slot","attributes":{"id":"ddc2ff7d-d893-407d-abee-a7545cda02c3","available":true,"starts_at":"2026-09-27T23:30:00.000-07:00","formatted_slot_name":"11:30 PM","length_in_minutes":60,"localized_date":"09-27-2026","localized_time":"11:30 PM"}}]}}}}}}},"/api/v1/available_appointment_slots":{"get":{"summary":"Fetch available appointment slots","tags":["Availability"],"description":"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.\n\nRequires a `user_id` and `user_appointment_calendar_id` to identify which staff member's calendar to check.\n\n**Required permission:** `user_appointment_calendar_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"user_id","in":"query","description":"Staff member user ID","required":true,"schema":{"type":"integer"}},{"name":"user_appointment_calendar_id","in":"query","description":"Appointment calendar ID for the staff member","required":true,"schema":{"type":"integer"}},{"name":"selected_date","in":"query","description":"Date to check (YYYY-MM-DD)","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"available appointment slots found","content":{"application/json":{"example":{"data":[{"id":"fcbbc9ca-8193-4764-b1b1-62ac2f0cfd9a","type":"availability_slot","attributes":{"id":"fcbbc9ca-8193-4764-b1b1-62ac2f0cfd9a","available":true,"starts_at":"2026-09-27T00:00:00.000-07:00","formatted_slot_name":"12:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"12:00 AM"}},{"id":"dfd41de4-d3dd-42d5-82f2-be02e411ca39","type":"availability_slot","attributes":{"id":"dfd41de4-d3dd-42d5-82f2-be02e411ca39","available":true,"starts_at":"2026-09-27T00:30:00.000-07:00","formatted_slot_name":"12:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"12:30 AM"}},{"id":"80b15d3e-8d90-4ae6-9a31-e32d1b224928","type":"availability_slot","attributes":{"id":"80b15d3e-8d90-4ae6-9a31-e32d1b224928","available":true,"starts_at":"2026-09-27T01:00:00.000-07:00","formatted_slot_name":"1:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"1:00 AM"}},{"id":"18658505-1a63-40dd-b194-580e91126a54","type":"availability_slot","attributes":{"id":"18658505-1a63-40dd-b194-580e91126a54","available":true,"starts_at":"2026-09-27T01:30:00.000-07:00","formatted_slot_name":"1:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"1:30 AM"}},{"id":"e7dd736e-1fbe-4cff-80dc-1735984e5d22","type":"availability_slot","attributes":{"id":"e7dd736e-1fbe-4cff-80dc-1735984e5d22","available":true,"starts_at":"2026-09-27T02:00:00.000-07:00","formatted_slot_name":"2:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"2:00 AM"}},{"id":"a3964169-ce22-4af6-b3a2-fe6f5159b507","type":"availability_slot","attributes":{"id":"a3964169-ce22-4af6-b3a2-fe6f5159b507","available":true,"starts_at":"2026-09-27T02:30:00.000-07:00","formatted_slot_name":"2:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"2:30 AM"}},{"id":"740a6e79-ec69-4c6a-a0ea-2cffbf4ccf83","type":"availability_slot","attributes":{"id":"740a6e79-ec69-4c6a-a0ea-2cffbf4ccf83","available":true,"starts_at":"2026-09-27T03:00:00.000-07:00","formatted_slot_name":"3:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"3:00 AM"}},{"id":"9e633313-c93b-4e0d-aa11-13c3392544c8","type":"availability_slot","attributes":{"id":"9e633313-c93b-4e0d-aa11-13c3392544c8","available":true,"starts_at":"2026-09-27T03:30:00.000-07:00","formatted_slot_name":"3:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"3:30 AM"}},{"id":"037b3945-1b3b-49b8-8b2b-697120dda209","type":"availability_slot","attributes":{"id":"037b3945-1b3b-49b8-8b2b-697120dda209","available":true,"starts_at":"2026-09-27T04:00:00.000-07:00","formatted_slot_name":"4:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"4:00 AM"}},{"id":"ec82234b-41ea-4757-9ffe-d9445d880c1e","type":"availability_slot","attributes":{"id":"ec82234b-41ea-4757-9ffe-d9445d880c1e","available":true,"starts_at":"2026-09-27T04:30:00.000-07:00","formatted_slot_name":"4:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"4:30 AM"}},{"id":"7da7d59b-c84d-45a6-874a-26dd51598785","type":"availability_slot","attributes":{"id":"7da7d59b-c84d-45a6-874a-26dd51598785","available":true,"starts_at":"2026-09-27T05:00:00.000-07:00","formatted_slot_name":"5:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"5:00 AM"}},{"id":"9ca1d1a8-fca4-4012-8d44-c23576fc7d1b","type":"availability_slot","attributes":{"id":"9ca1d1a8-fca4-4012-8d44-c23576fc7d1b","available":true,"starts_at":"2026-09-27T05:30:00.000-07:00","formatted_slot_name":"5:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"5:30 AM"}},{"id":"54253399-cf5f-45ea-a2ba-fd07a609a6ac","type":"availability_slot","attributes":{"id":"54253399-cf5f-45ea-a2ba-fd07a609a6ac","available":true,"starts_at":"2026-09-27T06:00:00.000-07:00","formatted_slot_name":"6:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"6:00 AM"}},{"id":"4d719690-6a7a-436b-a728-eb2c36848463","type":"availability_slot","attributes":{"id":"4d719690-6a7a-436b-a728-eb2c36848463","available":true,"starts_at":"2026-09-27T06:30:00.000-07:00","formatted_slot_name":"6:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"6:30 AM"}},{"id":"49657276-91f5-4983-8ebc-e9eb3616063d","type":"availability_slot","attributes":{"id":"49657276-91f5-4983-8ebc-e9eb3616063d","available":true,"starts_at":"2026-09-27T07:00:00.000-07:00","formatted_slot_name":"7:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"7:00 AM"}},{"id":"f2088a92-821a-4de4-bad4-31aaebb2628d","type":"availability_slot","attributes":{"id":"f2088a92-821a-4de4-bad4-31aaebb2628d","available":true,"starts_at":"2026-09-27T07:30:00.000-07:00","formatted_slot_name":"7:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"7:30 AM"}},{"id":"59f2d398-93c7-4a8a-9d7a-26c775939e6a","type":"availability_slot","attributes":{"id":"59f2d398-93c7-4a8a-9d7a-26c775939e6a","available":true,"starts_at":"2026-09-27T08:00:00.000-07:00","formatted_slot_name":"8:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"8:00 AM"}},{"id":"8a6b4d7d-c4a9-41dc-a91a-b94036d193b9","type":"availability_slot","attributes":{"id":"8a6b4d7d-c4a9-41dc-a91a-b94036d193b9","available":true,"starts_at":"2026-09-27T08:30:00.000-07:00","formatted_slot_name":"8:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"8:30 AM"}},{"id":"c601909e-9670-47f6-9fd9-b8811aa895f4","type":"availability_slot","attributes":{"id":"c601909e-9670-47f6-9fd9-b8811aa895f4","available":true,"starts_at":"2026-09-27T09:00:00.000-07:00","formatted_slot_name":"9:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"9:00 AM"}},{"id":"a5bcba9a-8689-4eb1-8a63-5c4f9b5df964","type":"availability_slot","attributes":{"id":"a5bcba9a-8689-4eb1-8a63-5c4f9b5df964","available":true,"starts_at":"2026-09-27T09:30:00.000-07:00","formatted_slot_name":"9:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"9:30 AM"}},{"id":"7bb5e199-6ccb-4463-8e2f-f3abbf0ebbb8","type":"availability_slot","attributes":{"id":"7bb5e199-6ccb-4463-8e2f-f3abbf0ebbb8","available":true,"starts_at":"2026-09-27T10:00:00.000-07:00","formatted_slot_name":"10:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"10:00 AM"}},{"id":"9b56d2f4-10f1-4de5-8bbd-bd218bd000a7","type":"availability_slot","attributes":{"id":"9b56d2f4-10f1-4de5-8bbd-bd218bd000a7","available":true,"starts_at":"2026-09-27T10:30:00.000-07:00","formatted_slot_name":"10:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"10:30 AM"}},{"id":"d98c4670-6e67-4933-9dcf-9049cef1c3e7","type":"availability_slot","attributes":{"id":"d98c4670-6e67-4933-9dcf-9049cef1c3e7","available":true,"starts_at":"2026-09-27T11:00:00.000-07:00","formatted_slot_name":"11:00 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"11:00 AM"}},{"id":"befb4029-f0ce-4dff-9135-292f17ed4270","type":"availability_slot","attributes":{"id":"befb4029-f0ce-4dff-9135-292f17ed4270","available":true,"starts_at":"2026-09-27T11:30:00.000-07:00","formatted_slot_name":"11:30 AM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"11:30 AM"}},{"id":"c2a7d8be-d0af-4392-a2f0-82a71bb59b1b","type":"availability_slot","attributes":{"id":"c2a7d8be-d0af-4392-a2f0-82a71bb59b1b","available":true,"starts_at":"2026-09-27T12:00:00.000-07:00","formatted_slot_name":"12:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"12:00 PM"}},{"id":"29cb35f1-58ab-4585-941f-56ab50993928","type":"availability_slot","attributes":{"id":"29cb35f1-58ab-4585-941f-56ab50993928","available":true,"starts_at":"2026-09-27T12:30:00.000-07:00","formatted_slot_name":"12:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"12:30 PM"}},{"id":"131f4f14-3fca-4ae3-bcf0-4f5d2b21e75e","type":"availability_slot","attributes":{"id":"131f4f14-3fca-4ae3-bcf0-4f5d2b21e75e","available":true,"starts_at":"2026-09-27T13:00:00.000-07:00","formatted_slot_name":"1:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"1:00 PM"}},{"id":"a3fb1400-c022-437e-9338-ac105780b6b4","type":"availability_slot","attributes":{"id":"a3fb1400-c022-437e-9338-ac105780b6b4","available":true,"starts_at":"2026-09-27T13:30:00.000-07:00","formatted_slot_name":"1:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"1:30 PM"}},{"id":"e12d33ce-fec8-4e6d-929f-f6fdb09925d1","type":"availability_slot","attributes":{"id":"e12d33ce-fec8-4e6d-929f-f6fdb09925d1","available":true,"starts_at":"2026-09-27T14:00:00.000-07:00","formatted_slot_name":"2:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"2:00 PM"}},{"id":"62ff27df-96b6-43a2-91f4-d52ab86ce877","type":"availability_slot","attributes":{"id":"62ff27df-96b6-43a2-91f4-d52ab86ce877","available":true,"starts_at":"2026-09-27T14:30:00.000-07:00","formatted_slot_name":"2:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"2:30 PM"}},{"id":"09790b67-bac2-4d1c-8538-b4ef82b907e4","type":"availability_slot","attributes":{"id":"09790b67-bac2-4d1c-8538-b4ef82b907e4","available":true,"starts_at":"2026-09-27T15:00:00.000-07:00","formatted_slot_name":"3:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"3:00 PM"}},{"id":"c0bf2ee6-74cf-49ee-ba2e-10531142de75","type":"availability_slot","attributes":{"id":"c0bf2ee6-74cf-49ee-ba2e-10531142de75","available":true,"starts_at":"2026-09-27T15:30:00.000-07:00","formatted_slot_name":"3:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"3:30 PM"}},{"id":"516cb074-28c6-4745-a9b2-696f67f905f4","type":"availability_slot","attributes":{"id":"516cb074-28c6-4745-a9b2-696f67f905f4","available":true,"starts_at":"2026-09-27T16:00:00.000-07:00","formatted_slot_name":"4:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"4:00 PM"}},{"id":"457062c5-d5d3-49c5-bde1-c5a4eaad39b9","type":"availability_slot","attributes":{"id":"457062c5-d5d3-49c5-bde1-c5a4eaad39b9","available":true,"starts_at":"2026-09-27T16:30:00.000-07:00","formatted_slot_name":"4:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"4:30 PM"}},{"id":"cb8b55f6-f85c-436c-a388-9163c7a2bb24","type":"availability_slot","attributes":{"id":"cb8b55f6-f85c-436c-a388-9163c7a2bb24","available":true,"starts_at":"2026-09-27T17:00:00.000-07:00","formatted_slot_name":"5:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"5:00 PM"}},{"id":"6574a3d8-651d-42b4-9f38-28613d019c27","type":"availability_slot","attributes":{"id":"6574a3d8-651d-42b4-9f38-28613d019c27","available":true,"starts_at":"2026-09-27T17:30:00.000-07:00","formatted_slot_name":"5:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"5:30 PM"}},{"id":"b74308af-758c-4b1a-9c15-0e33859db8da","type":"availability_slot","attributes":{"id":"b74308af-758c-4b1a-9c15-0e33859db8da","available":true,"starts_at":"2026-09-27T18:00:00.000-07:00","formatted_slot_name":"6:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"6:00 PM"}},{"id":"c214790f-0c43-4867-aa65-1e31ee7af74c","type":"availability_slot","attributes":{"id":"c214790f-0c43-4867-aa65-1e31ee7af74c","available":true,"starts_at":"2026-09-27T18:30:00.000-07:00","formatted_slot_name":"6:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"6:30 PM"}},{"id":"b1bbecc0-6407-41cd-94c6-5e5b3c2421e5","type":"availability_slot","attributes":{"id":"b1bbecc0-6407-41cd-94c6-5e5b3c2421e5","available":true,"starts_at":"2026-09-27T19:00:00.000-07:00","formatted_slot_name":"7:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"7:00 PM"}},{"id":"9accb571-993b-4de0-bd15-0d1ea31483db","type":"availability_slot","attributes":{"id":"9accb571-993b-4de0-bd15-0d1ea31483db","available":true,"starts_at":"2026-09-27T19:30:00.000-07:00","formatted_slot_name":"7:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"7:30 PM"}},{"id":"78b14813-56be-4b55-a3f1-1143582d83da","type":"availability_slot","attributes":{"id":"78b14813-56be-4b55-a3f1-1143582d83da","available":true,"starts_at":"2026-09-27T20:00:00.000-07:00","formatted_slot_name":"8:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"8:00 PM"}},{"id":"d04f3745-d211-425b-b808-1a6ac5e7e2c1","type":"availability_slot","attributes":{"id":"d04f3745-d211-425b-b808-1a6ac5e7e2c1","available":true,"starts_at":"2026-09-27T20:30:00.000-07:00","formatted_slot_name":"8:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"8:30 PM"}},{"id":"66d5b990-ddee-4d53-9231-5c0fb1d9689d","type":"availability_slot","attributes":{"id":"66d5b990-ddee-4d53-9231-5c0fb1d9689d","available":true,"starts_at":"2026-09-27T21:00:00.000-07:00","formatted_slot_name":"9:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"9:00 PM"}},{"id":"abc73ad0-2af4-4ebf-9661-3d2fb01f316c","type":"availability_slot","attributes":{"id":"abc73ad0-2af4-4ebf-9661-3d2fb01f316c","available":true,"starts_at":"2026-09-27T21:30:00.000-07:00","formatted_slot_name":"9:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"9:30 PM"}},{"id":"c030face-25b0-460f-973c-c5b8ef0773da","type":"availability_slot","attributes":{"id":"c030face-25b0-460f-973c-c5b8ef0773da","available":true,"starts_at":"2026-09-27T22:00:00.000-07:00","formatted_slot_name":"10:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"10:00 PM"}},{"id":"dd383e48-554e-42e8-95f4-860fea22b3aa","type":"availability_slot","attributes":{"id":"dd383e48-554e-42e8-95f4-860fea22b3aa","available":true,"starts_at":"2026-09-27T22:30:00.000-07:00","formatted_slot_name":"10:30 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"10:30 PM"}},{"id":"5bc8ccd0-d3bb-421e-85db-a5672d82046a","type":"availability_slot","attributes":{"id":"5bc8ccd0-d3bb-421e-85db-a5672d82046a","available":true,"starts_at":"2026-09-27T23:00:00.000-07:00","formatted_slot_name":"11:00 PM","length_in_minutes":1800,"localized_date":"09-27-2026","localized_time":"11:00 PM"}}]}}}}}}},"/api/v1/backdrop_categories":{"get":{"summary":"Fetch all backdrop categories","tags":["Backdrops"],"description":"Returns all active backdrop categories for the business, ordered by position.\n\nBackdrop categories organize photo booth backdrops into groups (e.g., \"Sequin Walls\", \"Flower Walls\", \"Custom Prints\"). Each category contains one or more backdrops.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `photobooth_backgrounds`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"backdrop categories found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"18","type":"backdrop_category","attributes":{"id":18,"name":"Sequin Walls","sub_header":null,"position":1,"sync_with_pb_backdrops":false,"recently_created":true},"relationships":{"photobooth_backgrounds":{"data":[]}}},{"id":"19","type":"backdrop_category","attributes":{"id":19,"name":"Flower Walls","sub_header":null,"position":2,"sync_with_pb_backdrops":false,"recently_created":true},"relationships":{"photobooth_backgrounds":{"data":[]}}}]}}}}}}},"/api/v1/backdrop_categories/{id}":{"get":{"summary":"Fetch a backdrop category by ID","tags":["Backdrops"],"description":"Returns the details of a single backdrop category, including its name, position, and whether it syncs with Photo Booth backdrops.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `photobooth_backgrounds`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the backdrop category","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"backdrop category found","content":{"application/json":{"example":{"data":{"id":"20","type":"backdrop_category","attributes":{"id":20,"name":"Sequin Walls","sub_header":null,"position":1,"sync_with_pb_backdrops":false,"recently_created":true},"relationships":{"photobooth_backgrounds":{"data":[]}}}}}}}}}},"/api/v1/bookings":{"post":{"summary":"Create a booking","tags":["Proposals/Confirmed Bookings"],"description":"Creates a booking -- an event the client has already committed to. For one they still have to accept, use `POST /api/v1/proposals`.\n\n`signature_collected` defaults to `true`, which creates the booking `confirmed`. Send `false` when you are still waiting on the contract and it is created `awaiting_signature` instead.\n\n### Attaching the client\n\n`contact_type` decides where the client comes from. It takes one of three exact strings -- anything else is rejected:\n\n| `contact_type` | What it does |\n| --- | --- |\n| `New Customer` | The default. Creates the client from the `contact_*` fields, and `contact_name` is required. If `contact_email` matches someone the business already has, that person is linked rather than duplicated. |\n| `Existing Customer` | Links a client who already exists. `customer_user_id` is required, and must be a user on this business. |\n| `None` | Creates the booking with nobody attached. |\n\nUnder `New Customer`, sending `contact_email` creates a full customer account the client can sign and pay through. Without one you get a plain contact record on the booking instead, which can do neither.\n\nThe `contact_*` address fields hold the client's address. The venue address is separate, in the `venue_*` fields.\n\n### Packages\n\n`packages` is required -- a booking with no package has nothing to price. Each entry needs an `event_type_id` (a package id from `GET /api/v1/packages`) and a `starts_at_date`. Send several to book more than one package on the same event.\n\nPricing, tax, travel fees and the title are all calculated from the packages and the venue. Send `total_amount` only to override the calculated total.\n\n### Dates, times and amounts\n\nDates are ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's own date format setting, so `03-04-2027` is March 4th for a US business and April 3rd for an international one. Times take `11:00AM`, `2:30pm` or `14:30`.\n\nAmounts are in the business's currency in whole units rather than cents, so `1250.00` is $1,250.00.\n\n**Required permission:** `event_create`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"booking created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"945","type":"event","attributes":{"id":945,"title":"John Smith’s Lavina","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:45.752-07:00","created_at":"2026-08-27T14:57:45.753-07:00","created_via":"api","venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":"20260827-01","billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"VKW-2C2H-R7W","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2027-12-31T11:00:00.000-08:00","ends_at":"2027-12-31T14:00:00.000-08:00","length_in_minutes":"180.0","length_in_hours":"3.0","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"12-31-2027","starts_at_date_iso8601":"2027-12-31","starts_at_time":"11:00 AM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"Lavina","package_group_name":"Sample","service_name":"Photo booth 62","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2027-12-31T00:00:00.000-08:00","customer_ids":"2367","customer_names":"John Smith","customer_emails":"jsmith@example.com","customer_phones":"555-555-5555","customer_addresses":"18 Beacon Street, Boston, MA 02108","customer_and_contact_ids":"2367","customer_and_contact_names":"John Smith","customer_and_contact_emails":"jsmith@example.com","customer_and_contact_phones":"555-555-5555","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4148,"brand_name":"Grimes-Koepp 424","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Api","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-424-36c8d6d0.cc.localhost/events/945-john-smith-s-lavina?token=VKW-2C2H-R7W","questionnaires_url":"https://test-424-36c8d6d0.cc.localhost/events/945-john-smith-s-lavina/forms?token=VKW-2C2H-R7W","payment_url":"https://test-424-36c8d6d0.cc.localhost/events/945-john-smith-s-lavina/payments/new?token=VKW-2C2H-R7W","invoice_url":"https://test-424-36c8d6d0.cc.localhost/events/945-john-smith-s-lavina/invoice?token=VKW-2C2H-R7W","designs_url":"https://test-424-36c8d6d0.cc.localhost/events/945-john-smith-s-lavina/designs?token=VKW-2C2H-R7W","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[{"id":"452","type":"event_booking"}]},"proposal_alternatives":{"data":[]},"event_users":{"data":[{"id":"33","type":"event_user"}]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}},"422":{"description":"invalid contact_type"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"signature_collected":{"type":"boolean","description":"Has the signature already been collected? Defaults to `true`, creating a `confirmed` booking. `false` creates it `awaiting_signature`."},"contact_type":{"type":"string","enum":["New Customer","Existing Customer","None"],"default":"New Customer","description":"Where the client comes from. See the description above."},"customer_user_id":{"type":"integer","description":"The existing client's user ID, which must belong to this business. Required when `contact_type` is `Existing Customer`."},"contact_name":{"type":"string","description":"Client's name. Required when `contact_type` is `New Customer`."},"contact_email":{"type":"string","description":"Client's email. Creates a full customer account rather than a plain contact record."},"contact_phone":{"type":"string","description":"Client's phone"},"contact_company_name":{"type":"string","description":"Client's company name"},"contact_description":{"type":"string","description":"Client's role, e.g. \"Bride\" or \"Father of the Groom\""},"contact_street":{"type":"string","description":"Client's street address"},"contact_city":{"type":"string","description":"Client's city"},"contact_state_code":{"type":"string","description":"Client's state or province code, in whatever form the business's country uses, e.g. `MA`"},"contact_postal_code":{"type":"string","description":"Client's postal code"},"send_contact_invitation_to_create_account":{"type":"boolean","description":"Email the client an invitation to create an account. Requires `contact_email`."},"send_booking_confirmation_emails":{"type":"boolean","description":"Send the client the booking confirmation emails. Requires `contact_email`."},"venue_name":{"type":"string","description":"Venue name"},"venue_address":{"type":"string","description":"Venue street address"},"venue_city":{"type":"string","description":"Venue city"},"venue_state":{"type":"string","description":"Venue state or province code, in whatever form the business's country uses, e.g. `MA`"},"venue_zip":{"type":"string","description":"Venue postal code"},"venue_google_place_id":{"type":"string","description":"Google Place ID for the venue"},"venue_latitude":{"type":"number","description":"Venue latitude"},"venue_longitude":{"type":"number","description":"Venue longitude"},"add_tax":{"type":"boolean","description":"Apply tax based on the venue's tax zone. Defaults to `true`."},"add_travel":{"type":"boolean","description":"Apply travel fees based on the venue's travel zone. Defaults to `true`."},"public_notes":{"type":"string","description":"Notes visible to the client"},"private_notes":{"type":"string","description":"Notes only staff can see"},"custom_title":{"type":"string","description":"Overrides the generated title"},"brand_id":{"type":"integer","description":"Brand to book under, which must be an active brand of this business. Defaults to the primary brand."},"lead_id":{"type":"integer","description":"Lead this booking converts, from `GET /api/v1/leads`. The lead's details and attribution carry over and it is marked converted."},"total_amount":{"type":"number","description":"Overrides the calculated event total. In whole currency units, so `1250.00` means $1,250.00. Max 999000."},"paid_amount":{"type":"number","description":"Payment already collected outside Check Cherry, recorded against the booking. In whole currency units. Max 999000."},"custom_deposit_amount":{"type":"number","description":"Overrides the calculated deposit due. In whole currency units, and capped at the event total. Max 999000."},"packages":{"type":"array","description":"The packages being booked. At least one is required.","items":{"type":"object","properties":{"event_type_id":{"type":"string","description":"Package ID, from `GET /api/v1/packages`. Send the literal `custom` to price a one-off package instead, alongside `one_off_custom_title` and `total_amount`."},"starts_at_date":{"type":"string","description":"Start date, as ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's date format setting."},"starts_at_time":{"type":"string","description":"Start time, e.g. `11:00AM`, `2:30pm` or `14:30`. Required for packages scheduled by date and time."},"ends_at_time":{"type":"string","description":"Overrides the end time implied by the length. Same formats as `starts_at_time`."},"length_in_minutes":{"type":"integer","description":"Length in minutes, from 1 to 1440. Required for packages that let extra hours be booked, otherwise defaults to the package's own length."},"length_in_days":{"type":"integer","description":"Length in days, from 1 to 1000. Required for packages that let extra days be booked."},"units":{"type":"integer","description":"Unit count, for packages priced per unit. Must fall inside one of that package's unit ranges, which are listed on `GET /api/v1/packages/{id}`."},"package_unit_range_id":{"type":"integer","description":"Unit range ID, for packages priced by unit range. Must be one of that package's own ranges, from `GET /api/v1/packages/{id}`."},"backdrop_id":{"type":"integer","description":"Backdrop ID, from `GET /api/v1/photobooth_backgrounds`"},"add_on_ids":{"type":"string","description":"Comma-separated add-on IDs, e.g. `4,17`. Prefix an ID with a quantity to book more than one: `2x17`."},"staff_id":{"type":"integer","description":"Staff member assigned to this package, who must belong to this business. Ignored when the package's service assigns staff automatically."},"one_off_custom_title":{"type":"string","description":"Title for a one-off package. Required when `event_type_id` is `custom`."},"custom_description_html":{"type":"string","description":"Description for a one-off package"}},"required":["event_type_id","starts_at_date"]}}},"required":["packages"]}}}}}},"/api/v1/proposals":{"post":{"summary":"Create a proposal","tags":["Proposals/Confirmed Bookings"],"description":"Creates a proposal -- an event the client still has to accept. For one they have already committed to, use `POST /api/v1/bookings`.\n\n`proposal_date_reserved` decides what happens to the date while they decide. It defaults to `false`, leaving the date open to other bookings; send `true` to hold it for them. `proposal_valid_through` is the last day they can accept, and defaults to the business's own expiry setting. A date after the event is quietly pulled back to the event date; one in the past is rejected.\n\n### Attaching the client\n\n`contact_type` decides where the client comes from. It takes one of three exact strings -- anything else is rejected:\n\n| `contact_type` | What it does |\n| --- | --- |\n| `New Customer` | The default. Creates the client from the `contact_*` fields, and `contact_name` is required. If `contact_email` matches someone the business already has, that person is linked rather than duplicated. |\n| `Existing Customer` | Links a client who already exists. `customer_user_id` is required, and must be a user on this business. |\n| `None` | Creates the proposal with nobody attached. |\n\nUnder `New Customer`, sending `contact_email` creates a full customer account the client can accept and pay through. Without one you get a plain contact record on the proposal instead, which can do neither.\n\nThe `contact_*` address fields hold the client's address. The venue address is separate, in the `venue_*` fields.\n\n### Packages\n\n`packages` is required -- a proposal with no package has nothing to price. Each entry needs an `event_type_id` (a package id from `GET /api/v1/packages`) and a `starts_at_date`. Send several to propose more than one package on the same event.\n\nPricing, tax, travel fees and the title are all calculated from the packages and the venue. Send `total_amount` only to override the calculated total.\n\n### Dates, times and amounts\n\nDates are ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's own date format setting, so `03-04-2027` is March 4th for a US business and April 3rd for an international one. Times take `11:00AM`, `2:30pm` or `14:30`.\n\nAmounts are in the business's currency in whole units rather than cents, so `1250.00` is $1,250.00.\n\n**Required permission:** `event_create`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"proposal created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"946","type":"event","attributes":{"id":946,"title":"John Smith’s Numbers","status":"proposal_date_reserved","formatted_status":"Proposal (Date Reserved)","formatted_status_with_context":"Proposal (Date Reserved)","booked_at":null,"created_at":"2026-08-27T14:57:46.107-07:00","created_via":"api","venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":"20260827-01","billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"6TX-ZZVK-7VC","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2027-12-31T11:00:00.000-08:00","ends_at":"2027-12-31T14:00:00.000-08:00","length_in_minutes":"180.0","length_in_hours":"3.0","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"12-31-2027","starts_at_date_iso8601":"2027-12-31","starts_at_time":"11:00 AM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"Numbers","package_group_name":"Sample","service_name":"Photo booth 64","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2027-12-31T00:00:00.000-08:00","customer_ids":"2370","customer_names":"John Smith","customer_emails":"jsmith@example.com","customer_phones":"555-555-5555","customer_addresses":"","customer_and_contact_ids":"2370","customer_and_contact_names":"John Smith","customer_and_contact_emails":"jsmith@example.com","customer_and_contact_phones":"555-555-5555","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4152,"brand_name":"Brakus and Sons 428","primary_image":{"hero_variant":null},"booked_at_description":"Created less than a minute ago","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-428-b61a78af.cc.localhost/events/946-john-smith-s-numbers?token=6TX-ZZVK-7VC","questionnaires_url":"https://test-428-b61a78af.cc.localhost/events/946-john-smith-s-numbers/forms?token=6TX-ZZVK-7VC","payment_url":"https://test-428-b61a78af.cc.localhost/events/946-john-smith-s-numbers/payments/new?token=6TX-ZZVK-7VC","invoice_url":"https://test-428-b61a78af.cc.localhost/events/946-john-smith-s-numbers/invoice?token=6TX-ZZVK-7VC","designs_url":"https://test-428-b61a78af.cc.localhost/events/946-john-smith-s-numbers/designs?token=6TX-ZZVK-7VC","proposal_url":"https://test-428-b61a78af.cc.localhost/proposals/946-john-smith-s-numbers?token=6TX-ZZVK-7VC","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[{"id":"453","type":"event_booking"}]},"proposal_alternatives":{"data":[]},"event_users":{"data":[{"id":"34","type":"event_user"}]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}},"422":{"description":"existing customer without customer_user_id"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"proposal_date_reserved":{"type":"boolean","description":"Hold the date while the client decides, blocking other bookings. Defaults to `false`."},"proposal_valid_through":{"type":"string","description":"Last day the client can accept, as `YYYY-MM-DD`. Must not be in the past, and is capped at the event date. Defaults to the business's own expiry setting."},"contact_type":{"type":"string","enum":["New Customer","Existing Customer","None"],"default":"New Customer","description":"Where the client comes from. See the description above."},"customer_user_id":{"type":"integer","description":"The existing client's user ID, which must belong to this business. Required when `contact_type` is `Existing Customer`."},"contact_name":{"type":"string","description":"Client's name. Required when `contact_type` is `New Customer`."},"contact_email":{"type":"string","description":"Client's email. Creates a full customer account rather than a plain contact record."},"contact_phone":{"type":"string","description":"Client's phone"},"contact_company_name":{"type":"string","description":"Client's company name"},"contact_description":{"type":"string","description":"Client's role, e.g. \"Bride\" or \"Father of the Groom\""},"contact_street":{"type":"string","description":"Client's street address"},"contact_city":{"type":"string","description":"Client's city"},"contact_state_code":{"type":"string","description":"Client's state or province code, in whatever form the business's country uses, e.g. `MA`"},"contact_postal_code":{"type":"string","description":"Client's postal code"},"venue_name":{"type":"string","description":"Venue name"},"venue_address":{"type":"string","description":"Venue street address"},"venue_city":{"type":"string","description":"Venue city"},"venue_state":{"type":"string","description":"Venue state or province code, in whatever form the business's country uses, e.g. `MA`"},"venue_zip":{"type":"string","description":"Venue postal code"},"venue_google_place_id":{"type":"string","description":"Google Place ID for the venue"},"venue_latitude":{"type":"number","description":"Venue latitude"},"venue_longitude":{"type":"number","description":"Venue longitude"},"add_tax":{"type":"boolean","description":"Apply tax based on the venue's tax zone. Defaults to `true`."},"add_travel":{"type":"boolean","description":"Apply travel fees based on the venue's travel zone. Defaults to `true`."},"public_notes":{"type":"string","description":"Notes visible to the client"},"private_notes":{"type":"string","description":"Notes only staff can see"},"custom_title":{"type":"string","description":"Overrides the generated title"},"brand_id":{"type":"integer","description":"Brand to propose under, which must be an active brand of this business. Defaults to the primary brand."},"lead_id":{"type":"integer","description":"Lead this proposal converts, from `GET /api/v1/leads`. The lead's details and attribution carry over and it is marked converted."},"total_amount":{"type":"number","description":"Overrides the calculated event total. In whole currency units, so `1250.00` means $1,250.00. Max 999000."},"paid_amount":{"type":"number","description":"Payment already collected outside Check Cherry, recorded against the proposal. In whole currency units. Max 999000."},"custom_deposit_amount":{"type":"number","description":"Overrides the calculated deposit due. In whole currency units, and capped at the event total. Max 999000."},"packages":{"type":"array","description":"The packages being proposed. At least one is required.","items":{"type":"object","properties":{"event_type_id":{"type":"string","description":"Package ID, from `GET /api/v1/packages`. Send the literal `custom` to price a one-off package instead, alongside `one_off_custom_title` and `total_amount`."},"starts_at_date":{"type":"string","description":"Start date, as ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's date format setting."},"starts_at_time":{"type":"string","description":"Start time, e.g. `11:00AM`, `2:30pm` or `14:30`. Required for packages scheduled by date and time."},"ends_at_time":{"type":"string","description":"Overrides the end time implied by the length. Same formats as `starts_at_time`."},"length_in_minutes":{"type":"integer","description":"Length in minutes, from 1 to 1440. Required for packages that let extra hours be booked, otherwise defaults to the package's own length."},"length_in_days":{"type":"integer","description":"Length in days, from 1 to 1000. Required for packages that let extra days be booked."},"units":{"type":"integer","description":"Unit count, for packages priced per unit. Must fall inside one of that package's unit ranges, which are listed on `GET /api/v1/packages/{id}`."},"package_unit_range_id":{"type":"integer","description":"Unit range ID, for packages priced by unit range. Must be one of that package's own ranges, from `GET /api/v1/packages/{id}`."},"backdrop_id":{"type":"integer","description":"Backdrop ID, from `GET /api/v1/photobooth_backgrounds`"},"add_on_ids":{"type":"string","description":"Comma-separated add-on IDs, e.g. `4,17`. Prefix an ID with a quantity to propose more than one: `2x17`."},"staff_id":{"type":"integer","description":"Staff member assigned to this package, who must belong to this business. Ignored when the package's service assigns staff automatically."},"one_off_custom_title":{"type":"string","description":"Title for a one-off package. Required when `event_type_id` is `custom`."},"custom_description_html":{"type":"string","description":"Description for a one-off package"}},"required":["event_type_id","starts_at_date"]}}},"required":["packages"]}}}}}},"/api/v1/brands/links":{"get":{"summary":"List public-facing links for every brand on the account","tags":["Brands"],"description":"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.\n\nA 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.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"brand links returned","content":{"application/json":{"example":{"data":[{"id":"4156","type":"brand_links","attributes":{"name":"McLaughlin LLC 432","host":"test-432-6a230c58.cc.localhost","primary":true,"links":{"online_booking":"https://test-432-6a230c58.cc.localhost/reservation","sign_in":"https://test-432-6a230c58.cc.localhost/users/sign_in","availability_calendar":"https://test-432-6a230c58.cc.localhost/availability_calendar","mini_sessions":"https://test-432-6a230c58.cc.localhost/mini_sessions","add_on_gallery":"https://test-432-6a230c58.cc.localhost/add_ons","backdrop_gallery":"https://test-432-6a230c58.cc.localhost/photobooth_backdrops","design_template_gallery":"https://test-432-6a230c58.cc.localhost/design_templates","staff_profiles":"https://test-432-6a230c58.cc.localhost/team","lead_forms":[{"id":6,"name":"Wedding Inquiry","default":false,"url":"https://test-432-6a230c58.cc.localhost/contact/6"}],"appointment_schedulers":[{"id":13,"title":"30-minute consult","user_id":2372,"user_full_name":"Verona Smith","url":"https://test-432-6a230c58.cc.localhost/schedule/2372/13"}]}}}]}}}}}}},"/api/v1/checklist_categories":{"get":{"summary":"Fetch checklist categories","tags":["Checklists"],"description":"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.\n\nAdmin users see every category; non-admin staff (and integration keys minted by them) only see categories with `allow_staff_view` enabled.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"checklist categories found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"33","type":"checklist_category","attributes":{"id":33,"name":"Day-of Setup"}}]}}}}}}},"/api/v1/checklist_items":{"get":{"summary":"Fetch checklist items","tags":["Checklists"],"description":"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.\n\nVisibility 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.\n\nThe response includes `meta.total_count` and `meta.per_page` for pagination.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"checklist_id","in":"query","description":"Filter to items on a single checklist","required":false,"schema":{"type":"integer"}},{"name":"checkable_type","in":"query","description":"Filter to items whose checklist is attached to this type:\n * `Event` \n * `User` \n * `Franchise` \n ","enum":["Event","User","Franchise"],"required":false,"schema":{"type":"string"}},{"name":"checkable_id","in":"query","description":"Filter to items whose checklist is attached to the record with this ID","required":false,"schema":{"type":"integer"}},{"name":"filter","in":"query","description":"Status filter","enum":["Show All","Show Unchecked","Show Checked","Show Past Due","Show Due Soon","Show Without Due Date","Show With Notes"],"required":false,"schema":{"type":"string"}},{"name":"assigned_filter","in":"query","description":"Assignment filter relative to the authenticated user","enum":["Show All","Assigned to Me","Unassigned"],"required":false,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Full-text search across item titles and notes","required":false,"schema":{"type":"string"}},{"name":"sort_by","in":"query","description":"Sort order","enum":["Sort Manually","Sort by Due Date","Sort by Event Date","Sort by Recently Created"],"required":false,"schema":{"type":"string"}},{"name":"show_proposals","in":"query","description":"Include items on proposal-status event checklists (default: true)","required":false,"schema":{"type":"boolean"}},{"name":"only_show_items_in_global_list","in":"query","description":"Only return items flagged to appear in the global task list","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Number of results per page (default: 50)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist items found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":1,"per_page":50,"page":1,"total_pages":1},"data":[{"id":"24","type":"checklist_item","attributes":{"id":24,"title":"Confirm venue arrival time","notes":null,"checked_at":null,"deleted":false,"position":0,"due_on":null,"taskable_type":null,"taskable_id":null,"taskable_description":null,"checklist_id":32,"user_ids":[],"updated_at":"2026-08-27T14:57:46.624-07:00","created_at":"2026-08-27T14:57:46.624-07:00","checkable_description":"Sarah and John's Wedding on Sep 03 / Sample Checklist","checked":false,"editable":true,"checkable_id":947,"checkable_type":"Event","checkable_status":"confirmed","checklist_name":"Sample Checklist","user_full_names":[]},"relationships":{"checklist":{"data":{"id":"32","type":"checklist"}},"users":{"data":[]}}}]}}}}}},"post":{"summary":"Create a checklist item","tags":["Checklists"],"description":"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).\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"checklist item created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"25","type":"checklist_item","attributes":{"id":25,"title":"Confirm venue arrival time","notes":null,"checked_at":null,"deleted":false,"position":0,"due_on":null,"taskable_type":null,"taskable_id":null,"taskable_description":null,"checklist_id":33,"user_ids":[],"updated_at":"2026-08-27T14:57:47.037-07:00","created_at":"2026-08-27T14:57:47.037-07:00","checkable_description":"Sarah and John's Wedding on Sep 03 / Sample Checklist","checked":false,"editable":true,"checkable_id":948,"checkable_type":"Event","checkable_status":"confirmed","checklist_name":"Sample Checklist","user_full_names":[]},"relationships":{"checklist":{"data":{"id":"33","type":"checklist"}},"users":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Item title"},"notes":{"type":"string","description":"Free-form notes"},"due_on":{"type":"string","description":"Due date (YYYY-MM-DD)"},"checklist_id":{"type":"integer","description":"Optional ID of the checklist to add the item to. Omit to use the franchise-wide Shared Checklist."},"checked":{"type":"boolean","description":"Whether the new item should start in the checked state"},"user_ids":{"type":"array","items":{"type":"integer"},"description":"Staff member IDs to assign to this item"}},"required":["title"]}}}}}},"/api/v1/checklist_items/{id}":{"get":{"summary":"Fetch checklist item by ID","tags":["Checklists"],"description":"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.\n\nVisibility is inherited from the parent checklist — see the Checklists tag overview for details.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist item","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist item found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"26","type":"checklist_item","attributes":{"id":26,"title":"Confirm venue arrival time","notes":null,"checked_at":null,"deleted":false,"position":0,"due_on":null,"taskable_type":null,"taskable_id":null,"taskable_description":null,"checklist_id":34,"user_ids":[],"updated_at":"2026-08-27T14:57:47.205-07:00","created_at":"2026-08-27T14:57:47.205-07:00","checkable_description":"Sarah and John's Wedding on Sep 03 / Sample Checklist","checked":false,"editable":true,"checkable_id":949,"checkable_type":"Event","checkable_status":"confirmed","checklist_name":"Sample Checklist","user_full_names":[]},"relationships":{"checklist":{"data":{"id":"34","type":"checklist"}},"users":{"data":[]}}}}}}}}},"put":{"summary":"Update a checklist item","tags":["Checklists"],"description":"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.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist item","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist item updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"27","type":"checklist_item","attributes":{"id":27,"title":"Confirm venue arrival time and load-in door","notes":"Loading dock is on 4th St","checked_at":null,"deleted":false,"position":0,"due_on":null,"taskable_type":null,"taskable_id":null,"taskable_description":null,"checklist_id":35,"user_ids":[],"updated_at":"2026-08-27T14:57:47.411-07:00","created_at":"2026-08-27T14:57:47.369-07:00","checkable_description":"Sarah and John's Wedding on Sep 03 / Sample Checklist","checked":false,"editable":true,"checkable_id":950,"checkable_type":"Event","checkable_status":"confirmed","checklist_name":"Sample Checklist","user_full_names":[]},"relationships":{"checklist":{"data":{"id":"35","type":"checklist"}},"users":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Item title"},"notes":{"type":"string","description":"Free-form notes"},"due_on":{"type":"string","description":"Due date (YYYY-MM-DD)"},"checked":{"type":"boolean","description":"Whether the item is checked"},"user_ids":{"type":"array","items":{"type":"integer"},"description":"Staff member IDs assigned to this item"}}}}}}},"delete":{"summary":"Delete a checklist item","tags":["Checklists"],"description":"Soft-deletes a checklist item. The item is hidden from listings but retained in the database for record-keeping.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist item","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist item deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/checklist_items/{id}/move_to_position":{"put":{"summary":"Move a checklist item to a new position","tags":["Checklists"],"description":"Reorders the checklist item within its checklist by inserting it at the given zero-indexed position. Other items shift to make room.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist item","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist item moved","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"position":{"type":"integer","description":"Zero-indexed position to move the item to"}},"required":["position"]}}}}}},"/api/v1/checklist_items/{id}/mark_as_checked":{"put":{"summary":"Mark a checklist item as checked","tags":["Checklists"],"description":"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.\n\nChecking 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.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist item","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist item checked","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"30","type":"checklist_item","attributes":{"id":30,"title":"Confirm venue arrival time","notes":null,"checked_at":"2026-08-27T14:57:47.941-07:00","deleted":false,"position":0,"due_on":null,"taskable_type":null,"taskable_id":null,"taskable_description":null,"checklist_id":38,"user_ids":[],"updated_at":"2026-08-27T14:57:47.941-07:00","created_at":"2026-08-27T14:57:47.908-07:00","checkable_description":"Sarah and John's Wedding on Sep 03 / Sample Checklist","checked":true,"editable":true,"checkable_id":953,"checkable_type":"Event","checkable_status":"confirmed","checklist_name":"Sample Checklist","user_full_names":[]},"relationships":{"checklist":{"data":{"id":"38","type":"checklist"}},"users":{"data":[]}}}}}}}}}},"/api/v1/checklist_items/{id}/mark_as_unchecked":{"put":{"summary":"Mark a checklist item as unchecked","tags":["Checklists"],"description":"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.\n\nChecking 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.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist item","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist item unchecked","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"31","type":"checklist_item","attributes":{"id":31,"title":"Confirm venue arrival time","notes":null,"checked_at":null,"deleted":false,"position":0,"due_on":null,"taskable_type":null,"taskable_id":null,"taskable_description":null,"checklist_id":39,"user_ids":[],"updated_at":"2026-08-27T14:57:48.109-07:00","created_at":"2026-08-27T14:57:48.074-07:00","checkable_description":"Sarah and John's Wedding on Sep 03 / Sample Checklist","checked":false,"editable":true,"checkable_id":954,"checkable_type":"Event","checkable_status":"confirmed","checklist_name":"Sample Checklist","user_full_names":[]},"relationships":{"checklist":{"data":{"id":"39","type":"checklist"}},"users":{"data":[]}}}}}}}}}},"/api/v1/checklists":{"get":{"summary":"Fetch checklists","tags":["Checklists"],"description":"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).\n\nVisibility 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.\n\nEach checklist includes a `complete_count` (number of checked items) and `count` (total items) to support progress displays without a separate request.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"query","description":"Filter checklists by event ID","required":false,"schema":{"type":"integer"}},{"name":"page","in":"query","required":false,"description":"Page number (default: 1)","schema":{"type":"integer"}},{"name":"per","in":"query","required":false,"description":"Results per page (default: 50)","schema":{"type":"integer"}}],"responses":{"200":{"description":"checklists found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":1,"per_page":50,"page":1,"total_pages":1},"data":[{"id":"40","type":"checklist","attributes":{"id":40,"name":"Day-of Setup","checkable_type":"Event","checkable_id":955,"allow_edit":true,"complete_count":0,"count":0}}]}}}}}},"post":{"summary":"Create a checklist","tags":["Checklists"],"description":"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.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"checklist created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"41","type":"checklist","attributes":{"id":41,"name":"Day-of Setup","checkable_type":"Event","checkable_id":956,"allow_edit":true,"complete_count":0,"count":0}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event_id":{"type":"integer","description":"ID of the event the checklist should be attached to"},"checklist_category_id":{"type":"integer","description":"Optional checklist category to seed the new checklist from"}},"required":["event_id"]}}}}}},"/api/v1/checklists/{id}":{"get":{"summary":"Fetch checklist by ID","tags":["Checklists"],"description":"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`).\n\nVisibility is determined automatically based on the authenticated user's role and the checklist's view flags — see the Checklists tag overview for details.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"42","type":"checklist","attributes":{"id":42,"name":"Day-of Setup","checkable_type":"Event","checkable_id":957,"allow_edit":true,"complete_count":0,"count":0}}}}}}}},"delete":{"summary":"Delete a checklist","tags":["Checklists"],"description":"Permanently removes a checklist and all of its items. The deletion is logged on the attached event's change history when applicable.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/checklists/{id}/reset":{"put":{"summary":"Reset a checklist","tags":["Checklists"],"description":"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.\n\n**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.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the checklist","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"checklist reset","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/design_templates":{"get":{"summary":"Fetch all design templates","tags":["Design Templates"],"description":"Fetch all design templates for a business.\n\n**Required permission:** `design_template_read`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"design templates found","content":{"application/json":{"example":{"data":[{"id":"23","type":"design_template","attributes":{"id":23,"name":"Sample Template","description":"Sample description","video_url":null,"purchase_url":"https://example.com/gallery/123/download","number_of_photos":3,"design_category_tag_ids":[],"design_category_tag_names":[],"design_category_layout_ids":[],"design_category_layout_names":[],"primary_image":{"video_variant":null},"additional_images":[]},"relationships":{"design_template_category":{"data":{"id":"40","type":"design_template_category"}},"design_category_tags":{"data":[]},"design_category_layouts":{"data":[]}}}]}}}}}}},"/api/v1/design_templates?include=design_template_category,design_category_tags,design_category_layouts":{"get":{"summary":"Fetch all design templates with includes","tags":["Design Templates"],"description":"Can fetch categories and tags for design templates.\n\n**Required permission:** `design_template_read`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"design templates with includes found","content":{"application/json":{"example":{"data":[{"id":"24","type":"design_template","attributes":{"id":24,"name":"Sample Template","description":"Sample description","video_url":null,"purchase_url":"https://example.com/gallery/123/download","number_of_photos":3,"design_category_tag_ids":[],"design_category_tag_names":[],"design_category_layout_ids":[],"design_category_layout_names":[],"primary_image":{"video_variant":null},"additional_images":[]},"relationships":{"design_template_category":{"data":{"id":"41","type":"design_template_category"}},"design_category_tags":{"data":[]},"design_category_layouts":{"data":[]}}}],"included":[{"id":"41","type":"design_template_category","attributes":{"id":41,"name":"Category 14","kind":"DesignTemplate"}}]}}}}}}},"/api/v1/discount_codes":{"get":{"summary":"Fetch all discount codes","tags":["Discount Codes"],"description":"Returns the business's discount codes (coupons), ordered by code.\n\nBy default only **active** codes are returned — those that have not been deactivated and whose validity window includes today. Use the `visibility` parameter to return expired, deactivated, or all codes instead.\n\nEach code describes how the discount is calculated (`adjust_based_on` of `flat_rate` or `percent`), what it applies to (`applies_to_type`), and its validity window. To apply a code to an event, use the event discount code endpoint.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"visibility","in":"query","required":false,"enum":["active","expired","inactive","all"],"description":"Which discount codes to return. Defaults to `active`.:\n * `active` \n * `expired` \n * `inactive` \n * `all` \n ","schema":{"type":"string"}}],"responses":{"200":{"description":"discount codes found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"25","type":"discount_code","attributes":{"id":25,"code":"SAVE10","description":"MyString","status":"active","adjust_based_on":"flat_rate","discount_amount":"50.00","discount_amount_cents":5000,"discount_amount_currency":"USD","discount_amount_formatted":"$50","discount_percent":null,"applies_to_type":"specific_items","applies_to_type_formatted":"Each Specific Item","validity_based_on":"event_date","valid_starting":"2026-07-27","valid_thru":"2026-09-27","valid_starting_formatted":"07-27-2026","valid_thru_formatted":"09-27-2026","expired":false}},{"id":"26","type":"discount_code","attributes":{"id":26,"code":"WELCOME25","description":"MyString","status":"active","adjust_based_on":"flat_rate","discount_amount":"50.00","discount_amount_cents":5000,"discount_amount_currency":"USD","discount_amount_formatted":"$50","discount_percent":null,"applies_to_type":"specific_items","applies_to_type_formatted":"Each Specific Item","validity_based_on":"event_date","valid_starting":"2026-07-27","valid_thru":"2026-09-27","valid_starting_formatted":"07-27-2026","valid_thru_formatted":"09-27-2026","expired":false}}]}}}}}}},"/api/v1/discount_codes/{id}":{"get":{"summary":"Fetch a discount code by ID","tags":["Discount Codes"],"description":"Returns the details of a single discount code, including its discount amount or percent, what it applies to, and its validity window.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the discount code","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"discount code found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"27","type":"discount_code","attributes":{"id":27,"code":"SAVE10","description":"MyString","status":"active","adjust_based_on":"flat_rate","discount_amount":"50.00","discount_amount_cents":5000,"discount_amount_currency":"USD","discount_amount_formatted":"$50","discount_percent":null,"applies_to_type":"full_event","applies_to_type_formatted":"Complete Booking","validity_based_on":"event_date","valid_starting":"2026-07-27","valid_thru":"2026-09-27","valid_starting_formatted":"07-27-2026","valid_thru_formatted":"09-27-2026","expired":false}}}}}}}}},"/api/v1/events/{event_id}/booking_questions":{"get":{"summary":"Fetch booking question answers for an event","tags":["Proposals/Confirmed Bookings"],"description":"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`.\n\nUse the `column_name` of each entry as the key when sending updates via the `PATCH /api/v1/events/{event_id}/booking_questions` endpoint.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"The unique ID of the event","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"booking questions returned","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"13","type":"event_booking_question","attributes":{"id":13,"event_id":960,"booking_question_id":13,"editable":true,"column_name":"guest_count","name":"Estimated Guest Count","label":"Estimated guest count","kind":"text","link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_source","type":"event_booking_question","attributes":{"id":"utm_source","event_id":960,"booking_question_id":null,"editable":false,"column_name":"utm_source","name":"UTM Source","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_campaign","type":"event_booking_question","attributes":{"id":"utm_campaign","event_id":960,"booking_question_id":null,"editable":false,"column_name":"utm_campaign","name":"UTM Campaign","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_medium","type":"event_booking_question","attributes":{"id":"utm_medium","event_id":960,"booking_question_id":null,"editable":false,"column_name":"utm_medium","name":"UTM Medium","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_term","type":"event_booking_question","attributes":{"id":"utm_term","event_id":960,"booking_question_id":null,"editable":false,"column_name":"utm_term","name":"UTM Term","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_content","type":"event_booking_question","attributes":{"id":"utm_content","event_id":960,"booking_question_id":null,"editable":false,"column_name":"utm_content","name":"UTM Content","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}}]}}}}}},"patch":{"summary":"Update booking question answers for an event","tags":["Proposals/Confirmed Bookings"],"description":"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).\n\nOnly the keys you include are touched — other answers on the event are preserved.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"The unique ID of the event","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"booking questions updated","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"custom_questions":{"type":"object","description":"Keys are booking-question column names; values are the answer to record.","additionalProperties":true}},"required":["custom_questions"]}}}}}},"/api/v1/event_bookings":{"get":{"summary":"Fetch all event bookings","tags":["Proposals/Confirmed Bookings"],"description":"Returns a paginated list of event bookings for the specified business. Results can be filtered by date range.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `event_add_ons`, `event_extras`, `event_photobooth_background`, `event_booking_extra_categories`.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_date_start","in":"query","description":"Event Date (Start)","required":false,"schema":{"type":"string"}},{"name":"event_date_end","in":"query","description":"Event Date (End)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Number of results per page","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event bookings found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"454","type":"event_booking","attributes":{"id":454,"event_id":962,"event_type_id":843,"title":"Sarah and John's Wedding","name":"Elenor","starts_at":"2026-09-17T14:57:49.620-07:00","ends_at":"2026-09-17T15:57:49.620-07:00","starts_at_time":"2:57 PM","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","brand_name":"Kovacek-Fahey 496","canceled":false,"postponed":false,"date_mode":"date_time","description_html":"","override_ends_at":null,"length_in_minutes":"60.0","length_in_days":1,"event_type_unit_range":null,"units":null,"formatted_datetime_range":"Thursday, September 17, 2026 • 2:57 PM - 3:57 PM","formatted_date_range":"Thursday, September 17, 2026","formatted_time_range":"2:57 PM - 3:57 PM","formatted_units":null,"required_staff_count":1,"override_required_staff_count":null,"assigned_staff_count":0,"fully_staffed":false,"remaining_staff_needed":1,"staff_assignment_type":"none","staff_may_claim":false,"staff_may_request":false,"pending_staff_request_count":0,"staffed_by_current_user":false,"requested_by_current_user":false,"staff_member_ids":[],"staff_member_names":null,"staff_member_abbreviations":null,"expired_proposal":false,"primary_image_attachment":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"},"package_group_name":"Sample","service_name":"Photo booth 66","default_staff_title":null,"override_price":null,"override_price_cents":null,"override_price_currency":null,"override_price_formatted":null,"taxable":null},"relationships":{"event_add_ons":{"data":[]},"event_photobooth_background":{"data":null},"event_booking_extra_categories":{"data":[]},"event_extras":{"data":[]}}}]}}}}}}},"/api/v1/event_bookings/{event_booking_id}":{"get":{"summary":"Fetch event booking by ID","tags":["Proposals/Confirmed Bookings"],"description":"Returns the full details of a single event booking, including package, schedule, pricing, and venue information.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `event_add_ons`, `event_extras`, `event_photobooth_background`, `event_booking_extra_categories`.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_booking_id","in":"path","description":"Event Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event booking found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"455","type":"event_booking","attributes":{"id":455,"event_id":963,"event_type_id":844,"title":"Sarah and John's Wedding","name":"Susie","starts_at":"2026-09-17T14:57:49.809-07:00","ends_at":"2026-09-17T15:57:49.809-07:00","starts_at_time":"2:57 PM","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","brand_name":"Dibbert, Nitzsche and Klein 500","canceled":false,"postponed":false,"date_mode":"date_time","description_html":"","override_ends_at":null,"length_in_minutes":"60.0","length_in_days":1,"event_type_unit_range":null,"units":null,"formatted_datetime_range":"Thursday, September 17, 2026 • 2:57 PM - 3:57 PM","formatted_date_range":"Thursday, September 17, 2026","formatted_time_range":"2:57 PM - 3:57 PM","formatted_units":null,"required_staff_count":1,"override_required_staff_count":null,"assigned_staff_count":0,"fully_staffed":false,"remaining_staff_needed":1,"staff_assignment_type":"none","staff_may_claim":false,"staff_may_request":false,"pending_staff_request_count":0,"staffed_by_current_user":false,"requested_by_current_user":false,"staff_member_ids":[],"staff_member_names":null,"staff_member_abbreviations":null,"expired_proposal":false,"primary_image_attachment":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"},"package_group_name":"Sample","service_name":"Photo booth 67","default_staff_title":null,"override_price":null,"override_price_cents":null,"override_price_currency":null,"override_price_formatted":null,"taxable":null},"relationships":{"event_add_ons":{"data":[]},"event_photobooth_background":{"data":null},"event_booking_extra_categories":{"data":[]},"event_extras":{"data":[]}}}}}}}}},"patch":{"summary":"Update a package on a proposal or booking","tags":["Proposals/Confirmed Bookings"],"description":"Edits a package already on an event, or swaps it for a different one. `use_new_or_existing_package` decides which: `existing`, the default, edits the package in place, and `new` replaces it with the package named by `new_event_type_id`.\n\nThis replaces the package rather than merging into it. Send everything you want the package to keep: `existing_title`, `existing_description_html`, `override_price`, `override_ends_at_time` and `units` are all cleared when you leave them out, and `taxable` goes back to `true`. Length is the exception: leave `length_in_minutes` or `length_in_days` out and the package keeps the length it already has.\n\nSwapping the package drops the old package's add-ons, copies the new one's across, and rebuilds that package's discounts and checklist items.\n\n**Required permission:** `assigned_event_write` (when the authenticated user is assigned to the event) or `unassigned_event_write` (otherwise).\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_booking_id","in":"path","description":"Event Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"456","type":"event_booking","attributes":{"id":456,"event_id":964,"event_type_id":845,"title":"Deluxe Setup","name":"Deluxe Setup","starts_at":"2026-09-17T19:00:00.000-07:00","ends_at":"2026-09-17T20:00:00.000-07:00","starts_at_time":"7:00 PM","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","brand_name":"Cremin-Jacobi 504","canceled":false,"postponed":false,"date_mode":"date_time","description_html":"","override_ends_at":null,"length_in_minutes":"60.0","length_in_days":1,"event_type_unit_range":null,"units":null,"formatted_datetime_range":"Thursday, September 17, 2026 • 7:00 PM - 8:00 PM","formatted_date_range":"Thursday, September 17, 2026","formatted_time_range":"7:00 PM - 8:00 PM","formatted_units":null,"required_staff_count":1,"override_required_staff_count":null,"assigned_staff_count":0,"fully_staffed":false,"remaining_staff_needed":1,"staff_assignment_type":"none","staff_may_claim":false,"staff_may_request":false,"pending_staff_request_count":0,"staffed_by_current_user":false,"requested_by_current_user":false,"staff_member_ids":[],"staff_member_names":null,"staff_member_abbreviations":null,"expired_proposal":false,"primary_image_attachment":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"},"package_group_name":"Sample","service_name":"Photo booth 68","default_staff_title":null,"override_price":null,"override_price_cents":null,"override_price_currency":null,"override_price_formatted":null,"taxable":null},"relationships":{"event_add_ons":{"data":[]},"event_photobooth_background":{"data":null},"event_booking_extra_categories":{"data":[]},"event_extras":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"use_new_or_existing_package":{"type":"string","enum":["existing","new"],"description":"`existing` edits this package in place, `new` swaps in a different one. Defaults to `existing`."},"starts_at_date":{"type":"string","description":"Start date, as ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's date format setting."},"starts_at_time":{"type":"string","description":"Start time, e.g. `11:00AM`, `2:30pm` or `14:30`. Required for packages scheduled by date and time."},"override_ends_at_time":{"type":"string","description":"Ends the package at a set time rather than at the time the length implies. Same formats as `starts_at_time`."},"length_in_minutes":{"type":"integer","description":"Length in minutes, from 1 to 1440. Required for packages that let extra hours be booked. Leave it out and the package keeps the length it already has."},"length_in_days":{"type":"integer","description":"Length in days, from 1 to 1000. Required for date-only packages that let extra days be booked. Leave it out and the package keeps the length it already has. Any value sent for a date-only package must be in range, even when that package fixes its own length."},"units":{"type":"integer","description":"Unit count, for packages priced per unit. Must fall inside one of that package's unit ranges."},"package_unit_range_id":{"type":"integer","description":"Unit range ID, for packages priced by unit range. Must be one of that package's own ranges."},"override_price":{"type":"number","description":"Overrides the package's calculated price. In whole currency units, so `1250.50` means $1,250.50. Cannot be negative."},"taxable":{"type":"boolean","description":"Whether this package is taxed. Defaults to `true`, including when you leave it out."},"existing_title":{"type":"string","description":"Renames the package on this event, leaving the package itself alone. Read only when editing in place."},"existing_description_html":{"type":"string","description":"Rewrites the package's description on this event. Accepts HTML. Read only when editing in place."},"existing_primary_image_attachment":{"type":"string","description":"ActiveStorage signed id for the package's image on this event. Send an empty string to clear it."},"existing_primary_wide_image_attachment":{"type":"string","description":"ActiveStorage signed id for the 16:9 variant. Send an empty string to clear it."},"existing_primary_square_image_attachment":{"type":"string","description":"ActiveStorage signed id for the 1:1 variant. Send an empty string to clear it."},"existing_primary_tall_image_attachment":{"type":"string","description":"ActiveStorage signed id for the 9:16 variant. Send an empty string to clear it."},"new_event_type_id":{"type":"string","description":"The package to swap in, from `GET /api/v1/packages`, or the literal `custom` for a one-off. Required when `use_new_or_existing_package` is `new`, ignored otherwise."},"new_one_off_custom_title":{"type":"string","description":"Title for the one-off package being swapped in. Required when `new_event_type_id` is `custom`."},"new_one_off_custom_description_html":{"type":"string","description":"Description for the one-off package being swapped in. Accepts HTML."}},"required":["starts_at_date"]}}}}}},"/api/v1/event_bookings/{event_booking_id}/update_staffing":{"patch":{"summary":"Set how many staff a package needs","tags":["Proposals/Confirmed Bookings"],"description":"Overrides the number of staff this package needs, which otherwise comes from the service the package belongs to. Send a blank value to drop the override and go back to that default. Any explicit value must be at least 1.\n\n**Required permission:** `assigned_event_write` (when the authenticated user is assigned to the event) or `unassigned_event_write` (otherwise).\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_booking_id","in":"path","description":"Event Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"staffing updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"457","type":"event_booking","attributes":{"id":457,"event_id":965,"event_type_id":846,"title":"Sarah and John's Wedding","name":"Marylee","starts_at":"2026-09-17T14:57:50.275-07:00","ends_at":"2026-09-17T15:57:50.275-07:00","starts_at_time":"2:57 PM","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","brand_name":"Rutherford LLC 508","canceled":false,"postponed":false,"date_mode":"date_time","description_html":"","override_ends_at":null,"length_in_minutes":"60.0","length_in_days":1,"event_type_unit_range":null,"units":null,"formatted_datetime_range":"Thursday, September 17, 2026 • 2:57 PM - 3:57 PM","formatted_date_range":"Thursday, September 17, 2026","formatted_time_range":"2:57 PM - 3:57 PM","formatted_units":null,"required_staff_count":3,"override_required_staff_count":3,"assigned_staff_count":0,"fully_staffed":false,"remaining_staff_needed":3,"staff_assignment_type":"none","staff_may_claim":false,"staff_may_request":false,"pending_staff_request_count":0,"staffed_by_current_user":false,"requested_by_current_user":false,"staff_member_ids":[],"staff_member_names":null,"staff_member_abbreviations":null,"expired_proposal":false,"primary_image_attachment":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"},"package_group_name":"Sample","service_name":"Photo booth 69","default_staff_title":null,"override_price":null,"override_price_cents":null,"override_price_currency":null,"override_price_formatted":null,"taxable":null},"relationships":{"event_add_ons":{"data":[]},"event_photobooth_background":{"data":null},"event_booking_extra_categories":{"data":[]},"event_extras":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"override_required_staff_count":{"type":"integer","description":"How many staff this package needs. Send an empty string to clear the override."}}}}}}}},"/api/v1/events/{event_id}/event_bookings/{event_booking_id}":{"delete":{"summary":"Remove a package from a proposal or booking","tags":["Proposals/Confirmed Bookings"],"description":"Removes a package from an event and reprices what is left. Staff assigned only to that package are unassigned, and its questionnaires, designs and discounts are cleaned up. On a proposal, an alternative left with no packages is removed with it.\n\nAn event always keeps at least one package, so removing the only one is a 403.\n\n**Required permission:** `assigned_event_write` (when the authenticated user is assigned to the event) or `unassigned_event_write` (otherwise).\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}},{"name":"event_booking_id","in":"path","description":"Event Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package removed","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/events/{event_id}/event_bookings":{"post":{"summary":"Add a package to a proposal or booking","tags":["Proposals/Confirmed Bookings"],"description":"Adds a package to an existing proposal or confirmed booking, and returns the event booking it created. The package's own add-ons are copied onto it, pricing, tax and the event title are recalculated, and the change is recorded in the event's change log.\n\nOnly `event_type_id` and `starts_at_date` are always needed. Whether the rest apply depends on how the package is sold, which `GET /api/v1/packages/{id}` tells you: it is scheduled either by date and time or by date alone, and sold by length, by unit count, or by unit range.\n\n**Required permission:** `assigned_event_write` (when the authenticated user is assigned to the event) or `unassigned_event_write` (otherwise), together with the matching read permission for the event itself.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package added","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"461","type":"event_booking","attributes":{"id":461,"event_id":967,"event_type_id":850,"title":"Porter","name":"Mercy","starts_at":"2027-12-31T11:00:00.000-08:00","ends_at":"2027-12-31T14:00:00.000-08:00","starts_at_time":"11:00 AM","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","brand_name":"McKenzie LLC 517","canceled":false,"postponed":false,"date_mode":"date_time","description_html":"","override_ends_at":null,"length_in_minutes":"180.0","length_in_days":1,"event_type_unit_range":null,"units":null,"formatted_datetime_range":"Friday, December 31, 2027 • 11:00 AM - 2:00 PM","formatted_date_range":"Friday, December 31, 2027","formatted_time_range":"11:00 AM - 2:00 PM","formatted_units":null,"required_staff_count":1,"override_required_staff_count":null,"assigned_staff_count":0,"fully_staffed":false,"remaining_staff_needed":1,"staff_assignment_type":"none","staff_may_claim":false,"staff_may_request":false,"pending_staff_request_count":0,"staffed_by_current_user":false,"requested_by_current_user":false,"staff_member_ids":[],"staff_member_names":null,"staff_member_abbreviations":null,"expired_proposal":false,"primary_image_attachment":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"},"package_group_name":"Sample","service_name":"Photo booth 73","default_staff_title":null,"override_price":null,"override_price_cents":null,"override_price_currency":null,"override_price_formatted":null,"taxable":null},"relationships":{"event_add_ons":{"data":[]},"event_photobooth_background":{"data":null},"event_booking_extra_categories":{"data":[]},"event_extras":{"data":[]}}}}}}},"422":{"description":"no package given"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event_type_id":{"type":"string","description":"Package ID, from `GET /api/v1/packages`. Send the literal `custom` to add a one-off package instead, alongside `one_off_custom_title`. A one-off package is added with no base price. Any other value is a 422."},"starts_at_date":{"type":"string","description":"Start date, as ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's date format setting."},"starts_at_time":{"type":"string","description":"Start time, e.g. `11:00AM`, `2:30pm` or `14:30`. Required for packages scheduled by date and time."},"length_in_minutes":{"type":"integer","description":"Length in minutes, from 1 to 1440. Required for packages that let extra hours be booked, otherwise the package's own length is used."},"length_in_days":{"type":"integer","description":"Length in days, from 1 to 1000. Required for date-only packages that let extra days be booked. Any value sent for a date-only package must be in range, even when that package fixes its own length. A package scheduled by date and time is always one day."},"units":{"type":"integer","description":"Unit count, for packages priced per unit. Must fall inside one of that package's unit ranges, which are listed on `GET /api/v1/packages/{id}`."},"package_unit_range_id":{"type":"integer","description":"Unit range ID, for packages priced by unit range. Must be one of that package's own ranges, from `GET /api/v1/packages/{id}`."},"proposal_alternative_id":{"type":"integer","description":"The alternative to add the package to. Required once a proposal has alternatives, because every package belongs to one of them."},"one_off_custom_title":{"type":"string","description":"Title for a one-off package. Required when `event_type_id` is `custom`."},"custom_description_html":{"type":"string","description":"Description for a one-off package. Accepts HTML."}},"required":["event_type_id","starts_at_date"]}}}}}},"/api/v1/event_categories":{"get":{"summary":"Fetch all services","tags":["Packages & Services"],"description":"Returns all active services (event categories) for the business, ordered by position.\n\nServices 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).\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"services found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"838","type":"event_category","attributes":{"id":838,"name":"DJ Services","position":1,"primary_image":{"panel_variant":null},"booking_url":"https://test-525-cc053be7.cc.localhost/reservation/set_event?event_category_id=838","private_booking_url":"https://test-525-cc053be7.cc.localhost/reservation/set_event?customized=true&event_category_id=838&token=HK6-YXKE-EZ9"},"relationships":{"package_groups":{"data":[]}}},{"id":"839","type":"event_category","attributes":{"id":839,"name":"Photo Booth","position":2,"primary_image":{"panel_variant":null},"booking_url":"https://test-525-cc053be7.cc.localhost/reservation/set_event?event_category_id=839","private_booking_url":"https://test-525-cc053be7.cc.localhost/reservation/set_event?customized=true&event_category_id=839&token=7T3-PK6K-4YF"},"relationships":{"package_groups":{"data":[]}}}]}}}}}},"post":{"summary":"Create a service","tags":["Packages & Services"],"description":"Creates a new service (event category) for the business. A service is the top-level grouping for your offerings; packages and package groups are added to it separately.\n\nOnly `name` is required. A default placeholder image is attached automatically — you can replace it from the Package Manager in the app. New services are appended to the end of the service list.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"service created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"840","type":"event_category","attributes":{"id":840,"name":"Lighting","position":1,"primary_image":{"panel_variant":null},"booking_url":"https://test-526-2ef459ed.cc.localhost/reservation/set_event?event_category_id=840","private_booking_url":"https://test-526-2ef459ed.cc.localhost/reservation/set_event?customized=true&event_category_id=840&token=RFZ-E7KT-NG2"},"relationships":{"package_groups":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the service (e.g., \"DJ Services\")"},"sub_header":{"type":"string","description":"Short sub-heading shown under the service name on booking pages (max 90 characters)"},"status":{"type":"string","description":"Booking-page visibility","enum":["public","private","disabled"]},"show_title_on_booking_page":{"type":"boolean","description":"Whether to show the service title on the booking page"},"location_type":{"type":"string","description":"How the event location is labeled","enum":["venue","location","property"]},"location_booking_type":{"type":"string","description":"How customers provide a location during booking","enum":["yes","places","places_or_custom","brand_address","no"]},"allow_skip_venue":{"type":"boolean","description":"Allow customers to skip the venue/location step"},"has_designs":{"type":"boolean","description":"Whether this service includes a design selection step"},"staff_assignment_type":{"type":"string","description":"How staff are assigned to bookings","enum":["customer_choice","assign_predefined_staff","staff_may_request","staff_may_claim","none"]},"staff_title":{"type":"string","description":"Label used for the staff role on this service (e.g., \"DJ\", \"Attendant\")"},"staff_allows_overbooking":{"type":"boolean","description":"Allow bookings even when staff may be fully booked"}},"required":["name"]}}}}}},"/api/v1/event_categories/{id}":{"get":{"summary":"Fetch a service by ID","tags":["Packages & Services"],"description":"Returns the details of a single service (event category), including its name, position, and primary image.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `package_groups`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the service","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"service found","content":{"application/json":{"example":{"data":{"id":"841","type":"event_category","attributes":{"id":841,"name":"DJ Services","position":1,"primary_image":{"panel_variant":null},"booking_url":"https://test-527-dd71519b.cc.localhost/reservation/set_event?event_category_id=841","private_booking_url":"https://test-527-dd71519b.cc.localhost/reservation/set_event?customized=true&event_category_id=841&token=TWY-ZT6Y-GKH"},"relationships":{"package_groups":{"data":[]}}}}}}}}},"put":{"summary":"Update a service","tags":["Packages & Services"],"description":"Updates an existing service (event category) with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.\n\nUse this to rename a service, change its booking-page visibility, or adjust its location and staff-assignment settings.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the service to update","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"service updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"842","type":"event_category","attributes":{"id":842,"name":"DJ & MC Services","position":1,"primary_image":{"panel_variant":null},"booking_url":"https://test-528-502a8135.cc.localhost/reservation/set_event?event_category_id=842","private_booking_url":"https://test-528-502a8135.cc.localhost/reservation/set_event?customized=true&event_category_id=842&token=HMY-QEHF-CCC"},"relationships":{"package_groups":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the service"},"sub_header":{"type":"string","description":"Short sub-heading shown under the service name on booking pages (max 90 characters)"},"status":{"type":"string","description":"Booking-page visibility","enum":["public","private","disabled"]},"show_title_on_booking_page":{"type":"boolean","description":"Whether to show the service title on the booking page"},"location_type":{"type":"string","description":"How the event location is labeled","enum":["venue","location","property"]},"location_booking_type":{"type":"string","description":"How customers provide a location during booking","enum":["yes","places","places_or_custom","brand_address","no"]},"allow_skip_venue":{"type":"boolean","description":"Allow customers to skip the venue/location step"},"has_designs":{"type":"boolean","description":"Whether this service includes a design selection step"},"staff_assignment_type":{"type":"string","description":"How staff are assigned to bookings","enum":["customer_choice","assign_predefined_staff","staff_may_request","staff_may_claim","none"]},"staff_title":{"type":"string","description":"Label used for the staff role on this service"},"staff_allows_overbooking":{"type":"boolean","description":"Allow bookings even when staff may be fully booked"}}}}}}},"delete":{"summary":"Delete a service","tags":["Packages & Services"],"description":"Deletes (archives) a service. The service and all of its package groups and packages are archived together and removed from booking pages. Existing bookings are unaffected.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the service to delete","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"service deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/event_payments":{"get":{"summary":"Fetch all payments","tags":["Payments"],"description":"Returns a paginated list of payments across all events for the business. Results can be filtered by event ID or date range.\n\nEach payment includes amount breakdowns (charge, tip, tax, fees, net), processor details, and associated event information.\n\nThe response includes `meta.total_count` and `meta.per_page` for pagination.\n\n**Required permission:** `assigned_event_read_pricing` or `unassigned_event_read_pricing`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"query","description":"Filter payments by event ID","required":false,"schema":{"type":"integer"}},{"name":"payment_date_start","in":"query","description":"Filter payments on or after this date (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"payment_date_end","in":"query","description":"Filter payments on or before this date (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Number of results per page (default: 25)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"payments found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":1,"per_page":25,"page":1,"total_pages":1},"data":[{"id":"17","type":"event_payment","attributes":{"id":17,"event_id":969,"paid_at":"2026-08-27T14:57:51.621-07:00","payment_method":"Other","reference":"Check Number #123","processor":null,"refund":false,"amount":"30.00","amount_cents":3000,"amount_currency":"USD","amount_formatted":"$30","tip_amount":"0.00","tip_amount_cents":0,"tip_amount_currency":"USD","tip_amount_formatted":"$0","total_amount":"0.00","total_amount_cents":0,"total_amount_currency":"USD","total_amount_formatted":"$0","paid_by":"Sybil Hoppe","paid_at_formatted":"08-27-2026  2:57 PM","event_starts_at":"2026-09-03T14:57:51.553-07:00","invoice_number":null,"event_title":"Sarah and John's Wedding","event_total":"0.00","event_total_cents":0,"event_total_currency":"USD","event_total_formatted":"$0","taxable_amount":"0.00","taxable_amount_cents":0,"taxable_amount_currency":"USD","taxable_amount_formatted":"$0","non_taxable_amount":"0.00","non_taxable_amount_cents":0,"non_taxable_amount_currency":"USD","non_taxable_amount_formatted":"$0","tax_rate":"0.0","tax_collected":"0.00","tax_collected_cents":0,"tax_collected_currency":"USD","tax_collected_formatted":"$0","amount_collected_excluding_tax":"30.00","amount_collected_excluding_tax_cents":3000,"amount_collected_excluding_tax_currency":"USD","amount_collected_excluding_tax_formatted":"$30","processing_fees":null,"processing_fees_cents":null,"processing_fees_currency":null,"processing_fees_formatted":"$0","net_amount":"30.00","net_amount_cents":3000,"net_amount_currency":"USD","net_amount_formatted":"$30","taxjar_city":null,"taxjar_county":null,"taxjar_state":null,"taxjar_country":null,"taxjar_postal_code":null,"taxjar_city_rate":null,"taxjar_county_rate":null,"taxjar_state_rate":null,"taxjar_country_rate":null,"taxjar_combined_district_rate":null,"taxjar_combined_rate":null,"brand_id":4256,"brand_name":"Green and Sons 531","check_cherry_payment_id":"292cf48a-5fe8-448f-91dc-4545fac799e6"}}]}}}}}}},"/api/v1/event_payments/{id}":{"get":{"summary":"Fetch payment by ID","tags":["Payments"],"description":"Returns the full details of a single payment, including amount breakdowns, tax information, processor details, and associated event data.\n\n**Required permission:** `assigned_event_read_pricing` or `unassigned_event_read_pricing`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the payment to retrieve","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"payment found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"18","type":"event_payment","attributes":{"id":18,"event_id":970,"paid_at":"2026-08-27T14:57:51.764-07:00","payment_method":"Other","reference":"Check Number #123","processor":null,"refund":false,"amount":"30.00","amount_cents":3000,"amount_currency":"USD","amount_formatted":"$30","tip_amount":"0.00","tip_amount_cents":0,"tip_amount_currency":"USD","tip_amount_formatted":"$0","total_amount":"0.00","total_amount_cents":0,"total_amount_currency":"USD","total_amount_formatted":"$0","paid_by":"Blake Beier","paid_at_formatted":"08-27-2026  2:57 PM","event_starts_at":"2026-09-03T14:57:51.693-07:00","invoice_number":null,"event_title":"Sarah and John's Wedding","event_total":"0.00","event_total_cents":0,"event_total_currency":"USD","event_total_formatted":"$0","taxable_amount":"0.00","taxable_amount_cents":0,"taxable_amount_currency":"USD","taxable_amount_formatted":"$0","non_taxable_amount":"0.00","non_taxable_amount_cents":0,"non_taxable_amount_currency":"USD","non_taxable_amount_formatted":"$0","tax_rate":"0.0","tax_collected":"0.00","tax_collected_cents":0,"tax_collected_currency":"USD","tax_collected_formatted":"$0","amount_collected_excluding_tax":"30.00","amount_collected_excluding_tax_cents":3000,"amount_collected_excluding_tax_currency":"USD","amount_collected_excluding_tax_formatted":"$30","processing_fees":null,"processing_fees_cents":null,"processing_fees_currency":null,"processing_fees_formatted":"$0","net_amount":"30.00","net_amount_cents":3000,"net_amount_currency":"USD","net_amount_formatted":"$30","taxjar_city":null,"taxjar_county":null,"taxjar_state":null,"taxjar_country":null,"taxjar_postal_code":null,"taxjar_city_rate":null,"taxjar_county_rate":null,"taxjar_state_rate":null,"taxjar_country_rate":null,"taxjar_combined_district_rate":null,"taxjar_combined_rate":null,"brand_id":4259,"brand_name":"Hansen-Aufderhar 534","check_cherry_payment_id":"c8c927b2-47a4-43e2-98a6-58c6231f15bb"}}}}}}}}},"/api/v1/events/{event_id}/event_staff_members":{"post":{"summary":"Assign a staff member to an event","tags":["Proposals/Confirmed Bookings"],"description":"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.\n\nBy default the staff member is assigned to the whole event (every package). To scope the assignment to specific packages, send `all_event_bookings: false` together with `event_booking_ids` listing the packages (EventBooking IDs) they cover; ids that don't belong to this event are ignored. Arrival time is per-package: set arrival times via `event_booking_arrives_at_times`, an object keyed by EventBooking ID (e.g. { \"123\": \"5:30 PM\" }). An all-packages member may set per-package arrivals too.\n\nFor 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.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"The ID of the event to assign the staff member to","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"staff member assigned to specific packages","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"125","type":"event_staff_member","attributes":{"role":"DJ","all_event_bookings":true,"event_booking_ids":[],"arrives_at_by_event_booking":{},"response":null,"awaiting_response":false,"response_by_event_booking":{},"decline_reason":null,"decline_reason_by_event_booking":{},"can_respond_current_user":false},"relationships":{"event":{"data":{"id":"971","type":"event"}},"user":{"data":{"id":"2409","type":"user"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"staff_id":{"type":"integer","description":"The ID of the staff user to assign"},"role":{"type":"string","description":"The role this staff member will fill on the event (e.g., \"DJ\", \"Photographer\")"},"all_event_bookings":{"type":"boolean","description":"Assign to every package on the event (default true). Send false with event_booking_ids to scope to specific packages."},"event_booking_ids":{"type":"array","items":{"type":"integer"},"description":"When all_event_bookings is false, the EventBooking (package) IDs this staff member covers."},"event_booking_arrives_at_times":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional per-package arrival times, keyed by EventBooking ID, e.g. { \"123\": \"5:30 PM\" }."}},"required":["staff_id"]}}}}}},"/api/v1/events/{event_id}/event_staff_members/{id}":{"put":{"summary":"Update a staff member's package assignment","tags":["Proposals/Confirmed Bookings"],"description":"Updates an existing staff assignment's package scope and/or arrival times. Send `all_event_bookings: false` with `event_booking_ids` to scope the staff member to specific packages, or `all_event_bookings: true` to cover the whole event again. `event_booking_arrives_at_times` sets (or, when blank, clears) per-package arrivals keyed by EventBooking ID. This does not change who is assigned or their role, and does not re-send the \"Employee Assigned\" notifications.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"The ID of the event the assignment belongs to","required":true,"schema":{"type":"integer"}},{"name":"id","in":"path","description":"The unique ID of the EventStaffMember assignment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"assignment updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"127","type":"event_staff_member","attributes":{"role":null,"all_event_bookings":false,"event_booking_ids":[465],"arrives_at_by_event_booking":{"465":"5:30 PM"},"response":null,"awaiting_response":false,"response_by_event_booking":{},"decline_reason":null,"decline_reason_by_event_booking":{},"can_respond_current_user":false},"relationships":{"event":{"data":{"id":"973","type":"event"}},"user":{"data":{"id":"2412","type":"user"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"all_event_bookings":{"type":"boolean","description":"Assign to every package (true) or scope to specific packages (false, with event_booking_ids)."},"event_booking_ids":{"type":"array","items":{"type":"integer"},"description":"When all_event_bookings is false, the EventBooking (package) IDs this staff member covers."},"event_booking_arrives_at_times":{"type":"object","additionalProperties":{"type":"string"},"description":"Per-package arrival times, keyed by EventBooking ID. Send an empty string for a package to clear it."}}}}}}},"delete":{"summary":"Remove a staff member from an event","tags":["Proposals/Confirmed Bookings"],"description":"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.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"The ID of the event the assignment belongs to","required":true,"schema":{"type":"integer"}},{"name":"id","in":"path","description":"The unique ID of the EventStaffMember assignment","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"staff member removed","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/events":{"get":{"summary":"Fetch all events","tags":["Proposals/Confirmed Bookings"],"description":"Returns a paginated list of events for the specified business. Results can be filtered by status, cancellation, date range, and text search.\n\n**Cancelled bookings are excluded by default.** Cancellation is tracked separately from status -- a cancelled booking keeps the status it had when it was cancelled -- so it is filtered with `canceled_status`, not `event_status`. Pass `canceled_status=show_canceled_only` to list only cancelled bookings, or `canceled_status=show_all` to include them alongside everything else. The two filters combine: `event_status=confirmed&canceled_status=show_canceled_only` returns cancelled confirmed bookings.\n\nThe response includes `meta.total_count` (total matching events) and `meta.per_page` (results per page) to support pagination.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `event_bookings`, `proposal_alternatives`, `event_users`, `event_staff_members`, `event_staff_requests`, `contacts`, `notes`. The event's customers are sideloaded via `event_users` — there is no `customer` include.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_status","in":"query","description":"Status filter. Does not filter cancellation -- use `canceled_status` for that.:\n * `proposal_date_open` \n * `proposal_date_reserved` \n * `proposal_awaiting_review` \n * `awaiting_signature` \n * `confirmed` \n * `any_proposal` \n * `any_confirmed` \n * `any_unsigned` \n ","enum":["proposal_date_open","proposal_date_reserved","proposal_awaiting_review","awaiting_signature","confirmed","any_proposal","any_confirmed","any_unsigned"],"required":false,"schema":{"type":"string"}},{"name":"canceled_status","in":"query","description":"Cancellation filter. Defaults to `hide_canceled`.","enum":["hide_canceled","show_canceled_only","show_all"],"required":false,"schema":{"type":"string"}},{"name":"postponed_status","in":"query","description":"Postponement filter. Defaults to `hide_postponed`.","enum":["hide_postponed","show_postponed_only","show_all"],"required":false,"schema":{"type":"string"}},{"name":"expired_status","in":"query","description":"Expired-proposal filter. Defaults to `hide_expired`.","enum":["hide_expired","show_expired_only","show_all"],"required":false,"schema":{"type":"string"}},{"name":"past_or_future","in":"query","description":"When filter. Defaults to `both`. Ignored when an event date range is supplied.","enum":["past","future","both"],"required":false,"schema":{"type":"string"}},{"name":"event_date_start","in":"query","description":"Event Date (Start)","required":false,"schema":{"type":"string"}},{"name":"event_date_end","in":"query","description":"Event Date (End)","required":false,"schema":{"type":"string"}},{"name":"booked_date_start","in":"query","description":"Booked Date (Start)","required":false,"schema":{"type":"string"}},{"name":"booked_date_end","in":"query","description":"Booked Date (End)","required":false,"schema":{"type":"string"}},{"name":"search_text","in":"query","description":"Text Search","required":false,"schema":{"type":"string"}},{"name":"id","in":"query","description":"Return only the event with this ID","required":false,"schema":{"type":"integer"}},{"name":"brand_id","in":"query","description":"Limit to events on this brand","required":false,"schema":{"type":"integer"}},{"name":"client_id","in":"query","description":"Limit to events for this client","required":false,"schema":{"type":"integer"}},{"name":"staff_id","in":"query","description":"Limit to events this staff member is assigned to","required":false,"schema":{"type":"integer"}},{"name":"awaiting_deposit","in":"query","description":"Only events whose deposit is unpaid","required":false,"schema":{"type":"boolean"}},{"name":"balance_outstanding","in":"query","description":"Only events with a balance still owed","required":false,"schema":{"type":"boolean"}},{"name":"past_due","in":"query","description":"Only events with a past due payment","required":false,"schema":{"type":"boolean"}},{"name":"has_unselected_templates","in":"query","description":"Only events with a design template still unselected","required":false,"schema":{"type":"boolean"}},{"name":"has_pending_artwork","in":"query","description":"Only events with artwork pending","required":false,"schema":{"type":"boolean"}},{"name":"has_unapproved_artwork","in":"query","description":"Only events with artwork awaiting approval","required":false,"schema":{"type":"boolean"}},{"name":"unsubmitted_forms","in":"query","description":"Only events with an unsubmitted form","required":false,"schema":{"type":"boolean"}},{"name":"no_staff_assigned","in":"query","description":"Only events with no staff assigned","required":false,"schema":{"type":"boolean"}},{"name":"no_backdrop_assigned","in":"query","description":"Only events with no backdrop assigned","required":false,"schema":{"type":"boolean"}},{"name":"sort_by","in":"query","description":"Sort Order. Defaults to `automatic`.","enum":["automatic","event_date_asc","event_date_desc","recently_booked_desc","created_at_desc","proposal_expiration_asc","relevance"],"required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Number of results per page (default: 25)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"events found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":1,"per_page":10,"page":1,"total_pages":1},"data":[{"id":"975","type":"event","attributes":{"id":975,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:52.772-07:00","created_at":"2026-08-27T14:57:52.773-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"GF4-RHDM-TRF","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:52.723-07:00","ends_at":"2026-09-03T17:57:52.723-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4278,"brand_name":"Gleason, Ryan and Kessler 553","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-554-b895b8eb.cc.localhost/events/975-sarah-and-john-s-wedding?token=GF4-RHDM-TRF","questionnaires_url":"https://test-554-b895b8eb.cc.localhost/events/975-sarah-and-john-s-wedding/forms?token=GF4-RHDM-TRF","payment_url":"https://test-554-b895b8eb.cc.localhost/events/975-sarah-and-john-s-wedding/payments/new?token=GF4-RHDM-TRF","invoice_url":"https://test-554-b895b8eb.cc.localhost/events/975-sarah-and-john-s-wedding/invoice?token=GF4-RHDM-TRF","designs_url":"https://test-554-b895b8eb.cc.localhost/events/975-sarah-and-john-s-wedding/designs?token=GF4-RHDM-TRF","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}]}}}}}}},"/api/v1/events/{event_id}":{"get":{"summary":"Fetch event by ID","tags":["Proposals/Confirmed Bookings"],"description":"Returns the full details of a single event, including status, venue, pricing, and contact information.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `event_bookings`, `proposal_alternatives`, `event_users`, `event_staff_members`, `event_staff_requests`, `contacts`, `notes`. Nested includes are also supported — e.g. `?include=event_bookings.event_add_ons` will include add-ons within each booking. Other nested includes: `event_bookings.event_extras`, `event_bookings.event_photobooth_background`, `event_bookings.event_booking_extra_categories`. The event's customers are sideloaded via `event_users` — there is no `customer` include.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"976","type":"event","attributes":{"id":976,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:53.043-07:00","created_at":"2026-08-27T14:57:53.044-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"NYM-KKHA-PWF","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:52.994-07:00","ends_at":"2026-09-03T17:57:52.994-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4281,"brand_name":"Quigley-Schulist 556","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-557-92d10185.cc.localhost/events/976-sarah-and-john-s-wedding?token=NYM-KKHA-PWF","questionnaires_url":"https://test-557-92d10185.cc.localhost/events/976-sarah-and-john-s-wedding/forms?token=NYM-KKHA-PWF","payment_url":"https://test-557-92d10185.cc.localhost/events/976-sarah-and-john-s-wedding/payments/new?token=NYM-KKHA-PWF","invoice_url":"https://test-557-92d10185.cc.localhost/events/976-sarah-and-john-s-wedding/invoice?token=NYM-KKHA-PWF","designs_url":"https://test-557-92d10185.cc.localhost/events/976-sarah-and-john-s-wedding/designs?token=NYM-KKHA-PWF","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}}},"put":{"summary":"Update an event","tags":["Proposals/Confirmed Bookings"],"description":"**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"977","type":"event","attributes":{"id":977,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:53.196-07:00","created_at":"2026-08-27T14:57:53.197-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":"Updated notes for the customer","private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"4H7-3WQA-XVR","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:53.146-07:00","ends_at":"2026-09-03T17:57:53.146-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4284,"brand_name":"Grant, Lemke and Hessel 559","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-560-9825ee40.cc.localhost/events/977-sarah-and-john-s-wedding?token=4H7-3WQA-XVR","questionnaires_url":"https://test-560-9825ee40.cc.localhost/events/977-sarah-and-john-s-wedding/forms?token=4H7-3WQA-XVR","payment_url":"https://test-560-9825ee40.cc.localhost/events/977-sarah-and-john-s-wedding/payments/new?token=4H7-3WQA-XVR","invoice_url":"https://test-560-9825ee40.cc.localhost/events/977-sarah-and-john-s-wedding/invoice?token=4H7-3WQA-XVR","designs_url":"https://test-560-9825ee40.cc.localhost/events/977-sarah-and-john-s-wedding/designs?token=4H7-3WQA-XVR","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"public_notes":{"type":"string","description":"Public notes visible to the customer"},"photo_album_url":{"type":"string","description":"URL to the photo album"},"photo_album_instructions":{"type":"string","description":"Instructions for the photo album"},"video_url":{"type":"string","description":"URL to the video"},"video_album_instructions":{"type":"string","description":"Instructions for the video album"},"next_follow_up_on":{"type":"string","description":"Next follow-up date (YYYY-MM-DD)"}}}}}}},"delete":{"summary":"Delete an event","tags":["Proposals/Confirmed Bookings"],"description":"**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/events/{event_id}/update_location":{"put":{"summary":"Update event location","tags":["Proposals/Confirmed Bookings"],"description":"Update the venue/location for an event. Can optionally recalculate tax and travel fees based on the new location.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"location updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"979","type":"event","attributes":{"id":979,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:53.478-07:00","created_at":"2026-08-27T14:57:53.479-07:00","created_via":"quick_add","venue_name":"The Grand Ballroom","venue_address":"123 Main St","venue_city":"Austin","venue_state":"TX","venue_zip":"78701","venue_map_url":"https://www.google.com/maps/search/123+Main+St%2C+Austin%2C+TX%2C+78701","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"QZH-WPJM-WDJ","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:53.423-07:00","ends_at":"2026-09-03T17:57:53.423-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4290,"brand_name":"Stamm, Marquardt and Howell 565","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-566-838be662.cc.localhost/events/979-sarah-and-john-s-wedding?token=QZH-WPJM-WDJ","questionnaires_url":"https://test-566-838be662.cc.localhost/events/979-sarah-and-john-s-wedding/forms?token=QZH-WPJM-WDJ","payment_url":"https://test-566-838be662.cc.localhost/events/979-sarah-and-john-s-wedding/payments/new?token=QZH-WPJM-WDJ","invoice_url":"https://test-566-838be662.cc.localhost/events/979-sarah-and-john-s-wedding/invoice?token=QZH-WPJM-WDJ","designs_url":"https://test-566-838be662.cc.localhost/events/979-sarah-and-john-s-wedding/designs?token=QZH-WPJM-WDJ","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"google_place_id":{"type":"string","description":"Google Place ID for the venue"},"venue_name":{"type":"string","description":"Name of the venue"},"venue_address":{"type":"string","description":"Street address"},"venue_city":{"type":"string","description":"City"},"venue_state":{"type":"string","description":"State"},"venue_zip":{"type":"string","description":"ZIP/Postal code"},"latitude":{"type":"number","description":"Latitude coordinate"},"longitude":{"type":"number","description":"Longitude coordinate"},"recalculate_tax":{"type":"boolean","description":"Recalculate tax based on new location"},"recalculate_travel":{"type":"boolean","description":"Recalculate travel fee based on new location"}}}}}}}},"/api/v1/events/{event_id}/update_status":{"put":{"summary":"Update event status","tags":["Proposals/Confirmed Bookings"],"description":"Update the status of an event (e.g. convert a proposal to a confirmed booking).\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"status updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"980","type":"event","attributes":{"id":980,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:53.687-07:00","created_at":"2026-08-27T14:57:53.644-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"PXZ-9D7J-G2N","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:53.592-07:00","ends_at":"2026-09-03T17:57:53.592-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4293,"brand_name":"Mosciski Inc 568","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-569-dbf13186.cc.localhost/events/980-sarah-and-john-s-wedding?token=PXZ-9D7J-G2N","questionnaires_url":"https://test-569-dbf13186.cc.localhost/events/980-sarah-and-john-s-wedding/forms?token=PXZ-9D7J-G2N","payment_url":"https://test-569-dbf13186.cc.localhost/events/980-sarah-and-john-s-wedding/payments/new?token=PXZ-9D7J-G2N","invoice_url":"https://test-569-dbf13186.cc.localhost/events/980-sarah-and-john-s-wedding/invoice?token=PXZ-9D7J-G2N","designs_url":"https://test-569-dbf13186.cc.localhost/events/980-sarah-and-john-s-wedding/designs?token=PXZ-9D7J-G2N","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"New status for the event"},"postponed":{"type":"boolean","description":"Mark as postponed"},"canceled":{"type":"boolean","description":"Mark as canceled"},"send_booking_confirmation_emails":{"type":"boolean","description":"Send booking confirmation emails"},"send_contact_invitation_to_create_account":{"type":"boolean","description":"Send contact an invitation to create an account"}}}}}}}},"/api/v1/events/{event_id}/update_settings":{"put":{"summary":"Update event settings","tags":["Proposals/Confirmed Bookings"],"description":"Update event settings such as title, due date, invoice date, deposit amount, tax rate, and brand.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"tax exemption updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"981","type":"event","attributes":{"id":981,"title":"Updated Event Title","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:53.797-07:00","created_at":"2026-08-27T14:57:53.798-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"4GQ-ZTQE-ANQ","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:53.747-07:00","ends_at":"2026-09-03T17:57:53.747-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4296,"brand_name":"Kerluke-Kilback 571","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-572-4478f90f.cc.localhost/events/981-updated-event-title?token=4GQ-ZTQE-ANQ","questionnaires_url":"https://test-572-4478f90f.cc.localhost/events/981-updated-event-title/forms?token=4GQ-ZTQE-ANQ","payment_url":"https://test-572-4478f90f.cc.localhost/events/981-updated-event-title/payments/new?token=4GQ-ZTQE-ANQ","invoice_url":"https://test-572-4478f90f.cc.localhost/events/981-updated-event-title/invoice?token=4GQ-ZTQE-ANQ","designs_url":"https://test-572-4478f90f.cc.localhost/events/981-updated-event-title/designs?token=4GQ-ZTQE-ANQ","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"Event title"},"due_at":{"type":"string","description":"Payment due date (YYYY-MM-DD)"},"invoice_date":{"type":"string","description":"Invoice date (YYYY-MM-DD)"},"proposal_valid_through":{"type":"string","description":"Proposal valid through date (YYYY-MM-DD)"},"custom_deposit_amount":{"type":"number","description":"Custom deposit amount"},"tax_rate":{"type":"number","description":"Tax rate (e.g. 8.25)"},"tax_exempt":{"type":"boolean","description":"Whether the booking is tax exempt (suppresses tax while retaining the resolved rate)"},"tax_exemption_type":{"type":"string","description":"Reason for exemption: resale, nonprofit, government, out_of_state, or other"},"brand_id":{"type":"integer","description":"Brand ID"}}}}}}}},"/api/v1/events/{event_id}/cancel":{"put":{"summary":"Cancel an event","tags":["Proposals/Confirmed Bookings"],"description":"Cancel an event with an optional reason and option to send cancellation messages to contacts.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event canceled","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"983","type":"event","attributes":{"id":983,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Canceled Booking","booked_at":"2026-08-27T14:57:54.106-07:00","created_at":"2026-08-27T14:57:54.108-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":true,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"G3P-J66D-JT6","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:54.050-07:00","ends_at":"2026-09-03T17:57:54.050-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4302,"brand_name":"Kunde LLC 577","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-578-3aa4ccf2.cc.localhost/events/983-sarah-and-john-s-wedding?token=G3P-J66D-JT6","questionnaires_url":"https://test-578-3aa4ccf2.cc.localhost/events/983-sarah-and-john-s-wedding/forms?token=G3P-J66D-JT6","payment_url":"https://test-578-3aa4ccf2.cc.localhost/events/983-sarah-and-john-s-wedding/payments/new?token=G3P-J66D-JT6","invoice_url":"https://test-578-3aa4ccf2.cc.localhost/events/983-sarah-and-john-s-wedding/invoice?token=G3P-J66D-JT6","designs_url":"https://test-578-3aa4ccf2.cc.localhost/events/983-sarah-and-john-s-wedding/designs?token=G3P-J66D-JT6","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"cancel_reason":{"type":"string","description":"Reason for cancellation"},"send_cancellation_messages":{"type":"boolean","description":"Send cancellation messages to contacts"}}}}}}}},"/api/v1/events/{event_id}/uncancel":{"put":{"summary":"Uncancel an event","tags":["Proposals/Confirmed Bookings"],"description":"Remove the canceled status from a previously canceled event.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event uncanceled","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"984","type":"event","attributes":{"id":984,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:54.262-07:00","created_at":"2026-08-27T14:57:54.263-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"PFG-RZ24-D7P","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:54.214-07:00","ends_at":"2026-09-03T17:57:54.214-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4305,"brand_name":"Davis, McClure and Hintz 580","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-581-482c3f89.cc.localhost/events/984-sarah-and-john-s-wedding?token=PFG-RZ24-D7P","questionnaires_url":"https://test-581-482c3f89.cc.localhost/events/984-sarah-and-john-s-wedding/forms?token=PFG-RZ24-D7P","payment_url":"https://test-581-482c3f89.cc.localhost/events/984-sarah-and-john-s-wedding/payments/new?token=PFG-RZ24-D7P","invoice_url":"https://test-581-482c3f89.cc.localhost/events/984-sarah-and-john-s-wedding/invoice?token=PFG-RZ24-D7P","designs_url":"https://test-581-482c3f89.cc.localhost/events/984-sarah-and-john-s-wedding/designs?token=PFG-RZ24-D7P","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}}}},"/api/v1/events/{event_id}/postpone":{"put":{"summary":"Postpone an event","tags":["Proposals/Confirmed Bookings"],"description":"Mark an event as postponed.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event postponed","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"985","type":"event","attributes":{"id":985,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Postponed Booking","booked_at":"2026-08-27T14:57:54.408-07:00","created_at":"2026-08-27T14:57:54.409-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":true,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"7V4-TH7D-JJ6","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:54.359-07:00","ends_at":"2026-09-03T17:57:54.359-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4308,"brand_name":"Donnelly-Lehner 583","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-584-5a4f5e31.cc.localhost/events/985-sarah-and-john-s-wedding?token=7V4-TH7D-JJ6","questionnaires_url":"https://test-584-5a4f5e31.cc.localhost/events/985-sarah-and-john-s-wedding/forms?token=7V4-TH7D-JJ6","payment_url":"https://test-584-5a4f5e31.cc.localhost/events/985-sarah-and-john-s-wedding/payments/new?token=7V4-TH7D-JJ6","invoice_url":"https://test-584-5a4f5e31.cc.localhost/events/985-sarah-and-john-s-wedding/invoice?token=7V4-TH7D-JJ6","designs_url":"https://test-584-5a4f5e31.cc.localhost/events/985-sarah-and-john-s-wedding/designs?token=7V4-TH7D-JJ6","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}}}},"/api/v1/events/{event_id}/unpostpone":{"put":{"summary":"Unpostpone an event","tags":["Proposals/Confirmed Bookings"],"description":"Remove the postponed status from a previously postponed event.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"event unpostponed","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"986","type":"event","attributes":{"id":986,"title":"Sarah and John's Wedding","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:57:54.560-07:00","created_at":"2026-08-27T14:57:54.561-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"7WP-YET6-ZJG","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:54.508-07:00","ends_at":"2026-09-03T17:57:54.508-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4311,"brand_name":"Abshire, Bailey and Herman 586","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Quick add","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-587-7fffca86.cc.localhost/events/986-sarah-and-john-s-wedding?token=7WP-YET6-ZJG","questionnaires_url":"https://test-587-7fffca86.cc.localhost/events/986-sarah-and-john-s-wedding/forms?token=7WP-YET6-ZJG","payment_url":"https://test-587-7fffca86.cc.localhost/events/986-sarah-and-john-s-wedding/payments/new?token=7WP-YET6-ZJG","invoice_url":"https://test-587-7fffca86.cc.localhost/events/986-sarah-and-john-s-wedding/invoice?token=7WP-YET6-ZJG","designs_url":"https://test-587-7fffca86.cc.localhost/events/986-sarah-and-john-s-wedding/designs?token=7WP-YET6-ZJG","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}}}},"/api/v1/events/{event_id}/approve_proposal_awaiting_review":{"put":{"summary":"Approve a proposal awaiting review","tags":["Proposals/Confirmed Bookings"],"description":"Approve a proposal that is currently in the awaiting review state.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"Event ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"proposal approved","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"987","type":"event","attributes":{"id":987,"title":"Sarah and John's Wedding","status":"proposal_date_reserved","formatted_status":"Proposal (Date Reserved)","formatted_status_with_context":"Proposal (Date Reserved)","booked_at":null,"created_at":"2026-08-27T14:57:54.707-07:00","created_via":"quick_add","venue_name":"The Mission Inn","venue_address":"123 Some St","venue_city":"Riverside","venue_state":"CA","venue_zip":"92506","venue_map_url":"https://www.google.com/maps/search/123+Some+St%2C+Riverside%2C+CA%2C+92506","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":null,"billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":null,"lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"6EC-RA9N-6Z3","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2026-09-03T14:57:54.659-07:00","ends_at":"2026-09-03T17:57:54.659-07:00","length_in_minutes":"","length_in_hours":"","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"09-03-2026","starts_at_date_iso8601":"2026-09-03","starts_at_time":"2:57 PM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"","package_group_name":"","service_name":"","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2026-09-03T00:00:00.000-07:00","customer_ids":"","customer_names":"","customer_emails":"","customer_phones":"","customer_addresses":"","customer_and_contact_ids":"","customer_and_contact_names":"","customer_and_contact_emails":"","customer_and_contact_phones":"","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4314,"brand_name":"Prohaska, Kemmer and Gutkowski 589","primary_image":{"hero_variant":null},"booked_at_description":"Created less than a minute ago","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-590-ac3b828c.cc.localhost/events/987-sarah-and-john-s-wedding?token=6EC-RA9N-6Z3","questionnaires_url":"https://test-590-ac3b828c.cc.localhost/events/987-sarah-and-john-s-wedding/forms?token=6EC-RA9N-6Z3","payment_url":"https://test-590-ac3b828c.cc.localhost/events/987-sarah-and-john-s-wedding/payments/new?token=6EC-RA9N-6Z3","invoice_url":"https://test-590-ac3b828c.cc.localhost/events/987-sarah-and-john-s-wedding/invoice?token=6EC-RA9N-6Z3","designs_url":"https://test-590-ac3b828c.cc.localhost/events/987-sarah-and-john-s-wedding/designs?token=6EC-RA9N-6Z3","proposal_url":"https://test-590-ac3b828c.cc.localhost/proposals/987-sarah-and-john-s-wedding?token=6EC-RA9N-6Z3","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[]},"proposal_alternatives":{"data":[]},"event_users":{"data":[]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}}}},"/api/v1/events/{event_id}/notes":{"post":{"summary":"Add a note to a booking","tags":["Proposals/Confirmed Bookings"],"description":"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.\n\nEach 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}`).\n\nOptionally set or update the booking's next follow-up date in the same call.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"The unique ID of the booking","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"note added","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"20","type":"note","attributes":{"id":20,"content":"Confirmed load-in time with venue manager","user_id":2429,"byline":"08-27-2026  2:57 PM by Talisha Hauck","created_at":"2026-08-27T14:57:54.906-07:00"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","description":"The note text to add (private internal note, staff-only)"},"next_follow_up_on":{"type":"string","description":"Set or update the booking's next follow-up date (YYYY-MM-DD)"}},"required":["note"]}}}}}},"/api/v1/events/{event_id}/notes/{id}":{"put":{"summary":"Update a booking note","tags":["Proposals/Confirmed Bookings"],"description":"Updates the content of a private internal note on a booking. Notes are visible to staff members only and are never shown to customers.\n\nOnly the note's original author can update it (mirrors the web admin's edit rule).\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read` (in addition, the authenticated user must be the note's original author)\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"The unique ID of the booking","required":true,"schema":{"type":"integer"}},{"name":"id","in":"path","description":"The unique ID of the note","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"note updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"21","type":"note","attributes":{"id":21,"content":"Updated content","user_id":2430,"byline":"08-27-2026  2:57 PM by Frances Wuckert","created_at":"2026-08-27T14:57:55.028-07:00"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","description":"The new note text (private internal note, staff-only)"}},"required":["content"]}}}}},"delete":{"summary":"Delete a booking note","tags":["Proposals/Confirmed Bookings"],"description":"Deletes a private internal note from a booking. Notes are visible to staff members only and are never shown to customers.\n\nOnly the note's original author can delete it (mirrors the web admin's edit rule).\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read` (in addition, the authenticated user must be the note's original author)\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"path","description":"The unique ID of the booking","required":true,"schema":{"type":"integer"}},{"name":"id","in":"path","description":"The unique ID of the note","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"note deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/expense_categories":{"get":{"summary":"Fetch all expense categories","tags":["Expenses"],"description":"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\").\n\n**Required permission:** `expense_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"expense categories found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"9","type":"expense_category","attributes":{"id":9,"name":"Equipment","nested_name":"Equipment"},"relationships":{"parent_expense_category":{"data":null},"expenses":{"data":[]}}},{"id":"10","type":"expense_category","attributes":{"id":10,"name":"Audio","nested_name":"Equipment → Audio"},"relationships":{"parent_expense_category":{"data":{"id":"9","type":"expense_category"}},"expenses":{"data":[]}}}]}}}}}}},"/api/v1/expense_categories/{id}":{"get":{"summary":"Fetch expense category by ID","tags":["Expenses"],"description":"Returns the details of a single expense category.\n\n**Required permission:** `expense_read`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the expense category","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"expense category found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"11","type":"expense_category","attributes":{"id":11,"name":"Equipment","nested_name":"Equipment"},"relationships":{"parent_expense_category":{"data":null},"expenses":{"data":[]}}}}}}}}}},"/api/v1/expenses":{"get":{"summary":"Fetch all expenses","tags":["Expenses"],"description":"Returns a paginated list of expenses for the business. Results can be filtered by event, expense category, date range, or full-text search.\n\nThe response includes `meta.total_count` and `meta.per_page` for pagination.\n\n**Required permission:** `expense_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"query","description":"Filter expenses by event ID","required":false,"schema":{"type":"integer"}},{"name":"expense_category_id","in":"query","description":"Filter expenses by category ID","required":false,"schema":{"type":"integer"}},{"name":"payment_date_start","in":"query","description":"Filter expenses on or after this date (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"payment_date_end","in":"query","description":"Filter expenses on or before this date (YYYY-MM-DD)","required":false,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Full-text search across reference number, payee, and description","required":false,"schema":{"type":"string"}},{"name":"sort_by","in":"query","description":"Sort order:\n * `paid_at_asc` \n * `paid_at_desc` \n * `relevance` \n ","enum":["paid_at_asc","paid_at_desc","relevance"],"required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Number of results per page (default: 50)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"expenses found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":1,"per_page":50,"page":1,"total_pages":1},"data":[{"id":"6","type":"expense","attributes":{"id":6,"payment_date":"2026-08-20","amount":"100.00","amount_cents":10000,"amount_currency":"USD","amount_formatted":"$100","payee_type":"custom","payee_value":"John Smith","payee":"John Smith","ref_no":"abc123","description":"Hello abc123","expense_category_name":"Equipment","event_id":null,"event_title":null,"expense_category_id":12,"attachments":[]},"relationships":{"event":{"data":null},"created_by":{"data":{"id":"2434","type":"user"}},"expense_category":{"data":{"id":"12","type":"expense_category"}},"staff":{"data":null}}}]}}}}}},"post":{"summary":"Create an expense","tags":["Expenses"],"description":"Create a new expense record for the business. Expenses track costs like equipment purchases, venue fees, staff payments, and other business expenditures.\n\nThe 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`.\n\n**Required permission:** `expense_create`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"expense created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"7","type":"expense","attributes":{"id":7,"payment_date":"2026-08-20","amount":"250.00","amount_cents":25000,"amount_currency":"USD","amount_formatted":"$250","payee_type":"custom","payee_value":"Best Buy","payee":"Best Buy","ref_no":"INV-2024-001","description":"Speaker cables and adapters","expense_category_name":"Equipment","event_id":null,"event_title":null,"expense_category_id":13,"attachments":[]},"relationships":{"event":{"data":null},"created_by":{"data":null},"expense_category":{"data":{"id":"13","type":"expense_category"}},"staff":{"data":null}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"payee_type":{"type":"string","description":"Payee type","enum":["custom","staff"]},"payee_value":{"type":"string","description":"Payee name (required when payee_type is \"custom\")"},"staff_id":{"type":"integer","description":"Staff member ID (required when payee_type is \"staff\")"},"payment_date":{"type":"string","description":"Date of payment (YYYY-MM-DD)"},"payment_method":{"type":"string","description":"Payment method (e.g., \"Cash\", \"Check\", \"Credit Card\")"},"amount":{"type":"number","description":"Expense amount"},"ref_no":{"type":"string","description":"Reference number"},"description":{"type":"string","description":"Description of the expense"},"expense_category_id":{"type":"integer","description":"Expense category ID"},"event_id":{"type":"integer","description":"Associated event ID (optional)"}},"required":["payment_date","ref_no","amount"]}}}}}},"/api/v1/expenses/{id}":{"get":{"summary":"Fetch expense by ID","tags":["Expenses"],"description":"Returns the full details of a single expense record.\n\n**Required permission:** `expense_read`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the expense","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"expense found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"8","type":"expense","attributes":{"id":8,"payment_date":"2026-08-20","amount":"100.00","amount_cents":10000,"amount_currency":"USD","amount_formatted":"$100","payee_type":"custom","payee_value":"John Smith","payee":"John Smith","ref_no":"abc123","description":"Hello abc123","expense_category_name":"Equipment","event_id":null,"event_title":null,"expense_category_id":14,"attachments":[]},"relationships":{"event":{"data":null},"created_by":{"data":{"id":"2436","type":"user"}},"expense_category":{"data":{"id":"14","type":"expense_category"}},"staff":{"data":null}}}}}}}}},"put":{"summary":"Update an expense","tags":["Expenses"],"description":"Update an existing expense record.\n\n**Required permission:** `expense_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the expense","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"expense updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"9","type":"expense","attributes":{"id":9,"payment_date":"2026-08-20","amount":"375.00","amount_cents":37500,"amount_currency":"USD","amount_formatted":"$375","payee_type":"custom","payee_value":"John Smith","payee":"John Smith","ref_no":"abc123","description":"Updated description","expense_category_name":"Equipment","event_id":null,"event_title":null,"expense_category_id":15,"attachments":[]},"relationships":{"event":{"data":null},"created_by":{"data":{"id":"2437","type":"user"}},"expense_category":{"data":{"id":"15","type":"expense_category"}},"staff":{"data":null}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"payee_type":{"type":"string","description":"Payee type","enum":["custom","staff"]},"payee_value":{"type":"string","description":"Payee name"},"staff_id":{"type":"integer","description":"Staff member ID"},"payment_date":{"type":"string","description":"Date of payment (YYYY-MM-DD)"},"payment_method":{"type":"string","description":"Payment method"},"amount":{"type":"number","description":"Expense amount"},"ref_no":{"type":"string","description":"Reference number"},"description":{"type":"string","description":"Description of the expense"},"expense_category_id":{"type":"integer","description":"Expense category ID"},"event_id":{"type":"integer","description":"Associated event ID"}}}}}}},"delete":{"summary":"Delete an expense","tags":["Expenses"],"description":"Soft-deletes an expense record. The expense will no longer appear in listings but is retained in the database for record-keeping.\n\n**Required permission:** `expense_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the expense","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"expense deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/extra_categories":{"get":{"summary":"Fetch all extra categories","tags":["Extras"],"description":"Returns all active extra categories for the business, ordered by position.\n\nExtra 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.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `extras`, `extra_groups`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"extra categories found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"7798","type":"extra_category","attributes":{"id":7798,"name":"Props","position":3,"customer_visibility":"always_show"},"relationships":{"franchise":{"data":{"id":"3851","type":"franchise"}},"extra_groups":{"data":[]},"extras":{"data":[]}}},{"id":"7799","type":"extra_category","attributes":{"id":7799,"name":"Signage","position":4,"customer_visibility":"always_show"},"relationships":{"franchise":{"data":{"id":"3851","type":"franchise"}},"extra_groups":{"data":[]},"extras":{"data":[]}}}]}}}}}}},"/api/v1/extra_categories/{id}":{"get":{"summary":"Fetch an extra category by ID","tags":["Extras"],"description":"Returns the details of a single extra category, including its name, position, and customer visibility setting.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `extras`, `extra_groups`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the extra category","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"extra category found","content":{"application/json":{"example":{"data":{"id":"7802","type":"extra_category","attributes":{"id":7802,"name":"Props","position":3,"customer_visibility":"always_show"},"relationships":{"franchise":{"data":{"id":"3852","type":"franchise"}},"extra_groups":{"data":[]},"extras":{"data":[]}}}}}}}}}},"/api/v1/extras":{"get":{"summary":"Fetch all extras","tags":["Extras"],"description":"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).\n\nResults can be filtered by text search, widget visibility, category, and sort order.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"text","in":"query","description":"Search extras by name","required":false,"schema":{"type":"string"}},{"name":"only_widget_visible","in":"query","description":"Only return extras visible on the booking widget","required":false,"schema":{"type":"boolean"}},{"name":"order","in":"query","description":"Sort order for results","required":false,"schema":{"type":"string"}},{"name":"extra_category_id","in":"query","description":"Filter by a specific extra category ID","required":false,"schema":{"type":"integer"}},{"name":"category_ids[]","in":"query","items":{"type":"integer"},"description":"Filter by extra category IDs","required":false,"schema":{"type":"array"}}],"responses":{"200":{"description":"extras found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"77","type":"extra","attributes":{"id":77,"name":"Premium Props Package","description":"A special extra item for your event","position":1,"price_method":"flat_rate","include_at_no_charge_with_certain_packages":false,"price":"25.00","price_cents":2500,"price_currency":"USD","price_formatted":"$25","hourly_price":"0.00","hourly_price_cents":0,"hourly_price_currency":"USD","hourly_price_formatted":"$0","daily_price":"0.00","daily_price_cents":0,"daily_price_currency":"USD","daily_price_formatted":"$0","primary_image":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"}},"relationships":{"extra_group":{"data":{"id":"103","type":"extra_group"}},"extra_category":{"data":{"id":"7805","type":"extra_category"}}}}]}}}}}}},"/api/v1/extras/{id}":{"get":{"summary":"Fetch an extra by ID","tags":["Extras"],"description":"Returns the full details of a single extra, including its name, description, pricing (flat rate, hourly, or daily), position, and images.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `extra_group`, `extra_category`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the extra","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"extra found","content":{"application/json":{"example":{"data":{"id":"78","type":"extra","attributes":{"id":78,"name":"Premium Props Package","description":"A special extra item for your event","position":1,"price_method":"flat_rate","include_at_no_charge_with_certain_packages":false,"price":"25.00","price_cents":2500,"price_currency":"USD","price_formatted":"$25","hourly_price":"0.00","hourly_price_cents":0,"hourly_price_currency":"USD","hourly_price_formatted":"$0","daily_price":"0.00","daily_price_cents":0,"daily_price_currency":"USD","daily_price_formatted":"$0","primary_image":{"video_variant":"/assets/video_dimensions_no-addon-51d25c35216ac7f3ea621f74772120bbea123405e2fa3f25d97050af78f5804e.png"}},"relationships":{"extra_group":{"data":{"id":"104","type":"extra_group"}},"extra_category":{"data":{"id":"7808","type":"extra_category"}}}}}}}}}}},"/api/v1/leads/{lead_id}/booking_questions":{"get":{"summary":"Fetch booking question answers for a lead","tags":["Leads"],"description":"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`.\n\nUse the `column_name` of each entry as the key when sending updates via the `PATCH /api/v1/leads/{lead_id}/booking_questions` endpoint.\n\n**Required permission:** `lead_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"booking questions returned","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"15","type":"lead_booking_question","attributes":{"id":15,"lead_id":180,"booking_question_id":15,"editable":true,"column_name":"guest_count","name":"Estimated Guest Count","label":"Estimated guest count","kind":"text","link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_source","type":"lead_booking_question","attributes":{"id":"utm_source","lead_id":180,"booking_question_id":null,"editable":false,"column_name":"utm_source","name":"UTM Source","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_campaign","type":"lead_booking_question","attributes":{"id":"utm_campaign","lead_id":180,"booking_question_id":null,"editable":false,"column_name":"utm_campaign","name":"UTM Campaign","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_medium","type":"lead_booking_question","attributes":{"id":"utm_medium","lead_id":180,"booking_question_id":null,"editable":false,"column_name":"utm_medium","name":"UTM Medium","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_term","type":"lead_booking_question","attributes":{"id":"utm_term","lead_id":180,"booking_question_id":null,"editable":false,"column_name":"utm_term","name":"UTM Term","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}},{"id":"utm_content","type":"lead_booking_question","attributes":{"id":"utm_content","lead_id":180,"booking_question_id":null,"editable":false,"column_name":"utm_content","name":"UTM Content","label":null,"kind":null,"link":null,"value":null,"formatted_value":null,"options":null,"archived":false}}]}}}}}},"patch":{"summary":"Update booking question answers for a lead","tags":["Leads"],"description":"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).\n\nOnly the keys you include are touched — other answers on the lead are preserved.\n\n**Required permission:** `lead_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"booking questions updated","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"custom_questions":{"type":"object","description":"Keys are booking-question column names; values are the answer to record.","additionalProperties":true}},"required":["custom_questions"]}}}}}},"/api/v1/lead_bookings":{"get":{"summary":"Fetch all lead bookings","tags":["Leads"],"description":"Returns a paginated list of bookings attached to leads (potential customers who have not yet been converted to a confirmed event). Results can be filtered by date range and brand.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `lead_add_ons`, `lead_extras`, `lead_booking_extra_categories`, `lead_booking_extra_categories.lead_extras`, `photobooth_background`.\n\n**Required permission:** `lead_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_date_start","in":"query","description":"Event Date (Start)","required":false,"schema":{"type":"string"}},{"name":"event_date_end","in":"query","description":"Event Date (End)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Number of results per page","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead bookings found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"138","type":"lead_booking","attributes":{"id":138,"lead_id":182,"event_type_id":856,"starts_at":"2026-09-10T07:00:00.000-07:00","ends_at":"2026-09-10T12:00:00.000-07:00","staff_id":null,"staff_name":null,"name":"Waylon","service_name":"Photo booth 79","package_group_name":"Sample","title":"John Smith","brand_name":"Haley Group 617","date_mode":"date_time","length_in_minutes":null,"length_in_days":null,"units":null,"package_unit_range_id":null,"event_type_unit_range":null,"formatted_date_range":"Thursday, September 10, 2026","formatted_time_range":"7:00 AM - 12:00 PM","formatted_units":null,"preview_image":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"relationships":{"lead_add_ons":{"data":[]},"lead_extras":{"data":[]},"lead_booking_extra_categories":{"data":[]},"photobooth_background":{"data":null}}}]}}}}}}},"/api/v1/lead_bookings/{lead_booking_id}":{"get":{"summary":"Fetch lead booking by ID","tags":["Leads"],"description":"Returns the full details of a single lead booking.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `lead_add_ons`, `lead_extras`, `lead_booking_extra_categories`, `lead_booking_extra_categories.lead_extras`, `photobooth_background`.\n\n**Required permission:** `lead_read`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_booking_id","in":"path","description":"Lead Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead booking found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"139","type":"lead_booking","attributes":{"id":139,"lead_id":183,"event_type_id":857,"starts_at":"2026-09-10T07:00:00.000-07:00","ends_at":"2026-09-10T12:00:00.000-07:00","staff_id":null,"staff_name":null,"name":"Tandra","service_name":"Photo booth 80","package_group_name":"Sample","title":"John Smith","brand_name":"Wilderman, Beatty and Rempel 621","date_mode":"date_time","length_in_minutes":null,"length_in_days":null,"units":null,"package_unit_range_id":null,"event_type_unit_range":null,"formatted_date_range":"Thursday, September 10, 2026","formatted_time_range":"7:00 AM - 12:00 PM","formatted_units":null,"preview_image":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"relationships":{"lead_add_ons":{"data":[]},"lead_extras":{"data":[]},"lead_booking_extra_categories":{"data":[]},"photobooth_background":{"data":null}}}}}}}}},"patch":{"summary":"Update a lead booking","tags":["Leads"],"description":"Updates the package, schedule, length, or requested staff member of an existing lead booking. Only the fields included in the request are changed; send `staff_id` as an empty string to clear the staff request.\n\n**Required permission:** `lead_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_booking_id","in":"path","description":"Lead Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead booking updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"140","type":"lead_booking","attributes":{"id":140,"lead_id":184,"event_type_id":858,"starts_at":"2026-09-10T21:00:00.000-07:00","ends_at":"2026-09-11T02:00:00.000-07:00","staff_id":2447,"staff_name":"Sandy Quigley","name":"Aja","service_name":"Photo booth 81","package_group_name":"Sample","title":"John Smith","brand_name":"Treutel, Osinski and Maggio 625","date_mode":"date_time","length_in_minutes":null,"length_in_days":null,"units":null,"package_unit_range_id":null,"event_type_unit_range":null,"formatted_date_range":"Thursday, September 10, 2026","formatted_time_range":"9:00 PM - 2:00 AM","formatted_units":null,"preview_image":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"relationships":{"lead_add_ons":{"data":[]},"lead_extras":{"data":[]},"lead_booking_extra_categories":{"data":[]},"photobooth_background":{"data":null}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event_type_id":{"type":"integer","description":"Package (event type) ID"},"event_category_id":{"type":"integer","description":"Service (event category) ID"},"package_group_id":{"type":"integer","description":"Package group ID"},"starts_at_date":{"type":"string","description":"Event date (e.g. 2026-09-15)"},"starts_at_time":{"type":"string","description":"Event start time (e.g. 06:00 PM)"},"length_in_minutes":{"type":"integer","description":"Length in minutes (for time-based packages)"},"length_in_days":{"type":"integer","description":"Length in days (for multi-day packages)"},"units":{"type":"integer","description":"Number of units (for per-unit packages)"},"package_unit_range_id":{"type":"integer","description":"Selected package unit range ID"},"staff_id":{"type":"integer","description":"Staff member requested for this package. Send an empty string to clear it."}}}}}}},"delete":{"summary":"Remove a lead booking","tags":["Leads"],"description":"Removes a booking from a lead.\n\n**Required permission:** `lead_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_booking_id","in":"path","description":"Lead Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead booking removed","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/leads/{lead_id}/lead_bookings":{"post":{"summary":"Add a booking to a lead","tags":["Leads"],"description":"Adds a new booking (package selection) to an existing lead. Staff is requested per package, so each booking carries its own `staff_id`.\n\n**Required permission:** `lead_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"Lead ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead booking created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"143","type":"lead_booking","attributes":{"id":143,"lead_id":186,"event_type_id":860,"starts_at":"2026-09-17T18:00:00.000-07:00","ends_at":"2026-09-17T23:00:00.000-07:00","staff_id":2449,"staff_name":"Charlie Wehner","name":"Leonel","service_name":"Photo booth 83","package_group_name":"Sample","title":"John Smith","brand_name":"Huel Inc 633","date_mode":"date_time","length_in_minutes":null,"length_in_days":null,"units":null,"package_unit_range_id":null,"event_type_unit_range":null,"formatted_date_range":"Thursday, September 17, 2026","formatted_time_range":"6:00 PM - 11:00 PM","formatted_units":null,"preview_image":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"relationships":{"lead_add_ons":{"data":[]},"lead_extras":{"data":[]},"lead_booking_extra_categories":{"data":[]},"photobooth_background":{"data":null}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event_type_id":{"type":"integer","description":"Package (event type) ID"},"event_category_id":{"type":"integer","description":"Service (event category) ID"},"package_group_id":{"type":"integer","description":"Package group ID"},"starts_at_date":{"type":"string","description":"Event date (e.g. 2026-09-15)"},"starts_at_time":{"type":"string","description":"Event start time (e.g. 06:00 PM)"},"length_in_minutes":{"type":"integer","description":"Length in minutes (for time-based packages)"},"length_in_days":{"type":"integer","description":"Length in days (for multi-day packages)"},"units":{"type":"integer","description":"Number of units (for per-unit packages)"},"package_unit_range_id":{"type":"integer","description":"Selected package unit range ID"},"staff_id":{"type":"integer","description":"Staff member requested for this package"}}}}}}}},"/api/v1/lead_bookings/{lead_booking_id}/lead_add_ons":{"post":{"summary":"Add an add-on to a lead booking","tags":["Leads"],"description":"Adds an add-on to a lead booking.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_booking_id","in":"path","description":"Lead Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"add-on added","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"5","type":"lead_add_on","attributes":{"id":5,"quantity":1,"lead_booking_id":144,"name":"Bubble Machine Number 7","add_on_name":"Bubble Machine Number 7","add_on_description":"Thousands of bubbles ready for that special moment","include_at_no_charge":false,"automatically_added_by_package":false,"add_on_price":"10.00","add_on_price_cents":1000,"add_on_price_currency":"USD","add_on_price_formatted":"$10","taxable":true},"relationships":{"add_on":{"data":{"id":"63","type":"add_on"}},"lead_booking":{"data":{"id":"144","type":"lead_booking"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["add_on_id"],"properties":{"add_on_id":{"type":"integer","description":"Add-on ID"},"quantity":{"type":"integer","description":"Quantity (default: 1)"}}}}}}}},"/api/v1/lead_bookings/{lead_booking_id}/backdrop":{"post":{"summary":"Set the backdrop on a lead booking","tags":["Leads"],"description":"Assigns a photobooth backdrop to a lead booking, replacing any existing selection.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_booking_id","in":"path","description":"Lead Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"backdrop set","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"15","type":"photobooth_background","attributes":{"id":15,"name":"Sample Background 3","description":"Sample description","position":1,"backdrop_category_id":21,"video_url":null,"third_party_video_id":null,"include_at_no_charge_with_certain_packages":false,"price":"100.00","price_cents":10000,"price_currency":"USD","price_formatted":"$100","taxable":true,"primary_image":{"video_variant":null,"content_type":"image/png","url":"http://www.checkcherry.localhost/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6NTM3NSwicHVyIjoiYmxvYl9pZCJ9fQ==--430b20a38e8d4fbb15233b34c6ce059adf675b16/sample.png"},"additional_images":[],"archived":false},"relationships":{"backdrop_category":{"data":{"id":"21","type":"backdrop_category"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["photobooth_background_id"],"properties":{"photobooth_background_id":{"type":"integer","description":"Backdrop (photobooth background) ID"}}}}}}},"delete":{"summary":"Remove the backdrop from a lead booking","tags":["Leads"],"description":"Clears the photobooth backdrop selection on a lead booking.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_booking_id","in":"path","description":"Lead Booking ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"backdrop removed","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/leads":{"post":{"summary":"Add a lead to the database","tags":["Leads"],"description":"Creates a new lead for the specified business. A lead represents a potential customer inquiry that can later be converted into a confirmed event.\n\nAt minimum, an `email` address is required. All other fields are optional but recommended for a complete lead record.\n\nThe `staff_id` field requests a staff member for the lead's package. It carries through to the booking when the lead converts. The former name `employee_id` is still accepted for backwards compatibility; `staff_id` takes precedence if both are sent.\n\n**Required permission:** `lead_create`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"lead created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"190","type":"lead","attributes":{"id":190,"email":"jsmith@gmail.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":"Test","notes":"","lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"API","indoor_outdoor":null,"title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4374,"brand_name":"Weber Group 650","created_at":"2026-08-27T14:57:58.138-07:00","token":"KEG-K3WQ-AQC","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":null,"phone_normalized":"","starts_at":null,"ends_at":null,"length_in_hours":null,"length_in_minutes":null,"length_in_days":null,"event_time":null,"event_type_id":null,"event_date":null,"package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":null,"formatted_time_range":"","formatted_date_range":"","formatted_datetime_range":"","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-650-d0e3510e.cc.localhost/reservation/resume?lead_id=190&token=KEG-K3WQ-AQC"},"relationships":{"lead_bookings":{"data":[{"id":"147","type":"lead_booking"}]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string","description":"Contact first name"},"last_name":{"type":"string","description":"Contact last name"},"email":{"type":"string","description":"Contact email address"},"phone":{"type":"string","description":"Contact phone number"},"company_name":{"type":"string","description":"Business or organization name"},"staff_id":{"type":"integer","description":"Staff member ID requested for the lead's package"},"lead_source":{"type":"string","description":"How the lead was acquired","enum":["Manual Entry","Lead Form","Online Booking","App","Zapier","API","Wedding Wire"]},"contact_preference":{"type":"string","description":"How the lead prefers to be contacted","enum":["Email","Phone","Text Message"]},"lead_type":{"type":"string","description":"Custom label for categorizing the lead"},"notes":{"type":"string","description":"Private internal notes about this lead"},"event_date":{"type":"string","description":"Requested event date (YYYY-MM-DD)"},"event_time":{"type":"string","description":"Requested event start time"},"length_in_minutes":{"type":"integer","description":"Requested event duration in minutes"},"estimated_budget":{"type":"number","description":"Estimated event budget"},"estimated_number_guests":{"type":"integer","description":"Estimated number of guests"},"venue_name":{"type":"string","description":"Event venue name"},"venue_address":{"type":"string","description":"Venue street address"},"venue_city":{"type":"string","description":"Venue city"},"venue_state":{"type":"string","description":"Venue state"},"venue_zip":{"type":"string","description":"Venue ZIP code"},"indoor_outdoor":{"type":"string","description":"Venue type","enum":["Indoor","Outdoor"]},"service_id":{"type":"integer","description":"Service (package group) ID the lead is interested in"},"package_id":{"type":"integer","description":"Package (event type) ID the lead is interested in"},"referred_by_user_id":{"type":"integer","description":"ID of the staff member who referred this lead"},"next_follow_up_on":{"type":"string","description":"Next follow-up date (YYYY-MM-DD)"},"subject":{"type":"string","description":"Message subject from the lead inquiry"},"message":{"type":"string","description":"Message body from the lead inquiry"},"utm_source":{"type":"string","description":"UTM source tracking parameter"},"utm_campaign":{"type":"string","description":"UTM campaign tracking parameter"},"utm_medium":{"type":"string","description":"UTM medium tracking parameter"},"utm_term":{"type":"string","description":"UTM term tracking parameter"},"utm_content":{"type":"string","description":"UTM content tracking parameter"},"gclid":{"type":"string","description":"Google Click ID for ad tracking"},"custom_questions":{"type":"object","description":"Responses to custom booking questions configured by the business, as key-value pairs"}},"required":["email"]}}}}},"get":{"summary":"Fetch all leads","tags":["Leads"],"description":"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.\n\nEach 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.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `lead_bookings`.\n\nThe response includes `meta.total_count` (total matching leads) and `meta.per_page` (results per page) to support pagination.\n\n**Required permission:** `lead_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"email","in":"query","description":"Filter leads by exact email address match","required":false,"schema":{"type":"string"}},{"name":"text","in":"query","description":"Full-text search across lead name, email, phone, venue, and notes","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Number of results per page (default: 25)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"leads found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":1,"per_page":25,"page":1,"total_pages":1},"data":[{"id":"191","type":"lead","attributes":{"id":191,"email":"john.smith261@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4375,"brand_name":"Johns-Barrows 651","created_at":"2026-08-27T14:57:58.241-07:00","token":"7XA-FW2D-GK4","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":"2026-09-10T16:00:00.000-07:00","ends_at":"2026-09-11T00:00:00.000-07:00","length_in_hours":8.0,"length_in_minutes":480,"length_in_days":null,"event_time":"4:00pm","event_type_id":null,"event_date":"09-10-2026","package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":8.0,"formatted_time_range":"4:00 PM - 12:00 AM","formatted_date_range":"September 10 - September 11, 2026","formatted_datetime_range":"Thursday, September 10, 2026 • 4:00 PM - 12:00 AM","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-651-c8503fa0.cc.localhost/reservation/resume?lead_id=191&token=7XA-FW2D-GK4"},"relationships":{"lead_bookings":{"data":[{"id":"148","type":"lead_booking"}]}}}]}}}}}}},"/api/v1/leads/{lead_id}":{"put":{"summary":"Update a lead","tags":["Leads"],"description":"Updates an existing lead with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.\n\nUse this to update contact information, venue details, event preferences, status flags (spam, archived), or reassign the lead to a different staff member.\n\n**Required permission:** `lead_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead to update","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"192","type":"lead","attributes":{"id":192,"email":"john.smith263@example.com","first_name":"Jane","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":"Updated via API","lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"Jane Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4378,"brand_name":"Pouros-Zboncak 654","created_at":"2026-08-27T14:57:58.545-07:00","token":"MHR-TKH4-XJE","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":"2026-09-10T16:00:00.000-07:00","ends_at":"2026-09-11T00:00:00.000-07:00","length_in_hours":8.0,"length_in_minutes":480,"length_in_days":null,"event_time":"4:00pm","event_type_id":null,"event_date":"09-10-2026","package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":8.0,"formatted_time_range":"4:00 PM - 12:00 AM","formatted_date_range":"September 10 - September 11, 2026","formatted_datetime_range":"Thursday, September 10, 2026 • 4:00 PM - 12:00 AM","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-654-3c4bef29.cc.localhost/reservation/resume?lead_id=192&token=MHR-TKH4-XJE"},"relationships":{"lead_bookings":{"data":[{"id":"149","type":"lead_booking"}]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"first_name":{"type":"string","description":"Contact first name"},"last_name":{"type":"string","description":"Contact last name"},"email":{"type":"string","description":"Contact email address"},"phone":{"type":"string","description":"Contact phone number"},"company_name":{"type":"string","description":"Business or organization name"},"staff_id":{"type":"integer","description":"Staff member ID requested for the lead's package"},"lead_source":{"type":"string","description":"How the lead was acquired"},"contact_preference":{"type":"string","description":"How the lead prefers to be contacted","enum":["Email","Phone","Text Message"]},"lead_type":{"type":"string","description":"Custom label for categorizing the lead"},"notes":{"type":"string","description":"Private internal notes about this lead"},"starts_at_date":{"type":"string","description":"Requested event date (YYYY-MM-DD)"},"starts_at_time":{"type":"string","description":"Requested event start time"},"length_in_minutes":{"type":"integer","description":"Requested event duration in minutes"},"estimated_budget":{"type":"number","description":"Estimated event budget"},"estimated_number_guests":{"type":"integer","description":"Estimated number of guests"},"venue_name":{"type":"string","description":"Event venue name"},"venue_address":{"type":"string","description":"Venue street address"},"venue_city":{"type":"string","description":"Venue city"},"venue_state":{"type":"string","description":"Venue state"},"venue_zip":{"type":"string","description":"Venue ZIP code"},"indoor_outdoor":{"type":"string","description":"Venue type","enum":["Indoor","Outdoor"]},"service_id":{"type":"integer","description":"Service (package group) ID the lead is interested in"},"package_id":{"type":"integer","description":"Package (event type) ID the lead is interested in"},"brand_id":{"type":"integer","description":"Brand ID to associate with this lead"},"spam":{"type":"boolean","description":"Mark lead as spam"},"archived":{"type":"boolean","description":"Archive the lead"},"next_follow_up_on":{"type":"string","description":"Next follow-up date (YYYY-MM-DD)"},"custom_questions":{"type":"object","description":"Responses to custom booking questions, as key-value pairs"}}}}}}},"get":{"summary":"Fetch lead by ID","tags":["Leads"],"description":"Returns the full details of a single lead, including contact information, event details, venue, pricing, status, and any custom question responses.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `lead_bookings`.\n\n**Required permission:** `lead_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead to retrieve","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"193","type":"lead","attributes":{"id":193,"email":"john.smith265@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4381,"brand_name":"Kemmer-Barrows 657","created_at":"2026-08-27T14:57:58.701-07:00","token":"MJR-NRRN-PDN","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":"2026-09-10T16:00:00.000-07:00","ends_at":"2026-09-11T00:00:00.000-07:00","length_in_hours":8.0,"length_in_minutes":480,"length_in_days":null,"event_time":"4:00pm","event_type_id":null,"event_date":"09-10-2026","package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":8.0,"formatted_time_range":"4:00 PM - 12:00 AM","formatted_date_range":"September 10 - September 11, 2026","formatted_datetime_range":"Thursday, September 10, 2026 • 4:00 PM - 12:00 AM","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-657-aad01130.cc.localhost/reservation/resume?lead_id=193&token=MJR-NRRN-PDN"},"relationships":{"lead_bookings":{"data":[{"id":"150","type":"lead_booking"}]}}}}}}}}}},"/api/v1/leads/{lead_id}/archive":{"put":{"summary":"Archive a lead","tags":["Leads"],"description":"Marks a lead as archived. Archived leads are hidden from the default lead list.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead archived","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"194","type":"lead","attributes":{"id":194,"email":"john.smith267@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4384,"brand_name":"Keeling-Fisher 660","created_at":"2026-08-27T14:57:58.838-07:00","token":"9G6-G4CM-6XG","spam":false,"archived":true,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":null,"ends_at":null,"length_in_hours":null,"length_in_minutes":null,"length_in_days":null,"event_time":null,"event_type_id":null,"event_date":null,"package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":null,"formatted_time_range":"","formatted_date_range":"","formatted_datetime_range":"","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-660-c6f25761.cc.localhost/reservation/resume?lead_id=194&token=9G6-G4CM-6XG"},"relationships":{"lead_bookings":{"data":[]}}}}}}}}}},"/api/v1/leads/{lead_id}/unarchive":{"put":{"summary":"Unarchive a lead","tags":["Leads"],"description":"Restores an archived lead back to the active lead list.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead unarchived","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"195","type":"lead","attributes":{"id":195,"email":"john.smith269@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4387,"brand_name":"Kuhn-Jacobi 663","created_at":"2026-08-27T14:57:58.973-07:00","token":"CPM-HDWV-29P","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":null,"ends_at":null,"length_in_hours":null,"length_in_minutes":null,"length_in_days":null,"event_time":null,"event_type_id":null,"event_date":null,"package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":null,"formatted_time_range":"","formatted_date_range":"","formatted_datetime_range":"","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-663-ccd505d8.cc.localhost/reservation/resume?lead_id=195&token=CPM-HDWV-29P"},"relationships":{"lead_bookings":{"data":[]}}}}}}}}}},"/api/v1/leads/{lead_id}/flag_as_spam":{"put":{"summary":"Flag a lead as spam","tags":["Leads"],"description":"Marks a lead as spam. Spam leads are filtered out of the default lead list.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead flagged as spam","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"196","type":"lead","attributes":{"id":196,"email":"john.smith271@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4390,"brand_name":"Mayer LLC 666","created_at":"2026-08-27T14:57:59.135-07:00","token":"ZZR-NZ6J-X2J","spam":true,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":null,"ends_at":null,"length_in_hours":null,"length_in_minutes":null,"length_in_days":null,"event_time":null,"event_type_id":null,"event_date":null,"package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":null,"formatted_time_range":"","formatted_date_range":"","formatted_datetime_range":"","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-666-da831acb.cc.localhost/reservation/resume?lead_id=196&token=ZZR-NZ6J-X2J"},"relationships":{"lead_bookings":{"data":[]}}}}}}}}}},"/api/v1/leads/{lead_id}/unflag_as_spam":{"put":{"summary":"Unflag a lead as spam","tags":["Leads"],"description":"Removes the spam flag from a lead, restoring it to the active lead list.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"spam flag removed","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"197","type":"lead","attributes":{"id":197,"email":"john.smith273@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4393,"brand_name":"McClure, Pouros and Murray 669","created_at":"2026-08-27T14:57:59.333-07:00","token":"HE3-MN3M-RR7","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":null,"ends_at":null,"length_in_hours":null,"length_in_minutes":null,"length_in_days":null,"event_time":null,"event_type_id":null,"event_date":null,"package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":null,"formatted_time_range":"","formatted_date_range":"","formatted_datetime_range":"","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-669-b8a3f5a6.cc.localhost/reservation/resume?lead_id=197&token=HE3-MN3M-RR7"},"relationships":{"lead_bookings":{"data":[]}}}}}}}}}},"/api/v1/leads/{lead_id}/unmark_as_converted_to_event":{"put":{"summary":"Remove converted-to-event flag","tags":["Leads"],"description":"Removes the \"converted to event\" flag from a lead, indicating it has not yet been converted.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"converted flag removed","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"198","type":"lead","attributes":{"id":198,"email":"john.smith275@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4396,"brand_name":"Casper, Harris and Wyman 672","created_at":"2026-08-27T14:57:59.450-07:00","token":"TH9-QPMT-TAD","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":null,"ends_at":null,"length_in_hours":null,"length_in_minutes":null,"length_in_days":null,"event_time":null,"event_type_id":null,"event_date":null,"package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":null,"formatted_time_range":"","formatted_date_range":"","formatted_datetime_range":"","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-672-b1dcdfa7.cc.localhost/reservation/resume?lead_id=198&token=TH9-QPMT-TAD"},"relationships":{"lead_bookings":{"data":[]}}}}}}}}}},"/api/v1/leads/{lead_id}/enable_automated_messages":{"put":{"summary":"Enable automated messages","tags":["Leads"],"description":"Enables automated messages (emails, texts) for this lead. When enabled, the lead will receive any configured automated follow-up sequences.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"automated messages enabled","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"199","type":"lead","attributes":{"id":199,"email":"john.smith277@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4399,"brand_name":"Rodriguez, Grimes and Bogan 675","created_at":"2026-08-27T14:57:59.570-07:00","token":"JPV-WPYJ-E3Q","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":null,"ends_at":null,"length_in_hours":null,"length_in_minutes":null,"length_in_days":null,"event_time":null,"event_type_id":null,"event_date":null,"package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":null,"formatted_time_range":"","formatted_date_range":"","formatted_datetime_range":"","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-675-a190995d.cc.localhost/reservation/resume?lead_id=199&token=JPV-WPYJ-E3Q"},"relationships":{"lead_bookings":{"data":[]}}}}}}}}}},"/api/v1/leads/{lead_id}/disable_automated_messages":{"put":{"summary":"Disable automated messages","tags":["Leads"],"description":"Disables automated messages for this lead. The lead will no longer receive automated follow-up sequences.\n\n**Required permission:** `lead_write`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"automated messages disabled","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"200","type":"lead","attributes":{"id":200,"email":"john.smith279@example.com","first_name":"John","last_name":"Smith","company_name":null,"venue_name":null,"venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_latitude":null,"venue_longitude":null,"venue_google_place_id":null,"estimated_budget":null,"estimated_number_guests":null,"subject":null,"message":null,"source":null,"notes":null,"lead_event_type":null,"lead_type":null,"last_contact_at":null,"next_follow_up_on":null,"origin":"Online Booking","indoor_outdoor":"","title":"John Smith","setup_at":null,"pickup_at":null,"dropoff_at":null,"brand_id":4402,"brand_name":"Reynolds, Crona and Becker 678","created_at":"2026-08-27T14:57:59.687-07:00","token":"2N3-KWN6-RVA","spam":false,"archived":false,"converted_to_event":false,"utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"phone":"951-555-1212","phone_normalized":"+19515551212","starts_at":null,"ends_at":null,"length_in_hours":null,"length_in_minutes":null,"length_in_days":null,"event_time":null,"event_type_id":null,"event_date":null,"package_name":null,"package_group_name":null,"service_name":null,"package_names":[],"service_names":[],"length":null,"formatted_time_range":"","formatted_date_range":"","formatted_datetime_range":"","custom_fields":[],"created_at_description":"Created less than a minute ago","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"resume_booking_link":"https://test-678-e102b9e4.cc.localhost/reservation/resume?lead_id=200&token=2N3-KWN6-RVA"},"relationships":{"lead_bookings":{"data":[]}}}}}}}}}},"/api/v1/leads/{lead_id}/notes":{"post":{"summary":"Add a note to a lead","tags":["Leads"],"description":"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.\n\n**Required permission:** `lead_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"note added","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","description":"The note text to add"},"next_follow_up_on":{"type":"string","description":"Set or update the next follow-up date (YYYY-MM-DD)"}},"required":["note"]}}}}}},"/api/v1/leads/{lead_id}/convert_to_booking":{"post":{"summary":"Convert a lead to a booking","x-mcp-tool-name":"convert_lead_to_booking","tags":["Leads"],"description":"Converts a lead into a booking -- an event the client has already committed to. For one they still have to accept, use `POST /api/v1/leads/{lead_id}/convert_to_proposal`.\n\nThe lead's own details are filled in for you. Its packages, venue, notes, brand and client all carry over, along with its source, guest count, budget and campaign attribution. The lead is marked converted and its message history moves onto the new booking. Send an empty body to take all of it as-is.\n\n**Every field below is optional**, and overrides what came from the lead.\n\n`signature_collected` defaults to `true`, which creates the booking `confirmed`. Send `false` when you are still waiting on the contract and it is created `awaiting_signature` instead.\n\n### Packages\n\n`packages` **replaces** the lead's packages outright rather than merging with them. Leave it out to book exactly what the lead asked for. Each entry you do send needs an `event_type_id` (a package id from `GET /api/v1/packages`) and a `starts_at_date`.\n\nPricing, tax, travel fees and the title are all calculated from the packages and the venue. Send `total_amount` only to override the calculated total.\n\n### Attaching the client\n\nThe lead's contact details become the client, and when the lead's email matches somebody the business already has, that person is linked rather than duplicated. Send `contact_type` and the `contact_*` fields to attach someone else instead -- they work exactly as they do on `POST /api/v1/bookings`.\n\n### Converting more than once\n\nA lead that has already been converted converts again, producing a second event and leaving the first alone. Check `converted_to_event` on the lead first if that isn't what you want.\n\n### Dates, times and amounts\n\nDates are ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's own date format setting, so `03-04-2027` is March 4th for a US business and April 3rd for an international one. Times take `11:00AM`, `2:30pm` or `14:30`.\n\nAmounts are in the business's currency in whole units rather than cents, so `1250.00` is $1,250.00.\n\n**Required permission:** `event_create`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead converted to a booking","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"991","type":"event","attributes":{"id":991,"title":"John Smith’s Marlin","status":"confirmed","formatted_status":"Confirmed","formatted_status_with_context":"Confirmed","booked_at":"2026-08-27T14:58:00.033-07:00","created_at":"2026-08-27T14:58:00.034-07:00","created_via":"convert_from_lead","venue_name":"The Grand Hall","venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":"20260827-01","billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":"","lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"H94-HFC6-3DW","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2027-12-31T11:00:00.000-08:00","ends_at":"2027-12-31T14:00:00.000-08:00","length_in_minutes":"180.0","length_in_hours":"3.0","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"12-31-2027","starts_at_date_iso8601":"2027-12-31","starts_at_time":"11:00 AM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"Marlin","package_group_name":"Sample","service_name":"Photo booth 87","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2027-12-31T00:00:00.000-08:00","customer_ids":"2466","customer_names":"John Smith","customer_emails":"john.smith283@example.com","customer_phones":"951-555-1212","customer_addresses":"","customer_and_contact_ids":"2466","customer_and_contact_names":"John Smith","customer_and_contact_emails":"john.smith283@example.com","customer_and_contact_phones":"951-555-1212","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4408,"brand_name":"Kulas and Sons 684","primary_image":{"hero_variant":null},"booked_at_description":"Booked less than a minute ago via Convert from lead","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-684-019477be.cc.localhost/events/991-john-smith-s-marlin?token=H94-HFC6-3DW","questionnaires_url":"https://test-684-019477be.cc.localhost/events/991-john-smith-s-marlin/forms?token=H94-HFC6-3DW","payment_url":"https://test-684-019477be.cc.localhost/events/991-john-smith-s-marlin/payments/new?token=H94-HFC6-3DW","invoice_url":"https://test-684-019477be.cc.localhost/events/991-john-smith-s-marlin/invoice?token=H94-HFC6-3DW","designs_url":"https://test-684-019477be.cc.localhost/events/991-john-smith-s-marlin/designs?token=H94-HFC6-3DW","proposal_url":null,"referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[{"id":"467","type":"event_booking"}]},"proposal_alternatives":{"data":[]},"event_users":{"data":[{"id":"35","type":"event_user"}]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"signature_collected":{"type":"boolean","description":"Has the signature already been collected? Defaults to `true`, creating a `confirmed` booking. `false` creates it `awaiting_signature`."},"send_contact_invitation_to_create_account":{"type":"boolean","description":"Email the client an invitation to create an account. Requires an email on the lead or in `contact_email`."},"send_booking_confirmation_emails":{"type":"boolean","description":"Send the client the booking confirmation emails. Requires an email on the lead or in `contact_email`."},"contact_type":{"type":"string","enum":["New Customer","Existing Customer","None"],"description":"Where the client comes from. Defaults to the lead's own contact details. `Existing Customer` needs `customer_user_id`; `New Customer` builds one from the `contact_*` fields; `None` attaches nobody."},"customer_user_id":{"type":"integer","description":"The existing client's user ID, which must belong to this business. Required when `contact_type` is `Existing Customer`."},"contact_name":{"type":"string","description":"Client's name. Overrides the lead's."},"contact_email":{"type":"string","description":"Client's email. Overrides the lead's."},"contact_phone":{"type":"string","description":"Client's phone"},"contact_company_name":{"type":"string","description":"Client's company name"},"contact_description":{"type":"string","description":"Client's role, e.g. \"Bride\" or \"Father of the Groom\""},"contact_street":{"type":"string","description":"Client's street address"},"contact_city":{"type":"string","description":"Client's city"},"contact_state_code":{"type":"string","description":"Client's state or province code, in whatever form the business's country uses, e.g. `MA`"},"contact_postal_code":{"type":"string","description":"Client's postal code"},"venue_name":{"type":"string","description":"Venue name. Overrides the lead's."},"venue_address":{"type":"string","description":"Venue street address"},"venue_city":{"type":"string","description":"Venue city"},"venue_state":{"type":"string","description":"Venue state or province code, in whatever form the business's country uses, e.g. `MA`"},"venue_zip":{"type":"string","description":"Venue postal code"},"venue_google_place_id":{"type":"string","description":"Google Place ID for the venue"},"venue_latitude":{"type":"number","description":"Venue latitude"},"venue_longitude":{"type":"number","description":"Venue longitude"},"add_tax":{"type":"boolean","description":"Apply tax based on the venue's tax zone. Defaults to `true`."},"add_travel":{"type":"boolean","description":"Apply travel fees based on the venue's travel zone. Defaults to `true`."},"public_notes":{"type":"string","description":"Notes visible to the client"},"private_notes":{"type":"string","description":"Notes only staff can see. Defaults to the lead's notes."},"custom_title":{"type":"string","description":"Overrides the generated title"},"brand_id":{"type":"integer","description":"Brand to book under, which must be an active brand of this business. Defaults to the lead's brand."},"total_amount":{"type":"number","description":"Overrides the calculated event total. In whole currency units, so `1250.00` means $1,250.00. Max 999000."},"paid_amount":{"type":"number","description":"Payment already collected outside Check Cherry, recorded against the event. In whole currency units. Max 999000."},"custom_deposit_amount":{"type":"number","description":"Overrides the calculated deposit due. In whole currency units, and capped at the event total. Max 999000."},"packages":{"type":"array","description":"Replaces the packages carried over from the lead. Leave it out to keep them.","items":{"type":"object","properties":{"event_type_id":{"type":"string","description":"Package ID, from `GET /api/v1/packages`. Send the literal `custom` to price a one-off package instead, alongside `one_off_custom_title` and `total_amount`."},"starts_at_date":{"type":"string","description":"Start date, as ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's date format setting."},"starts_at_time":{"type":"string","description":"Start time, e.g. `11:00AM`, `2:30pm` or `14:30`. Required for packages scheduled by date and time."},"ends_at_time":{"type":"string","description":"Overrides the end time implied by the length. Same formats as `starts_at_time`."},"length_in_minutes":{"type":"integer","description":"Length in minutes, from 1 to 1440. Required for packages that let extra hours be booked, otherwise defaults to the package's own length."},"length_in_days":{"type":"integer","description":"Length in days, from 1 to 1000. Required for packages that let extra days be booked."},"units":{"type":"integer","description":"Unit count, for packages priced per unit. Must fall inside one of that package's unit ranges, which are listed on `GET /api/v1/packages/{id}`."},"package_unit_range_id":{"type":"integer","description":"Unit range ID, for packages priced by unit range. Must be one of that package's own ranges, from `GET /api/v1/packages/{id}`."},"backdrop_id":{"type":"integer","description":"Backdrop ID, from `GET /api/v1/photobooth_backgrounds`"},"add_on_ids":{"type":"string","description":"Comma-separated add-on IDs, e.g. `4,17`. Prefix an ID with a quantity to book more than one: `2x17`."},"staff_id":{"type":"integer","description":"Staff member assigned to this package, who must belong to this business. Ignored when the package's service assigns staff automatically."},"one_off_custom_title":{"type":"string","description":"Title for a one-off package. Required when `event_type_id` is `custom`."},"custom_description_html":{"type":"string","description":"Description for a one-off package"}},"required":["event_type_id","starts_at_date"]}}}}}}}}},"/api/v1/leads/{lead_id}/convert_to_proposal":{"post":{"summary":"Convert a lead to a proposal","x-mcp-tool-name":"convert_lead_to_proposal","tags":["Leads"],"description":"Converts a lead into a proposal -- an event the client still has to accept. For one they have already committed to, use `POST /api/v1/leads/{lead_id}/convert_to_booking`.\n\nThe lead's own details are filled in for you. Its packages, venue, notes, brand and client all carry over, along with its source, guest count, budget and campaign attribution. The lead is marked converted and its message history moves onto the new proposal. Send an empty body to take all of it as-is.\n\n**Every field below is optional**, and overrides what came from the lead.\n\n`proposal_date_reserved` decides whether the date is held. It defaults to `false`, which leaves the date open to other bookings until the client accepts.\n\n### Packages\n\n`packages` **replaces** the lead's packages outright rather than merging with them. Leave it out to propose exactly what the lead asked for. Each entry you do send needs an `event_type_id` (a package id from `GET /api/v1/packages`) and a `starts_at_date`.\n\nPricing, tax, travel fees and the title are all calculated from the packages and the venue. Send `total_amount` only to override the calculated total.\n\n### Attaching the client\n\nThe lead's contact details become the client, and when the lead's email matches somebody the business already has, that person is linked rather than duplicated. Send `contact_type` and the `contact_*` fields to attach someone else instead -- they work exactly as they do on `POST /api/v1/proposals`.\n\n### Converting more than once\n\nA lead that has already been converted converts again, producing a second event and leaving the first alone. Check `converted_to_event` on the lead first if that isn't what you want.\n\n### Dates, times and amounts\n\nDates are ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's own date format setting, so `03-04-2027` is March 4th for a US business and April 3rd for an international one. Times take `11:00AM`, `2:30pm` or `14:30`.\n\nAmounts are in the business's currency in whole units rather than cents, so `1250.00` is $1,250.00.\n\n**Required permission:** `event_create`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"lead_id","in":"path","description":"The unique ID of the lead","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"lead converted to a proposal","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"992","type":"event","attributes":{"id":992,"title":"John Smith’s Domenica","status":"proposal_date_reserved","formatted_status":"Proposal (Date Reserved)","formatted_status_with_context":"Proposal (Date Reserved)","booked_at":null,"created_at":"2026-08-27T14:58:00.294-07:00","created_via":"convert_from_lead","venue_name":"The Grand Hall","venue_address":null,"venue_city":null,"venue_state":null,"venue_zip":null,"venue_map_url":"https://www.google.com/maps/search/","venue_google_place_id":null,"public_notes":null,"private_notes":"","coupon_code":null,"photo_album_url":null,"photo_album_instructions":null,"video_url":null,"video_album_instructions":null,"media_first_set_at":null,"media_last_updated_at":null,"completed":false,"canceled":false,"archived":false,"postponed":false,"invoice_number":"20260827-01","billable_distance":null,"total_distance":null,"distance_unit":null,"latitude":null,"longitude":null,"tax_rate":"0.0","tax_exempt":false,"tax_exemption_type":null,"tax_exemption_type_other":null,"humanized_tax_exemption_type":null,"source":null,"estimated_number_guests":null,"indoor_outdoor":"","lead_event_type":null,"contact_preference":null,"po_number":null,"stair_setup":null,"token":"T9N-RPQC-XW2","utm_source":null,"utm_campaign":null,"utm_medium":null,"utm_term":null,"utm_content":null,"gclid":null,"starts_at":"2027-12-31T11:00:00.000-08:00","ends_at":"2027-12-31T14:00:00.000-08:00","length_in_minutes":"180.0","length_in_hours":"3.0","starting_balance":null,"starting_balance_cents":null,"starting_balance_currency":null,"starting_balance_formatted":null,"deposit_amount_due":null,"deposit_amount_due_cents":null,"deposit_amount_due_currency":null,"deposit_amount_due_formatted":null,"custom_deposit_amount":null,"custom_deposit_amount_cents":null,"custom_deposit_amount_currency":null,"custom_deposit_amount_formatted":null,"balance_amount_due":null,"balance_amount_due_cents":null,"balance_amount_due_currency":null,"balance_amount_due_formatted":null,"starts_at_date":"12-31-2027","starts_at_date_iso8601":"2027-12-31","starts_at_time":"11:00 AM","invoice_date":"08-27-2026","invoice_date_iso8601":"2026-08-27","proposal_theme":"classic","proposal_valid_through":null,"proposal_viewed_at":null,"next_follow_up_on":null,"package_name":"Domenica","package_group_name":"Sample","service_name":"Photo booth 88","package_description_html":"","add_on_names":"","add_on_quantities_name_and_price":"","extra_names":"","extra_quantities_name_and_price":"","backdrop_names":"","backdrop_name_and_price":"","design_statuses":null,"due_at":"2027-12-31T00:00:00.000-08:00","customer_ids":"2468","customer_names":"John Smith","customer_emails":"john.smith285@example.com","customer_phones":"951-555-1212","customer_addresses":"","customer_and_contact_ids":"2468","customer_and_contact_names":"John Smith","customer_and_contact_emails":"john.smith285@example.com","customer_and_contact_phones":"951-555-1212","additional_contact_ids":"","additional_contact_names":"","additional_contact_emails":"","additional_contact_phones":"","assigned_staff_ids":"","assigned_staff_names":"","assigned_staff_abbreviations":"","assigned_staff_emails":"","change_summary":null,"brand_id":4412,"brand_name":"Shields, Bergnaum and O'Conner 688","primary_image":{"hero_variant":null},"booked_at_description":"Created less than a minute ago","current_user_assigned":false,"current_user_actively_assigned":false,"event_url":"https://test-688-9a34c0d1.cc.localhost/events/992-john-smith-s-domenica?token=T9N-RPQC-XW2","questionnaires_url":"https://test-688-9a34c0d1.cc.localhost/events/992-john-smith-s-domenica/forms?token=T9N-RPQC-XW2","payment_url":"https://test-688-9a34c0d1.cc.localhost/events/992-john-smith-s-domenica/payments/new?token=T9N-RPQC-XW2","invoice_url":"https://test-688-9a34c0d1.cc.localhost/events/992-john-smith-s-domenica/invoice?token=T9N-RPQC-XW2","designs_url":"https://test-688-9a34c0d1.cc.localhost/events/992-john-smith-s-domenica/designs?token=T9N-RPQC-XW2","proposal_url":"https://test-688-9a34c0d1.cc.localhost/proposals/992-john-smith-s-domenica?token=T9N-RPQC-XW2","referred_by_user_id":null,"referred_by_user_name":null,"referred_by_user_email":null,"custom_fields":[]},"relationships":{"event_bookings":{"data":[{"id":"468","type":"event_booking"}]},"proposal_alternatives":{"data":[]},"event_users":{"data":[{"id":"36","type":"event_user"}]},"event_staff_members":{"data":[]},"event_staff_requests":{"data":[]},"contacts":{"data":[]},"notes":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"proposal_date_reserved":{"type":"boolean","description":"Hold the date for the client while they decide. Defaults to `false`, leaving it open to other bookings."},"proposal_valid_through":{"type":"string","description":"Last day the client can accept, as ISO `YYYY-MM-DD`. Defaults to the business's own proposal expiry setting, and cannot fall after the event date."},"contact_type":{"type":"string","enum":["New Customer","Existing Customer","None"],"description":"Where the client comes from. Defaults to the lead's own contact details. `Existing Customer` needs `customer_user_id`; `New Customer` builds one from the `contact_*` fields; `None` attaches nobody."},"customer_user_id":{"type":"integer","description":"The existing client's user ID, which must belong to this business. Required when `contact_type` is `Existing Customer`."},"contact_name":{"type":"string","description":"Client's name. Overrides the lead's."},"contact_email":{"type":"string","description":"Client's email. Overrides the lead's."},"contact_phone":{"type":"string","description":"Client's phone"},"contact_company_name":{"type":"string","description":"Client's company name"},"contact_description":{"type":"string","description":"Client's role, e.g. \"Bride\" or \"Father of the Groom\""},"contact_street":{"type":"string","description":"Client's street address"},"contact_city":{"type":"string","description":"Client's city"},"contact_state_code":{"type":"string","description":"Client's state or province code, in whatever form the business's country uses, e.g. `MA`"},"contact_postal_code":{"type":"string","description":"Client's postal code"},"venue_name":{"type":"string","description":"Venue name. Overrides the lead's."},"venue_address":{"type":"string","description":"Venue street address"},"venue_city":{"type":"string","description":"Venue city"},"venue_state":{"type":"string","description":"Venue state or province code, in whatever form the business's country uses, e.g. `MA`"},"venue_zip":{"type":"string","description":"Venue postal code"},"venue_google_place_id":{"type":"string","description":"Google Place ID for the venue"},"venue_latitude":{"type":"number","description":"Venue latitude"},"venue_longitude":{"type":"number","description":"Venue longitude"},"add_tax":{"type":"boolean","description":"Apply tax based on the venue's tax zone. Defaults to `true`."},"add_travel":{"type":"boolean","description":"Apply travel fees based on the venue's travel zone. Defaults to `true`."},"public_notes":{"type":"string","description":"Notes visible to the client"},"private_notes":{"type":"string","description":"Notes only staff can see. Defaults to the lead's notes."},"custom_title":{"type":"string","description":"Overrides the generated title"},"brand_id":{"type":"integer","description":"Brand to book under, which must be an active brand of this business. Defaults to the lead's brand."},"total_amount":{"type":"number","description":"Overrides the calculated event total. In whole currency units, so `1250.00` means $1,250.00. Max 999000."},"paid_amount":{"type":"number","description":"Payment already collected outside Check Cherry, recorded against the event. In whole currency units. Max 999000."},"custom_deposit_amount":{"type":"number","description":"Overrides the calculated deposit due. In whole currency units, and capped at the event total. Max 999000."},"packages":{"type":"array","description":"Replaces the packages carried over from the lead. Leave it out to keep them.","items":{"type":"object","properties":{"event_type_id":{"type":"string","description":"Package ID, from `GET /api/v1/packages`. Send the literal `custom` to price a one-off package instead, alongside `one_off_custom_title` and `total_amount`."},"starts_at_date":{"type":"string","description":"Start date, as ISO `YYYY-MM-DD`. Other numeric formats are read according to the business's date format setting."},"starts_at_time":{"type":"string","description":"Start time, e.g. `11:00AM`, `2:30pm` or `14:30`. Required for packages scheduled by date and time."},"ends_at_time":{"type":"string","description":"Overrides the end time implied by the length. Same formats as `starts_at_time`."},"length_in_minutes":{"type":"integer","description":"Length in minutes, from 1 to 1440. Required for packages that let extra hours be booked, otherwise defaults to the package's own length."},"length_in_days":{"type":"integer","description":"Length in days, from 1 to 1000. Required for packages that let extra days be booked."},"units":{"type":"integer","description":"Unit count, for packages priced per unit. Must fall inside one of that package's unit ranges, which are listed on `GET /api/v1/packages/{id}`."},"package_unit_range_id":{"type":"integer","description":"Unit range ID, for packages priced by unit range. Must be one of that package's own ranges, from `GET /api/v1/packages/{id}`."},"backdrop_id":{"type":"integer","description":"Backdrop ID, from `GET /api/v1/photobooth_backgrounds`"},"add_on_ids":{"type":"string","description":"Comma-separated add-on IDs, e.g. `4,17`. Prefix an ID with a quantity to book more than one: `2x17`."},"staff_id":{"type":"integer","description":"Staff member assigned to this package, who must belong to this business. Ignored when the package's service assigns staff automatically."},"one_off_custom_title":{"type":"string","description":"Title for a one-off package. Required when `event_type_id` is `custom`."},"custom_description_html":{"type":"string","description":"Description for a one-off package"}},"required":["event_type_id","starts_at_date"]}}}}}}}}},"/api/v1/package_groups":{"get":{"summary":"Fetch all package groups","tags":["Packages & Services"],"description":"Returns all publicly visible package groups for the business.\n\nPackage 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\".\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `event_types`, `event_category`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"package groups found","content":{"application/json":{"example":{"data":[{"id":"846","type":"package_group","attributes":{"id":846,"name":"Wedding Packages","position":1,"package_sort_preference":"price","event_category_id":863,"primary_image":{"panel_variant":null},"booking_url":"https://test-702-7d5018b8.cc.localhost/reservation/set_event?package_group_id=846","private_booking_url":"https://test-702-7d5018b8.cc.localhost/reservation/set_event?customized=true&package_group_id=846&token=JET-4GPT-XTJ"},"relationships":{"event_category":{"data":{"id":"863","type":"event_category"}},"event_types":{"data":[{"id":"871","type":"event_type"}]}}}]}}}}}},"post":{"summary":"Create a package group","tags":["Packages & Services"],"description":"Creates a new package group within a service (event category). A package group organizes related packages (event types) — for example, a \"DJ Services\" service might contain \"Wedding Packages\" and \"Corporate Packages\".\n\nThe `event_category_id` of the parent service is required, along with a `name`. New package groups are appended to the end of the service's package-group list.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"package group created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"847","type":"package_group","attributes":{"id":847,"name":"Corporate Packages","position":1,"package_sort_preference":"price","event_category_id":864,"primary_image":{"panel_variant":null},"booking_url":"https://test-703-ef493406.cc.localhost/reservation/set_event?package_group_id=847","private_booking_url":"https://test-703-ef493406.cc.localhost/reservation/set_event?customized=true&package_group_id=847&token=3RX-2DWZ-Z4K"},"relationships":{"event_category":{"data":{"id":"864","type":"event_category"}},"event_types":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event_category_id":{"type":"integer","description":"ID of the parent service (event category) this package group belongs to"},"name":{"type":"string","description":"The name of the package group (e.g., \"Wedding Packages\")"},"sub_header":{"type":"string","description":"Short sub-heading shown under the package-group name on booking pages (max 100 characters)"},"show_on_booking_page":{"type":"boolean","description":"Whether this package group is shown on public booking pages"},"show_title_on_booking_page":{"type":"boolean","description":"Whether to show the package-group title on the booking page"},"package_sort_preference":{"type":"string","description":"How packages within this group are ordered","enum":["name","price","manual"]},"pricing_mode":{"type":"string","description":"Whether pricing is shown or delayed during booking","enum":["show","delay"]}},"required":["event_category_id","name"]}}}}}},"/api/v1/package_groups/{id}":{"get":{"summary":"Fetch package group by ID","tags":["Packages & Services"],"description":"Returns the details of a single package group, including its name, description, and associated service.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `event_types`, `event_category`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the package group","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package group found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"848","type":"package_group","attributes":{"id":848,"name":"Wedding Packages","position":1,"package_sort_preference":"price","event_category_id":865,"primary_image":{"panel_variant":null},"booking_url":"https://test-704-b3be8c18.cc.localhost/reservation/set_event?package_group_id=848","private_booking_url":"https://test-704-b3be8c18.cc.localhost/reservation/set_event?customized=true&package_group_id=848&token=NXE-3P7K-FNT"},"relationships":{"event_category":{"data":{"id":"865","type":"event_category"}},"event_types":{"data":[]}}}}}}}}},"put":{"summary":"Update a package group","tags":["Packages & Services"],"description":"Updates an existing package group with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.\n\nUse this to rename a package group, toggle its booking-page visibility, or change how its packages are sorted and priced. To move a package group to a different service, manage it from the Package Manager in the app.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the package group to update","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package group updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"849","type":"package_group","attributes":{"id":849,"name":"Wedding & Elopement Packages","position":1,"package_sort_preference":"price","event_category_id":866,"primary_image":{"panel_variant":null},"booking_url":"https://test-705-b640c2d0.cc.localhost/reservation/set_event?package_group_id=849","private_booking_url":"https://test-705-b640c2d0.cc.localhost/reservation/set_event?customized=true&package_group_id=849&token=H3E-4MF9-M2G"},"relationships":{"event_category":{"data":{"id":"866","type":"event_category"}},"event_types":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the package group"},"sub_header":{"type":"string","description":"Short sub-heading shown under the package-group name on booking pages (max 100 characters)"},"show_on_booking_page":{"type":"boolean","description":"Whether this package group is shown on public booking pages"},"show_title_on_booking_page":{"type":"boolean","description":"Whether to show the package-group title on the booking page"},"package_sort_preference":{"type":"string","description":"How packages within this group are ordered","enum":["name","price","manual"]},"pricing_mode":{"type":"string","description":"Whether pricing is shown or delayed during booking","enum":["show","delay"]}}}}}}},"delete":{"summary":"Delete a package group","tags":["Packages & Services"],"description":"Deletes (archives) a package group. The package group and all of its packages are archived together and removed from booking pages. Existing bookings are unaffected.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the package group to delete","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package group deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/package_groups/{id}/move":{"put":{"summary":"Move a package group to a different service","tags":["Packages & Services"],"description":"Moves a package group into a different service (event category). The package group is appended to the end of the target service's package-group list, and the remaining package groups in its original service close up to preserve their ordering.\n\nThe target service must belong to the same business. Use this instead of updating `event_category_id` directly — a direct update would not re-sort the package group within either service.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the package group to move","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package group moved","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"851","type":"package_group","attributes":{"id":851,"name":"Wedding Packages","position":1,"package_sort_preference":"price","event_category_id":869,"primary_image":{"panel_variant":null},"booking_url":"https://test-707-9fc61990.cc.localhost/reservation/set_event?package_group_id=851","private_booking_url":"https://test-707-9fc61990.cc.localhost/reservation/set_event?customized=true&package_group_id=851&token=WZN-RTWK-RGX"},"relationships":{"event_category":{"data":{"id":"869","type":"event_category"}},"event_types":{"data":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event_category_id":{"type":"integer","description":"ID of the service (event category) to move this package group into"}},"required":["event_category_id"]}}}}}},"/api/v1/packages":{"get":{"summary":"Fetch all packages","tags":["Packages & Services"],"description":"Returns all packages (event types) for the business. Packages define the services offered, including pricing, duration, availability windows, and booking configuration.\n\nResults can be filtered by visibility (e.g., public-only packages shown on the booking page vs. all packages including private ones).\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `package_group`, `package_unit_ranges`, `event_type_extra_categories`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"visibility","in":"query","description":"Filter by visibility (e.g., 'public_only')","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"packages found","content":{"application/json":{"example":{"data":[{"id":"872","type":"event_type","attributes":{"id":872,"name":"4-Hour DJ Package","description_html":null,"advertised_rate":"$100 includes 5 hours","base_rate_cents":10000,"position":1,"hourly":true,"package_group_id":852,"default_length":300,"min_length":60,"max_length":null,"step":60,"default_length_in_minutes":300,"min_length_in_minutes":60,"max_length_in_minutes":null,"min_length_in_days":1,"max_length_in_days":1,"default_length_in_days":1,"date_mode":"date_time","calendar_mode":"minimal","deposit_method":"percent","deposit_multiplier_percent":25,"enable_customer_can_book_extra_hours":true,"enable_customer_can_book_extra_days":false,"deposit_amount":"0.00","deposit_amount_cents":0,"deposit_amount_currency":"USD","deposit_amount_formatted":"$0","base_rate":"100.00","base_rate_currency":"USD","base_rate_formatted":"$100","price_per_extra_hour":"50.00","price_per_extra_hour_cents":5000,"price_per_extra_hour_currency":"USD","price_per_extra_hour_formatted":"$50","price_per_extra_day":"0.00","price_per_extra_day_cents":0,"price_per_extra_day_currency":"USD","price_per_extra_day_formatted":"$0","taxable":true,"step_in_minutes":60,"slot_interval_minutes":30,"available_every_day_of_the_week":"yes","available_starts_at_time":null,"available_ends_at_time":null,"available_sunday":"yes","available_sunday_starts_at_time":null,"available_sunday_ends_at_time":null,"available_monday":"yes","available_monday_starts_at_time":null,"available_monday_ends_at_time":null,"available_tuesday":"yes","available_tuesday_starts_at_time":null,"available_tuesday_ends_at_time":null,"available_wednesday":"yes","available_wednesday_starts_at_time":null,"available_wednesday_ends_at_time":null,"available_thursday":"yes","available_thursday_starts_at_time":null,"available_thursday_ends_at_time":null,"available_friday":"yes","available_friday_starts_at_time":null,"available_friday_ends_at_time":null,"available_saturday":"yes","available_saturday_starts_at_time":null,"available_saturday_ends_at_time":null,"enable_customer_can_book_per_unit":false,"unit_name":"unit","enable_customer_can_book_per_unit_range":false,"primary_image":{"large_variant":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"has_backdrops":false,"unit_title":"Unit","units_title":"Units","units_how_many":"How many units would you like to book?","location_booking_type":"yes","booking_url":"https://test-708-6e95f253.cc.localhost/reservation/set_event?event_type_id=872"},"relationships":{"package_unit_ranges":{"data":[]},"event_type_extra_categories":{"data":[]},"package_group":{"data":{"id":"852","type":"package_group"}}}}]}}}}}},"post":{"summary":"Create a package","tags":["Packages & Services"],"description":"Creates a new package (event type) within a package group. A package defines a bookable offering — its name, pricing, duration, and deposit terms.\n\nThe `package_group_id` of the parent package group is required, along with a `name`. Sensible defaults are applied for anything you omit: new packages are `public`, charge a base rate of 0, default to a 60-minute length, and take no deposit — adjust these via the pricing fields or a follow-up update. New packages are appended to the end of the group.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"package created","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"873","type":"event_type","attributes":{"id":873,"name":"4-Hour DJ Package","description_html":null,"advertised_rate":"$1,200.00","base_rate_cents":120000,"position":1,"hourly":false,"package_group_id":853,"default_length":60,"min_length":null,"max_length":null,"step":60,"default_length_in_minutes":60,"min_length_in_minutes":null,"max_length_in_minutes":null,"min_length_in_days":1,"max_length_in_days":1,"default_length_in_days":1,"date_mode":"date_time","calendar_mode":"minimal","deposit_method":"none","deposit_multiplier_percent":null,"enable_customer_can_book_extra_hours":false,"enable_customer_can_book_extra_days":false,"deposit_amount":"0.00","deposit_amount_cents":0,"deposit_amount_currency":"USD","deposit_amount_formatted":"$0","base_rate":"1200.00","base_rate_currency":"USD","base_rate_formatted":"$1,200","price_per_extra_hour":"0.00","price_per_extra_hour_cents":0,"price_per_extra_hour_currency":"USD","price_per_extra_hour_formatted":"$0","price_per_extra_day":"0.00","price_per_extra_day_cents":0,"price_per_extra_day_currency":"USD","price_per_extra_day_formatted":"$0","taxable":true,"step_in_minutes":60,"slot_interval_minutes":30,"available_every_day_of_the_week":"yes","available_starts_at_time":null,"available_ends_at_time":null,"available_sunday":"yes","available_sunday_starts_at_time":null,"available_sunday_ends_at_time":null,"available_monday":"yes","available_monday_starts_at_time":null,"available_monday_ends_at_time":null,"available_tuesday":"yes","available_tuesday_starts_at_time":null,"available_tuesday_ends_at_time":null,"available_wednesday":"yes","available_wednesday_starts_at_time":null,"available_wednesday_ends_at_time":null,"available_thursday":"yes","available_thursday_starts_at_time":null,"available_thursday_ends_at_time":null,"available_friday":"yes","available_friday_starts_at_time":null,"available_friday_ends_at_time":null,"available_saturday":"yes","available_saturday_starts_at_time":null,"available_saturday_ends_at_time":null,"enable_customer_can_book_per_unit":false,"unit_name":"unit","enable_customer_can_book_per_unit_range":false,"primary_image":{"large_variant":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"has_backdrops":false,"unit_title":"Unit","units_title":"Units","units_how_many":"How many units would you like to book?","location_booking_type":"yes","booking_url":"https://test-709-48ae600f.cc.localhost/reservation/set_event?event_type_id=873"},"relationships":{"package_unit_ranges":{"data":[]},"event_type_extra_categories":{"data":[]},"package_group":{"data":{"id":"853","type":"package_group"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"package_group_id":{"type":"integer","description":"ID of the parent package group this package belongs to"},"name":{"type":"string","description":"The name of the package (e.g., \"4-Hour DJ Package\")"},"sub_header":{"type":"string","description":"Short sub-heading shown under the package name (max 100 characters)"},"description_html":{"type":"string","description":"Rich-text (HTML) description of the package"},"show_name":{"type":"boolean","description":"Whether the package name is shown on the booking page"},"status":{"type":"string","description":"Booking-page visibility","enum":["public","private","disabled"]},"online_booking_mode":{"type":"string","description":"How customers engage this package online","enum":["allow_online_booking","request_for_proposal","show_contact_form"]},"contact_form_id":{"type":"integer","description":"Lead form to display (required when online_booking_mode is show_contact_form)"},"taxable":{"type":"boolean","description":"Whether the package is taxable"},"base_rate":{"type":"number","description":"Base price of the package, in dollars"},"deposit_method":{"type":"string","description":"How the booking deposit is calculated","enum":["none","flat_rate","percent"]},"deposit_amount":{"type":"number","description":"Fixed deposit amount in dollars (when deposit_method is flat_rate)"},"deposit_multiplier_percent":{"type":"integer","description":"Deposit percentage (when deposit_method is percent)"},"date_mode":{"type":"string","description":"Whether the package is booked by time-of-day or by whole days","enum":["date_time","date_only"]},"default_length_in_minutes":{"type":"integer","description":"Default booking length in minutes (defaults to 60)"},"calendar_mode":{"type":"string","description":"How bookable start times are presented: minimal (no slots), automatic_slots (generated from availability + slot_interval_minutes), or predefined_slots (manually defined slots)","enum":["minimal","automatic_slots","predefined_slots"]},"slot_interval_minutes":{"type":"integer","description":"Spacing between automatically generated start times, in minutes (used when calendar_mode is automatic_slots)","enum":[15,30,60,120,180,240]},"enable_customer_can_book_extra_hours":{"type":"boolean","description":"Allow customers to choose a duration (hourly packages)"},"min_length_in_minutes":{"type":"integer","description":"Minimum bookable length in minutes (when extra hours are enabled)"},"max_length_in_minutes":{"type":"integer","description":"Maximum bookable length in minutes (when extra hours are enabled)"},"step_in_minutes":{"type":"integer","description":"Increment customers can adjust the length by, in minutes","enum":[15,30,60,120,180,240]},"price_per_extra_hour":{"type":"number","description":"Price charged per additional hour, in dollars"},"enable_customer_can_book_extra_days":{"type":"boolean","description":"Allow customers to choose a number of days (multi-day packages)"},"default_length_in_days":{"type":"integer","description":"Default number of days (required when date_mode is date_only)"},"min_length_in_days":{"type":"integer","description":"Minimum bookable number of days (when extra days are enabled)"},"max_length_in_days":{"type":"integer","description":"Maximum bookable number of days (when extra days are enabled)"},"price_per_extra_day":{"type":"number","description":"Price charged per additional day, in dollars"},"enable_customer_can_book_per_unit":{"type":"boolean","description":"Allow customers to book a quantity of units (e.g. per booth, per person)"},"unit_name":{"type":"string","description":"Label for a single unit when per-unit booking is enabled (e.g. \"booth\", \"guest\")"},"enable_customer_can_book_per_unit_range":{"type":"boolean","description":"Allow per-unit pricing tiers (ranges) rather than a single per-unit price"},"available_every_day_of_the_week":{"type":"string","description":"Availability pattern across the week","enum":["yes","yes_certain_hours","no"]},"available_starts_at_time":{"type":"string","description":"Earliest bookable time of day (e.g. \"09:00\") when availability is limited to certain hours"},"available_ends_at_time":{"type":"string","description":"Latest bookable time of day (e.g. \"17:00\") when availability is limited to certain hours"}},"required":["package_group_id","name"]}}}}}},"/api/v1/packages/{id}":{"get":{"summary":"Fetch a package by ID","tags":["Packages & Services"],"description":"Returns the full details of a single package (event type), including pricing, duration settings, availability windows, deposit configuration, and booking options.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `package_group`, `package_unit_ranges`, `event_type_extra_categories`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the package","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"874","type":"event_type","attributes":{"id":874,"name":"4-Hour DJ Package","description_html":null,"advertised_rate":"$100 includes 5 hours","base_rate_cents":10000,"position":1,"hourly":true,"package_group_id":854,"default_length":300,"min_length":60,"max_length":null,"step":60,"default_length_in_minutes":300,"min_length_in_minutes":60,"max_length_in_minutes":null,"min_length_in_days":1,"max_length_in_days":1,"default_length_in_days":1,"date_mode":"date_time","calendar_mode":"minimal","deposit_method":"percent","deposit_multiplier_percent":25,"enable_customer_can_book_extra_hours":true,"enable_customer_can_book_extra_days":false,"deposit_amount":"0.00","deposit_amount_cents":0,"deposit_amount_currency":"USD","deposit_amount_formatted":"$0","base_rate":"100.00","base_rate_currency":"USD","base_rate_formatted":"$100","price_per_extra_hour":"50.00","price_per_extra_hour_cents":5000,"price_per_extra_hour_currency":"USD","price_per_extra_hour_formatted":"$50","price_per_extra_day":"0.00","price_per_extra_day_cents":0,"price_per_extra_day_currency":"USD","price_per_extra_day_formatted":"$0","taxable":true,"step_in_minutes":60,"slot_interval_minutes":30,"available_every_day_of_the_week":"yes","available_starts_at_time":null,"available_ends_at_time":null,"available_sunday":"yes","available_sunday_starts_at_time":null,"available_sunday_ends_at_time":null,"available_monday":"yes","available_monday_starts_at_time":null,"available_monday_ends_at_time":null,"available_tuesday":"yes","available_tuesday_starts_at_time":null,"available_tuesday_ends_at_time":null,"available_wednesday":"yes","available_wednesday_starts_at_time":null,"available_wednesday_ends_at_time":null,"available_thursday":"yes","available_thursday_starts_at_time":null,"available_thursday_ends_at_time":null,"available_friday":"yes","available_friday_starts_at_time":null,"available_friday_ends_at_time":null,"available_saturday":"yes","available_saturday_starts_at_time":null,"available_saturday_ends_at_time":null,"enable_customer_can_book_per_unit":false,"unit_name":"unit","enable_customer_can_book_per_unit_range":false,"primary_image":{"large_variant":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"has_backdrops":false,"unit_title":"Unit","units_title":"Units","units_how_many":"How many units would you like to book?","location_booking_type":"yes","booking_url":"https://test-710-61665b56.cc.localhost/reservation/set_event?event_type_id=874"},"relationships":{"package_unit_ranges":{"data":[]},"event_type_extra_categories":{"data":[]},"package_group":{"data":{"id":"854","type":"package_group"}}}}}}}}}},"put":{"summary":"Update a package","tags":["Packages & Services"],"description":"Updates an existing package (event type) with the provided fields. Only fields included in the request body are modified — omitted fields remain unchanged.\n\nUse this to rename a package, change its visibility, adjust pricing and deposit terms, or reconfigure its duration and availability. To move a package to a different package group, manage it from the Package Manager in the app.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the package to update","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package updated","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"875","type":"event_type","attributes":{"id":875,"name":"5-Hour DJ Package","description_html":null,"advertised_rate":"$1,500 includes 5 hours","base_rate_cents":150000,"position":1,"hourly":true,"package_group_id":855,"default_length":300,"min_length":60,"max_length":null,"step":60,"default_length_in_minutes":300,"min_length_in_minutes":60,"max_length_in_minutes":null,"min_length_in_days":1,"max_length_in_days":1,"default_length_in_days":1,"date_mode":"date_time","calendar_mode":"minimal","deposit_method":"percent","deposit_multiplier_percent":25,"enable_customer_can_book_extra_hours":true,"enable_customer_can_book_extra_days":false,"deposit_amount":"0.00","deposit_amount_cents":0,"deposit_amount_currency":"USD","deposit_amount_formatted":"$0","base_rate":"1500.00","base_rate_currency":"USD","base_rate_formatted":"$1,500","price_per_extra_hour":"50.00","price_per_extra_hour_cents":5000,"price_per_extra_hour_currency":"USD","price_per_extra_hour_formatted":"$50","price_per_extra_day":"0.00","price_per_extra_day_cents":0,"price_per_extra_day_currency":"USD","price_per_extra_day_formatted":"$0","taxable":true,"step_in_minutes":60,"slot_interval_minutes":30,"available_every_day_of_the_week":"yes","available_starts_at_time":null,"available_ends_at_time":null,"available_sunday":"yes","available_sunday_starts_at_time":null,"available_sunday_ends_at_time":null,"available_monday":"yes","available_monday_starts_at_time":null,"available_monday_ends_at_time":null,"available_tuesday":"yes","available_tuesday_starts_at_time":null,"available_tuesday_ends_at_time":null,"available_wednesday":"yes","available_wednesday_starts_at_time":null,"available_wednesday_ends_at_time":null,"available_thursday":"yes","available_thursday_starts_at_time":null,"available_thursday_ends_at_time":null,"available_friday":"yes","available_friday_starts_at_time":null,"available_friday_ends_at_time":null,"available_saturday":"yes","available_saturday_starts_at_time":null,"available_saturday_ends_at_time":null,"enable_customer_can_book_per_unit":false,"unit_name":"unit","enable_customer_can_book_per_unit_range":false,"primary_image":{"large_variant":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"has_backdrops":false,"unit_title":"Unit","units_title":"Units","units_how_many":"How many units would you like to book?","location_booking_type":"yes","booking_url":"https://test-711-dbe7db08.cc.localhost/reservation/set_event?event_type_id=875"},"relationships":{"package_unit_ranges":{"data":[]},"event_type_extra_categories":{"data":[]},"package_group":{"data":{"id":"855","type":"package_group"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The name of the package (e.g., \"4-Hour DJ Package\")"},"sub_header":{"type":"string","description":"Short sub-heading shown under the package name (max 100 characters)"},"description_html":{"type":"string","description":"Rich-text (HTML) description of the package"},"show_name":{"type":"boolean","description":"Whether the package name is shown on the booking page"},"status":{"type":"string","description":"Booking-page visibility","enum":["public","private","disabled"]},"online_booking_mode":{"type":"string","description":"How customers engage this package online","enum":["allow_online_booking","request_for_proposal","show_contact_form"]},"contact_form_id":{"type":"integer","description":"Lead form to display (required when online_booking_mode is show_contact_form)"},"taxable":{"type":"boolean","description":"Whether the package is taxable"},"base_rate":{"type":"number","description":"Base price of the package, in dollars"},"deposit_method":{"type":"string","description":"How the booking deposit is calculated","enum":["none","flat_rate","percent"]},"deposit_amount":{"type":"number","description":"Fixed deposit amount in dollars (when deposit_method is flat_rate)"},"deposit_multiplier_percent":{"type":"integer","description":"Deposit percentage (when deposit_method is percent)"},"date_mode":{"type":"string","description":"Whether the package is booked by time-of-day or by whole days","enum":["date_time","date_only"]},"default_length_in_minutes":{"type":"integer","description":"Default booking length in minutes (defaults to 60)"},"calendar_mode":{"type":"string","description":"How bookable start times are presented: minimal (no slots), automatic_slots (generated from availability + slot_interval_minutes), or predefined_slots (manually defined slots)","enum":["minimal","automatic_slots","predefined_slots"]},"slot_interval_minutes":{"type":"integer","description":"Spacing between automatically generated start times, in minutes (used when calendar_mode is automatic_slots)","enum":[15,30,60,120,180,240]},"enable_customer_can_book_extra_hours":{"type":"boolean","description":"Allow customers to choose a duration (hourly packages)"},"min_length_in_minutes":{"type":"integer","description":"Minimum bookable length in minutes (when extra hours are enabled)"},"max_length_in_minutes":{"type":"integer","description":"Maximum bookable length in minutes (when extra hours are enabled)"},"step_in_minutes":{"type":"integer","description":"Increment customers can adjust the length by, in minutes","enum":[15,30,60,120,180,240]},"price_per_extra_hour":{"type":"number","description":"Price charged per additional hour, in dollars"},"enable_customer_can_book_extra_days":{"type":"boolean","description":"Allow customers to choose a number of days (multi-day packages)"},"default_length_in_days":{"type":"integer","description":"Default number of days (required when date_mode is date_only)"},"min_length_in_days":{"type":"integer","description":"Minimum bookable number of days (when extra days are enabled)"},"max_length_in_days":{"type":"integer","description":"Maximum bookable number of days (when extra days are enabled)"},"price_per_extra_day":{"type":"number","description":"Price charged per additional day, in dollars"},"enable_customer_can_book_per_unit":{"type":"boolean","description":"Allow customers to book a quantity of units (e.g. per booth, per person)"},"unit_name":{"type":"string","description":"Label for a single unit when per-unit booking is enabled (e.g. \"booth\", \"guest\")"},"enable_customer_can_book_per_unit_range":{"type":"boolean","description":"Allow per-unit pricing tiers (ranges) rather than a single per-unit price"},"available_every_day_of_the_week":{"type":"string","description":"Availability pattern across the week","enum":["yes","yes_certain_hours","no"]},"available_starts_at_time":{"type":"string","description":"Earliest bookable time of day (e.g. \"09:00\") when availability is limited to certain hours"},"available_ends_at_time":{"type":"string","description":"Latest bookable time of day (e.g. \"17:00\") when availability is limited to certain hours"}}}}}}},"delete":{"summary":"Delete a package","tags":["Packages & Services"],"description":"Deletes (archives) a package. The package is archived and removed from booking pages. Existing bookings are unaffected.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the package to delete","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/packages/{id}/move":{"put":{"summary":"Move a package to a different package group","tags":["Packages & Services"],"description":"Moves a package (event type) into a different package group. The package is appended to the end of the target group's package list, and the remaining packages in its original group close up to preserve their ordering.\n\nThe target package group must belong to the same business. Use this instead of updating `package_group_id` directly — a direct update would not re-sort the package within either group.\n\n**Required permission:** `offerings_write`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the package to move","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"package moved","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"877","type":"event_type","attributes":{"id":877,"name":"4-Hour DJ Package","description_html":null,"advertised_rate":"$100 includes 5 hours","base_rate_cents":10000,"position":1,"hourly":true,"package_group_id":858,"default_length":300,"min_length":60,"max_length":null,"step":60,"default_length_in_minutes":300,"min_length_in_minutes":60,"max_length_in_minutes":null,"min_length_in_days":1,"max_length_in_days":1,"default_length_in_days":1,"date_mode":"date_time","calendar_mode":"minimal","deposit_method":"percent","deposit_multiplier_percent":25,"enable_customer_can_book_extra_hours":true,"enable_customer_can_book_extra_days":false,"deposit_amount":"0.00","deposit_amount_cents":0,"deposit_amount_currency":"USD","deposit_amount_formatted":"$0","base_rate":"100.00","base_rate_currency":"USD","base_rate_formatted":"$100","price_per_extra_hour":"50.00","price_per_extra_hour_cents":5000,"price_per_extra_hour_currency":"USD","price_per_extra_hour_formatted":"$50","price_per_extra_day":"0.00","price_per_extra_day_cents":0,"price_per_extra_day_currency":"USD","price_per_extra_day_formatted":"$0","taxable":true,"step_in_minutes":60,"slot_interval_minutes":30,"available_every_day_of_the_week":"yes","available_starts_at_time":null,"available_ends_at_time":null,"available_sunday":"yes","available_sunday_starts_at_time":null,"available_sunday_ends_at_time":null,"available_monday":"yes","available_monday_starts_at_time":null,"available_monday_ends_at_time":null,"available_tuesday":"yes","available_tuesday_starts_at_time":null,"available_tuesday_ends_at_time":null,"available_wednesday":"yes","available_wednesday_starts_at_time":null,"available_wednesday_ends_at_time":null,"available_thursday":"yes","available_thursday_starts_at_time":null,"available_thursday_ends_at_time":null,"available_friday":"yes","available_friday_starts_at_time":null,"available_friday_ends_at_time":null,"available_saturday":"yes","available_saturday_starts_at_time":null,"available_saturday_ends_at_time":null,"enable_customer_can_book_per_unit":false,"unit_name":"unit","enable_customer_can_book_per_unit_range":false,"primary_image":{"large_variant":"/assets/prize-dddddd-b0dab4555d253a9daf0e6b30d4ad5572dd37fbfad501fb8eec6a1d53eb7629ad.png"},"has_backdrops":false,"unit_title":"Unit","units_title":"Units","units_how_many":"How many units would you like to book?","location_booking_type":"yes","booking_url":"https://test-713-b1d17bf3.cc.localhost/reservation/set_event?event_type_id=877"},"relationships":{"package_unit_ranges":{"data":[]},"event_type_extra_categories":{"data":[]},"package_group":{"data":{"id":"858","type":"package_group"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"package_group_id":{"type":"integer","description":"ID of the package group to move this package into"}},"required":["package_group_id"]}}}}}},"/api/v1/photobooth_backgrounds":{"get":{"summary":"Fetch all backdrops","tags":["Backdrops"],"description":"Returns all photo booth backdrops for the business. Backdrops are the visual background options available for photo booth events.\n\nResults can be filtered by text search, widget visibility, and sort order.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"text","in":"query","description":"Search backdrops by name","required":false,"schema":{"type":"string"}},{"name":"only_widget_visible","in":"query","description":"Only return backdrops visible on the booking widget","required":false,"schema":{"type":"boolean"}},{"name":"order","in":"query","description":"Sort order for results","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"backdrops found","content":{"application/json":{"example":{"data":[{"id":"17","type":"photobooth_background","attributes":{"id":17,"name":"Gold Sequin Wall","description":"Sample description","position":1,"backdrop_category_id":23,"video_url":null,"third_party_video_id":null,"include_at_no_charge_with_certain_packages":false,"price":"100.00","price_cents":10000,"price_currency":"USD","price_formatted":"$100","taxable":true,"primary_image":{"video_variant":null,"content_type":"image/png","url":"http://www.checkcherry.localhost/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6NTQ2NywicHVyIjoiYmxvYl9pZCJ9fQ==--0b79b814561adfbe0b9c38fb4cb1a2e8443ddb9a/sample.png"},"additional_images":[],"archived":false},"relationships":{"backdrop_category":{"data":{"id":"23","type":"backdrop_category"}}}}]}}}}}}},"/api/v1/photobooth_backgrounds/{id}":{"get":{"summary":"Fetch a backdrop by ID","tags":["Backdrops"],"description":"Returns the full details of a single photo booth backdrop, including its name, description, pricing, images, and video information.\n\nUse the `include` query parameter to sideload related resources (comma-separated). Available: `backdrop_category`.\n\n**Required permission:** `offerings_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the backdrop","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"backdrop found","content":{"application/json":{"example":{"data":{"id":"18","type":"photobooth_background","attributes":{"id":18,"name":"Gold Sequin Wall","description":"Sample description","position":1,"backdrop_category_id":24,"video_url":null,"third_party_video_id":null,"include_at_no_charge_with_certain_packages":false,"price":"100.00","price_cents":10000,"price_currency":"USD","price_formatted":"$100","taxable":true,"primary_image":{"video_variant":null,"content_type":"image/png","url":"http://www.checkcherry.localhost/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6NTQ2OSwicHVyIjoiYmxvYl9pZCJ9fQ==--2035aa6b933b8ec0aab4de07a66311a5a26d26d9/sample.png"},"additional_images":[],"archived":false},"relationships":{"backdrop_category":{"data":{"id":"24","type":"backdrop_category"}}}}}}}}}}},"/api/v1/questionnaire_templates":{"get":{"summary":"Fetch questionnaire templates","tags":["Questionnaires"],"description":"Lists the business's questionnaire templates, ordered by title. Use this to find the `questionnaire_template_id` to pass when attaching a questionnaire to a booking.\n\nEach template carries its full question structure in `data`, so a single call gives you everything needed to show a chooser or preview the questions — there is no need to fetch each template separately.\n\nDeleted templates are never returned. Keys belonging to a non-admin user only see templates with `allow_staff_view` enabled.\n\n**Required permission:** `planning_read`.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"templates found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"40","type":"form_template","attributes":{"id":40,"title":"Event Planning Form","data":{"title":"Event Planning Form","fieldGroups":[{"name":"Reception","fields":[{"name":"Colour Scheme","type":"text_field","uuid":"f47ac10b","required":true,"placeholder":"Navy and gold"},{"name":"Main Course","type":"dropdown","uuid":"9c8b7a65","values":["Beef","Fish","Vegetarian"]},{"name":"Extras","type":"checkbox_group","uuid":"3e2d1c0b","values":["Napkins","Chargers"]},{"name":"Toast Time","type":"text_field","uuid":"5f4e3d2c","timelineEnabled":true,"timelineSettings":{"timelineMode":"start_time"}}]},{"name":"Music","fields":[{"name":"Must Play","type":"song_list","uuid":"7a6b5c4d","allowMultipleEntries":true}]}]},"allow_staff_view":true,"allow_staff_edit":true,"allow_customer_view":true,"allow_customer_edit":true,"show_before_or_after":"all","hide_until_booking_completed":false}}]}}}}}}},"/api/v1/questionnaire_templates/{id}":{"get":{"summary":"Fetch questionnaire template by ID","tags":["Questionnaires"],"description":"Returns a single questionnaire template, including its question structure (`data`) and the permission and visibility defaults it will pass on to any questionnaire created from it.\n\n**Required permission:** `planning_read`. Templates belonging to another business are not accessible.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the questionnaire template","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"template found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"41","type":"form_template","attributes":{"id":41,"title":"Event Planning Form","data":{"title":"Event Planning Form","fieldGroups":[{"name":"Reception","fields":[{"name":"Colour Scheme","type":"text_field","uuid":"f47ac10b","required":true,"placeholder":"Navy and gold"},{"name":"Main Course","type":"dropdown","uuid":"9c8b7a65","values":["Beef","Fish","Vegetarian"]},{"name":"Extras","type":"checkbox_group","uuid":"3e2d1c0b","values":["Napkins","Chargers"]},{"name":"Toast Time","type":"text_field","uuid":"5f4e3d2c","timelineEnabled":true,"timelineSettings":{"timelineMode":"start_time"}}]},{"name":"Music","fields":[{"name":"Must Play","type":"song_list","uuid":"7a6b5c4d","allowMultipleEntries":true}]}]},"allow_staff_view":true,"allow_staff_edit":true,"allow_customer_view":true,"allow_customer_edit":true,"show_before_or_after":"all","hide_until_booking_completed":false}}},"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"attributes":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/QuestionnaireData"}}}}}}}}}}}}},"/api/v1/questionnaires":{"get":{"summary":"Fetch questionnaires for a booking","tags":["Questionnaires"],"description":"Returns the questionnaires attached to a single booking or proposal, ordered by ID. An `event_id` is required — there is no franchise-wide listing.\n\nResults are filtered automatically for the authenticated user. Admins see every questionnaire on the booking; staff see the ones with `allow_staff_view`; customers see the ones with `allow_customer_view`. Questionnaires restricted by `show_before_or_after` are also hidden outside their window, so a \"before\" questionnaire drops off the list once the booking starts.\n\nDeleted questionnaires are never returned.\n\n**Required permission:** `assigned_event_read` (when the authenticated user is assigned to the booking) or `unassigned_event_read` (otherwise).\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"event_id","in":"query","description":"The booking to list questionnaires for","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"questionnaires found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"47","type":"form","attributes":{"id":47,"title":"Event Planning Form","complete":false,"data":{"title":"Event Planning Form","fieldGroups":[{"name":"Reception","fields":[{"name":"Colour Scheme","type":"text_field","uuid":"f47ac10b","required":true,"placeholder":"Navy and gold"},{"name":"Main Course","type":"dropdown","uuid":"9c8b7a65","values":["Beef","Fish","Vegetarian"]},{"name":"Extras","type":"checkbox_group","uuid":"3e2d1c0b","values":["Napkins","Chargers"]},{"name":"Toast Time","type":"text_field","uuid":"5f4e3d2c","timelineEnabled":true,"timelineSettings":{"timelineMode":"start_time"}}]},{"name":"Music","fields":[{"name":"Must Play","type":"song_list","uuid":"7a6b5c4d","allowMultipleEntries":true}]}]},"values":{},"event_id":993,"kind":"standard","external_url":null,"provider":null,"allow_staff_view":true,"allow_staff_edit":true,"allow_customer_view":true,"allow_customer_edit":true,"show_before_or_after":"all","hide_until_booking_completed":false,"url":"http://test-720-366da88c.cc.localhost/events/993-sarah-and-john-s-wedding/forms/47?token=4EX-2GFA-YPF","pdf_url":"http://test-720-366da88c.cc.localhost/events/993-sarah-and-john-s-wedding/forms/47.pdf?token=4EX-2GFA-YPF","associated_record_ids":{"event_type_ids":[],"package_group_ids":[],"event_category_ids":[],"add_on_category_ids":[],"add_on_ids":[],"backdrop_category_ids":[],"backdrop_ids":[]}}}]}}}}}},"post":{"summary":"Attach a questionnaire from a template","tags":["Questionnaires"],"description":"Copies one of the business's questionnaire templates onto a booking. The new questionnaire takes its questions and its permission and visibility settings from the template at the moment it is attached — later edits to the template do not flow through automatically.\n\nUse `GET /api/v1/questionnaire_templates` to look up the available `questionnaire_template_id` values. Non-admin users can only attach templates with `allow_staff_view` enabled.\n\nTo attach a questionnaire hosted on another site instead, use `POST /api/v1/questionnaires/create_external`.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"questionnaire attached","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"48","type":"form","attributes":{"id":48,"title":"New Questionnaire","complete":false,"data":{"title":"New Questionnaire","fieldGroups":[{"name":"PRE-EVENT CHECKLIST","fields":[],"editing":false}]},"values":{},"event_id":994,"kind":"standard","external_url":null,"provider":null,"allow_staff_view":true,"allow_staff_edit":true,"allow_customer_view":true,"allow_customer_edit":true,"show_before_or_after":"all","hide_until_booking_completed":false,"url":"http://test-724-7ff4f62e.cc.localhost/events/994-sarah-and-john-s-wedding/forms/48?token=CKD-F6QY-TX9","pdf_url":"http://test-724-7ff4f62e.cc.localhost/events/994-sarah-and-john-s-wedding/forms/48.pdf?token=CKD-F6QY-TX9","associated_record_ids":{"event_type_ids":[],"package_group_ids":[],"event_category_ids":[],"add_on_category_ids":[],"add_on_ids":[],"backdrop_category_ids":[],"backdrop_ids":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event_id":{"type":"integer","description":"The booking to attach the questionnaire to"},"questionnaire_template_id":{"type":"integer","description":"The questionnaire template to copy"}},"required":["event_id","questionnaire_template_id"]}}}}}},"/api/v1/questionnaires/create_external":{"post":{"summary":"Attach an external questionnaire","tags":["Questionnaires"],"description":"Attaches a questionnaire that lives on another site — a Google Form, a Typeform, or your own hosted form. No template is involved and Check Cherry stores no answers; the questionnaire is a name and a link, and the guest is sent to that link to fill it out.\n\nThe response carries `kind: \"external\"` so clients know to open `external_url` directly rather than rendering the Check Cherry form builder. `data.fieldGroups` is empty on these records and `pdf_url` is `null`.\n\n`external_url` may be sent without a scheme — `forms.gle/abc` is stored as `https://forms.gle/abc`. Set `provider` to identify your integration as the source; it is a free-form string and is left blank for links a business adds by hand.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"questionnaire attached","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"49","type":"form","attributes":{"id":49,"title":"Event Planning Form","complete":false,"data":{"title":"Event Planning Form","fieldGroups":[]},"values":{},"event_id":995,"kind":"external","external_url":"https://forms.gle/abc","provider":"acme","allow_staff_view":true,"allow_staff_edit":true,"allow_customer_view":true,"allow_customer_edit":true,"show_before_or_after":"all","hide_until_booking_completed":false,"url":"http://test-727-4cddd7db.cc.localhost/events/995-sarah-and-john-s-wedding/forms/49?token=RYV-QQN6-RAW","pdf_url":null,"associated_record_ids":{"event_type_ids":[],"package_group_ids":[],"event_category_ids":[],"add_on_category_ids":[],"add_on_ids":[],"backdrop_category_ids":[],"backdrop_ids":[]}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"event_id":{"type":"integer","description":"The booking to attach the questionnaire to"},"title":{"type":"string","description":"Name shown to staff and customers"},"external_url":{"type":"string","description":"Where the questionnaire is hosted. Assumed to be https when no scheme is given."},"provider":{"type":"string","description":"Optional name of the third party the questionnaire came from"}},"required":["event_id","title","external_url"]}}}}}},"/api/v1/questionnaires/{id}":{"get":{"summary":"Fetch questionnaire by ID","tags":["Questionnaires"],"description":"Returns a single questionnaire, including its question structure (`data`) and the answers collected so far (`values`).\n\n`kind` tells you what you are looking at. A `standard` questionnaire carries its questions in `data.fieldGroups`, keyed by field UUID in `values`. An `external` one carries no questions — open `external_url` instead.\n\n`url` is a browser link to the questionnaire that works for the customer without a login. For external questionnaires it redirects to `external_url`.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`. Customers can always read questionnaires on their own bookings where `allow_customer_view` is set.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the questionnaire","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"questionnaire found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"50","type":"form","attributes":{"id":50,"title":"Event Planning Form","complete":false,"data":{"title":"Event Planning Form","fieldGroups":[{"name":"Reception","fields":[{"name":"Colour Scheme","type":"text_field","uuid":"f47ac10b","required":true,"placeholder":"Navy and gold"},{"name":"Main Course","type":"dropdown","uuid":"9c8b7a65","values":["Beef","Fish","Vegetarian"]},{"name":"Extras","type":"checkbox_group","uuid":"3e2d1c0b","values":["Napkins","Chargers"]},{"name":"Toast Time","type":"text_field","uuid":"5f4e3d2c","timelineEnabled":true,"timelineSettings":{"timelineMode":"start_time"}}]},{"name":"Music","fields":[{"name":"Must Play","type":"song_list","uuid":"7a6b5c4d","allowMultipleEntries":true}]}]},"values":{},"event_id":996,"kind":"standard","external_url":null,"provider":null,"allow_staff_view":true,"allow_staff_edit":true,"allow_customer_view":true,"allow_customer_edit":true,"show_before_or_after":"all","hide_until_booking_completed":false,"url":"http://test-730-f515c4a1.cc.localhost/events/996-sarah-and-john-s-wedding/forms/50?token=6X4-DVD2-3CE","pdf_url":"http://test-730-f515c4a1.cc.localhost/events/996-sarah-and-john-s-wedding/forms/50.pdf?token=6X4-DVD2-3CE","associated_record_ids":{"event_type_ids":[],"package_group_ids":[],"event_category_ids":[],"add_on_category_ids":[],"add_on_ids":[],"backdrop_category_ids":[],"backdrop_ids":[]}}}},"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"attributes":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/QuestionnaireData"}}}}}}}}}}}},"put":{"summary":"Submit answers","tags":["Questionnaires"],"description":"Saves answers onto a standard questionnaire.\n\n**Answers merge into what is already stored.** A `uuid` you leave out keeps the answer it already has, so you can send just the field you changed without re-sending the rest of the questionnaire.\n\nMerging is **per field, not per element**. The array under a `uuid` you send replaces that field's answers whole, so sending `{\"text\": \"…\"}` for a `double_text_field` still drops that entry's `text2`. Send a field's entries complete. Removing a repeat works the same way — send the shorter array — and `[]` clears a field.\n\nPass `replace: true` to go back to the old behaviour and have `values` stand for the entire questionnaire, deleting any answer you leave out.\n\n`values` is keyed by the field's `uuid` from `data.fieldGroups`. Each key holds an array, one entry per repeat of that field, and each entry is an object keyed by *element* — not by the uuid and not by the question's name. Which element a question stores its answer under is decided entirely by its `type`:\n\n| Field type | Answer stored under |\n| --- | --- |\n| `header` | _nothing; it only displays something_ |\n| `subheader` | _nothing; it only displays something_ |\n| `separator` | _nothing; it only displays something_ |\n| `plain_text` | _nothing; it only displays something_ |\n| `rich_text` | _nothing; it only displays something_ |\n| `static_image` | _nothing; it only displays something_ |\n| `text_field` | `text` |\n| `double_text_field` | `text`, `text2` |\n| `triple_text_field` | `text`, `text2`, `text3` |\n| `quadruple_text_field` | `text`, `text2`, `text3`, `text4` |\n| `text_box` | `text` |\n| `dropdown` | `dropdown` |\n| `radio_group` | `radio` |\n| `checkbox` | `checkbox` |\n| `checkbox_group` | `checkbox` |\n| `date_field` | `text` |\n| `time_field` | `text` |\n| `color_picker_field` | `text` |\n| `file_uploader_field` | `file` |\n| `image_uploader_field` | `file` |\n| `e_sign_field` | `signer`, `timestamp`, `ip` |\n| `song` | `songName`, `songArtistName`, `songAlbumName`, `songId`, `songProvider`, `spotifyUrl`, `appleMusicUrl`, `youtubeUrl`, `soundCloudUrl`, `songAlbumUrl`, `songPreviewUrl`, `songDurationSeconds`, `songSuggestionListId`, `publicNotes`, `selectionNotes` |\n| `song_list` | `songName`, `songArtistName`, `songAlbumName`, `songId`, `songProvider`, `spotifyUrl`, `appleMusicUrl`, `youtubeUrl`, `soundCloudUrl`, `songAlbumUrl`, `songPreviewUrl`, `songDurationSeconds`, `songSuggestionListId`, `publicNotes`, `selectionNotes` |\n| `spotify_playlist` | `spotify` |\n| `apple_music_playlist` | `appleMusic` |\n| `youtube_music_playlist` | `youtubeMusic` |\n| `music_playlist` | `musicPlaylist` |\n\nA question with `timelineEnabled` also carries a time, under an element decided by `timelineSettings.timelineMode`:\n\n| `timelineMode` | Also stores |\n| --- | --- |\n| `length` | `timelineLength` |\n| `start_time` | `timelineStartsAt` |\n| `start_and_end_time` | `timelineStartsAt`, `timelineEndsAt` |\n\nAnswers are checked against the field they belong to, and the call is rejected with a 422 if they do not fit:\n\n- the value for a field must be an array, and each entry an object\n- each element name must be one the field actually stores, so a `dropdown` field   will not accept an answer under `radio`\n- each value must match the element's type, so a checkbox group takes an array of   the selected labels and a single checkbox takes a boolean\n\nUse `null` to clear an answer; it is accepted for any element. Answers already stored under an element the field no longer declares can be sent back unchanged, so fetching a questionnaire and returning it is always safe, but you cannot introduce a new one.\n\nExternal questionnaires reject this call with a 422 too: their answers live on the site that hosts them, not in Check Cherry.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`, with a key belonging to a staff user and `allow_staff_edit` set on the questionnaire. Customers can submit answers on their own bookings where `allow_customer_edit` is set and the questionnaire is not yet complete.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the questionnaire","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"answers saved","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"51","type":"form","attributes":{"id":51,"title":"Event Planning Form","complete":false,"data":{"title":"Event Planning Form","fieldGroups":[{"name":"Details","fields":[{"name":"Color Scheme","type":"text_field","uuid":"f47ac10b"}]}]},"values":{"f47ac10b":[{"text":"Navy and gold"}]},"event_id":997,"kind":"standard","external_url":null,"provider":null,"allow_staff_view":true,"allow_staff_edit":true,"allow_customer_view":true,"allow_customer_edit":true,"show_before_or_after":"all","hide_until_booking_completed":false,"url":"http://test-734-c8b51052.cc.localhost/events/997-sarah-and-john-s-wedding/forms/51?token=4A4-JW97-4E2","pdf_url":"http://test-734-c8b51052.cc.localhost/events/997-sarah-and-john-s-wedding/forms/51.pdf?token=4A4-JW97-4E2","associated_record_ids":{"event_type_ids":[],"package_group_ids":[],"event_category_ids":[],"add_on_category_ids":[],"add_on_ids":[],"backdrop_category_ids":[],"backdrop_ids":[]}}}}}}},"422":{"description":"questionnaire is hosted on another site","content":{"application/json":{"example":{"meta":{"status":"error"},"errors":["External questionnaires do not store answers in Check Cherry"]}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"values":{"$ref":"#/components/schemas/QuestionnaireAnswers"},"replace":{"type":"boolean","default":false,"description":"Treat `values` as the whole questionnaire and delete any answer it omits. Leave this off to merge, which is almost always what you want."}},"required":["values"]}}}}},"delete":{"summary":"Remove a questionnaire from a booking","tags":["Questionnaires"],"description":"Detaches the questionnaire from the booking. Any answers already collected go with it, and the removal is recorded on the booking's change history. The questionnaire template it came from is untouched.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`, plus admin or extended staff permissions. Customers cannot remove questionnaires.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the questionnaire","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"questionnaire removed","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/questionnaires/{id}/mark_as_complete":{"put":{"summary":"Lock a questionnaire","tags":["Questionnaires"],"description":"Marks the questionnaire complete. Customers can no longer change their answers, and any \"Questionnaire Submitted\" automated messages and staff push notifications fire.\n\nThis is how an external questionnaire gets closed out — Check Cherry cannot see whether the guest finished a form hosted elsewhere, so your integration should call this once it knows they have.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`. Fails if the questionnaire is already complete.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the questionnaire","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"questionnaire locked","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/questionnaires/{id}/mark_as_incomplete":{"put":{"summary":"Unlock a questionnaire","tags":["Questionnaires"],"description":"Reopens a completed questionnaire so answers can be changed again. No automated messages fire.\n\n**Required permission:** `assigned_event_read` or `unassigned_event_read`. Fails if the questionnaire is not currently complete.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the questionnaire","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"questionnaire unlocked","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/questionnaires/{id}/provide_signature":{"post":{"summary":"Stamp a signature","tags":["Questionnaires"],"description":"Returns the signer name, a server timestamp, and the requesting IP address for an e-signature field. This call records nothing on its own — take the values it returns and write them into the signature field's entry in `values` (as `signer`, `timestamp`, and `ip`) using **Submit answers**, so the signature is stamped by Check Cherry rather than by the client's clock.\n\n**Required permission:** same as **Submit answers**.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the questionnaire","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"signature stamped","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"signer":"Jordan Reyes","timestamp":"08-27-2026  2:58 PM","ip":"127.0.0.1"}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"signer":{"type":"string","description":"Name typed by the person signing"}},"required":["signer"]}}}}}},"/api/v1/questionnaires/{id}/reset":{"put":{"summary":"Reset a questionnaire","tags":["Questionnaires"],"description":"Erases every answer on the questionnaire and reloads the current version of its template, so any questions the business has added or changed since it was attached take effect. The reset is recorded on the booking's change history.\n\nOnly works on questionnaires that came from a template — external questionnaires and ones whose template has been deleted cannot be reset.\n\n**Required permission:** `assigned_event_write` or `unassigned_event_write`, plus admin or extended staff permissions.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the questionnaire","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"questionnaire reset","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/reporting/booked_on_summary":{"get":{"summary":"Booked-on summary","tags":["Reporting"],"description":"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.\n\nThis 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.\n\nProposals are excluded. Only confirmed (non-archived) bookings with a `due_on` set are considered. All monetary fields are reported in cents.\n\n**Required permission:** `reports_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"interval","in":"query","type":"string","required":false,"description":"Time-bucket size. Defaults to `month`.","schema":{"type":"string","enum":["year","quarter","month","week","day"],"default":"month"}},{"name":"starts_at","in":"query","required":false,"description":"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`.","schema":{"type":"string"}},{"name":"ends_at","in":"query","required":false,"description":"End of the date range (YYYY-MM-DD), applied against `booked_at`. Defaults to today. Snapped to the end of the chosen `interval`.","schema":{"type":"string"}},{"name":"brand_id","in":"query","required":false,"description":"Limit results to a single brand. Omit to include all brands on the account.","schema":{"type":"integer"}}],"responses":{"200":{"description":"booked-on summary","content":{"application/json":{"example":{"results":[{"name":"Jun 2026","amount_paid_cents":0,"projected_cents":0,"postponed_cents":0,"past_due_cents":0,"total_cents":0,"event_count":0,"report_path":"/report/events?query%5Bbooked_at_dynamic%5D=custom&query%5Bbooked_at_end%5D=06-30-2026&query%5Bbooked_at_start%5D=06-01-2026&query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=booked_at&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstatus%5D=not_proposal"},{"name":"Jul 2026","amount_paid_cents":0,"projected_cents":0,"postponed_cents":0,"past_due_cents":0,"total_cents":0,"event_count":0,"report_path":"/report/events?query%5Bbooked_at_dynamic%5D=custom&query%5Bbooked_at_end%5D=07-31-2026&query%5Bbooked_at_start%5D=07-01-2026&query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=booked_at&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstatus%5D=not_proposal"},{"name":"Aug 2026","amount_paid_cents":0,"projected_cents":0,"postponed_cents":0,"past_due_cents":0,"total_cents":0,"event_count":1,"report_path":"/report/events?query%5Bbooked_at_dynamic%5D=custom&query%5Bbooked_at_end%5D=08-31-2026&query%5Bbooked_at_start%5D=08-01-2026&query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=booked_at&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstatus%5D=not_proposal"}]},"schema":{"type":"object","properties":{"results":{"type":"array","description":"One entry per interval bucket, in chronological order.","items":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable label for the bucket (e.g. `Jan 2026`, `Q1 2026`)."},"amount_paid_cents":{"type":"integer","description":"Total already collected from bookings sold in this bucket, in cents."},"projected_cents":{"type":"integer","description":"Outstanding balance still expected from non-postponed bookings whose `due_on` is in the future, in cents."},"past_due_cents":{"type":"integer","description":"Outstanding balance from non-postponed bookings whose `due_on` has passed, in cents."},"postponed_cents":{"type":"integer","description":"Outstanding balance from postponed bookings, in cents."},"total_cents":{"type":"integer","description":"Sum of `amount_paid_cents`, `projected_cents`, `past_due_cents`, and `postponed_cents`, in cents."},"event_count":{"type":"integer","description":"Number of bookings sold in this bucket."},"report_path":{"type":"string","description":"Internal Check Cherry path that opens the matching report view in the web app. Not generally useful to API consumers."}}}}}}}}},"422":{"description":"invalid interval","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"object","description":"Validation errors keyed by field."}}}}}}}}},"/api/v1/reporting/lead_count_summary":{"get":{"summary":"Lead count summary","tags":["Reporting"],"description":"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?\".\n\nSpam-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).\n\n**Required permission:** `reports_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"interval","in":"query","type":"string","required":false,"description":"Time-bucket size. Defaults to `month`.","schema":{"type":"string","enum":["year","quarter","month","week","day"],"default":"month"}},{"name":"starts_at","in":"query","required":false,"description":"Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen `interval`.","schema":{"type":"string"}},{"name":"ends_at","in":"query","required":false,"description":"End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen `interval`.","schema":{"type":"string"}},{"name":"chart_type","in":"query","type":"string","required":false,"description":"Which date drives bucketing. `created_on` (default) buckets by lead creation date. `scheduled_on` buckets by the lead's requested event date.","schema":{"type":"string","enum":["created_on","scheduled_on"],"default":"created_on"}},{"name":"brand_id","in":"query","required":false,"description":"Limit results to a single brand. Omit to include all brands on the account.","schema":{"type":"integer"}}],"responses":{"200":{"description":"lead count summary","content":{"application/json":{"example":{"results":[{"name":"Jun 2026","lead_count":0,"report_path":"/report/leads?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=06-30-2026&query%5Bstarts_at_start%5D=06-01-2026&query%5Bstatus%5D=not_proposal"},{"name":"Jul 2026","lead_count":0,"report_path":"/report/leads?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=07-31-2026&query%5Bstarts_at_start%5D=07-01-2026&query%5Bstatus%5D=not_proposal"},{"name":"Aug 2026","lead_count":1,"report_path":"/report/leads?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=08-31-2026&query%5Bstarts_at_start%5D=08-01-2026&query%5Bstatus%5D=not_proposal"}]},"schema":{"type":"object","properties":{"results":{"type":"array","description":"One entry per interval bucket, in chronological order.","items":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable label for the bucket (e.g. `Jan 2026`, `Q1 2026`)."},"lead_count":{"type":"integer","description":"Number of leads that fell in this bucket."},"report_path":{"type":"string","description":"Internal Check Cherry path that opens the matching report view in the web app. Not generally useful to API consumers."}}}}}}}}}}}},"/api/v1/reporting/payment_receipt_summary":{"get":{"summary":"Payment receipt summary","tags":["Reporting"],"description":"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.\n\nPayments 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.\n\nPairs well with `revenue_projection_summary`: this endpoint answers \"how much came in?\", the projection endpoint answers \"how much do we still expect?\".\n\n**Required permission:** `reports_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"interval","in":"query","type":"string","required":false,"description":"Time-bucket size. Defaults to `month`.","schema":{"type":"string","enum":["year","quarter","month","week","day"],"default":"month"}},{"name":"starts_at","in":"query","required":false,"description":"Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen `interval`.","schema":{"type":"string"}},{"name":"ends_at","in":"query","required":false,"description":"End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen `interval`.","schema":{"type":"string"}},{"name":"brand_id","in":"query","required":false,"description":"Limit results to a single brand. Omit to include all brands on the account.","schema":{"type":"integer"}}],"responses":{"200":{"description":"payment receipt summary","content":{"application/json":{"example":{"results":[{"name":"Jun 2026","amount_paid_cents":0,"payment_count":0,"report_path":"/report/event_payments?query%5Bbrand_id%5D=&query%5Bpaid_at_dynamic%5D=custom&query%5Bpaid_at_end%5D=06-30-2026&query%5Bpaid_at_start%5D=06-01-2026"},{"name":"Jul 2026","amount_paid_cents":0,"payment_count":0,"report_path":"/report/event_payments?query%5Bbrand_id%5D=&query%5Bpaid_at_dynamic%5D=custom&query%5Bpaid_at_end%5D=07-31-2026&query%5Bpaid_at_start%5D=07-01-2026"},{"name":"Aug 2026","amount_paid_cents":50000,"payment_count":1,"report_path":"/report/event_payments?query%5Bbrand_id%5D=&query%5Bpaid_at_dynamic%5D=custom&query%5Bpaid_at_end%5D=08-31-2026&query%5Bpaid_at_start%5D=08-01-2026"}]},"schema":{"type":"object","properties":{"results":{"type":"array","description":"One entry per interval bucket, in chronological order.","items":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable label for the bucket (e.g. `Jan 2026`, `Q1 2026`)."},"amount_paid_cents":{"type":"integer","description":"Total amount collected in this bucket, in cents."},"payment_count":{"type":"integer","description":"Number of payment records that fell in this bucket."},"report_path":{"type":"string","description":"Internal Check Cherry path that opens the matching report view in the web app. Not generally useful to API consumers."}}}}}}}}}}}},"/api/v1/reporting/proposal_count_summary":{"get":{"summary":"Proposal count summary","tags":["Reporting"],"description":"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?\".\n\nIncludes 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).\n\n**Required permission:** `reports_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"interval","in":"query","type":"string","required":false,"description":"Time-bucket size. Defaults to `month`.","schema":{"type":"string","enum":["year","quarter","month","week","day"],"default":"month"}},{"name":"starts_at","in":"query","required":false,"description":"Start of the date range (YYYY-MM-DD). Defaults to one year ago. Snapped to the beginning of the chosen `interval`.","schema":{"type":"string"}},{"name":"ends_at","in":"query","required":false,"description":"End of the date range (YYYY-MM-DD). Defaults to today. Snapped to the end of the chosen `interval`.","schema":{"type":"string"}},{"name":"chart_type","in":"query","type":"string","required":false,"description":"Which date drives bucketing. `created_on` (default) buckets by proposal creation date. `scheduled_on` buckets by the proposal's event date.","schema":{"type":"string","enum":["created_on","scheduled_on"],"default":"created_on"}},{"name":"brand_id","in":"query","required":false,"description":"Limit results to a single brand. Omit to include all brands on the account.","schema":{"type":"integer"}}],"responses":{"200":{"description":"proposal count summary","content":{"application/json":{"example":{"results":[{"name":"Jun 2026","proposal_count":0,"report_path":"/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bcreated_at_dynamic%5D=custom&query%5Bcreated_at_end%5D=06-30-2026&query%5Bcreated_at_start%5D=06-01-2026&query%5Bstatus%5D=ever_proposal"},{"name":"Jul 2026","proposal_count":0,"report_path":"/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bcreated_at_dynamic%5D=custom&query%5Bcreated_at_end%5D=07-31-2026&query%5Bcreated_at_start%5D=07-01-2026&query%5Bstatus%5D=ever_proposal"},{"name":"Aug 2026","proposal_count":1,"report_path":"/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=total_adjustments&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=total_due&query%5Bcreated_at_dynamic%5D=custom&query%5Bcreated_at_end%5D=08-31-2026&query%5Bcreated_at_start%5D=08-01-2026&query%5Bstatus%5D=ever_proposal"}]},"schema":{"type":"object","properties":{"results":{"type":"array","description":"One entry per interval bucket, in chronological order.","items":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable label for the bucket (e.g. `Jan 2026`, `Q1 2026`)."},"proposal_count":{"type":"integer","description":"Number of proposals that fell in this bucket."},"report_path":{"type":"string","description":"Internal Check Cherry path that opens the matching report view in the web app. Not generally useful to API consumers."}}}}}}}}}}}},"/api/v1/reporting/revenue_projection_summary":{"get":{"summary":"Revenue projection summary","tags":["Reporting"],"description":"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.\n\nProposals 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.\n\nUseful 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?\".\n\n**Required permission:** `reports_read`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"interval","in":"query","type":"string","required":false,"description":"Time-bucket size for the projection. Defaults to `month`.","schema":{"type":"string","enum":["year","quarter","month","week","day"],"default":"month"}},{"name":"starts_at","in":"query","required":false,"description":"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`.","schema":{"type":"string"}},{"name":"ends_at","in":"query","required":false,"description":"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`.","schema":{"type":"string"}},{"name":"brand_id","in":"query","required":false,"description":"Limit the projection to a single brand. Omit to include all brands on the account.","schema":{"type":"integer"}}],"responses":{"200":{"description":"revenue projection summary","content":{"application/json":{"example":{"results":[{"name":"Jun 2026","amount_paid_cents":0,"projected_cents":0,"postponed_cents":0,"past_due_cents":0,"total_cents":0,"event_count":0,"report_path":"/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=06-30-2026&query%5Bstarts_at_start%5D=06-01-2026&query%5Bstatus%5D=not_proposal"},{"name":"Jul 2026","amount_paid_cents":0,"projected_cents":0,"postponed_cents":0,"past_due_cents":0,"total_cents":0,"event_count":0,"report_path":"/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=07-31-2026&query%5Bstarts_at_start%5D=07-01-2026&query%5Bstatus%5D=not_proposal"},{"name":"Aug 2026","amount_paid_cents":0,"projected_cents":0,"postponed_cents":0,"past_due_cents":0,"total_cents":0,"event_count":0,"report_path":"/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=08-31-2026&query%5Bstarts_at_start%5D=08-01-2026&query%5Bstatus%5D=not_proposal"},{"name":"Sep 2026","amount_paid_cents":0,"projected_cents":0,"postponed_cents":0,"past_due_cents":0,"total_cents":0,"event_count":1,"report_path":"/report/events?query%5Bbrand_id%5D=&query%5Bcolumns%5D%5B%5D=name&query%5Bcolumns%5D%5B%5D=status&query%5Bcolumns%5D%5B%5D=starts_at_date&query%5Bcolumns%5D%5B%5D=starts_at_time&query%5Bcolumns%5D%5B%5D=total_cost&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_paid&query%5Bcolumns%5D%5B%5D=past_due_amount&query%5Bcolumns%5D%5B%5D=total_due&query%5Bstarts_at_dynamic%5D=custom&query%5Bstarts_at_end%5D=09-30-2026&query%5Bstarts_at_start%5D=09-01-2026&query%5Bstatus%5D=not_proposal"}]},"schema":{"type":"object","properties":{"results":{"type":"array","description":"One entry per interval bucket, in chronological order.","items":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable label for the bucket (e.g. `Jan 2026`, `Q1 2026`)."},"amount_paid_cents":{"type":"integer","description":"Total already collected from bookings in this bucket, in cents."},"projected_cents":{"type":"integer","description":"Outstanding balance still expected from non-postponed bookings whose `due_on` is in the future, in cents."},"past_due_cents":{"type":"integer","description":"Outstanding balance from non-postponed bookings whose `due_on` has passed, in cents."},"postponed_cents":{"type":"integer","description":"Outstanding balance from postponed bookings, in cents."},"total_cents":{"type":"integer","description":"Sum of `amount_paid_cents`, `projected_cents`, `past_due_cents`, and `postponed_cents`, in cents."},"event_count":{"type":"integer","description":"Number of bookings included in this bucket."},"report_path":{"type":"string","description":"Internal Check Cherry path that opens the matching report view in the web app. Not generally useful to API consumers."}}}}}}}}}}}},"/api/v1/staff_check_ins":{"get":{"summary":"Fetch staff check-ins","tags":["Staff Check-Ins"],"description":"Returns a paginated list of staff check-in shifts, most recent first. Each shift spans a check-in and (once closed) a check-out; a shift whose `check_out_at` is null is still open (the user is currently checked in). Include `?include=event,notes` to embed the linked booking and the shift's notes/photos.\n\n`search_mode` chooses whose shifts you get:\n\n- `my` (default) — the authenticated user's own shifts. Requires `own_staff_check_in_read_and_create`.\n- `all` — every staff member's shifts in the franchise. Requires `all_staff_check_in_read`.\n- `user` — one staff member's shifts, named by `staff_id` (required). Requires `all_staff_check_in_read`.\n\nUse `all` or `user` to sync timesheets to an external system. Shifts carry location and notes as well as times, so those modes are a wider grant than they may appear.\n\n`check_in_at_start` and `check_in_at_end` bound the results by check-in date and are inclusive of both days. A shift is placed by when it *started*, so one running past midnight belongs to the day it began on.\n\nThe response includes `meta.total_count` and `meta.per_page` for pagination.\n\nAvailable only when the franchise has staff check-in enabled.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"search_mode","in":"query","description":"Whose shifts to return. Defaults to `my`.:\n * `my` \n * `all` \n * `user` \n ","enum":["my","all","user"],"required":false,"schema":{"type":"string"}},{"name":"staff_id","in":"query","description":"The staff member whose shifts to return. Required when `search_mode` is `user`, ignored otherwise.","required":false,"schema":{"type":"integer"}},{"name":"check_in_at_start","in":"query","description":"Only shifts that started on or after this date (inclusive)","required":false,"schema":{"type":"string"}},{"name":"check_in_at_end","in":"query","description":"Only shifts that started on or before this date (inclusive)","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for pagination (default: 1)","required":false,"schema":{"type":"integer"}},{"name":"per","in":"query","description":"Results per page (default: 25, max: 1000)","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"check-ins found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":1,"per_page":25,"page":1,"total_pages":1},"data":[{"id":"673","type":"staff_check_in","attributes":{"check_in_at":"2026-08-27T13:58:04.921-07:00","check_out_at":"2026-08-27T14:58:04.921-07:00","open":false,"closed":true,"status_label":"Checked out","check_in_at_formatted":"08-27-2026  1:58 PM","check_out_at_formatted":"08-27-2026  2:58 PM","event_title":"Sarah and John's Wedding","duration_seconds":3600.0,"duration_formatted":"1h 0m","check_in_latitude":null,"check_in_longitude":null,"check_in_location_accuracy":null,"check_in_location_available":false,"check_out_latitude":null,"check_out_longitude":null,"check_out_location_accuracy":null,"check_out_location_available":false},"relationships":{"user":{"data":{"id":"2507","type":"user"}},"event":{"data":{"id":"1008","type":"event"}},"submitted_by":{"data":{"id":"2507","type":"user"}},"notes":{"data":[]}}}]}}}},"403":{"description":"asked for other staff without all_staff_check_in_read"}}},"post":{"summary":"Record a check-in punch","tags":["Staff Check-Ins"],"description":"Records a staff punch for the authenticated user. One endpoint drives all three actions via `kind`:\n\n- `check_in` — open a new shift. Fails if the user already has an open shift.\n- `check_out` — close the user's currently-open shift.\n- `status_update` — add a note and/or photo to the open shift (a note or attachment is required).\n\n`event_id` optionally links the shift to a booking (there is no assignment gate — any staffer may check in to any event, or none). Location (`latitude`, `longitude`, `location_accuracy`) is best-effort — omit it and the punch still succeeds. Times are always server-stamped; any client-supplied time is ignored. `note` and `attachments` (ActiveStorage signed ids) may accompany a check-in or check-out too, and are stored as a note on the shift.\n\nAvailable only when the franchise has staff check-in enabled, and only to staff/admin users.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"checked in","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"674","type":"staff_check_in","attributes":{"check_in_at":"2026-08-27T14:58:05.093-07:00","check_out_at":null,"open":true,"closed":false,"status_label":"Checked in","check_in_at_formatted":"08-27-2026  2:58 PM","check_out_at_formatted":null,"event_title":"Sarah and John's Wedding","duration_seconds":0.001878,"duration_formatted":"0h 0m","check_in_latitude":null,"check_in_longitude":null,"check_in_location_accuracy":null,"check_in_location_available":false,"check_out_latitude":null,"check_out_longitude":null,"check_out_location_accuracy":null,"check_out_location_available":false},"relationships":{"user":{"data":{"id":"2509","type":"user"}},"event":{"data":{"id":"1009","type":"event"}},"submitted_by":{"data":{"id":"2509","type":"user"}},"notes":{"data":[]}}}}}}},"422":{"description":"already checked in"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","description":"The punch type","enum":["check_in","check_out","status_update"]},"event_id":{"type":"integer","description":"Optional booking (Event) to link the shift to"},"latitude":{"type":"number","description":"Best-effort latitude at the moment of the punch"},"longitude":{"type":"number","description":"Best-effort longitude at the moment of the punch"},"location_accuracy":{"type":"number","description":"Best-effort location accuracy in meters"},"note":{"type":"string","description":"Optional note (required for status_update if no attachment)"},"attachments":{"type":"array","items":{"type":"string"},"description":"ActiveStorage signed ids for photos/files"}},"required":["kind"]}}}}}},"/api/v1/staff_check_ins/{id}":{"get":{"summary":"Fetch a single check-in","tags":["Staff Check-Ins"],"description":"Returns a single check-in shift. Include `?include=notes` to embed the shift's notes/photos.\n\nThe authenticated user may always read their own shift. Reading another user's requires `all_staff_check_in_read`; without it the request is rejected.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"The check-in shift ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"check-in found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"676","type":"staff_check_in","attributes":{"check_in_at":"2026-08-27T13:58:05.207-07:00","check_out_at":"2026-08-27T14:58:05.207-07:00","open":false,"closed":true,"status_label":"Checked out","check_in_at_formatted":"08-27-2026  1:58 PM","check_out_at_formatted":"08-27-2026  2:58 PM","event_title":null,"duration_seconds":3600.0,"duration_formatted":"1h 0m","check_in_latitude":null,"check_in_longitude":null,"check_in_location_accuracy":null,"check_in_location_available":false,"check_out_latitude":null,"check_out_longitude":null,"check_out_location_accuracy":null,"check_out_location_available":false},"relationships":{"user":{"data":{"id":"2511","type":"user"}},"event":{"data":null},"submitted_by":{"data":{"id":"2511","type":"user"}},"notes":{"data":[]}}}}}}}}},"patch":{"summary":"Correct a check-in","tags":["Staff Check-Ins"],"description":"Corrects a recorded shift's times or the booking it is linked to. This is an after-the-fact correction, not a punch -- send `POST /api/v1/staff_check_ins` to record a live check-in or check-out.\n\nRequires `own_staff_check_in_write` for your own shift, or `all_staff_check_in_write` for anyone's. Both grants are admin-only by default, matching the web, where corrections are an admin surface.\n\nThe shift's staff member cannot be changed -- moving a shift between people would rewrite a timesheet with no record of who actually worked it. Every correction is recorded in the audit trail with the user who made it.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"The check-in shift ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"check-in corrected","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"677","type":"staff_check_in","attributes":{"check_in_at":"2026-08-27T13:58:05.269-07:00","check_out_at":"2026-08-27T14:28:05.000-07:00","open":false,"closed":true,"status_label":"Checked out","check_in_at_formatted":"08-27-2026  1:58 PM","check_out_at_formatted":"08-27-2026  2:28 PM","event_title":null,"duration_seconds":1799.730037,"duration_formatted":"0h 29m","check_in_latitude":null,"check_in_longitude":null,"check_in_location_accuracy":null,"check_in_location_available":false,"check_out_latitude":null,"check_out_longitude":null,"check_out_location_accuracy":null,"check_out_location_available":false},"relationships":{"user":{"data":{"id":"2512","type":"user"}},"event":{"data":null},"submitted_by":{"data":{"id":"2512","type":"user"}},"notes":{"data":[]}}}}}}},"422":{"description":"check-out before check-in"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"check_in_at":{"type":"string","description":"Corrected check-in time (ISO 8601)"},"check_out_at":{"type":"string","description":"Corrected check-out time (ISO 8601). Clearing it reopens the shift."},"event_id":{"type":"integer","description":"The booking (Event) the shift is linked to, or null to unlink it"}}}}}}},"delete":{"summary":"Delete a check-in","tags":["Staff Check-Ins"],"description":"Permanently deletes a recorded shift and its notes and photos. Requires `own_staff_check_in_write` for your own shift, or `all_staff_check_in_write` for anyone's -- both admin-only by default.\n\nTo close a shift a staffer forgot to check out of, correct it with `PATCH` instead of deleting it.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"The check-in shift ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"check-in deleted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}}}}},"/api/v1/suggestion_lists":{"get":{"summary":"Fetch suggestion lists","tags":["Questionnaires"],"description":"Lists the business's suggestion lists, ordered by title. A suggestion list is the set of songs a questionnaire's `song` or `song_list` question lets a customer pick from — the question names one through its `suggestionListId`.\n\nThe songs themselves are not returned here, only `title` and `item_count`. A list holds up to 1000 songs and a business can have many, so fetch a single list when you need what is on it.\n\nDeleted lists are never returned, and only lists the business owns are listed.\n\n**Required permission:** `planning_read`.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"suggestion lists found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":[{"id":"29","type":"suggestion_list_summary","attributes":{"id":29,"title":"Do Not Play","description":null,"item_count":0}},{"id":"28","type":"suggestion_list_summary","attributes":{"id":28,"title":"First Dance Ideas","description":"Slow songs couples come back to","item_count":2}}]}}}}}}},"/api/v1/suggestion_lists/{id}":{"get":{"summary":"Fetch suggestion list by ID","tags":["Questionnaires"],"description":"Returns a single suggestion list with every song on it in `data`, in the order the business arranged them. Use this to show a customer what a `song` or `song_list` question offers, or to check what an answer was picked from.\n\nEach item in `data` carries `id`, `name`, `artistName`, `albumName`, `songNotes`, `spotifyUrl`, `youtubeUrl`, `appleMusicUrl` and `soundCloudUrl`. Anything the business left blank is `null`.\n\n**`songNotes` belongs to the list, not to the answer.** It is the business's own note about the song — \"requires the clean edit\", \"played at every reception\" — and it is never stored as part of a questionnaire answer. A customer's note about their choice is `selectionNotes` in the questionnaire's `values`.\n\nRecording an answer means writing the song's fields into `values` under the question's `uuid`, along with `songSuggestionListId` set to this list's `id`.\n\n**Required permission:** `planning_read`.\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"id","in":"path","description":"The unique ID of the suggestion list","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"suggestion list found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"30","type":"suggestion_list","attributes":{"id":30,"title":"First Dance Ideas","description":"Slow songs couples come back to","item_count":2,"data":[{"id":"3f1a9c02-6b4e-4f4a-9a1d-2c7f5e8b1d44","name":"At Last","albumName":"At Last!","songNotes":"Classic first dance","artistName":"Etta James","spotifyUrl":"https://open.spotify.com/track/1IPUeXG9BLBaLNjRZ0XSFm","youtubeUrl":"https://www.youtube.com/watch?v=S-cbOl96RFM","appleMusicUrl":null,"soundCloudUrl":null},{"id":"b6d0e7a1-52c8-4f0e-8f2b-9d3a4c6e7f10","name":"Make You Feel My Love","albumName":"19","songNotes":null,"artistName":"Adele","spotifyUrl":"https://open.spotify.com/track/0Q5VnK2DYzRyfqQRJuUtvi","youtubeUrl":null,"appleMusicUrl":null,"soundCloudUrl":null}]}}},"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"attributes":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string","description":"The list's name, as the business set it."},"description":{"type":"string","nullable":true,"description":"The business's own note about what the list is for."},"item_count":{"type":"integer","description":"How many songs are on the list."},"data":{"$ref":"#/components/schemas/SuggestionListItems"}}}}}}}}}}}}},"/api/v1/support_articles":{"get":{"summary":"Search and list help center articles","tags":["Support Articles"],"description":"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.\n\nFilter 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.\n\n**Required permission:** `global`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"text","in":"query","required":false,"description":"Full-text search query across article title, body, and meta description","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Filter by article category (e.g., bookings, leads, payments)","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number (default: 1)","schema":{"type":"integer"}},{"name":"per","in":"query","required":false,"description":"Results per page (default: 20)","schema":{"type":"integer"}}],"responses":{"200":{"description":"support articles found","content":{"application/json":{"example":{"meta":{"status":"ok","total_count":2,"per_page":20,"page":1,"total_pages":1},"data":[{"id":"105","type":"support_article","attributes":{"title":"How to create a booking","slug":"how-to-create-a-booking","category":"bookings","category_label":"Bookings","meta_description":"Aliquid suscipit qui temporibus.","body_text":"Porro iusto quis. Perferendis eaque sed. Optio mollitia esse. Section Step one. Step two.","body_html":"<p>Porro iusto quis. Perferendis eaque sed. Optio mollitia esse.</p>\n<h2 id=\"section\">Section</h2>\n<div class=\"steps\"><div class=\"step\"><div class=\"step-content\">Step one.</div></div>\n<div class=\"step\"><div class=\"step-content\">Step two.</div></div></div>","url":"http://www.checkcherry.localhost/help/105-how-to-create-a-booking","published_at":"2026-08-27T14:58:05.589-07:00","updated_at":"2026-08-27T14:58:05.590-07:00"}},{"id":"106","type":"support_article","attributes":{"title":"Lead capture forms","slug":"lead-capture-forms","category":"leads","category_label":"Leads","meta_description":"Ad incidunt laboriosam optio.","body_text":"Illum sed atque. Soluta impedit qui. Modi aperiam et. Section Step one. Step two.","body_html":"<p>Illum sed atque. Soluta impedit qui. Modi aperiam et.</p>\n<h2 id=\"section\">Section</h2>\n<div class=\"steps\"><div class=\"step\"><div class=\"step-content\">Step one.</div></div>\n<div class=\"step\"><div class=\"step-content\">Step two.</div></div></div>","url":"http://www.checkcherry.localhost/help/106-lead-capture-forms","published_at":"2026-08-27T14:58:05.592-07:00","updated_at":"2026-08-27T14:58:05.592-07:00"}}]}}}}}}},"/api/v1/support_articles/{slug}":{"get":{"summary":"Fetch a help center article by slug","tags":["Support Articles"],"description":"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).\n\n**Required permission:** `global`\n","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"description":"The article's URL slug","schema":{"type":"string"}}],"responses":{"200":{"description":"support article found","content":{"application/json":{"example":{"meta":{"status":"ok"},"data":{"id":"107","type":"support_article","attributes":{"title":"How to create a booking","slug":"how-to-create-a-booking","category":"bookings","category_label":"Bookings","meta_description":"Ea ipsam eum a.","body_text":"Placeat modi sint. Nostrum sapiente non. Qui expedita nemo. Section Step one. Step two.","body_html":"<p>Placeat modi sint. Nostrum sapiente non. Qui expedita nemo.</p>\n<h2 id=\"section\">Section</h2>\n<div class=\"steps\"><div class=\"step\"><div class=\"step-content\">Step one.</div></div>\n<div class=\"step\"><div class=\"step-content\">Step two.</div></div></div>","url":"http://www.checkcherry.localhost/help/107-how-to-create-a-booking","published_at":"2026-08-27T14:58:05.685-07:00","updated_at":"2026-08-27T14:58:05.686-07:00"}}}}}}}}},"/api/v1/template_selections":{"post":{"summary":"Submit a template selection","tags":["Template Selections"],"description":"After a customer chooses a template, this API endpoint should be called.\n\n**Required permission:** `design_template_select`","parameters":[{"name":"Api-Key","in":"header","required":true,"description":"Your Integration Key","schema":{"type":"string"}}],"responses":{"200":{"description":"template selection submitted","content":{"application/json":{"example":{"meta":{"status":"ok"}}}}},"422":{"description":"validation errors","content":{"application/json":{"example":{"meta":{"status":"error"},"errors":{"template_name":["Template name can't be blank"],"template_image_url":["Template image url can't be blank"],"design_id":["Design can't be blank"]}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"template_selection":{"type":"object","properties":{"event_booking_id":{"type":"integer","description":"Check Cherry Booking ID"},"design_id":{"type":"integer","description":"Design ID"},"user_id":{"type":"integer","description":"User ID"},"template_name":{"type":"string","description":"Template Name"},"template_image_url":{"type":"string","description":"Template Image URL"},"account_number":{"type":"string","description":"Your Customer's Account Number"},"template_purchase_url":{"type":"string","description":"Template Purchase URL"},"additional_params":{"type":"object","description":"Optional personalization the customer entered (e.g. their notes or answers). Each key/value becomes a labeled customization line shown on the booking and in the \"template selected\" notification. Keys are humanized for display.","additionalProperties":{"type":"string"},"example":{"additional_information":"Please use gold text and the couple's monogram"}}},"required":["event_booking_id","design_id","user_id","template_name","template_image_url"]}}}}}}}}},"servers":[{"url":"https://api.checkcherry.com"}],"tags":[{"name":"Leads","description":"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.\n\nUse 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.\n"},{"name":"Proposals/Confirmed Bookings","description":"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.\n\nUse the Events API to create new bookings or proposals, retrieve event details, and list events for a business.\n"},{"name":"Appointments","description":"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.\n"},{"name":"Availability","description":"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.\n"},{"name":"Packages & Services","description":"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.\n"},{"name":"Add-Ons","description":"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.\n"},{"name":"Backdrops","description":"Photo booth backdrops available for events. Backdrops are organized into categories and include pricing, images, and optional video previews.\n"},{"name":"Extras","description":"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.\n"},{"name":"Discount Codes","description":"Discount codes (coupons) are reusable promotions a business can apply to events. Each code defines how the discount is calculated — a flat amount or a percentage — and what it applies to: the complete booking, an entire package and its add-ons/backdrops, or specific items. Codes also carry a validity window and an active/expired/deactivated status.\n\nUse the Discount Codes API to list the business's codes (active by default) and look up an individual code's details.\n"},{"name":"Expenses","description":"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.\n\nExpense categories provide a hierarchical grouping for expenses, allowing businesses to organize and report on spending by type.\n"},{"name":"Questionnaires","description":"Questionnaires collect the details a business needs after a booking is secured — timelines, song requests, contact lists, setup notes, signatures. Each one is attached to a single booking or proposal.\n\nMost questionnaires are copies of a **questionnaire template** the business has built. Attaching one copies the template's questions and its permission settings onto the booking; later edits to the template do not flow through on their own. Use `GET /api/v1/questionnaire_templates` to list what is available to copy.\n\nA questionnaire's `kind` tells you how to handle it:\n\n- **standard** — the questions live in Check Cherry, in `data.fieldGroups`, and   answers are stored in `values` keyed by field UUID.\n- **external** — the questionnaire is hosted somewhere else. It carries a   `title` and an `external_url` and nothing more; `data.fieldGroups` is empty,   `pdf_url` is `null`, and Check Cherry never sees the answers. Open   `external_url` rather than trying to render the questions. `provider` names   the third party that created it, when one did.\n\n**Visibility** follows the authenticated user's role and the per-questionnaire `allow_staff_view`, `allow_customer_view`, `allow_staff_edit`, and `allow_customer_edit` flags. `show_before_or_after` further limits a questionnaire to before or after the booking date, so a questionnaire that exists may still be absent from the list at a given moment.\n\n**Marking one complete** locks it against further customer edits and fires the business's \"Questionnaire Submitted\" automated messages and staff push notifications. For an external questionnaire this is the only completion signal Check Cherry can get, so an integration that hosts the form should call it once the guest has finished.\n\nChanging a questionnaire's permission settings requires the \"Manage business settings\" permission, which integration keys cannot hold — those changes are made in the Check Cherry admin UI.\n\n## The shape of a questionnaire\n\nTwo objects do the work.\n\n**`data`** holds the structure: the tabs, the questions, the explainer text, and everything else that gets rendered. Every questionnaire carries its own full copy of that structure, which is why template edits do not flow through, and why one booking's questionnaire can be reworded without touching anyone else's.\n\n**`values`** holds the answers, each one paired with the question it belongs to.\n\n### Inside `data`\n\n`data.fieldGroups` is the list of tabs. **A field group is a tab**: it is what the business adds with \"Add Tab\" when building the questionnaire, and what the customer clicks through when filling it in. A questionnaire can have a single tab or many.\n\nEach tab has a `name`, the label shown on the tab itself, and `fields`, the things on that tab in the order they appear.\n\nNot every field asks a question. Headers, explainer text, images and separators are fields too: they exist to be rendered and they store no answer. A field's `type` tells you which kind you are looking at, and the table below marks the ones that hold nothing.\n\n### Inside `values`\n\nAnswers are keyed by the `uuid` of the question they answer:\n\n```json\n{\n  \"data\": {\n    \"fieldGroups\": [\n      {\n        \"name\": \"Reception\",\n        \"fields\": [\n          { \"uuid\": \"f47ac10b\", \"type\": \"text_field\", \"name\": \"Colour Scheme\" }\n        ]\n      }\n    ]\n  },\n  \"values\": {\n    \"f47ac10b\": [{ \"text\": \"Navy and gold\" }]\n  }\n}\n```\n\nTwo things about that answer catch people out.\n\n**It is wrapped in an array.** A question can be asked more than once when its `allowMultipleEntries` is set, and each repeat is one entry in that array. A question answered once still has an array of one.\n\n**The inner key is neither the uuid nor the question's name.** It is the *element* the question stores its answer in, and which element that is depends entirely on the question's `type`. A `text_field` stores its answer under `text`, a `dropdown` under `dropdown`, and a signature under three elements at once. Send an answer under any other name and the write is rejected:\n\n| Field type | Answer stored under |\n| --- | --- |\n| `header` | _nothing; it only displays something_ |\n| `subheader` | _nothing; it only displays something_ |\n| `separator` | _nothing; it only displays something_ |\n| `plain_text` | _nothing; it only displays something_ |\n| `rich_text` | _nothing; it only displays something_ |\n| `static_image` | _nothing; it only displays something_ |\n| `text_field` | `text` |\n| `double_text_field` | `text`, `text2` |\n| `triple_text_field` | `text`, `text2`, `text3` |\n| `quadruple_text_field` | `text`, `text2`, `text3`, `text4` |\n| `text_box` | `text` |\n| `dropdown` | `dropdown` |\n| `radio_group` | `radio` |\n| `checkbox` | `checkbox` |\n| `checkbox_group` | `checkbox` |\n| `date_field` | `text` |\n| `time_field` | `text` |\n| `color_picker_field` | `text` |\n| `file_uploader_field` | `file` |\n| `image_uploader_field` | `file` |\n| `e_sign_field` | `signer`, `timestamp`, `ip` |\n| `song` | `songName`, `songArtistName`, `songAlbumName`, `songId`, `songProvider`, `spotifyUrl`, `appleMusicUrl`, `youtubeUrl`, `soundCloudUrl`, `songAlbumUrl`, `songPreviewUrl`, `songDurationSeconds`, `songSuggestionListId`, `publicNotes`, `selectionNotes` |\n| `song_list` | `songName`, `songArtistName`, `songAlbumName`, `songId`, `songProvider`, `spotifyUrl`, `appleMusicUrl`, `youtubeUrl`, `soundCloudUrl`, `songAlbumUrl`, `songPreviewUrl`, `songDurationSeconds`, `songSuggestionListId`, `publicNotes`, `selectionNotes` |\n| `spotify_playlist` | `spotify` |\n| `apple_music_playlist` | `appleMusic` |\n| `youtube_music_playlist` | `youtubeMusic` |\n| `music_playlist` | `musicPlaylist` |\n\nA question with `timelineEnabled` also carries a time, under an element decided by `timelineSettings.timelineMode`:\n\n| `timelineMode` | Also stores |\n| --- | --- |\n| `length` | `timelineLength` |\n| `start_time` | `timelineStartsAt` |\n| `start_and_end_time` | `timelineStartsAt`, `timelineEndsAt` |\n\n`null` clears an answer and is accepted anywhere. A question whose `type` is not in the table above is one this documentation predates; read its answers defensively and leave them alone.\n\n### Song questions and suggestion lists\n\nA `song` or `song_list` question usually draws from a **suggestion list** — the set of songs the business is willing to play. The question names one with `suggestionListId`; `GET /api/v1/suggestion_lists/{id}` returns the songs on it, and `GET /api/v1/suggestion_lists` lists what the business has. A question with no `suggestionListId` takes any song the customer names.\n\n`allowCustomSongEntry` decides whether an answer may go outside the list. When it is false, the answer has to be one of the list's songs.\n\nTwo names one word apart do different jobs, and getting them the wrong way round is the usual mistake:\n\n- **`suggestionListId`** sits on the *field*, in `data.fieldGroups[].fields[]`. It is   the list the question draws from.\n- **`songSuggestionListId`** sits on the *answer*, in `values`. It records which list   the chosen song came from.\n\nWrite both the song's details and `songSuggestionListId` when recording a choice, so the answer can be traced back to the list it came from.\n"},{"name":"Checklists","description":"Checklists organize tasks and reminders for a business. The Checklists API covers three related resources:\n\n**Checklists** are the containers. Each one is attached to a single record (the \"checkable\") that determines its scope:\n\n- **Event checklists** are tied to a confirmed booking or proposal and   usually capture the work surrounding that one event.\n- **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.\n- **Franchise checklists** (the \"Shared Checklist\") are scoped to the   franchise and shared across the team.\n\n**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.\n\n**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.\n\n**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.\n"},{"name":"Payments","description":"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.\n\nUse the Payments API to list payments across all events, look up individual payment records, and filter by event or date range.\n"},{"name":"Reporting","description":"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.\n\nAll 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.\n"},{"name":"Design Templates","description":"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.\n"},{"name":"Template Selections","description":"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.\n"}],"components":{"securitySchemes":{"integration_key":{"type":"apiKey","name":"Api-Key","in":"header","description":"Your Integration Key from Check Cherry (ik_ prefix)"}},"schemas":{"QuestionnaireData":{"type":"object","description":"A questionnaire's questions. Empty for an external questionnaire, whose questions live on another site.","properties":{"title":{"type":"string","description":"The questionnaire's name."},"fieldGroups":{"type":"array","description":"The tabs, in the order the customer moves through them.","items":{"$ref":"#/components/schemas/QuestionnaireFieldGroup"}}}},"QuestionnaireFieldGroup":{"type":"object","description":"One tab of a questionnaire. The builder calls these tabs; the JSON calls them field groups.","properties":{"name":{"type":"string","description":"The label shown on the tab."},"fields":{"type":"array","description":"The questions on this tab, in order.","items":{"$ref":"#/components/schemas/QuestionnaireField"}}}},"QuestionnaireField":{"type":"object","description":"One question. Which properties are meaningful depends on `type`.","required":["uuid","type"],"properties":{"uuid":{"description":"Identifies the field. Answers in `values` are keyed by this. Older questionnaires store it as a number rather than a string.","oneOf":[{"type":"string"},{"type":"integer"}]},"type":{"type":"string","enum":["header","subheader","separator","plain_text","rich_text","static_image","text_field","double_text_field","triple_text_field","quadruple_text_field","text_box","dropdown","radio_group","checkbox","checkbox_group","date_field","time_field","color_picker_field","file_uploader_field","image_uploader_field","e_sign_field","song","song_list","spotify_playlist","apple_music_playlist","youtube_music_playlist","music_playlist"],"description":"Decides how the question is shown and which element its answer is stored under. See the Questionnaires section for the full table."},"name":{"type":"string","nullable":true,"description":"The question as shown to the person answering."},"hint":{"type":"string","nullable":true,"description":"Help text shown with the question."},"placeholder":{"type":"string","nullable":true,"description":"Shown in the empty input. Multi-part text fields also use placeholder2, placeholder3 and placeholder4 for their later parts."},"label":{"type":"string","nullable":true,"description":"The wording beside a single checkbox."},"required":{"type":"boolean","description":"Whether an answer is needed before the questionnaire can be submitted."},"values":{"type":"array","items":{"type":"string"},"description":"The options offered by a dropdown, radio group or checkbox group. Not to be confused with the questionnaire-level `values`, which holds answers."},"content":{"type":"string","nullable":true,"description":"The text shown by a plain_text or rich_text field. rich_text holds HTML."},"imageUrl":{"type":"string","nullable":true,"description":"The image shown by a static_image field."},"allowMultipleEntries":{"type":"boolean","description":"Whether the question can be answered more than once. Each repeat is one entry in the array under this field in `values`."},"maximumEntries":{"type":"integer","nullable":true,"description":"How many repeats are allowed, when there is a limit."},"suggestionListId":{"type":"integer","nullable":true,"description":"On a `song` or `song_list` question, the suggestion list the answer is picked from. Fetch `GET /api/v1/suggestion_lists/{id}` to see the songs on offer. Not to be confused with `songSuggestionListId` in `values`, which records the list a chosen song actually came from. This one is the question; that one is the answer."},"allowCustomSongEntry":{"type":"boolean","description":"On a `song` or `song_list` question with a `suggestionListId`, whether an answer may name a song that is not on the list. With no `suggestionListId` every answer is a custom one."},"conditional":{"type":"boolean","description":"Whether the question is only shown when `conditions` are met."},"conditions":{"type":"array","description":"Evaluated together; all must hold for the question to be shown.","items":{"type":"object","properties":{"conditionalFieldUuid":{"type":"string","description":"The field being tested. The literal `_package_matcher` tests the booking rather than another answer."},"conditionalMatcher":{"type":"string","description":"How to compare, for example `equals` or `is_not_empty`. A blank matcher means the condition was never finished, and the question stays hidden."},"conditionalText":{"type":"string","nullable":true,"description":"What to compare against, for matchers that take a value."}}}},"timelineEnabled":{"type":"boolean","description":"Whether the question also carries a time on the event timeline."},"timelineSettings":{"type":"object","description":"Only meaningful when `timelineEnabled` is true.","properties":{"timelineMode":{"type":"string","enum":["length","start_time","start_and_end_time"],"description":"Which timeline elements the answer carries. A blank mode carries none."}}}}},"QuestionnaireAnswers":{"type":"object","description":"Answers, keyed by the field's `uuid` from `data.fieldGroups`. Each key holds an array with\none entry per repeat of that question, and each entry is an object keyed by element name.\nWhich element names a question uses is decided by its `type`; see the Questionnaires section\nfor the table. `null` clears an answer and is accepted for any element.\n","additionalProperties":{"type":"array","items":{"type":"object","additionalProperties":true}},"example":{"f47ac10b":[{"text":"Navy and gold"}],"9c8b7a65":[{"dropdown":"Beef"}],"3e2d1c0b":[{"checkbox":["Napkins","Chargers"]}],"7a6b5c4d":[{"songName":"Uptown Funk","songArtistName":"Bruno Mars","selectionNotes":"First dance"},{"songName":"September","songArtistName":"Earth, Wind & Fire","selectionNotes":null}]}},"SuggestionListItems":{"type":"array","description":"The songs on a suggestion list, in the order the business arranged them.","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifies the song within this list. Written to an answer as `songId`."},"name":{"type":"string","nullable":true,"description":"The song title."},"artistName":{"type":"string","nullable":true,"description":"The performing artist."},"albumName":{"type":"string","nullable":true,"description":"The album the song is from."},"songNotes":{"type":"string","nullable":true,"description":"The business's own note about the song, shown while choosing. It is part of the list, never part of an answer — a customer's note about their choice is `selectionNotes` in `values`."},"spotifyUrl":{"type":"string","nullable":true,"description":"Link to the song on Spotify."},"youtubeUrl":{"type":"string","nullable":true,"description":"Link to the song on YouTube."},"appleMusicUrl":{"type":"string","nullable":true,"description":"Link to the song on Apple Music."},"soundCloudUrl":{"type":"string","nullable":true,"description":"Link to the song on SoundCloud."}}}}}}}