Developers

Reorder module contents

PUT/products/{product_id}/modules/{module_id}/content/order

Sets the display order of the submodules and lessons placed directly in the module.

The ids array accepts both module public IDs (mod_) and lesson public IDs (les_) in the desired order. The array must contain the complete set of BOTH direct submodules and direct lessons currently in the module. Omitting a kind is allowed only when that kind has no items; otherwise the entire request is rejected. The request requires at least one ID; an empty array is rejected. Positions are assigned independently within each kind, starting at 1, so interleaving IDs does not assign one global mixed ranking. For example, with only lessons [les_1, les_2], sending [les_2, les_1] sets their positions to 1 and 2. With both kinds present, sending only lesson IDs is rejected. If the supplied set does not match, the API returns the order_set_mismatch error code and the existing order remains unchanged.

To avoid overwriting concurrent changes, send the module ETag from the retrieve operation in the If-Match header.

Discover the required set through GET /products/{product_id}/modules/{module_id}/content, following every cursor page without narrowing filters such as status, kind or search. A fully paginated list is still limited by credential visibility; verify that the credential can read the entire required set before reordering. On order_set_mismatch, re-read the set and check scope and visibility instead of blindly retrying stale IDs.

The response returns the complete reordered collection in a single response, including collections larger than 200 items. This reorder response is not paginated.

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_.

module_id*string

Public ID of the module, prefixed with mod_.

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/modules/string/content/order" \  -H "Content-Type: application/json" \  -d '{    "ids": [      "string"    ]  }'
{  "data": [    {      "id": "string",      "kind": "module",      "name": "string",      "object": "content_entry",      "position": 0,      "status": "published"    }  ],  "page": {    "limit": 1,    "next_cursor": "string",    "prev_cursor": "string"  }}