Tutorializer API reference

Every endpoint of the Tutorializer REST API, generated from the API itself.

All endpoints are relative to https://api.tutorializer.com. Create an API key in your Tutorializer dashboard, then authenticate every request with it.

apiKeyHTTP Basic auth carrying only the API key secret: Authorization: Basic base64(<key secret>).

accessTokenOperator session token issued by the Tutorializer dashboard: Authorization: Token <access token>.

Download the OpenAPI specification for use with your own tooling.

Projects

GET/api/projects

List projects

Lists the projects of your organization. Requires the projects:read scope.

projects:readapiKeyaccessToken
Responses
StatusMeaning
200Array of projects
401Missing or invalid credentials
403API key is missing the projects:read scope
429API key rate limit exceeded
POST/api/projects

Create a project

Requires the projects:write scope.

projects:writeapiKeyaccessToken
Responses
StatusMeaning
200The created project
GET/api/projects/{projectId}

Get a project

Returns a single project by id. Projects belonging to another organization respond 404. Requires the projects:read scope.

projects:readapiKeyaccessToken
Parameters
NameInTypeDescription
projectIdrequiredpathstring
Responses
StatusMeaning
200The project
404Not found (or owned by another organization)
PUT/api/projects/{projectId}

Update a project

Requires the projects:write scope.

projects:writeapiKeyaccessToken
Parameters
NameInTypeDescription
projectIdrequiredpathstring
Responses
StatusMeaning
200The updated project
DELETE/api/projects/{projectId}

Delete a project

Requires the projects:write scope.

projects:writeapiKeyaccessToken
Parameters
NameInTypeDescription
projectIdrequiredpathstring
Responses
StatusMeaning
200The deleted project

Speeches

GET/api/speeches

List speeches

Lists the synthesized speech clips of a project. Requires the speeches:read scope. Anonymous callers must scope the request to a single projectId.

speeches:readapiKeyaccessToken
Parameters
NameInTypeDescription
projectIdquerystring
languagequerystring
Responses
StatusMeaning
200Array of speeches
401Missing or invalid credentials
403API key is missing the speeches:read scope
429API key rate limit exceeded
POST/api/speeches

Create a speech

Synthesizes a speech clip (translating and calling ElevenLabs when no url is supplied). Requires the speeches:write scope.

speeches:writeapiKeyaccessToken
Responses
StatusMeaning
200The created speech
GET/api/speeches/{speechId}

Get a speech

Returns a single speech by id. Speeches belonging to another organization respond 404. Requires the speeches:read scope.

speeches:readapiKeyaccessToken
Parameters
NameInTypeDescription
speechIdrequiredpathstring
Responses
StatusMeaning
200The speech
404Not found (or owned by another organization)
PUT/api/speeches/{speechId}

Update a speech

Requires the speeches:write scope.

speeches:writeapiKeyaccessToken
Parameters
NameInTypeDescription
speechIdrequiredpathstring
Responses
StatusMeaning
200The updated speech
DELETE/api/speeches/{speechId}

Delete a speech

Requires the speeches:write scope.

speeches:writeapiKeyaccessToken
Parameters
NameInTypeDescription
speechIdrequiredpathstring
Responses
StatusMeaning
200The deleted speech

Tutorials

GET/api/tutorials

List tutorials

Lists the tutorials of a project. Requires the tutorials:read scope. Anonymous callers must scope the request to a single projectId.

tutorials:readapiKeyaccessToken
Parameters
NameInTypeDescription
projectIdquerystring
fieldsquerystringComma-separated projection of fields to return
Responses
StatusMeaning
200Array of tutorials
401Missing or invalid credentials
403API key is missing the tutorials:read scope
429API key rate limit exceeded
POST/api/tutorials

Create a tutorial

Requires the tutorials:write scope.

tutorials:writeapiKeyaccessToken
Responses
StatusMeaning
200The created tutorial
GET/api/tutorials/{tutorialId}

Get a tutorial

Returns a single tutorial by id. Tutorials belonging to another organization respond 404. Requires the tutorials:read scope.

tutorials:readapiKeyaccessToken
Parameters
NameInTypeDescription
tutorialIdrequiredpathstring
Responses
StatusMeaning
200The tutorial
404Not found (or owned by another organization)
PUT/api/tutorials/{tutorialId}

Update a tutorial

Requires the tutorials:write scope.

tutorials:writeapiKeyaccessToken
Parameters
NameInTypeDescription
tutorialIdrequiredpathstring
Responses
StatusMeaning
200The updated tutorial
DELETE/api/tutorials/{tutorialId}

Delete a tutorial

Requires the tutorials:write scope.

tutorials:writeapiKeyaccessToken
Parameters
NameInTypeDescription
tutorialIdrequiredpathstring
Responses
StatusMeaning
200The deleted tutorial

Videos

GET/api/videos

List videos

Lists the rendered tutorial videos of a project. Requires the videos:read scope. Anonymous callers must scope the request to a single projectId.

videos:readapiKeyaccessToken
Parameters
NameInTypeDescription
projectIdquerystring
tutorialIdquerystring
Responses
StatusMeaning
200Array of videos
401Missing or invalid credentials
403API key is missing the videos:read scope
429API key rate limit exceeded
POST/api/videos

Create a video

Requires the videos:write scope.

videos:writeapiKeyaccessToken
Responses
StatusMeaning
200The created video
GET/api/videos/{videoId}

Get a video

Returns a single video by id. Videos belonging to another organization respond 404. Requires the videos:read scope.

videos:readapiKeyaccessToken
Parameters
NameInTypeDescription
videoIdrequiredpathstring
Responses
StatusMeaning
200The video
404Not found (or owned by another organization)
PUT/api/videos/{videoId}

Update a video

Requires the videos:write scope.

videos:writeapiKeyaccessToken
Parameters
NameInTypeDescription
videoIdrequiredpathstring
Responses
StatusMeaning
200The updated video
DELETE/api/videos/{videoId}

Delete a video

Requires the videos:write scope.

videos:writeapiKeyaccessToken
Parameters
NameInTypeDescription
videoIdrequiredpathstring
Responses
StatusMeaning
200The deleted video

Webhook subscriptions

GET/api/webhooksubscriptions

List webhook subscriptions

Webhook subscriptions deliver events such as video.created, tutorial.created and project.updated to your server as signed POST requests (X-Tutorializer-Signature: t=<timestamp>,v1=<hex HMAC-SHA256 of "timestamp.body">). An endpoint failing 20 times in a row is disabled automatically. Subscriptions are managed with an operator access token; the secret is only returned once, on create.

accessToken
Responses
StatusMeaning
200Array of webhook subscriptions (without secrets)
POST/api/webhooksubscriptions

Create a webhook subscription

The response includes the signing secret exactly once — store it; it cannot be retrieved again.

accessToken
Request body
FieldTypeDescription
projectIdrequiredstring
urlrequiredstring
eventsarray (project.created | project.updated | project.deleted | tutorial.created | tutorial.updated | tutorial.deleted | video.created | video.updated | video.deleted | speech.created | speech.updated | speech.deleted)Empty array subscribes to all events
Responses
StatusMeaning
200The created subscription, including its secret
PUT/api/webhooksubscriptions/{webhookSubscriptionId}

Update a webhook subscription

url, events and active are editable; the secret and project are immutable. Re-enabling an auto-disabled endpoint is done by setting active back to true.

accessToken
Parameters
NameInTypeDescription
webhookSubscriptionIdrequiredpathstring
Responses
StatusMeaning
200The updated subscription (without secret)
DELETE/api/webhooksubscriptions/{webhookSubscriptionId}

Delete a webhook subscription

accessToken
Parameters
NameInTypeDescription
webhookSubscriptionIdrequiredpathstring
Responses
StatusMeaning
200Deleted