Generate Article
POST /v1/videos/:id/article
Generate a step-by-step help article from the video's transcript. This is a synchronous endpoint — the article is returned directly in the response.
Prerequisites
The video must be analyzed first (subtitles must exist).
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Video ID |
Request body
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
regenerate | boolean | No | false | Generate a new article even if one exists |
language | string | No | video's subtitle language | Language to write in (see codes) |
instructions | string | No | - | Extra direction, e.g. "assume the reader is an admin" |
format | string | No | markdown | markdown or html |
style | string | No | brandKit | default, dark, corporate, editorial, minimal, or brandKit |
style affects presentation, not wording. The resolved style is returned as articleStyle
alongside the article, so if you're embedding the HTML you can render it on-brand. brandKit uses
your workspace's own article styling.
format affects only how the body is returned - html converts the same content for embedding
straight into a help centre. The stored article is always Markdown, so switching formats later
costs nothing.
Example
curl -X POST https://api.vidocu.ai/v1/videos/vid_.../article \
-H "Authorization: Bearer vdo_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{}'
Response 200 OK
{
"videoId": "vid_1708300000000_abc1234",
"article": {
"title": "How to Configure Dashboard Settings",
"content": "## Step 1: Open the settings panel\n\nNavigate to the settings icon in the top-right corner...\n\n## Step 2: Configure your preferences\n\n..."
}
}
Article object fields
| Field | Type | Description |
|---|---|---|
title | string | Generated article title |
content | string | Article body in Markdown format |
Caching
If regenerate is false (default) and an article already exists for this video, the cached article is returned immediately without making a new generation request.
Set regenerate: true to force a fresh article.
Errors
| Status | Code | Cause |
|---|---|---|
| 400 | validation_error | Video must be analyzed before generating an article |
| 401 | authentication_error | Invalid or missing API key |
| 404 | not_found | Video not found |
| 423 | locked | The video is locked - unlock it in the Vidocu app before you regenerate its help article |
| 500 | internal_error | Article generation not configured or generation failed |
A locked video's content is frozen through its approval cycle, so this endpoint returns 423 Locked. Check locked on GET /v1/videos/:id first. Exporting a locked video still works.
Get the stored article
GET /v1/videos/:id/article
Fetch the article without regenerating it.
| Parameter | Type | Default | Description |
|---|---|---|---|
format | string | markdown | markdown or html |
curl "https://api.vidocu.ai/v1/videos/vid_abc123/article?format=html" \
-H "Authorization: Bearer vdo_live_your_key_here"
Returns 404 if no article has been generated yet.
Not available through the API. Those exporters run in the browser, so there is no server-side
render path to reuse - it would be a port rather than a flag. Export to PDF or DOCX from the
Vidocu app, or take the html output and render it yourself.
Auto-extracted step screenshots are likewise app-only: pulling frames out of the video needs ffmpeg, which the API service doesn't carry. Generate the article in the app if you need screenshots, then fetch it here.