Docs API reference
Sessions
A session is one dated presenter slot in a room: a remote speaker joins through a personal link and appears on every screen of the room (or the screens chosen, or one stage). Plan sessions from your agenda tool, hand out presenter links and schedule rehearsals. Going live and finishing stay with the operator in the app.
Every call needs an API key in the Authorization header. New to the API? Start with
the API overview.
- GET List sessions /sessions
- GET Get a session /sessions/{id}
- PATCH Update a session /sessions/{id}
- GET Get a session by your ref /sessions/by-ref/{ref}
- PUT Create or update a session by your ref /sessions/by-ref/{ref}
- POST Create a presenter link /sessions/{id}/invites
- POST Schedule a rehearsal /sessions/{id}/rehearsals
- GET Get a session’s feedback /sessions/{id}/feedback
- GET Get an event’s feedback /shows/{id}/feedback
- GET Get a feedback form /feedback/form
- PUT Set a feedback form /feedback/form
- DELETE Drop a feedback form /feedback/form
List sessions
/sessions sessions:readSorted by start time. The list shows presenter_ids; get one session for its presenters' link state.
Parameters
fromstring queryOnly sessions starting at or after this time (epoch ms or ISO 8601).
tostring queryOnly sessions starting before this time (epoch ms or ISO 8601).
stage_idstring queryOnly sessions that drive this stage: their first screen or any screen of their room they play on (
stage_ids).statusstring queryOne status, or several separated by commas, e.g.
scheduled,backstage,ready.refstring queryOnly the session with this ref.
limitinteger queryPage size, 1–200.
1–200. Default
50cursorstring queryThe
next_cursorof the previous page.
Responses
- 200 A page of sessions.
- 400 The request is invalid —
details.fieldnames the field when there is one. - 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
Response fields (200)
itemsobject[] required31 fields in
itemsidstring required read-onlyrefstring or nullYour own id for the session. Unique in the workspace.
Pattern
^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$titlestring requiredUp to 200 characters
statusstring required read-onlyscheduled→backstage(a presenter joined) →ready→live→finished, orcancelled. Changed by presenters and operators, not through the API.One of
scheduled,backstage,ready,live,finished,cancelledroom_idstring or nullThe room the session happens in. A session in a room drives every screen of the room (the front and the side screens show the same), unless
screen_idsnarrows it.nullfor a session placed on a stage in no room.screen_idsstring[] or nullThe screens of the room it was narrowed to, as chosen.
null= every screen of the room, including screens added to the room later.stage_idsstring[] required read-onlyEvery stage (screen) the session drives right now, from its room and
screen_ids. Follows the room when screens join or leave it.stage_idstring requiredThe first of
stage_ids— the one stage, for clients written before rooms. A session on several screens has more instage_ids.scene_idstring or nullThe scene that frames the presenter on screen.
intro_scene_idstring or nullThe speaker intro: a scene played once when the session goes live, before the presenter scene.
show_idstring or nullThe show this session belongs to, if any.
starts_atinteger requiredEpoch ms.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger read-onlyPlanned end:
starts_at+duration_min. Epoch ms.ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
duration_mininteger required1–1440
join_opens_minintegerHow many minutes before the start presenters can join backstage.
0–1440
go_livestring requiredWHEN the session is due:
on_readyas soon as a presenter is ready,at_startatstarts_atonce someone is ready.One of
on_ready,at_startgo_live_bystring requiredWHO commits it once due:
automatic— the stage switches by itself;operator— the desk is asked and the stage waits for Take. A live show’s controller is asked either way.One of
automatic,operatorafter_finishstring requiredWhat the stage does after the session: advance the show, return to its schedule, or play
after_source.One of
next_cue,release,sourceafter_sourceobject or any or nullpresenter_idsstring[] requiredIn slot order.
ready_presenter_idsstring[] read-onlylive_presenter_idstring or null read-onlyrehearsalsobject[] required read-only6 fields in
rehearsalsidstring requiredstarts_atinteger requiredEpoch ms. Presenter links open 15 minutes earlier.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger requiredEpoch ms.
ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
notestringUp to 200 characters
went_live_atinteger or nullEpoch ms, once live.
went_live_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
finished_atinteger or nullEpoch ms, once finished.
finished_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
created_atinteger read-onlyupdated_atinteger read-only
next_cursorstring or null requiredPass as
cursorfor the next page;nullon the last page.
curl "https://www.wunderframe.com/api/v1/sessions?limit=50" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"items": [
{
"id": "Zp4dW1qR8sN2mK7vB3xYc",
"ref": "agenda/b-14",
"title": "The AI-Native Startup",
"status": "scheduled",
"room_id": "room_hallB",
"screen_ids": null,
"stage_ids": [
"st_hallB",
"st_hallB_side"
],
"stage_id": "st_hallB",
"scene_id": "sc_presenter",
"intro_scene_id": "sc_speaker_intro",
"show_id": null,
"starts_at": 1791468000000,
"starts_at_iso": "2026-10-08T14:00:00.000Z",
"ends_at": 1791469800000,
"ends_at_iso": "2026-10-08T14:30:00.000Z",
"duration_min": 30,
"join_opens_min": 30,
"go_live": "on_ready",
"go_live_by": "automatic",
"after_finish": "next_cue",
"after_source": null,
"presenter_ids": [
"wkFRBzMq6POZ_qYJHvgQf"
],
"ready_presenter_ids": [],
"live_presenter_id": null,
"rehearsals": [],
"went_live_at": null,
"went_live_at_iso": null,
"finished_at": null,
"finished_at_iso": null,
"created_at": 1789372800000,
"updated_at": 1789372800000
}
],
"next_cursor": null
}Error example
{
"error": {
"code": "invalid",
"message": "The request is invalid — `details.field` names the field when there is one."
}
}Get a session
/sessions/{id} sessions:readWith its presenters and whether each has a working link.
Parameters
idstring required pathThe session id.
Responses
- 200 The session.
- 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
idstring required read-onlyrefstring or nullYour own id for the session. Unique in the workspace.
Pattern
^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$titlestring requiredUp to 200 characters
statusstring required read-onlyscheduled→backstage(a presenter joined) →ready→live→finished, orcancelled. Changed by presenters and operators, not through the API.One of
scheduled,backstage,ready,live,finished,cancelledroom_idstring or nullThe room the session happens in. A session in a room drives every screen of the room (the front and the side screens show the same), unless
screen_idsnarrows it.nullfor a session placed on a stage in no room.screen_idsstring[] or nullThe screens of the room it was narrowed to, as chosen.
null= every screen of the room, including screens added to the room later.stage_idsstring[] required read-onlyEvery stage (screen) the session drives right now, from its room and
screen_ids. Follows the room when screens join or leave it.stage_idstring requiredThe first of
stage_ids— the one stage, for clients written before rooms. A session on several screens has more instage_ids.scene_idstring or nullThe scene that frames the presenter on screen.
intro_scene_idstring or nullThe speaker intro: a scene played once when the session goes live, before the presenter scene.
show_idstring or nullThe show this session belongs to, if any.
starts_atinteger requiredEpoch ms.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger read-onlyPlanned end:
starts_at+duration_min. Epoch ms.ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
duration_mininteger required1–1440
join_opens_minintegerHow many minutes before the start presenters can join backstage.
0–1440
go_livestring requiredWHEN the session is due:
on_readyas soon as a presenter is ready,at_startatstarts_atonce someone is ready.One of
on_ready,at_startgo_live_bystring requiredWHO commits it once due:
automatic— the stage switches by itself;operator— the desk is asked and the stage waits for Take. A live show’s controller is asked either way.One of
automatic,operatorafter_finishstring requiredWhat the stage does after the session: advance the show, return to its schedule, or play
after_source.One of
next_cue,release,sourceafter_sourceobject or any or nullpresenter_idsstring[] requiredIn slot order.
ready_presenter_idsstring[] read-onlylive_presenter_idstring or null read-onlyrehearsalsobject[] required read-only6 fields in
rehearsalsidstring requiredstarts_atinteger requiredEpoch ms. Presenter links open 15 minutes earlier.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger requiredEpoch ms.
ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
notestringUp to 200 characters
went_live_atinteger or nullEpoch ms, once live.
went_live_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
finished_atinteger or nullEpoch ms, once finished.
finished_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
created_atinteger read-onlyupdated_atinteger read-onlypresentersobject[] requiredThe session's presenters in slot order, with the state of their link. Links themselves are never returned here.
4 fields in
presentersidstring requiredrefstring or nullnamestring requiredinviteobject required3 fields in
invitestatusstring requirednone: no link yet.active: a link works.revoked: the link was ended.One of
none,active,revokedlast_seen_atinteger or nullWhen the presenter last opened the link. Epoch ms.
last_seen_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
curl "https://www.wunderframe.com/api/v1/sessions/Zp4dW1qR8sN2mK7vB3xYc" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"id": "Zp4dW1qR8sN2mK7vB3xYc",
"ref": "agenda/b-14",
"title": "The AI-Native Startup",
"status": "scheduled",
"room_id": "room_hallB",
"screen_ids": null,
"stage_ids": [
"st_hallB",
"st_hallB_side"
],
"stage_id": "st_hallB",
"scene_id": "sc_presenter",
"intro_scene_id": "sc_speaker_intro",
"show_id": null,
"starts_at": 1791468000000,
"starts_at_iso": "2026-10-08T14:00:00.000Z",
"ends_at": 1791469800000,
"ends_at_iso": "2026-10-08T14:30:00.000Z",
"duration_min": 30,
"join_opens_min": 30,
"go_live": "on_ready",
"go_live_by": "automatic",
"after_finish": "next_cue",
"after_source": null,
"presenter_ids": [
"wkFRBzMq6POZ_qYJHvgQf"
],
"ready_presenter_ids": [],
"live_presenter_id": null,
"rehearsals": [],
"went_live_at": null,
"went_live_at_iso": null,
"finished_at": null,
"finished_at_iso": null,
"created_at": 1789372800000,
"updated_at": 1789372800000,
"presenters": [
{
"id": "wkFRBzMq6POZ_qYJHvgQf",
"ref": "speakerportal/1234",
"name": "Ada Lovelace",
"invite": {
"status": "active",
"last_seen_at": null,
"last_seen_at_iso": null
}
}
]
}Error example
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
}
}Update a session
/sessions/{id} sessionsOnly the fields you send change. The room and screens cannot change while the session is live (409). Every id you send must exist in the workspace (400, with details.unknown for presenters).
Parameters
idstring required pathThe session id.
Request body required
refstring or nullIgnored by the upsert, which takes the ref from the path.
Pattern
^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$titlestringDefaults to "Untitled session".
Up to 200 characters
room_idstring or nullThe room it happens in: the session drives every screen of the room, the same on each, unless
screen_idsnarrows it. Creating needsroom_idorstage_id. Withstage_idtoo, only that screen of the room. Cannot change while the session is live.screen_idsstring[] or nullOnly these screens (stage ids) of the room;
nullor[]= all of them. Alone, it keeps the session in its room and changes the screens. A screen not in the room is refused (400).Up to 50 items
stage_idstringOne screen: the session drives exactly this stage (in its room, if it has one). Kept for clients written before rooms; send
room_idto drive the whole room. Creating needsroom_idorstage_id. Cannot change while the session is live.scene_idstring or nullintro_scene_idstring or nullA scene played once when the session goes live. Its blanks get the speaker and the session.
show_idstring or nullstarts_atinteger or string (date-time)Required when creating.
duration_minintegerMinutes, 1–1440 (values outside are clamped). Default 30.
join_opens_minintegerMinutes, 0–1440 (clamped). Default 30.
go_livestringDefault
on_ready.One of
on_ready,at_startgo_live_bystringDefault
automatic.One of
automatic,operatorafter_finishstringDefault
release.One of
next_cue,release,sourceafter_sourceobject or any or nullpresenter_idsstring[]Replaces the presenter list, in slot order. A presenter taken off the session loses their link.
Up to 50 items
presenter_refsstring[]The same, by your presenter refs. Send this or
presenter_ids, not both.Up to 50 items
Responses
- 200 Updated.
- 400 The request is invalid —
details.fieldnames the field when there is one. - 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
- 409 Conflicts with the current state.
Response fields (200)
idstring required read-onlyrefstring or nullYour own id for the session. Unique in the workspace.
Pattern
^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$titlestring requiredUp to 200 characters
statusstring required read-onlyscheduled→backstage(a presenter joined) →ready→live→finished, orcancelled. Changed by presenters and operators, not through the API.One of
scheduled,backstage,ready,live,finished,cancelledroom_idstring or nullThe room the session happens in. A session in a room drives every screen of the room (the front and the side screens show the same), unless
screen_idsnarrows it.nullfor a session placed on a stage in no room.screen_idsstring[] or nullThe screens of the room it was narrowed to, as chosen.
null= every screen of the room, including screens added to the room later.stage_idsstring[] required read-onlyEvery stage (screen) the session drives right now, from its room and
screen_ids. Follows the room when screens join or leave it.stage_idstring requiredThe first of
stage_ids— the one stage, for clients written before rooms. A session on several screens has more instage_ids.scene_idstring or nullThe scene that frames the presenter on screen.
intro_scene_idstring or nullThe speaker intro: a scene played once when the session goes live, before the presenter scene.
show_idstring or nullThe show this session belongs to, if any.
starts_atinteger requiredEpoch ms.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger read-onlyPlanned end:
starts_at+duration_min. Epoch ms.ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
duration_mininteger required1–1440
join_opens_minintegerHow many minutes before the start presenters can join backstage.
0–1440
go_livestring requiredWHEN the session is due:
on_readyas soon as a presenter is ready,at_startatstarts_atonce someone is ready.One of
on_ready,at_startgo_live_bystring requiredWHO commits it once due:
automatic— the stage switches by itself;operator— the desk is asked and the stage waits for Take. A live show’s controller is asked either way.One of
automatic,operatorafter_finishstring requiredWhat the stage does after the session: advance the show, return to its schedule, or play
after_source.One of
next_cue,release,sourceafter_sourceobject or any or nullpresenter_idsstring[] requiredIn slot order.
ready_presenter_idsstring[] read-onlylive_presenter_idstring or null read-onlyrehearsalsobject[] required read-only6 fields in
rehearsalsidstring requiredstarts_atinteger requiredEpoch ms. Presenter links open 15 minutes earlier.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger requiredEpoch ms.
ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
notestringUp to 200 characters
went_live_atinteger or nullEpoch ms, once live.
went_live_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
finished_atinteger or nullEpoch ms, once finished.
finished_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
created_atinteger read-onlyupdated_atinteger read-onlypresentersobject[] requiredThe session's presenters in slot order, with the state of their link. Links themselves are never returned here.
4 fields in
presentersidstring requiredrefstring or nullnamestring requiredinviteobject required3 fields in
invitestatusstring requirednone: no link yet.active: a link works.revoked: the link was ended.One of
none,active,revokedlast_seen_atinteger or nullWhen the presenter last opened the link. Epoch ms.
last_seen_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
curl -X PATCH "https://www.wunderframe.com/api/v1/sessions/Zp4dW1qR8sN2mK7vB3xYc" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"starts_at": "2026-10-08T14:15:00Z",
"duration_min": 45
}'{
"id": "Zp4dW1qR8sN2mK7vB3xYc",
"ref": "agenda/b-14",
"title": "The AI-Native Startup",
"status": "scheduled",
"room_id": "room_hallB",
"screen_ids": null,
"stage_ids": [
"st_hallB",
"st_hallB_side"
],
"stage_id": "st_hallB",
"scene_id": "sc_presenter",
"intro_scene_id": "sc_speaker_intro",
"show_id": null,
"starts_at": 1791468000000,
"starts_at_iso": "2026-10-08T14:00:00.000Z",
"ends_at": 1791469800000,
"ends_at_iso": "2026-10-08T14:30:00.000Z",
"duration_min": 30,
"join_opens_min": 30,
"go_live": "on_ready",
"go_live_by": "automatic",
"after_finish": "next_cue",
"after_source": null,
"presenter_ids": [
"wkFRBzMq6POZ_qYJHvgQf"
],
"ready_presenter_ids": [],
"live_presenter_id": null,
"rehearsals": [],
"went_live_at": null,
"went_live_at_iso": null,
"finished_at": null,
"finished_at_iso": null,
"created_at": 1789372800000,
"updated_at": 1789372800000,
"presenters": [
{
"id": "wkFRBzMq6POZ_qYJHvgQf",
"ref": "speakerportal/1234",
"name": "Ada Lovelace",
"invite": {
"status": "active",
"last_seen_at": null,
"last_seen_at_iso": null
}
}
]
}Error example
{
"error": {
"code": "invalid",
"message": "The request is invalid — `details.field` names the field when there is one."
}
}Get a session by your ref
/sessions/by-ref/{ref} sessions:readParameters
refstring required pathYour ref. May contain slashes:
/sessions/by-ref/agenda/b-14.
Responses
- 200 The session.
- 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
idstring required read-onlyrefstring or nullYour own id for the session. Unique in the workspace.
Pattern
^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$titlestring requiredUp to 200 characters
statusstring required read-onlyscheduled→backstage(a presenter joined) →ready→live→finished, orcancelled. Changed by presenters and operators, not through the API.One of
scheduled,backstage,ready,live,finished,cancelledroom_idstring or nullThe room the session happens in. A session in a room drives every screen of the room (the front and the side screens show the same), unless
screen_idsnarrows it.nullfor a session placed on a stage in no room.screen_idsstring[] or nullThe screens of the room it was narrowed to, as chosen.
null= every screen of the room, including screens added to the room later.stage_idsstring[] required read-onlyEvery stage (screen) the session drives right now, from its room and
screen_ids. Follows the room when screens join or leave it.stage_idstring requiredThe first of
stage_ids— the one stage, for clients written before rooms. A session on several screens has more instage_ids.scene_idstring or nullThe scene that frames the presenter on screen.
intro_scene_idstring or nullThe speaker intro: a scene played once when the session goes live, before the presenter scene.
show_idstring or nullThe show this session belongs to, if any.
starts_atinteger requiredEpoch ms.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger read-onlyPlanned end:
starts_at+duration_min. Epoch ms.ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
duration_mininteger required1–1440
join_opens_minintegerHow many minutes before the start presenters can join backstage.
0–1440
go_livestring requiredWHEN the session is due:
on_readyas soon as a presenter is ready,at_startatstarts_atonce someone is ready.One of
on_ready,at_startgo_live_bystring requiredWHO commits it once due:
automatic— the stage switches by itself;operator— the desk is asked and the stage waits for Take. A live show’s controller is asked either way.One of
automatic,operatorafter_finishstring requiredWhat the stage does after the session: advance the show, return to its schedule, or play
after_source.One of
next_cue,release,sourceafter_sourceobject or any or nullpresenter_idsstring[] requiredIn slot order.
ready_presenter_idsstring[] read-onlylive_presenter_idstring or null read-onlyrehearsalsobject[] required read-only6 fields in
rehearsalsidstring requiredstarts_atinteger requiredEpoch ms. Presenter links open 15 minutes earlier.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger requiredEpoch ms.
ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
notestringUp to 200 characters
went_live_atinteger or nullEpoch ms, once live.
went_live_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
finished_atinteger or nullEpoch ms, once finished.
finished_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
created_atinteger read-onlyupdated_atinteger read-onlypresentersobject[] requiredThe session's presenters in slot order, with the state of their link. Links themselves are never returned here.
4 fields in
presentersidstring requiredrefstring or nullnamestring requiredinviteobject required3 fields in
invitestatusstring requirednone: no link yet.active: a link works.revoked: the link was ended.One of
none,active,revokedlast_seen_atinteger or nullWhen the presenter last opened the link. Epoch ms.
last_seen_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
curl "https://www.wunderframe.com/api/v1/sessions/by-ref/agenda/b-14" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"id": "Zp4dW1qR8sN2mK7vB3xYc",
"ref": "agenda/b-14",
"title": "The AI-Native Startup",
"status": "scheduled",
"room_id": "room_hallB",
"screen_ids": null,
"stage_ids": [
"st_hallB",
"st_hallB_side"
],
"stage_id": "st_hallB",
"scene_id": "sc_presenter",
"intro_scene_id": "sc_speaker_intro",
"show_id": null,
"starts_at": 1791468000000,
"starts_at_iso": "2026-10-08T14:00:00.000Z",
"ends_at": 1791469800000,
"ends_at_iso": "2026-10-08T14:30:00.000Z",
"duration_min": 30,
"join_opens_min": 30,
"go_live": "on_ready",
"go_live_by": "automatic",
"after_finish": "next_cue",
"after_source": null,
"presenter_ids": [
"wkFRBzMq6POZ_qYJHvgQf"
],
"ready_presenter_ids": [],
"live_presenter_id": null,
"rehearsals": [],
"went_live_at": null,
"went_live_at_iso": null,
"finished_at": null,
"finished_at_iso": null,
"created_at": 1789372800000,
"updated_at": 1789372800000,
"presenters": [
{
"id": "wkFRBzMq6POZ_qYJHvgQf",
"ref": "speakerportal/1234",
"name": "Ada Lovelace",
"invite": {
"status": "active",
"last_seen_at": null,
"last_seen_at_iso": null
}
}
]
}Error example
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
}
}Create or update a session by your ref
/sessions/by-ref/{ref} sessionsThe sync endpoint. Creates the session when none has this ref (then room_id or stage_id, and starts_at, are required), otherwise updates the fields you send. Safe to repeat. Presenters can be named by your presenter refs.
Parameters
refstring required pathYour ref. May contain slashes.
Request body required
refstring or nullIgnored by the upsert, which takes the ref from the path.
Pattern
^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$titlestringDefaults to "Untitled session".
Up to 200 characters
room_idstring or nullThe room it happens in: the session drives every screen of the room, the same on each, unless
screen_idsnarrows it. Creating needsroom_idorstage_id. Withstage_idtoo, only that screen of the room. Cannot change while the session is live.screen_idsstring[] or nullOnly these screens (stage ids) of the room;
nullor[]= all of them. Alone, it keeps the session in its room and changes the screens. A screen not in the room is refused (400).Up to 50 items
stage_idstringOne screen: the session drives exactly this stage (in its room, if it has one). Kept for clients written before rooms; send
room_idto drive the whole room. Creating needsroom_idorstage_id. Cannot change while the session is live.scene_idstring or nullintro_scene_idstring or nullA scene played once when the session goes live. Its blanks get the speaker and the session.
show_idstring or nullstarts_atinteger or string (date-time)Required when creating.
duration_minintegerMinutes, 1–1440 (values outside are clamped). Default 30.
join_opens_minintegerMinutes, 0–1440 (clamped). Default 30.
go_livestringDefault
on_ready.One of
on_ready,at_startgo_live_bystringDefault
automatic.One of
automatic,operatorafter_finishstringDefault
release.One of
next_cue,release,sourceafter_sourceobject or any or nullpresenter_idsstring[]Replaces the presenter list, in slot order. A presenter taken off the session loses their link.
Up to 50 items
presenter_refsstring[]The same, by your presenter refs. Send this or
presenter_ids, not both.Up to 50 items
Responses
- 200 Updated.
- 201 Created.
- 400 The request is invalid —
details.fieldnames the field when there is one. - 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 409 Conflicts with the current state.
Response fields (200)
idstring required read-onlyrefstring or nullYour own id for the session. Unique in the workspace.
Pattern
^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$titlestring requiredUp to 200 characters
statusstring required read-onlyscheduled→backstage(a presenter joined) →ready→live→finished, orcancelled. Changed by presenters and operators, not through the API.One of
scheduled,backstage,ready,live,finished,cancelledroom_idstring or nullThe room the session happens in. A session in a room drives every screen of the room (the front and the side screens show the same), unless
screen_idsnarrows it.nullfor a session placed on a stage in no room.screen_idsstring[] or nullThe screens of the room it was narrowed to, as chosen.
null= every screen of the room, including screens added to the room later.stage_idsstring[] required read-onlyEvery stage (screen) the session drives right now, from its room and
screen_ids. Follows the room when screens join or leave it.stage_idstring requiredThe first of
stage_ids— the one stage, for clients written before rooms. A session on several screens has more instage_ids.scene_idstring or nullThe scene that frames the presenter on screen.
intro_scene_idstring or nullThe speaker intro: a scene played once when the session goes live, before the presenter scene.
show_idstring or nullThe show this session belongs to, if any.
starts_atinteger requiredEpoch ms.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger read-onlyPlanned end:
starts_at+duration_min. Epoch ms.ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
duration_mininteger required1–1440
join_opens_minintegerHow many minutes before the start presenters can join backstage.
0–1440
go_livestring requiredWHEN the session is due:
on_readyas soon as a presenter is ready,at_startatstarts_atonce someone is ready.One of
on_ready,at_startgo_live_bystring requiredWHO commits it once due:
automatic— the stage switches by itself;operator— the desk is asked and the stage waits for Take. A live show’s controller is asked either way.One of
automatic,operatorafter_finishstring requiredWhat the stage does after the session: advance the show, return to its schedule, or play
after_source.One of
next_cue,release,sourceafter_sourceobject or any or nullpresenter_idsstring[] requiredIn slot order.
ready_presenter_idsstring[] read-onlylive_presenter_idstring or null read-onlyrehearsalsobject[] required read-only6 fields in
rehearsalsidstring requiredstarts_atinteger requiredEpoch ms. Presenter links open 15 minutes earlier.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger requiredEpoch ms.
ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
notestringUp to 200 characters
went_live_atinteger or nullEpoch ms, once live.
went_live_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
finished_atinteger or nullEpoch ms, once finished.
finished_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
created_atinteger read-onlyupdated_atinteger read-onlypresentersobject[] requiredThe session's presenters in slot order, with the state of their link. Links themselves are never returned here.
4 fields in
presentersidstring requiredrefstring or nullnamestring requiredinviteobject required3 fields in
invitestatusstring requirednone: no link yet.active: a link works.revoked: the link was ended.One of
none,active,revokedlast_seen_atinteger or nullWhen the presenter last opened the link. Epoch ms.
last_seen_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
Response fields (201)
idstring required read-onlyrefstring or nullYour own id for the session. Unique in the workspace.
Pattern
^[A-Za-z0-9][A-Za-z0-9._:/-]{0,199}$titlestring requiredUp to 200 characters
statusstring required read-onlyscheduled→backstage(a presenter joined) →ready→live→finished, orcancelled. Changed by presenters and operators, not through the API.One of
scheduled,backstage,ready,live,finished,cancelledroom_idstring or nullThe room the session happens in. A session in a room drives every screen of the room (the front and the side screens show the same), unless
screen_idsnarrows it.nullfor a session placed on a stage in no room.screen_idsstring[] or nullThe screens of the room it was narrowed to, as chosen.
null= every screen of the room, including screens added to the room later.stage_idsstring[] required read-onlyEvery stage (screen) the session drives right now, from its room and
screen_ids. Follows the room when screens join or leave it.stage_idstring requiredThe first of
stage_ids— the one stage, for clients written before rooms. A session on several screens has more instage_ids.scene_idstring or nullThe scene that frames the presenter on screen.
intro_scene_idstring or nullThe speaker intro: a scene played once when the session goes live, before the presenter scene.
show_idstring or nullThe show this session belongs to, if any.
starts_atinteger requiredEpoch ms.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger read-onlyPlanned end:
starts_at+duration_min. Epoch ms.ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
duration_mininteger required1–1440
join_opens_minintegerHow many minutes before the start presenters can join backstage.
0–1440
go_livestring requiredWHEN the session is due:
on_readyas soon as a presenter is ready,at_startatstarts_atonce someone is ready.One of
on_ready,at_startgo_live_bystring requiredWHO commits it once due:
automatic— the stage switches by itself;operator— the desk is asked and the stage waits for Take. A live show’s controller is asked either way.One of
automatic,operatorafter_finishstring requiredWhat the stage does after the session: advance the show, return to its schedule, or play
after_source.One of
next_cue,release,sourceafter_sourceobject or any or nullpresenter_idsstring[] requiredIn slot order.
ready_presenter_idsstring[] read-onlylive_presenter_idstring or null read-onlyrehearsalsobject[] required read-only6 fields in
rehearsalsidstring requiredstarts_atinteger requiredEpoch ms. Presenter links open 15 minutes earlier.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger requiredEpoch ms.
ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
notestringUp to 200 characters
went_live_atinteger or nullEpoch ms, once live.
went_live_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
finished_atinteger or nullEpoch ms, once finished.
finished_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
created_atinteger read-onlyupdated_atinteger read-onlypresentersobject[] requiredThe session's presenters in slot order, with the state of their link. Links themselves are never returned here.
4 fields in
presentersidstring requiredrefstring or nullnamestring requiredinviteobject required3 fields in
invitestatusstring requirednone: no link yet.active: a link works.revoked: the link was ended.One of
none,active,revokedlast_seen_atinteger or nullWhen the presenter last opened the link. Epoch ms.
last_seen_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
curl -X PUT "https://www.wunderframe.com/api/v1/sessions/by-ref/agenda/b-14" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "The AI-Native Startup",
"room_id": "room_hallB",
"starts_at": "2026-10-08T14:00:00Z",
"duration_min": 30,
"go_live": "on_ready",
"go_live_by": "operator",
"after_finish": "next_cue",
"presenter_refs": [
"speakerportal/1234",
"speakerportal/1235"
]
}'{
"id": "Zp4dW1qR8sN2mK7vB3xYc",
"ref": "agenda/b-14",
"title": "The AI-Native Startup",
"status": "scheduled",
"room_id": "room_hallB",
"screen_ids": null,
"stage_ids": [
"st_hallB",
"st_hallB_side"
],
"stage_id": "st_hallB",
"scene_id": "sc_presenter",
"intro_scene_id": "sc_speaker_intro",
"show_id": null,
"starts_at": 1791468000000,
"starts_at_iso": "2026-10-08T14:00:00.000Z",
"ends_at": 1791469800000,
"ends_at_iso": "2026-10-08T14:30:00.000Z",
"duration_min": 30,
"join_opens_min": 30,
"go_live": "on_ready",
"go_live_by": "automatic",
"after_finish": "next_cue",
"after_source": null,
"presenter_ids": [
"wkFRBzMq6POZ_qYJHvgQf"
],
"ready_presenter_ids": [],
"live_presenter_id": null,
"rehearsals": [],
"went_live_at": null,
"went_live_at_iso": null,
"finished_at": null,
"finished_at_iso": null,
"created_at": 1789372800000,
"updated_at": 1789372800000,
"presenters": [
{
"id": "wkFRBzMq6POZ_qYJHvgQf",
"ref": "speakerportal/1234",
"name": "Ada Lovelace",
"invite": {
"status": "active",
"last_seen_at": null,
"last_seen_at_iso": null
}
}
]
}Error example
{
"error": {
"code": "invalid",
"message": "The request is invalid — `details.field` names the field when there is one."
}
}Create a presenter link
/sessions/{id}/invites sessionsMakes the personal link a presenter joins with. The link is returned once — Wunderframe does not keep it — so pass it on straight away.
If the presenter already has a working link the call is refused with 409; send "regenerate": true to replace it (the old link stops working).
The presenter must be on the session. Presenter links need a one-time setup by the workspace owner: until the owner has created a first link in the app, this returns 409.
Parameters
idstring required pathThe session id.
Request body required
presenter_idstring requiredregeneratebooleanReplace a working link with a new one.
Default
false
Responses
- 201 The link.
- 400 The request is invalid —
details.fieldnames the field when there is one. - 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
- 409 Conflicts with the current state.
- 503 A service this call needs is not available right now.
Response fields (201)
presenter_idstring requiredlinkstring (uri) requiredThe presenter's personal link. It works as their login, so send it only to them. It is shown this once.
curl -X POST "https://www.wunderframe.com/api/v1/sessions/Zp4dW1qR8sN2mK7vB3xYc/invites" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"presenter_id": "wkFRBzMq6POZ_qYJHvgQf"
}'{
"presenter_id": "wkFRBzMq6POZ_qYJHvgQf",
"link": "https://www.wunderframe.com/p/wfp.…"
}Error example
{
"error": {
"code": "invalid",
"message": "The request is invalid — `details.field` names the field when there is one."
}
}Schedule a rehearsal
/sessions/{id}/rehearsals sessionsAdds a rehearsal slot in which presenters can join and test without going on air. Omit starts_at to rehearse now.
Returns a new link for every presenter on the session who has no working link yet. Refused with 409 once the session has finished or was canceled.
Parameters
idstring required pathThe session id.
Request body required
starts_atinteger or string (date-time)When it starts. Omit for now.
duration_mininteger requiredMinutes: 5–480 for a scheduled rehearsal, 10–240 for one starting now (clamped).
notestringUp to 200 characters
Responses
- 201 The rehearsal and new links.
- 400 The request is invalid —
details.fieldnames the field when there is one. - 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
- 409 Conflicts with the current state.
- 503 A service this call needs is not available right now.
Response fields (201)
rehearsalobject required6 fields in
rehearsalidstring requiredstarts_atinteger requiredEpoch ms. Presenter links open 15 minutes earlier.
starts_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
ends_atinteger requiredEpoch ms.
ends_at_isostring (date-time) or nullThe same time in ISO 8601 (UTC).
notestringUp to 200 characters
linksmap of string (uri) requiredPresenter id → a new link, for each presenter who had no working link. Presenters who already have one keep it: it opens the rehearsal too.
curl -X POST "https://www.wunderframe.com/api/v1/sessions/Zp4dW1qR8sN2mK7vB3xYc/rehearsals" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"duration_min": 30,
"note": "Tech check"
}'{
"rehearsal": {
"id": "a1b2c3d4",
"starts_at": 1789372800000,
"starts_at_iso": "2026-09-14T08:00:00.000Z",
"ends_at": 1789376400000,
"ends_at_iso": "2026-09-14T09:00:00.000Z",
"note": "Ad-hoc rehearsal"
},
"links": {
"wkFRBzMq6POZ_qYJHvgQf": "https://www.wunderframe.com/p/wfp.…"
}
}Error example
{
"error": {
"code": "invalid",
"message": "The request is invalid — `details.field` names the field when there is one."
}
}Get a session’s feedback
/sessions/{id}/feedback sessions:readWhat the guests answered in the session’s survey: each question’s result (averages and their spread, NPS, percentages), the text answers newest first — the ones the auto-check held back marked flagged — and the feedback link. ?format=csv answers every response as CSV. No participant ever appears.
Parameters
idstring required pathThe session id.
formatstring queryOne of
json,csv
Responses
- 200 The results.
- 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
sessionobject5 fields in
sessionidstringtitlestringshow_idstring or nullstarts_atintegerstatusstring
speakersobject[]2 fields in
speakersidstringnamestring
formobject3 fields in
formfromstringOne of
session,show,workspace,stockenabledbooleanshare_with_speakersstring
windowobject3 fields in
windowphasestringOne of
before,during,after,closed,offopenbooleancloses_atinteger
resultsobject2 fields in
resultsresponsesintegerquestionsobject[]10 fields in
questionskeystringThe question id, or
<id>:<presenter id>per speaker.kindstringtextstringpresenter_idstringansweredintegeravgnumber or nullcountsinteger[]Per value, lowest first.
npsinteger or nullPromoters minus detractors, in percent.
optionsobject[]4 fields in
optionsidstringlabelstringcountintegerpctinteger
textsobject[]3 fields in
textstextstringatintegerflaggedboolean
linkstringThe feedback link guests open without joining.
curl "https://www.wunderframe.com/api/v1/sessions/Zp4dW1qR8sN2mK7vB3xYc/feedback" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"session": {
"id": "Zp4dW1qR8sN2mK7vB3xYc",
"title": "The AI-Native Startup",
"show_id": null,
"starts_at": 1791468000000,
"status": "finished"
},
"speakers": [
{
"id": "wkFRBzMq6POZ_qYJHvgQf",
"name": "Ada Lovelace"
}
],
"form": {
"from": "workspace",
"enabled": true,
"share_with_speakers": "ratings"
},
"window": {
"phase": "after",
"open": true,
"closes_at": 1792074600000
},
"results": {
"responses": 84,
"questions": [
{
"key": "overall",
"kind": "rating",
"text": "How was this session overall?",
"answered": 84,
"avg": 4.4,
"counts": [
1,
2,
6,
25,
50
]
}
]
},
"link": "https://www.wunderframe.com/f/23456789abcd"
}Error example
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
}
}Get an event’s feedback
/shows/{id}/feedback sessions:readEvery session of the event (show) with its answers, overall rating, speaker ratings and NPS — the comparison organizers sort.
Parameters
idstring required pathThe show (event) id.
Responses
- 200 The sessions compared.
- 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
showobject2 fields in
showidstringtitlestring
sessionsobject[]9 fields in
sessionsidstringtitlestringstarts_atintegerstatusstringenabledbooleanresponsesintegeroverallnumber or nullnpsinteger or nullspeakersobject[]3 fields in
speakerspresenter_idstringnamestringavgnumber or null
curl "https://www.wunderframe.com/api/v1/shows/wkFRBzMq6POZ_qYJHvgQf/feedback" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"show": {
"id": "sh_day1",
"title": "Day one"
},
"sessions": [
{
"id": "Zp4dW1qR8sN2mK7vB3xYc",
"title": "The AI-Native Startup",
"starts_at": 1791468000000,
"status": "finished",
"enabled": true,
"responses": 84,
"overall": 4.4,
"nps": 41,
"speakers": [
{
"presenter_id": "wkFRBzMq6POZ_qYJHvgQf",
"name": "Ada Lovelace",
"avg": 4.6
}
]
}
]
}Error example
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
}
}Get a feedback form
/feedback/form sessions:readThe survey a scope asks: scope=workspace (the default every session gets), scope=show&id=… or scope=session&id=…. own is null when the scope inherits; inherited is what it gets then (session → event → workspace → the standard form).
Parameters
scopestring queryworkspace, show or session.
One of
workspace,show,sessionidstring queryThe show or session id.
Responses
- 200 The form.
- 400 The request is invalid —
details.fieldnames the field when there is one. - 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
scopeobject2 fields in
scopekindstringOne of
workspace,show,sessionidstring
ownobject or any or nullNull: it inherits.
inheritedobject2 fields in
inheritedfromstringOne of
show,workspace,stocksetupobjectWhat a feedback form asks and when.
5 fields in
setupenabledbooleanFalse: no feedback for this scope (and what inherits from it).
questionsobject[]Up to 8 items
8 fields in
questionsidstringShort and stable (answers name it). Made for you when left out.
kindstring requiredOne of
rating,nps,choice,yes_no,texttextstring required{speaker}is the presenter’s name on aper_speakerquestion.Up to 200 characters
requiredbooleanoptionsobject[]choice: 2–8.2 fields in
optionsidstringlabelstring
max_choicesintegerAt least 1
stylestringratingonly.One of
stars,facesper_speakerbooleanrating: asked once per presenter of the session.
timingobject4 fields in
timingat_endbooleanPhones bring the Feedback tab forward when the session ends.
duringbooleanThe tab is there while the session runs.
linkbooleanThe feedback link
/f/<key>works.open_daysinteger1–60
anonymousbooleanFalse: guests may add their name.
share_with_speakersstringOne of
none,ratings,all
curl "https://www.wunderframe.com/api/v1/feedback/form" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"scope": {
"kind": "session",
"id": "Zp4dW1qR8sN2mK7vB3xYc"
},
"own": null,
"inherited": {
"from": "workspace",
"setup": {
"enabled": true,
"questions": [
{
"id": "overall",
"kind": "rating",
"text": "How was this session overall?",
"required": true,
"style": "stars"
}
],
"timing": {
"at_end": true,
"during": false,
"link": true,
"open_days": 7
},
"anonymous": true,
"share_with_speakers": "ratings"
}
}
}Error example
{
"error": {
"code": "invalid",
"message": "The request is invalid — `details.field` names the field when there is one."
}
}Set a feedback form
/feedback/form sessionsGive the scope its own form. Only the fields you send change; the rest comes from what it has, else what it inherits. At most 8 questions; enabled: false switches feedback off for the scope.
Parameters
scopestring queryworkspace, show or session.
One of
workspace,show,sessionidstring queryThe show or session id.
Request body required
enabledbooleanFalse: no feedback for this scope (and what inherits from it).
questionsobject[]Up to 8 items
8 fields in
questionsidstringShort and stable (answers name it). Made for you when left out.
kindstring requiredOne of
rating,nps,choice,yes_no,texttextstring required{speaker}is the presenter’s name on aper_speakerquestion.Up to 200 characters
requiredbooleanoptionsobject[]choice: 2–8.2 fields in
optionsidstringlabelstring
max_choicesintegerAt least 1
stylestringratingonly.One of
stars,facesper_speakerbooleanrating: asked once per presenter of the session.
timingobject4 fields in
timingat_endbooleanPhones bring the Feedback tab forward when the session ends.
duringbooleanThe tab is there while the session runs.
linkbooleanThe feedback link
/f/<key>works.open_daysinteger1–60
anonymousbooleanFalse: guests may add their name.
share_with_speakersstringOne of
none,ratings,all
Responses
- 200 The form.
- 400 The request is invalid —
details.fieldnames the field when there is one. - 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
scopeobject2 fields in
scopekindstringOne of
workspace,show,sessionidstring
ownobject or any or nullNull: it inherits.
inheritedobject2 fields in
inheritedfromstringOne of
show,workspace,stocksetupobjectWhat a feedback form asks and when.
5 fields in
setupenabledbooleanFalse: no feedback for this scope (and what inherits from it).
questionsobject[]Up to 8 items
8 fields in
questionsidstringShort and stable (answers name it). Made for you when left out.
kindstring requiredOne of
rating,nps,choice,yes_no,texttextstring required{speaker}is the presenter’s name on aper_speakerquestion.Up to 200 characters
requiredbooleanoptionsobject[]choice: 2–8.2 fields in
optionsidstringlabelstring
max_choicesintegerAt least 1
stylestringratingonly.One of
stars,facesper_speakerbooleanrating: asked once per presenter of the session.
timingobject4 fields in
timingat_endbooleanPhones bring the Feedback tab forward when the session ends.
duringbooleanThe tab is there while the session runs.
linkbooleanThe feedback link
/f/<key>works.open_daysinteger1–60
anonymousbooleanFalse: guests may add their name.
share_with_speakersstringOne of
none,ratings,all
curl -X PUT "https://www.wunderframe.com/api/v1/feedback/form" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"questions": [
{
"kind": "rating",
"text": "How was this session overall?",
"required": true
},
{
"kind": "rating",
"text": "How was {speaker}?",
"per_speaker": true
},
{
"kind": "text",
"text": "What will you take away?"
}
],
"timing": {
"at_end": true,
"during": false,
"link": true,
"open_days": 7
}
}'{
"scope": {
"kind": "session",
"id": "Zp4dW1qR8sN2mK7vB3xYc"
},
"own": null,
"inherited": {
"from": "workspace",
"setup": {
"enabled": true,
"questions": [
{
"id": "overall",
"kind": "rating",
"text": "How was this session overall?",
"required": true,
"style": "stars"
}
],
"timing": {
"at_end": true,
"during": false,
"link": true,
"open_days": 7
},
"anonymous": true,
"share_with_speakers": "ratings"
}
}
}Error example
{
"error": {
"code": "invalid",
"message": "The request is invalid — `details.field` names the field when there is one."
}
}Drop a feedback form
/feedback/form sessionsThe scope inherits again (a session its event’s, an event the workspace’s, the workspace the standard form).
Parameters
scopestring queryworkspace, show or session.
One of
workspace,show,sessionidstring queryThe show or session id.
Responses
- 200 What it inherits now.
- 401 Missing or invalid API key.
- 403 The key lacks the scope, or the role is read-only.
- 404 Not found in this workspace.
Response fields (200)
scopeobject2 fields in
scopekindstringOne of
workspace,show,sessionidstring
ownobject or any or nullNull: it inherits.
inheritedobject2 fields in
inheritedfromstringOne of
show,workspace,stocksetupobjectWhat a feedback form asks and when.
5 fields in
setupenabledbooleanFalse: no feedback for this scope (and what inherits from it).
questionsobject[]Up to 8 items
8 fields in
questionsidstringShort and stable (answers name it). Made for you when left out.
kindstring requiredOne of
rating,nps,choice,yes_no,texttextstring required{speaker}is the presenter’s name on aper_speakerquestion.Up to 200 characters
requiredbooleanoptionsobject[]choice: 2–8.2 fields in
optionsidstringlabelstring
max_choicesintegerAt least 1
stylestringratingonly.One of
stars,facesper_speakerbooleanrating: asked once per presenter of the session.
timingobject4 fields in
timingat_endbooleanPhones bring the Feedback tab forward when the session ends.
duringbooleanThe tab is there while the session runs.
linkbooleanThe feedback link
/f/<key>works.open_daysinteger1–60
anonymousbooleanFalse: guests may add their name.
share_with_speakersstringOne of
none,ratings,all
curl -X DELETE "https://www.wunderframe.com/api/v1/feedback/form" \
-H "Authorization: Bearer $WUNDERFRAME_API_KEY"{
"scope": {
"kind": "session",
"id": "Zp4dW1qR8sN2mK7vB3xYc"
},
"own": null,
"inherited": {
"from": "workspace",
"setup": {
"enabled": true,
"questions": [
{
"id": "overall",
"kind": "rating",
"text": "How was this session overall?",
"required": true,
"style": "stars"
}
],
"timing": {
"at_end": true,
"during": false,
"link": true,
"open_days": 7
},
"anonymous": true,
"share_with_speakers": "ratings"
}
}
}Error example
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
}
}