API reference
Call for speakers
Proposals sent to the call for speakers.
List proposals
GET/events/{eventId}/cfp/submissions
Lists proposals sent to the call for speakers, oldest change first, with their status and whether the speakers confirmed. Speakers' names need people:read; reviews stay in the workspace.
- Scopes
- cfp:read
- Module
cfpRefused with moduleOff while the event's organiser has it switched off.
Parameters
path
eventIdstring (uuid)requiredThe event's id.
query
cursorstringWhere the page starts: nextCursor from the page before, exactly as it was returned. Leave out for the first page.
limitinteger (int32)How many on a page, up to 500.
Default:
100updatedSincestring (date-time)Only what changed at or after this moment, in UTC unless it says otherwise. Pass the newest updatedUtc your last sync saw.
statusstringOnly proposals with this status.
One of:
draft,submitted,shortlisted,accepted,rejected,waitlisted,withdrawn
Answers
- 200 A page of proposals. CfpSubmissionList
Fields
dataCfpSubmission[]The items of this page.
Show the fields
submissionIdstring (uuid)The proposal's id.
eventIdstring (uuid)The event's id.
titlestringIts title.
abstractstringIts abstract.
kindstringTalk, workshop, panel and so on.
trackIdstring (uuid) or nullThe track it is for.
minutesinteger (int32)How long.
levelstring or nullBeginner, intermediate or advanced.
languagestringThe language it is in.
statusstringSubmitted, shortlisted, accepted, rejected, waitlisted or withdrawn.
decidedUtcstring (date-time) or nullWhen it was decided, in UTC.
notifiedstring or nullThe decision the speaker was sent.
confirmationstring or nullWhether the speakers confirmed an acceptance: pending, confirmed, declined or expired.
sessionIdstring (uuid) or nullThe session it became.
speakersobject[] or nullIts speakers. Null without people:read.
Show the fields
namestring or nullTheir name.
emailstring or nullTheir address.
companystring or nullTheir company.
submitterEmailstring or nullWho sent it. Null without people:read.
submittedUtcstring (date-time)When it was sent, in UTC.
updatedUtcstring (date-time)When it last changed, in UTC.
personalDatastringWhether the personal fields are here: included, withheld (the key lacks people:read) or erased (the person deleted their data).
One of:
included,withheld,erased
nextCursorstring or nullThe cursor for the next page; null on the last page. Pass it as cursor, with the same filters.
hasMorebooleanWhether there is another page.
- 400 invalidCursor, invalidUpdatedSince, invalidRequest.
- 401 invalidKey, keyExpired, keyRevoked.
- 403 missingScope.
- 404 eventNotFound.
- 409 moduleOff.
- 429 rateLimited.
Refusals
invalidKey keyExpired keyRevoked rateLimited missingScope moduleOff eventNotFound invalidCursor invalidUpdatedSince invalidRequest
Request
curl "https://attendbeacon.com/api/v1/events/b3ac0000-0000-4000-8000-000000000001/cfp/submissions?limit=2" \
-H "Authorization: Bearer $ATTENDBEACON_KEY"const response = await fetch("https://attendbeacon.com/api/v1/events/b3ac0000-0000-4000-8000-000000000001/cfp/submissions?limit=2", {
headers: {
Authorization: `Bearer ${process.env.ATTENDBEACON_KEY}`
}
});
if (!response.ok) throw new Error((await response.json()).detail);
const data = await response.json();using System.Net.Http.Headers;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Environment.GetEnvironmentVariable("ATTENDBEACON_KEY"));
using var request = new HttpRequestMessage(HttpMethod.Get, "https://attendbeacon.com/api/v1/events/b3ac0000-0000-4000-8000-000000000001/cfp/submissions?limit=2");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();import os
import requests
response = requests.get(
"https://attendbeacon.com/api/v1/events/b3ac0000-0000-4000-8000-000000000001/cfp/submissions", params={"limit": 2},
headers={
"Authorization": f"Bearer {os.environ['ATTENDBEACON_KEY']}"
}
)
response.raise_for_status()
data = response.json()$headers = @{
Authorization = "Bearer $env:ATTENDBEACON_KEY"
}
$data = Invoke-RestMethod -Method Get -Uri "https://attendbeacon.com/api/v1/events/b3ac0000-0000-4000-8000-000000000001/cfp/submissions?limit=2" -Headers $headers200 Example answer
{
"data": [
{
"submissionId": "b3ac0015-0000-4000-8000-000000000008",
"eventId": "b3ac0000-0000-4000-8000-000000000001",
"title": "Kubernetes bills, explained to finance",
"abstract": "Our cloud bill doubled in a quarter. How we explained it to the finance team with three charts, and what we switched off the week after.",
"kind": "talk",
"trackId": "b3ac0002-0000-4000-8000-000000000000",
"minutes": 25,
"level": "intermediate",
"language": "en",
"status": "accepted",
"decidedUtc": "2026-10-05T21:40:47.963Z",
"notified": "accepted",
"confirmation": "pending",
"sessionId": null,
"speakers": [
{
"name": "Jonas Peeters",
"email": "jonas.peeters@example.com",
"company": "Fabrikam"
},
{
"name": "Fleur de Vries",
"email": "fleur.devries@example.com",
"company": "Fabrikam"
}
],
"submitterEmail": "jonas.peeters@example.com",
"submittedUtc": "2026-09-27T21:40:47.963Z",
"updatedUtc": "2026-09-27T21:40:47.963Z",
"personalData": "included"
},
{
"submissionId": "b3ac0015-0000-4000-8000-000000000009",
"eventId": "b3ac0000-0000-4000-8000-000000000001",
"title": "Live-coding a design system in ten minutes",
"abstract": "From an empty file to buttons, colours and type that hold together, typed live, with the audience choosing the brand.",
"kind": "talk",
"trackId": "b3ac0002-0000-4000-8000-000000000001",
"minutes": 10,
"level": "beginner",
"language": "en",
"status": "accepted",
"decidedUtc": "2026-10-05T21:40:47.963Z",
"notified": "accepted",
"confirmation": "declined",
"sessionId": null,
"speakers": [
{
"name": "Marit Koster",
"email": "marit.koster@example.com",
"company": "Proseware"
}
],
"submitterEmail": "marit.koster@example.com",
"submittedUtc": "2026-09-28T21:40:47.963Z",
"updatedUtc": "2026-09-28T21:40:47.963Z",
"personalData": "included"
}
],
"nextCursor": "YzE6MDYzOTI2MjI4NDQ3OTYzMDAwMHxiM2FjMDAxNTAwMDA0MDAwODAwMDAwMDAwMDAwMDAwOQ",
"hasMore": true
}400 invalidCursor, invalidUpdatedSince, invalidRequest.
{
"type": "https://attendbeacon.com/developers/errors#invalidCursor",
"title": "The cursor is not valid",
"status": 400,
"detail": "Pass nextCursor exactly as a list returned it, with the same filters.",
"instance": "/api/v1/events/b3ac0000-0000-4000-8000-000000000001/cfp/submissions",
"code": "invalidCursor",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",
"error": "Pass nextCursor exactly as a list returned it, with the same filters."
}The guides and this site are in your language. The API reference's own descriptions are in English, as the API itself speaks.