chautauqua

All endpoints below are namespaced under /api/v1. This page is public and requires no login.

Two ways to authenticate against the API:

Errors (any non-2xx response) are shaped as:

{ "error": { "code": "invalid", "message": "...", "fields": { "name": "required" } } }

List endpoints are shaped as:

{ "items": [ ... ], "total": 42, "page": 1, "perPage": 20 }

Cookie-authenticated JSON mutations (POST/PATCH/PUT/DELETE) must include the header x-chq-csrf: 1. This is a same-origin fetch signal, not a secret token. Requests authenticated with a Bearer chq_… token are exempt from this check.

MethodPathRole
GET/api/v1/eventsorganizer
POST/api/v1/eventsorganizer
GET/api/v1/events/:eventIdorganizer
PATCH/api/v1/events/:eventIdorganizer
GET/api/v1/events/:eventId/tracksorganizer
POST/api/v1/events/:eventId/tracksorganizer
PATCH/api/v1/tracks/:trackIdorganizer
DELETE/api/v1/tracks/:trackIdorganizer
GET/api/v1/events/:eventId/roomsorganizer
POST/api/v1/events/:eventId/roomsorganizer
PATCH/api/v1/rooms/:roomIdorganizer
DELETE/api/v1/rooms/:roomIdorganizer
GET/api/v1/events/:eventId/overvieworganizer
GET/api/v1/events/:eventId/public-surfacesorganizer (per-surface published counts, DEC-767)
MethodPathRole
GET/api/v1/events/:eventId/portal-settingsorganizer
PUT/api/v1/events/:eventId/portal-settingsorganizer
GET/api/v1/events/:eventId/resourcesorganizer
POST/api/v1/events/:eventId/resourcesorganizer (JSON -> wiki, multipart -> file)
PATCH/api/v1/resources/:resourceIdorganizer
DELETE/api/v1/resources/:resourceIdorganizer
MethodPathRole
GET/api/v1/events/:eventId/formsorganizer
PATCH/api/v1/forms/:formIdorganizer
POST/api/v1/forms/:formId/fieldsorganizer
PATCH/api/v1/fields/:fieldIdorganizer
DELETE/api/v1/fields/:fieldIdorganizer (409 if dependent rules/answers exist; ?cascade=1 to confirm)
POST/api/v1/forms/:formId/fields/reorderorganizer
MethodPathRole
GET/api/v1/events/:eventId/submissionsorganizer
GET/api/v1/submissions/:idorganizer
PATCH/api/v1/submissions/:idorganizer (edit title/description/trackIds)
POST/api/v1/events/:eventId/submissionsorganizer
POST/api/v1/submissions/:id/cloneorganizer
POST/api/v1/events/:eventId/submissions/statusorganizer (bulk status change)
GET/api/v1/events/:eventId/submissions/delete-planorganizer (blast-radius preview for the delete confirmation page; DEC-921)
POST/api/v1/events/:eventId/submissions/deleteorganizer (guarded cascade delete; DEC-886, refuses any id with a submitted evaluation)
POST/api/v1/submissions/:id/participantsorganizer (invite co-presenter, invite_status='invited')
PATCH/api/v1/submissions/:id/participants/:participantIdorganizer (toggle visible, set inviteStatus)
DELETE/api/v1/submissions/:id/participants/:participantIdorganizer (remove a co-presenter; the lead participant cannot be removed)
GET/api/v1/submissions/:id/revisionsorganizer
POST/api/v1/submissions/:id/revisions/:revisionId/restoreorganizer
GET/api/v1/submissions/:id/historyorganizer
MethodPathRole
GET/api/v1/pipelineorganizer
POST/api/v1/pipelineorganizer
GET/api/v1/pipeline/:idorganizer
PATCH/api/v1/pipeline/:idorganizer
POST/api/v1/pipeline/:id/notesorganizer
MethodPathRole
GET/api/v1/events/:eventId/plansorganizer
POST/api/v1/events/:eventId/plansorganizer
GET/api/v1/plans/:idorganizer
PATCH/api/v1/plans/:idorganizer
DELETE/api/v1/plans/:idorganizer
GET/api/v1/plans/:id/delete-previeworganizer (DEC-929: names what the DELETE below destroys)
POST/api/v1/plans/:id/advance-roundorganizer
POST/api/v1/plans/:id/wavesorganizer
POST/api/v1/plans/:id/reviewersorganizer
GET/api/v1/plans/:id/reviewersorganizer
DELETE/api/v1/plans/:id/reviewers/:reviewerIdorganizer
GET/api/v1/plans/:id/scope-previeworganizer
GET/api/v1/plans/:id/progressorganizer
GET/api/v1/plans/:id/resultsorganizer
POST/api/v1/plans/:id/remindorganizer
GET/api/v1/review/plansreviewer
GET/api/v1/review/plans/:idreviewer (DEC-819: the plan-scoped queue's own name, same assignment scoping as its /queue)
GET/api/v1/review/plans/:id/queuereviewer
GET/api/v1/review/submissions/:idreviewer
GET/api/v1/submissions/:id/evaluationsorganizer (DEC-596: every evaluation of one submission, across plans; DEC-736: reviewerName always populated; DEC-723: each item carries its own round's criteria + weighted score)
PUT/api/v1/review/plans/:planId/evaluations/:submissionIdreviewer
POST/api/v1/review/plans/:planId/recusals/:submissionIdreviewer
DELETE/api/v1/review/plans/:planId/recusals/:submissionIdreviewer
GET/api/v1/plans/:id/assignments/distribute/previeworganizer (DEC-786: pure round-robin preview, writes nothing)
POST/api/v1/plans/:id/assignments/distributeorganizer (DEC-786: applies exactly the previewed pairs)
MethodPathRole
GET/api/v1/usersorganizer
POST/api/v1/usersorganizer
POST/api/v1/users/:id/reset-passwordorganizer
PATCH/api/v1/users/:idorganizer (DEC-778: role change; refuses self and the org's last organizer)
MethodPathRole
GET/api/v1/events/:eventId/onboardingorganizer
GET/api/v1/events/:eventId/speakers/:contactIdorganizer (DEC-930: per-speaker detail read)
POST/api/v1/events/:eventId/tasksorganizer
PATCH/api/v1/tasks/:idorganizer
DELETE/api/v1/tasks/:idorganizer
GET/api/v1/tasks/:id/delete-previeworganizer (DEC-933 amendment: names what the DELETE above destroys)
POST/api/v1/tasks/:id/assignorganizer
GET/api/v1/tasks/:id/rosterorganizer (design pack v12: one task across every speaker who holds it)
POST/api/v1/tasks/:id/unassignorganizer (design pack v12 'not needed': removes the task for those speakers only)
PATCH/api/v1/task-assignments/:idorganizer or assigned speaker
GET/api/v1/task-assignments/:id/responseorganizer (kind='form' only)
POST/api/v1/events/:eventId/onboarding/remindorganizer
POST/api/v1/events/:eventId/onboarding/remind/previeworganizer
MethodPathRole
GET/api/v1/events/:eventId/templatesorganizer
POST/api/v1/events/:eventId/templatesorganizer
PATCH/api/v1/templates/:templateIdorganizer
DELETE/api/v1/templates/:templateIdorganizer
POST/api/v1/events/:eventId/compose/previeworganizer
POST/api/v1/events/:eventId/compose/sendorganizer
POST/api/v1/events/:eventId/portal-invitesorganizer
GET/api/v1/events/:eventId/email-logorganizer
GET/api/v1/events/:eventId/email-log/:emailIdorganizer
GET/api/v1/mail-statusorganizer (DEC-996: provider/configured/fromEmail, never binding internals)
MethodPathRole
GET/api/v1/events/:eventId/agendaorganizer
PUT/api/v1/submissions/:id/slotorganizer
DELETE/api/v1/submissions/:id/slotorganizer
POST/api/v1/events/:eventId/agenda/publishorganizer
POST/api/v1/events/:eventId/agenda/auto-scheduleorganizer
GET/api/v1/events/:eventId/breaksorganizer
POST/api/v1/events/:eventId/breaksorganizer
PATCH/api/v1/breaks/:idorganizer
DELETE/api/v1/breaks/:idorganizer
MethodPathRole
POST/api/v1/submissions/:id/filesorganizer or submission's speaker
GET/api/v1/submissions/:id/filesorganizer or submission's speaker
POST/api/v1/submissions/:id/content-statusorganizer
POST/api/v1/submissions/:id/content-noteorganizer
POST/api/v1/events/:eventId/submissions/content-statusorganizer
GET/api/v1/events/:eventId/filesorganizer
POST/api/v1/events/:eventId/files/archiveorganizer
GET/api/v1/files/:fileId/commentsorganizer or submission's speaker
POST/api/v1/files/:fileId/commentsorganizer or submission's speaker
DELETE/api/v1/files/:fileIdorganizer (any version), or the uploading speaker (own latest version, pending only)
MethodPathRole
GET/api/v1/contactsorganizer
POST/api/v1/contactsorganizer
GET/api/v1/contacts/duplicatesorganizer
POST/api/v1/contacts/duplicates/dismissorganizer (DEC-770 'Not a duplicate' / 'Keep both')
GET/api/v1/contacts/duplicates/checkorganizer (DEC-788 create-time duplicate hint)
GET/api/v1/contacts/statsorganizer
GET/api/v1/contacts/:idorganizer
PATCH/api/v1/contacts/:idorganizer
DELETE/api/v1/contacts/:idorganizer (409 naming dependent counts; merge instead, DEC-758)
POST/api/v1/contacts/:id/headshotorganizer
POST/api/v1/contacts/:id/add-to-eventorganizer
POST/api/v1/contacts/importorganizer
POST/api/v1/events/:eventId/import/sessionboardorganizer
GET/api/v1/contacts/merge/previeworganizer
POST/api/v1/contacts/mergeorganizer
POST/api/v1/contacts/bulk-emailorganizer
POST/api/v1/contacts/bulk-email/previeworganizer
GET/api/v1/segmentsorganizer
POST/api/v1/segmentsorganizer
PATCH/api/v1/segments/:idorganizer
DELETE/api/v1/segments/:idorganizer
MethodPathRole
GET/api/v1/events/:eventId/viewsorganizer
POST/api/v1/events/:eventId/viewsorganizer
DELETE/api/v1/views/:idorganizer
MethodPathRole
GET/api/v1/events/:eventId/embedsorganizer
POST/api/v1/events/:eventId/embedsorganizer
PATCH/api/v1/embeds/:idorganizer
DELETE/api/v1/embeds/:idorganizer
MethodPathRole
GET/api/v1/events/:eventId/export/:kind?format=csv|jsonorganizer (kind: submissions, speakers, evaluations, agenda, email-log, contacts (DEC-597, org-scoped))
GET/api/v1/events/:eventId/exports/showflow.csvorganizer (fixed-column show-flow export, DEC-055)
MethodPathRole
GET/api/v1/tokensorganizer
POST/api/v1/tokensorganizer (cookie session only, DEC-027)
DELETE/api/v1/tokens/:idorganizer
MethodPathRole
GET/api/v1/meany authenticated user

Everything below needs no token and no login — no Authorization header, no session cookie.

MethodPathRole
GET/public event hub — the org's events grouped by open CFP / published programme / past; signed-in users are redirected to /admin or /portal
GET/docs/apithis page
GET/docsuser-facing documentation site — index of how-to articles
GET/docs/:sluguser-facing documentation site — a single article
MethodPathRole
GET/e/:eventSlugpublic (redirects to /e/:eventSlug/sessions)
GET/e/:eventSlug/sessionspublic
GET/e/:eventSlug/speakerspublic
GET/e/:eventSlug/gallerypublic
GET/e/:eventSlug/agendapublic
GET/e/:eventSlug/schedulepublic
GET/e/:eventSlug/sessions/:sessionIdpublic
GET/e/:eventSlug/speakers/:contactIdpublic
GET/e/:eventSlug/programmepublic (print-first one-page programme)
MethodPathRole
GET/e/:eventSlug/agenda.icspublic (whole published agenda)
GET/e/:eventSlug/schedule.icspublic (itinerary; ?ids= selects a subset)
MethodPathRole
GET/embed/:eventSlug/:surfacepublic, chromeless, iframe-safe
GET/embed/:eventSlug/:surface.jsonpublic, chromeless, iframe-safe (JSON feed twin)
GET/embed/:eventSlug/:surface.xmlpublic, chromeless, iframe-safe (XML feed twin)
GET/embed/:eventSlug/sessions/:sessionIdpublic, chromeless, iframe-safe
GET/embed/:eventSlug/speakers/:contactIdpublic, chromeless, iframe-safe
GET/embed/e/:embedIdpublic, saved embed; disabled returns an empty 200
MethodPathRole
GET/submit/:eventSlugpublic