The Lessonspace API is RESTful with predictable, resource-oriented URLs. All the endpoints listed live under https://api.thelessonspace.com/v2/. Unless otherwise stated, expect POST and PUT data to be JSON with Content-Type: application/json. All URLs end with a trailing slash.
This page documents the preferred URL format, with no organisation ID present in the URI for organisation-based endpoints. We still support the previous format (eg. /organisations/123/...), and will do so indefinitely. However that ID, if present, is no longer used for anything.
Provide your organisation API Key in the Authorization header with the "Organisation" prefix,
for example Authorization: Organisation [your API Key here]. Please refer to our
documentation
for more information.
Fetch the sessions for an organisation.
API Key authentication search stringIf a UUID, filters to sessions or spaces with a matching slug. Otherwise, filters to sessions or spaces with a partial, case-insensitive match on the name.
page integerA page number within the paginated result set.
include_single_user booleanInclude sessions with only one user.
duration_min integerMinimum session duration, in seconds.
duration_max integerMaximum session duration, in seconds.
start_time_after ISO 8601 date-timeFilter to sessions that started after the specified ISO8601 timestamp.
start_time_before ISO 8601 date-timeFilter to sessions that started before the specified ISO8601 timestamp.
end_time_after ISO 8601 date-timeFilter to sessions that ended after the specified ISO8601 timestamp.
end_time_before ISO 8601 date-timeFilter to sessions that ended before the specified ISO8601 timestamp.
date_after ISO 8601 date-timeFilter to sessions created after the specified ISO8601 timestamp. Using both `date_before` and `date_after` is the same as using `start_time_after` and `end_time_before`.
date_before ISO 8601 date-timeFilter sessions created before the specified ISO8601 timestamp. Using both `date_before` and `date_after` is the same as using `start_time_after` and `end_time_before`.
user stringFilter to sessions that the specified Lessonspace user IDs were present in. Accepts multiple values, delimited by `&`.
space string <uuid>Filter to sessions linked to the provided space UUID(s). Accepts multiple values, delimited by `&`.
launch_id stringFilter to sessions linked to the space that was identified with the given value when it was created via the Launch endpoint. Performs a full-string, case-sensitive match.
in_progress_only booleanFilter to sessions that are in progress only.
tags stringJSON object of tags that must match for the session. Leave the tag value blank to check if only the tag key exists. Must be URL-encoded. Performs a full-string, case-insensitive match.
user_external_id stringFilters to sessions that include a user with a matching `user.id` value that was provided via the Launch endpoint. Performs a full-string, case-insensitive match.
user_name stringFilters to sessions that include a user with a matching `user.name` value that was provided via the Launch endpoint. Performs a partial, case-insensitive match.
200Paginated sessions for the organisation.count integerrequirednext string <uri>requiredprevious string <uri>requiredresults array of objectsrequiredid integername stringspace objectrequiredid stringUUID of the Space
alias string <slug>slug string <slug>requiredname stringorganisation integerrequiredis_locked stringtags stringurl stringThe fully qualified URL of the space. If the current user is authenticated the URL will include the encoded JWT 'user' parameter. If this space is locked and the current user is a student then this will be `None`
created_at ISO 8601 date-timerequiredlocks array of objectsid integerorganisation integerrequiredThe organisation that this lock belongs to. This is not necessarily always going to be the same organisation as the one that the space is locked to (i.e. in the case of Courses).
lock_before ISO 8601 date-timeThe (optional) earliest time that the respective space can be opened.
lock_after ISO 8601 date-timeThe (optional) latest time that the respective space can be opened.
region stringrecord_av booleantranscribe booleansummarise booleanrecording_access_policy objectuuid string <uuid>start_time ISO 8601 date-timeend_time ISO 8601 date-timeprofiles array of objectsrequireduser integerrequiredname stringprofile_picture objectid integeruploaded_at ISO 8601 date-timeadmin_verified stringimage string <uri>email stringrole stringguests array of objectsrequiredid integeruuid string <uuid>requiredsession integerrequiredbillable_seconds integertags stringrecording_access_policy objectsummary stringplayback_url stringrecording_deleted booleanrecording_available booleanplayback_password stringis_password_set boolean403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
429Too many requests were made in the rate-limit window. Wait before retrying.non_field_errors array of stringFetch a session with the given UUID.
API Key authentication 200Session details for the requested UUID.id integername stringspace objectrequiredid stringUUID of the Space
alias string <slug>slug string <slug>requiredname stringorganisation integerrequiredis_locked stringtags stringurl stringThe fully qualified URL of the space. If the current user is authenticated the URL will include the encoded JWT 'user' parameter. If this space is locked and the current user is a student then this will be `None`
created_at ISO 8601 date-timerequiredlocks array of objectsid integerorganisation integerrequiredThe organisation that this lock belongs to. This is not necessarily always going to be the same organisation as the one that the space is locked to (i.e. in the case of Courses).
lock_before ISO 8601 date-timeThe (optional) earliest time that the respective space can be opened.
lock_after ISO 8601 date-timeThe (optional) latest time that the respective space can be opened.
region stringrecord_av booleantranscribe booleansummarise booleanrecording_access_policy objectuuid string <uuid>start_time ISO 8601 date-timeend_time ISO 8601 date-timeprofiles array of objectsrequireduser integerrequiredname stringprofile_picture objectid integeruploaded_at ISO 8601 date-timeadmin_verified stringimage string <uri>email stringrole stringguests array of objectsrequiredid integeruuid string <uuid>requiredsession integerrequiredbillable_seconds integertags stringrecording_access_policy objectsummary stringplayback_url stringrecording_deleted booleanrecording_available booleanplayback_password stringis_password_set boolean403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
429Too many requests were made in the rate-limit window. Wait before retrying.non_field_errors array of stringUpdate a session's name or recording access policy for the given UUID.
API Key authentication name stringrequiredName of the session
recording_access_policy objectAn array that determines who can view the recordings, a combination of `participant`, `admin`, `teacher`, `student`. If the array is empty, the organisation policy will be used instead.
200Request succeeded.name stringrequiredName of the session
recording_access_policy objectAn array that determines who can view the recordings, a combination of `participant`, `admin`, `teacher`, `student`. If the array is empty, the organisation policy will be used instead.
403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
429Too many requests were made in the rate-limit window. Wait before retrying.non_field_errors array of stringAPI Key authentication 200Recording is ready. The returned URL can be used immediately.recording_url string <uri>required202Recording URL was created, but the recording is still being prepared.recording_url string <uri>required403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
404Session was not found in the authenticated organisation.detail string429Too many requests were made in the rate-limit window. Wait before retrying.non_field_errors array of stringFetch the transcription for a given session. The transcription must have been scheduled on the session beforehand.
API Key authentication 200Transcription is available. A signed download URL is returned.transcriptionUrl string <uri>403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
404Session was not found or transcription is unavailable.detail string429Too many requests were made in the rate-limit window. Wait before retrying.non_field_errors array of stringAPI Key authentication session string <uuid>The ID(s) of sessions to filter by. Accepts multiple values.
date stringDeprecated. Use `date_before` and `date_after`.
tag_key stringA tag key to match on. Only works if `tag_value` is also set. Performs a full-string, case-insensitive match.
tag_value stringA tag value to match on. Only works if `tag_key` is also set. Performs a full-string, case-insensitive match.
user integerThe Lessonspace IDs of user profiles that have attended sessions which occurred in this space. Accepts multiple values.
assigned_to integerFilter to spaces which are assigned to these Lessonspace IDs.
search stringA search term.
page integerA page number within the paginated result set.
date_after ISO 8601 date-timeFilter to spaces with sessions that ended after the specified ISO8601 timestamp.
date_before ISO 8601 date-timeFilter to spaces with sessions that started before the specified ISO8601 timestamp.
200Paginated spaces in the organisation.count integerrequirednext string <uri>requiredprevious string <uri>requiredresults array of objectsrequiredid stringUUID of the Space
alias string <slug>slug string <slug>requiredname stringorganisation integerrequiredis_locked stringtags stringurl stringThe fully qualified URL of the space. If the current user is authenticated the URL will include the encoded JWT 'user' parameter. If this space is locked and the current user is a student then this will be `None`
created_at ISO 8601 date-timerequiredlocks array of objectsid integerorganisation integerrequiredThe organisation that this lock belongs to. This is not necessarily always going to be the same organisation as the one that the space is locked to (i.e. in the case of Courses).
lock_before ISO 8601 date-timeThe (optional) earliest time that the respective space can be opened.
lock_after ISO 8601 date-timeThe (optional) latest time that the respective space can be opened.
region stringrecord_av booleantranscribe booleansummarise booleanrecording_access_policy object403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
429Too many requests were made in the rate-limit window. Wait before retrying.non_field_errors array of stringAPI Key authentication role stringRole(s) to filter by.
space string <uuid>The ID(s) of Spaces(s) to filter by. Will filter out users who have not attended any sessions which occurred in the spaces listed. Accepts multiple values.
session string <uuid>The ID(s) of session(s) to filter by. Will filter out users who have not attended any sessions listed. Accepts multiple values.
search stringA search term.
page integerA page number within the paginated result set.
200Paginated users in the organisation.count integerrequirednext string <uri>requiredprevious string <uri>requiredresults array of objectsrequireduser objectid integeremail stringrole stringactive booleanprofile_picture objectid integeruploaded_at ISO 8601 date-timeadmin_verified stringimage string <uri>name stringexternal_id stringurl string403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
429Too many requests were made in the rate-limit window. Wait before retrying.non_field_errors array of stringAPI Key authentication 204User was removed from the organisation.400The user cannot be removed, for example because they own the organisation.429Request was rate limited.non_field_errors array of stringAPI Key authentication id stringrequiredAn ID identifying the space to join. Using the same ID here will give you the same space, using a different ID will give you a new space. A good candidate to use would be some sort of relationship identifier between the parties involved. This can be any arbitrary string, and is transparently passed through.
name stringThe (optional) name to give to the Space. If this field is not provided then the `id` field will be used as the name of the Space instead. Note that if this field is null or blank it will still be used and the Space will have a null or blank name.
allow_guests booleanAllow 'guests' to join. In this context being a guest still means you need to have the UUID of the room (likely, due to being invited) Do not set to False, unless you're aware of the side effects.
record_av booleanBoolean value whether or not audio and video will be recorded in this session. This will override the organisation wide Record AV settings
record_content booleanBoolean value determining whether or not the space content will be recorded for this session. By default, this is set to be the same as `record_av`. If both this and `record_av` are true, a recording will be available after the session with video. If `record_av` is false and this is true, a recording will be available after the session without video. If `record_av` is true and this is false, no recording will be available after the session, but transcriptions and summaries will still be generated if requested.
transcribe booleanBoolean value determining whether or not a transcription should be generated for this session.
summarise booleanBoolean value determining whether or not a summary should be generated for this session.
user objectname stringFull name of the person joining this space. Unless an ID is specified, users with the same name are considered to be the same person for stats & analytics.
id stringOptional ID of the user joining this space. This can be used to differentiate between users with the same name.If not provided, the `name` will be used.
email string <email>Optional email address of the user.
leader booleanControl leader mode. If a user has leader mode enabled, they can enable `leading` mode in the space. Leading mode forces the view of all other participants to track the leader.
profile_picture string <uri>URL of a profile picture to use. Defaults to a generic avatar image.
camera_background_url string <uri>Sets the default virtual background URL that users can apply to their camera feed.
single_use booleanA single use token can only be used exactly once. It gets redeemed on connection for a persistent token that's then stored in localStorage to allow for things like reconnecting or reloading.
custom_jwt_parameters objectAdd in custom parameters to the JWT returned by the Launch API. You can use these for extracting data later in webhooks, or passing data to custom components within the lesson environment. While these are signed, they are just Base64 encoded in the URL, and not suitable for sensitive data like passwords or API keys. Anything under the meta subkey is changable by the user, whereas everything else is not.
record booleanDetermine if this user's AV will be saved.
ghost booleanJoin the space in ghost mode (spectator-only), without camera or microphone. Ghost users are not visible to other participants.
webhooks objectsession objectstart string <uri>URL to call when a session begins.
idle string <uri>URL to call when a session becomes idle.
end string <uri>URL to call when a session ends.
user objectjoin string <uri>URL to call when a user joins.
idle string <uri>URL to call when a user becomes idle.
leave string <uri>URL to call when a user leaves.
transcription objectfinish string <uri>URL to call when a transcription finishes.
summary objectfinish string <uri>URL to call when a summary finishes.
cobrowser objectstart string <uri>URL to call when a cobrowser session begins.
stop string <uri>URL to call when a cobrowser session stops.
chat objectmessage string <uri>URL to call when a chat message is sent.
knock objectrequest string <uri>URL to call when a user knocks on the waiting room. This is issued once when the user performs the first knock. It will be re-issued if the user manually stops and restarts the knock, or refreshes the browser.
admit string <uri>URL to call when a leader admits a user from the waiting room.
deny string <uri>URL to call when a leader denies a user from the waiting room.
timeouts objectnot_after ISO 8601 date-timeAn ISO8601 timestamp specifying the latest time that a user may join the space. This isn't a limit on duration but rather a limit on until when the generated link can be used to join.
not_before ISO 8601 date-timeAn ISO8601 timestamp specifying the earliest time that a user may join the space.
features objectEnable or disable arbitrary features of the Space. These are controlled on a per user basis, not a per space basis - so it`s possible to have two users with chat, and one user without chat on the same space. Invalid values will be filtered out. See the features section of the documentation (https://www.thelessonspace.com/docs/guide/space-config#features) for a full list of possible features and a description of each field.
theme objectControl certain elements of the Space UI. These are controlled on a per user basis, not a per space basis. Invalid values will be filtered out. See the features section of the documentation (https://www.thelessonspace.com/docs/guide/space-config#theming) for a full list of possible theming options and description of each field.
video_layout_mode stringControls the default video layout mode of the space. One of: [grid, sidebar, floating]
locale stringControls the language of the board. Defaults to English. Currently supports `en` (English), `fr` (French), `it` (Italian) and `pl` (Polish)
server stringSpecifies the region the space should reside in. This defaults to IP geolocation, which depending on your use case may or may not be useful (eg, your clients are connecting from a region very different to the server making the API call). You can work around this by passing the client's IP address in the X-Forwarded-For HTTP header, and it will be used for geolocation instead.
session_tags objectA dictionary of key-value tags to apply to the session.
space_tags objectA dictionary of key-value tags to apply to the space.
invite_url stringCustom invite URL to pass in for the 'Invite Others' button.
resource_url stringCustom resource library URL.
holodeck_parameters objectAny options to pass directly to the underlying Holodeck interface. For now, this is undocumented - set things here only if you've been advised to by the Lessonspace team.
auth_external objectmethod stringrequiredCurrently only 'child' and 'redirect' are supported.
url stringrequiredURL to load inside an iFrame / redirect to.
token stringrequiredExpected token to be passed to the URL.
ephemeral booleanWhether to only store the token in browser memory and not in local storage.
200Existing space reused.client_url string <uri>requiredThe URL to which you can redirect the user, or put in an iframe. If you're using an iframe, it's important to ensure the `allow` attribute is set to `camera; microphone; display-capture` or not all features will work.
api_base string <uri>requiredURL which is the starting point for the space's API.
room_id stringrequiredThe underlying room.sh identifier which is also the space slug.
secret stringrequiredSecret key for accessing the space's API directly. This allows you to sign your own JWTs, as well as interact with the space API directly. This key _must_ be kept secret - having access to it grants unrestricted access to the space.
session_id stringrequiredThe session ID that will be used in webhooks for this launch.
user_id integerrequiredThe internal Lessonspace user ID, returned in webhooks.
room_settings objectThe settings that apply to the room after this call
201New space created.client_url string <uri>requiredThe URL to which you can redirect the user, or put in an iframe. If you're using an iframe, it's important to ensure the `allow` attribute is set to `camera; microphone; display-capture` or not all features will work.
api_base string <uri>requiredURL which is the starting point for the space's API.
room_id stringrequiredThe underlying room.sh identifier which is also the space slug.
secret stringrequiredSecret key for accessing the space's API directly. This allows you to sign your own JWTs, as well as interact with the space API directly. This key _must_ be kept secret - having access to it grants unrestricted access to the space.
session_id stringrequiredThe session ID that will be used in webhooks for this launch.
user_id integerrequiredThe internal Lessonspace user ID, returned in webhooks.
room_settings objectThe settings that apply to the room after this call
400Invalid launch request or unsupported requested configuration.non_field_errors array of string403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
503Room service could not create the space. Retry later or contact support.non_field_errors array of stringFetch the sessions for a specific space.
API Key authentication search stringIf a UUID, filters to sessions or spaces with a matching slug. Otherwise, filters to sessions or spaces with a partial, case-insensitive match on the name.
page integerA page number within the paginated result set.
include_single_user booleanInclude sessions with only one user.
duration_min integerMinimum session duration, in seconds.
duration_max integerMaximum session duration, in seconds.
start_time_after ISO 8601 date-timeFilter to sessions that started after the specified ISO8601 timestamp.
start_time_before ISO 8601 date-timeFilter to sessions that started before the specified ISO8601 timestamp.
end_time_after ISO 8601 date-timeFilter to sessions that ended after the specified ISO8601 timestamp.
end_time_before ISO 8601 date-timeFilter to sessions that ended before the specified ISO8601 timestamp.
date_after ISO 8601 date-timeFilter to sessions created after the specified ISO8601 timestamp. Using both `date_before` and `date_after` is the same as using `start_time_after` and `end_time_before`.
date_before ISO 8601 date-timeFilter sessions created before the specified ISO8601 timestamp. Using both `date_before` and `date_after` is the same as using `start_time_after` and `end_time_before`.
user stringFilter to sessions that the specified Lessonspace user IDs were present in. Accepts multiple values, delimited by `&`.
launch_id stringFilter to sessions linked to the space that was identified with the given value when it was created via the Launch endpoint. Performs a full-string, case-sensitive match.
in_progress_only booleanFilter to sessions that are in progress only.
tags stringJSON object of tags that must match for the session. Leave the tag value blank to check if only the tag key exists. Must be URL-encoded. Performs a full-string, case-insensitive match.
user_external_id stringFilters to sessions that include a user with a matching `user.id` value that was provided via the Launch endpoint. Performs a full-string, case-insensitive match.
user_name stringFilters to sessions that include a user with a matching `user.name` value that was provided via the Launch endpoint. Performs a partial, case-insensitive match.
200Paginated sessions for the requested space.count integerrequirednext string <uri>requiredprevious string <uri>requiredresults array of objectsrequiredid integeruuid string <uuid>name stringstart_time ISO 8601 date-timeend_time ISO 8601 date-timeprofiles array of objectsrequireduser integerrequiredname stringprofile_picture objectid integeruploaded_at ISO 8601 date-timeadmin_verified stringimage string <uri>email stringrole stringguests array of objectsrequiredid integeruuid string <uuid>requiredsession integerrequiredbillable_seconds integerlogs array of objectsrequiredid integerlog_type stringdate ISO 8601 date-timeprofile stringguest_uuid stringcreated_at ISO 8601 date-timeuser_socket_id stringconnected_users array of objectsrecording_access_policy objecttags stringsummary stringplayback_url string403Authentication provided, but the API key does not have permission to perform this action.detail stringrequiredDescribes the nature of the error.
type stringrequiredDescribes the type of permission error will be one of `blocked`, `not_in_organisation`, `deactivated_account`, `not_organisation_admin`, `not_organisation_admin_or_teacher`, `did_not_attend_space`, `invalid_subscription`, `whiteboard_access_denied`, `resource_access_denied`, `invalid_token_tw` or `permission_denied`.
url stringOnly valid when type is `blocked`
429Too many requests were made in the rate-limit window. Wait before retrying.non_field_errors array of string