Skip to content

Content

Content is the source material your knowledge base is built from: documents, videos, audio recordings, and guides. These endpoints list those resources and return their text.

GET /v1/content

Lists viewable content resources, most recent first, scoped to what you can see. Notes are never returned, and neither is a contribution that is still waiting in the review queue, whoever is asking.

Parameter Type Notes
query string Title keywords. Every word must appear in the title, any order, case-insensitive.
type string One of document, video, audio, guide.
tags string Comma-separated tag names, from /v1/tags. A resource must carry every one. A name that is not a valid tag is a 400, and an external account may not filter by tag.
teamId string Content that everyone can read, or that is shared to this team. A team that is not in your organization is a 400, and unless you can read the whole organization so is one you are not on.
readyOnly boolean true lists only resources that are processed and indexed.
cursor string Pagination cursor from a previous response.
limit number 1–100. Default 50.
Terminal window
curl "https://api.mereon.ai/v1/content?type=video&limit=20" \
-H "Authorization: Bearer $MEREON_TOKEN"
{
"data": [
{
"id": "cnt_44de...",
"title": "Finance Handbook",
"type": "document",
"summary": "Company finance policies and procedures.",
"durationSeconds": null,
"processingStatus": "COMPLETED",
"indexingStatus": "COMPLETED",
"failureReason": null,
"visibility": "teams",
"teams": [{ "id": "tea_77aa...", "name": "Finance" }],
"tags": ["policy", "finance"],
"createdBy": { "id": "usr_2d9e...", "name": "Ada Admin" },
"url": "https://mereon.ai/content/finance-handbook",
"createdAt": "2026-01-10T08:00:00.000Z",
"updatedAt": "2026-05-01T12:00:00.000Z"
}
],
"nextCursor": null
}

GET /v1/content/{id}

Title, type, summary, and duration of a single resource.

Terminal window
curl "https://api.mereon.ai/v1/content/cnt_44de" \
-H "Authorization: Bearer $MEREON_TOKEN"
Field Type Notes
id string Content id.
title string Resource title.
type string document, video, audio, or guide.
summary string | null Short summary, when available.
durationSeconds number | null Media duration in seconds (videos only).
processingStatus string Whether the file has been processed: DRAFT (saved, not published), PROCESSING (still being prepared, so poll again), COMPLETED, or FAILED (stopped and will not resume on its own).
indexingStatus string Whether what the resource says has been turned into knowledge: PENDING, COMPLETED, or FAILED.
failureReason string | null NO_USABLE_CONTENT when indexing failed because the resource was read and has nothing in it to teach from, which is not an error to retry. null otherwise. The raw failure text is not returned.
visibility string Who inside the organization can read it: everyone, teams (the ones in teams), or admins, which means neither of the others.
teams object[] The teams it is shared with, each with id and name.
tags string[] The organization’s tags on it, by name.
createdBy object | null Who uploaded it, as id and name, named the way the organization names them. null when unknown.

After an upload, poll processingStatus until it is COMPLETED or FAILED. A resource is ready to teach from only when both statuses are COMPLETED, and search and the knowledge reads do not include it until indexingStatus is.

An external account is shown no tags, teams or createdBy: the app shows them none of it. visibility still says which kind of audience the resource has.

GET /v1/content/{id}/text

Full document text or the video transcript, split into ordered chapters.

{
"contentId": "cnt_44de...",
"title": "Finance Handbook",
"type": "document",
"url": "https://mereon.ai/content/finance-handbook",
"chapters": [
{
"id": "chp_1b7c...",
"sequence": 1,
"headline": "Submitting an expense report",
"text": "Attach receipts and submit before month end..."
}
]
}
Field Type Notes
chapters[].id string Chapter id (matches chapter search results).
chapters[].sequence number Order within the content.
chapters[].headline string | null Section heading, when present.
chapters[].text string The chapter’s text or transcript segment.

GET /v1/content/{id}/transcript

The timed transcript of a video or an audio recording: each spoken segment with its start and end in milliseconds from the start of the recording, in order. Use it to cite where in a recording something is said. For a document or a guide, which have no timing, read the text instead; asking for a transcript of one is a 400.

Parameter Type Notes
versionId string A version id from the version history. Defaults to the current version. It has to belong to this resource, and one that was never released is shown only to someone who may edit the resource.
{
"contentId": "cnt_91aa...",
"title": "Lockout/Tagout walkthrough",
"type": "video",
"versionId": "ver_2c10...",
"versionNumber": 2,
"url": "https://mereon.ai/videos/vid_55e2.../view",
"segments": [
{ "startMs": 0, "endMs": 2500, "text": "First, isolate the energy source." },
{ "startMs": 2500, "endMs": 5000, "text": "Then apply your lock." }
]
}

segments is empty when the version has not been transcribed yet.

GET /v1/content/{id}/versions

A resource’s versions, newest first: the one learners see now, the ones it replaced, who published each and what they said should happen to learners already enrolled. Not paginated.

Anyone who can read the resource sees its released versions: the current one and the completed ones it replaced. A completed version numbered above the current one is withheld too: a publish that has not finished going live looks the same as one a rollback moved away from, and showing the first would leak unreleased text. A draft, processing or failed version was never taught. Those are an editor’s working copies, so they are shown only to someone who may edit the resource.

{
"data": [
{
"id": "ver_2c10...",
"versionNumber": 2,
"title": "Lockout/Tagout walkthrough",
"status": "COMPLETED",
"isCurrent": true,
"publishedAt": "2026-09-02T00:00:00.000Z",
"publishedByName": "Ada Admin",
"retrainingIntent": "changed_material",
"createdAt": "2026-09-01T12:00:00.000Z"
}
]
}
Field Type Notes
versionNumber number 1 for the first upload, counting up with each edit.
status string COMPLETED once processed. DRAFT, PROCESSING and FAILED are working states.
isCurrent boolean true for the version learners see.
publishedAt string | null When it was published, or null. Do not read null as unreleased: an older released version can have no date. Use isCurrent and status instead.
retrainingIntent string What the publisher said should happen to learners already enrolled: none, full_retake (retake the lesson), or changed_material (study a short lesson on what changed).

GET /v1/tags

The organization’s tags, by name. They are the vocabulary the tags filter on list content uses and each resource’s tags are drawn from. An external account gets 403, as it does in the app. Not paginated.

{ "data": [{ "name": "policy" }, { "name": "finance" }] }

GET /v1/content/{id}/knowledge

The topics this document or video was turned into, and how many items on each came from it. Answers “what did we learn from this”.

Terminal window
curl "https://api.mereon.ai/v1/content/cnt_88fa/knowledge" \
-H "Authorization: Bearer $MEREON_TOKEN"
{
"contentId": "cnt_88fa...",
"title": "Service Manual 2024",
"topics": [
{
"id": "top_71cd...",
"name": "Lift inspection",
"slug": "lift-inspection",
"itemCount": 12,
"url": "https://mereon.ai/topics/lift-inspection"
}
]
}

itemCount counts the items on that topic which came from this resource, not the topic’s total. A topic built from three manuals reports a share against each.

Current records only: archived and superseded ones are left out, so this is what the resource supports now rather than everything it ever produced.

GET /v1/content/{id}/usage

What depends on this resource. Answers “what breaks if this changes”.

Needs lesson.read, because half of the answer is lessons, so an external account gets a 403. Only lessons that are still teaching are counted: a withdrawn lesson is not, since it has already stopped. A resource waiting in the review queue is a 404 here, as it is everywhere else.

Terminal window
curl "https://api.mereon.ai/v1/content/cnt_88fa/usage" \
-H "Authorization: Bearer $MEREON_TOKEN"
{
"contentId": "cnt_88fa...",
"lessons": {
"count": 48,
"preview": [
{
"id": "lsn_6e3f...",
"title": "Lift safety basics",
"url": "https://mereon.ai/lessons/lsn_6e3f"
}
]
},
"soleEvidenceTopics": {
"count": 2,
"preview": [
{
"id": "top_71cd...",
"title": "Lift inspection",
"url": "https://mereon.ai/topics/lift-inspection"
}
]
}
}
Field Type Notes
lessons object Lessons teaching what this resource supports, filtered to your lesson visibility. A lesson made for one learner, or from a performance review, is not in the catalog and is not counted.
soleEvidenceTopics object Topics this resource is the only evidence for. These are the ones that would lose their basis if it went away.
*.count number The true total.
*.preview object[] At most 20 entries, so the response cannot grow without limit. Report “used by 48 lessons” from count, list from preview.