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/bookings creates a confirmed booking, or one awaiting signature with signature_collected: false.
  • POST /api/v1/proposals creates a proposal, holding the date with proposal_date_reserved and expiring on proposal_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_lists returns every list with its title and item_count.
  • GET /api/v1/suggestion_lists/{id} returns one list's songs, each with artist, album, your songNotes, 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/questionnaires covers 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_templates lists and reads the templates you attach from, and needs planning_read.
  • POST /api/v1/questionnaires/create_external attaches a questionnaire hosted on another site. Read kind before rendering one: it carries an external_url and 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, and replace: true replaces the entire blob.
  • values is 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.