A read/write REST API over one event's programme. Machine-readable spec: /api/v1/openapi.json.
Create a token in Settings → API tokens, then send it as a bearer token. Tokens are scoped to a single event.
curl -H "Authorization: Bearer cft_xxx" \ "$APP_URL/api/v1/submissions?status=accepted&limit=25"
Every list endpoint accepts limit, cursor, updated_since and resource-specific filters, and replies with { data, meta: { count, limit, next_cursor } }.
/api/v1/eventsGETThe event this token is scoped to.
/api/v1/submissionsGET · POST · PATCH · DELETEAbstracts and sessions. Filter with ?status= &kind= &track_id= &q=.
/api/v1/submissions/{id}/participantsGETSpeakers on a submission.
/api/v1/submissions/bulk-statusPOSTChange many statuses at once. Accepting runs the full hand-off.
/api/v1/sessionsGET · POSTSubmissions filtered to kind=session.
/api/v1/contactsGET · POSTPeople, org-scoped, matched by email.
/api/v1/contacts/bulk-upsertPOSTUpsert many contacts in one call.
/api/v1/speakersGETThe event roster with speaker status.
/api/v1/participantsGET · POSTSubmission ↔ contact links with roles.
/api/v1/formsGETSubmission forms and their windows.
/api/v1/tracksGET · POSTProgramme tracks.
/api/v1/formatsGET · POSTSession formats and durations.
/api/v1/roomsGET · POSTRooms available for scheduling.
/api/v1/tasksGETThe onboarding task library.
/api/v1/task-assignmentsGET · POSTWho owes what. ?contact_id= filters to one speaker.
/api/v1/task-assignments/bulkPOSTAssign many tasks in one call.
/api/v1/evaluation-plansGETReview plans and rounds.
/api/v1/reviewsGETAggregate scores per submission.
/api/v1/uploadsGETEvery uploaded deliverable with metadata.
/api/v1/emailsGETThe outbox.
/api/v1/public/sessionsGETNo token needed. Approved, accepted, published sessions.
/api/v1/public/speakersGETNo token needed. Public speaker list.
Register an endpoint in Settings → Webhooks to receive submission.created, submission.status_changed, task.completed and session.scheduled as they happen.
POST https://your-app.example.com/hooks
X-Conferencer-Event: submission.status_changed
X-Conferencer-Signature: sha256=<hmac of the raw body with your endpoint secret>
{"type":"submission.status_changed","event_id":"…","created_at":"…",
"data":{"id":"…","title":"…","from":"pending","to":"accepted"}}Deliveries time out after 5 seconds and never block the action that triggered them.
Every embed also exposes JSON, XML and iCal at /e/:slug/embed/:token.json, ?format=xml and .ics. Generate one in Site & embeds.