Developers

Replace lesson content

PUT/products/{product_id}/lessons/{lesson_id}/content

Replaces the lesson body and, when video is included, the lesson video. The inherited field returned by the retrieve operation is accepted and ignored, so retrieved content can be sent back as is, unless it contains a block that this operation does not accept (see below).

The body is a list of Editor.js blocks. Each block has a type, a data object and, optionally, the id assigned by the editor. These are the block types the lesson page displays and the data fields of each one:

Typedata fields
paragraphtext
headertext, level (an integer from 1 to 6)
liststyle (ordered or unordered), items (a list of strings)
quotetext, caption, alignment (left or center)
tablecontent (a list of rows, each a list of cells), withHeadings, stretched
warningtitle, message
codecode
delimiternone
imagefile.url, caption, withBorder, stretched, withBackground
attachesfile (url, name, size, extension), title
embedsource (the video page URL), service, embed (the player URL), width, height, caption
linkToollink (required), meta (optional: title, description, site_name, image.url)

withHeadings, stretched, withBorder and withBackground are booleans; width and height are numbers.

Text fields are stored as sanitized HTML: only basic formatting tags and links are kept. This applies to text, caption, title (except in attaches), message, code, list items, table cells and the title, description and site_name of a linkTool block.

In a linkTool block, link must not contain HTML and must be a relative link or use the http, https or mailto scheme. meta can carry other keys returned by the page preview (such as url or type); they are stored as sent and are not displayed.

raw blocks are not accepted. Embed blocks must use a recognized provider in source, and embed, when present, must be an http or https URL. Quiz lessons do not accept a video. The request body must not exceed 1 MiB.

The content of a connected lesson belongs to its source lesson and cannot be changed; such requests fail with state_conflict. Replicated lessons are read-only, and requests to change them return replica_readonly.

Send the lesson's current ETag in the If-Match header to avoid overwriting a newer version.

AuthorizationBearer <token>

Credential: the API credential secret, sent as a bearer token. Credential secrets are identified by a fixed prefix.

In: header

Path Parameters

product_id*string

Public ID of the product, prefixed with prd_.

lesson_id*string

Public ID of the lesson, prefixed with les_.

Header Parameters

Idempotency-Key?string

Client-generated key that makes the request safe to retry. Must be 1 to 128 characters from [A-Za-z0-9._:-]. Optional on this operation; when sent, a malformed key returns idempotency_key_invalid, and repeating the request with the same key and the same body returns the stored result with Idempotent-Replayed: true.

If-Match?string

Expected revision of the resource, in the same format as the ETag header (W/"<type>:<id>:<revision>"). If the resource has changed since that revision, the request fails with 412 and the revision_mismatch error code. * matches the current revision. Any other value fails with 400 and the if_match_invalid error code. When omitted, the update is applied to the current revision.

X-Client-Request-Id?string

Optional client-generated identifier of the request, up to 64 characters from [A-Za-z0-9._-]. Echoed back in the response and recorded in the request log; it never replaces the server-generated X-Request-Id.

Lengthlength <= 64

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/products/string/lessons/string/content" \  -H "Content-Type: application/json" \  -d '{}'
{  "data": {    "body": {      "blocks": [        {}      ],      "inherited": true    },    "embed": {      "url": "string"    },    "format": "standard",    "lesson_id": "string",    "live": {      "url": "string"    },    "object": "lesson_content",    "revision": "string",    "video": {      "provider": "string",      "url": "string"    }  }}