API Changelog
New endpoints and fields as they ship. Read the reference documentation.
August 13, 2026
Bookings and proposals each have their own endpoint
Creating a booking and creating a proposal are separate calls, so each one documents only the fields that apply to it.
POST /api/v1/bookingscreates a confirmed booking, or one awaiting signature withsignature_collected: false.POST /api/v1/proposalscreates a proposal, holding the date withproposal_date_reservedand expiring onproposal_valid_through.
Both take the event's packages as packages, and both need event_create. contact_type is one of New Customer, Existing Customer or None; any other value is now a 422 rather than an event created with no client on it. Existing Customer also needs customer_user_id.
POST /api/v1/events is no longer documented. It keeps working, so existing integrations, including Zapier, are unaffected.
Suggestion lists are readable
The song questions on a questionnaire draw from a suggestion list. You can now read those lists.
GET /api/v1/suggestion_listsreturns every list with itstitleanditem_count.GET /api/v1/suggestion_lists/{id}returns one list's songs, each with artist, album, yoursongNotes, and Spotify, YouTube, Apple Music and SoundCloud links.
Both need planning_read.
Also documented: suggestionListId and allowCustomSongEntry on questionnaire fields. On a field, suggestionListId is the list it draws from; in values, songSuggestionListId is where the chosen song came from.
August 11, 2026
Questionnaires
A questionnaire collects what a business needs once a booking is secured: timelines, song requests, setup notes, signatures. The whole surface is now documented.
/api/v1/questionnairescovers the lifecycle: list and read them, attach one from a template, write answers, collect a signature, mark complete or incomplete, reset, delete./api/v1/questionnaire_templateslists and reads the templates you attach from, and needsplanning_read.POST /api/v1/questionnaires/create_externalattaches a questionnaire hosted on another site. Readkindbefore rendering one: it carries anexternal_urland no questions, and you mark it complete yourself.
data holds the questions and values holds the answers, keyed by question uuid. Both are schemas, with a table naming every field type and the element its answer is stored under. Three things to know before writing answers:
- Answers merge by uuid. The array you send under a uuid replaces that question's answers whole,
[]clears one, andreplace: truereplaces the entire blob. valuesis required, and an answer carrying a type or element name the question does not declare is a 422.- A field group is a tab, and headers, explainer text, images and separators are fields too, so not every field takes an answer.