Skip to main content
This guide shows you how to feed Pictory documentation to a Large Language Model (LLM) so the model can guide a user end-to-end: from describing a video they want, through building the right API payload, to retrieving the rendered video. By the end of this page, you will have:
  • A single URL you can paste into any LLM to make it Pictory-aware
  • A system prompt that turns the model into a Pictory API assistant
  • A reference list of example user prompts and the API calls they should produce
  • A working setup for the Pictory MCP server so agentic tools can call the API directly

Why This Matters

The Pictory API exposes many endpoints, dozens of optional fields, and several content-source types (text, blog URLs, PowerPoint, audio, video). A user describing their goal in natural language (“create a 60-second product demo with a chef avatar”) needs a lot of context to be translated correctly into a request payload. LLMs handle this translation well, when given the right context. The pieces below give an LLM that context.

1. Point an LLM at llms.txt or llms-full.txt

Pictory’s documentation site automatically generates two machine-friendly bundles you can feed to any LLM:
FileURLWhat It ContainsWhen to Use
llms.txthttps://docs.pictory.ai/llms.txtIndex of all docs pages with titles and one-line descriptionsQuick navigation, smaller context windows
llms-full.txthttps://docs.pictory.ai/llms-full.txtEntire documentation site concatenated into one Markdown fileMaximum accuracy, large context windows

How to Use

Option A: Paste into a chat session. Open any LLM chat (Claude, ChatGPT, Perplexity, Gemini) and paste the URL or the contents of llms-full.txt at the top of the conversation. Then ask your question normally. Option B: Use the per-page Copy/Open buttons. Every page on docs.pictory.ai has a “Copy” menu in the top-right with these options: Copy as Markdown, Open in ChatGPT, Open in Claude, Open in Perplexity, Open in MCP, Open in Cursor, Open in VSCode. Use these when you need context from a single page. Option C: Reference the URL programmatically. If you are building an agent or chatbot, fetch llms-full.txt once per session and pass it as a system prompt or context block:
llms-full.txt is large. If your model’s context window is small, prefer llms.txt and use the per-page Markdown URLs for the specific pages the user’s question touches.

2. Use the Pictory OpenAPI Spec

For deterministic codegen and structured tool use, the Pictory API publishes an OpenAPI 3.1 specification: https://docs.pictory.ai/openapi.json You can:
  • Feed this directly to an LLM as a structured tool schema
  • Generate client SDKs in any language (TypeScript, Python, Go, Ruby, etc.) using openapi-generator or openapi-typescript
  • Import into Postman, Insomnia, or any API client for interactive testing
When you give an LLM both the OpenAPI spec and llms-full.txt, you get the best of both worlds: the structured field-level validation from OpenAPI, plus the narrative guidance and examples from the docs.

Paste this as the system prompt (or the first message) in any LLM you want to act as a Pictory API assistant:

4. Pictory MCP Server

For agentic LLM tools (Claude Desktop, Cursor, Windsurf, custom agents built on the MCP protocol), Pictory provides an MCP server that exposes the API as structured tools. The agent can invoke endpoints directly without you having to handcraft requests. Learn more and grab the connection details at Pictory MCP Server. Setup pages for popular agentic tools:

5. Example Prompts and Expected API Calls

These examples show the natural-language input a user might give and the API call an LLM (configured per the system prompt above) should produce.

Example 1: Simple text-to-video

“Create a 30-second product demo video about our new coffee maker. Use an upbeat AI voice.”
Expected endpoint: POST /v2/video/storyboard/render

Example 2: PPT-to-video in another language

“Convert this PowerPoint deck into a French training video with speaker notes as narration: https://example.com/training.pptx
Expected endpoint: POST /v2/video/storyboard/render

Example 3: Avatar video using a saved template

“Use my brand template and render a video where my Chef avatar walks through 4 recipe steps.”
Before generating the payload, the LLM should fetch the available avatars and templates so it uses real IDs from the user’s account:
Then build the payload with real IDs (the placeholders below are stand-ins for values picked from the discovery responses): Expected endpoint: POST /v2/video/storyboard/render

Example 4: Blog URL to video

“Turn this blog post into a one-minute video with subtitles: https://example.com/blog/our-launch
Expected endpoint: POST /v2/video/storyboard/render
The Pictory backend fetches and summarizes the blog content automatically. The resulting scenes are derived from the article structure. Each scene in the scenes array must contain exactly one content source: story, blogUrl, pptUrl, audioUrl, videoUrl, or storyCoPilot. Never mix sources within a single scene.

Example 5: Storyboard preview, then render-from-preview

“Generate a preview first so I can review the scenes before paying for a full render.”
This is a two-step flow. The LLM should produce both steps. Step 1: Create the preview Expected endpoint: POST /v2/video/storyboard
The response contains a jobId. Poll GET /v1/jobs/{jobid} until the preview is completed; the response includes the storyboard scenes and metadata. Step 2: Render from the preview Expected endpoint: PUT /v2/video/render/{storyboardjobid}
The path parameter is the preview job ID from Step 1, not a project ID. The request body is optional; pass webhook here only if you want to override the webhook URL set during the preview step. Use this two-step flow when the user wants to review or edit scenes before committing render resources. To edit scenes between the two steps, see the Update Storyboard Elements API.

Example 6: Polling job status

“How do I check if my video at job ID 9b1c4d2e-7f8a-4321-b2c3-d456e789f012 is done?”
Expected endpoint: GET /v1/jobs/{jobid}
Poll every 10–30 seconds. When data.status === "completed", the rendered video URL is in data.videoURL. For long-running renders, prefer passing a webhook URL in the render request body instead of polling.

6. Troubleshooting LLM Output

SymptomCauseFix
LLM uses Bearer YOUR_API_KEYDefault training bias toward OAuth/Bearer flowsRestate the auth rule in your system prompt: “The Authorization header value is the raw key, no prefix.”
LLM invents an endpointInsufficient contextFeed llms-full.txt or openapi.json into the session
Render succeeds but video does not appear in My ProjectsMissing saveProject: true and no templateIdTell the LLM: “Always include saveProject: true unless the user passes a projectId as templateId.”
LLM passes both brandId and brandNameField-level constraint not in training dataReinforce in system prompt; the API rejects both-together
Polling returns 404Wrong job type or wrong accountVerify the API key matches the account that submitted the job

Next Steps

Pictory Claude Skills

The ready-made Text-to-Video skill for Claude Code, no prompt engineering needed

MCP Server

Connect agentic tools directly to the Pictory API

Claude Code Setup

Wire Claude Code into the Pictory API

Cursor Setup

Configure Cursor to call Pictory endpoints

Windsurf Setup

Configure Windsurf for Pictory automation

End-to-End Recipes

Complete working JSON payloads for common use cases

API Reference

Endpoint-by-endpoint reference