API reference

Every endpoint of the OpenCharts REST API, generated live from the OpenAPI 3.1 spec so it always matches production. Authenticate with Authorization: Bearer oc_…. Create keys on the Developers hub.

https://www.opencharts.com/api/v169 operationsv1.0.0

Meta

1 endpoint
GET/openapi200no auth

Fetch this OpenAPI document.

Account

2 endpoints
GET/account200read scope

Get the authenticated account (whoami).

GET/account/credits200read scope

Get the plan + AI credit balance.

Personas

12 endpoints
GET/personas200read scope

List personas.

POST/personas201write scope

Create a persona.

GET/personas/{id}200read scope

Get a persona.

Path params: {id}

PATCH/personas/{id}200write scope

Update a persona.

Path params: {id}

DELETE/personas/{id}204write scope

Delete a persona.

Path params: {id}

POST/personas/{id}/publish200write scope

Publish a persona.

Path params: {id}

GET/personas/{id}/deployments200read scope

List a persona's deployments.

Path params: {id}

POST/personas/{id}/deployments201write scope

Create a persona deployment.

Path params: {id}

POST/personas/{id}/conversations201write scope

Start a persona conversation.

Path params: {id}

POST/personas/{id}/conversations/{cid}/end200write scope

End a persona conversation.

Path params: {id}, {cid}

GET/personas/{id}/conversations/{cid}/events200read scope

List conversation events.

Path params: {id}, {cid}

GET/personas/faces200read scope

List available persona faces.

Projects

4 endpoints
GET/projects200read scope

List projects.

GET/projects/{id}200read scope

Get a project.

Path params: {id}

PATCH/projects/{id}200write scope

Update a project's metadata or content.

Path params: {id}

DELETE/projects/{id}204write scope

Delete a project.

Path params: {id}

Creation

6 endpoints
POST/flowcharts201write scope

Create a flowchart project.

POST/whiteboards201write scope

Create a whiteboard project.

POST/notes201write scope

Create a notes project.

POST/presentations201write scope

Create a presentation project.

GET/templates200read scope

List templates.

POST/templates/{id}/use201write scope

Create a project from a template.

Path params: {id}

Sheets

10 endpoints
GET/sheets200read scope

List sheets.

POST/sheets201write scope

Create a sheet.

GET/sheets/{id}200read scope

Read a sheet's rows.

Path params: {id}

GET/sheets/{id}/range200read scope

Read a sheet range.

Path params: {id}

POST/sheets/{id}/ops200write scope

Apply or propose structured sheet ops.

Path params: {id}

Request body · SheetOpsRequest
opsrequired
array<object>
propose
boolean
summary
string
POST/sheets/{id}/edit200ai scope

Edit a sheet with a natural-language instruction.

Path params: {id}

Request body · SheetEditRequest
instructionrequired
string
propose
boolean
GET/sheets/{id}/commits200read scope

List a sheet's commits.

Path params: {id}

GET/sheets/{id}/commits/{commitId}200read scope

Get a commit diff.

Path params: {id}, {commitId}

POST/sheets/{id}/commits/{commitId}/resolve200write scope

Merge or reject a proposed commit.

Path params: {id}, {commitId}

POST/sheets/{id}/rollback200write scope

Roll a sheet back to a commit.

Path params: {id}

Boards

10 endpoints
GET/boards200read scope

List boards.

POST/boards201write scope

Create a board.

GET/boards/{id}200read scope

Get a board.

Path params: {id}

PATCH/boards/{id}200write scope

Update a board.

Path params: {id}

DELETE/boards/{id}204write scope

Delete a board.

Path params: {id}

POST/boards/{id}/duplicate201write scope

Duplicate a board.

Path params: {id}

GET/boards/{id}/cards200read scope

List a board's cards.

Path params: {id}

POST/boards/{id}/cards201write scope

Create a card.

Path params: {id}

PATCH/boards/{id}/cards/{cardId}200write scope

Update a card.

Path params: {id}, {cardId}

DELETE/boards/{id}/cards/{cardId}204write scope

Delete a card.

Path params: {id}, {cardId}

Chat

1 endpoint
POST/chat200ai scope

Run a Theo chat turn (UI-message SSE stream by default; `stream: false` for the assembled message + artifacts).

Request body · ChatRequest
conversationId
string

Continue an existing conversation (prior history loads server-side).

message
string

The prompt (shorthand for a single user message).

messages
array<object>
mode
fast | think

v1 launch modes.

stream
boolean

true = AI SDK UI-message SSE stream; false = assembled JSON message + artifacts.

Conversations

6 endpoints
GET/conversations200read scope

List conversations.

POST/conversations201write scope

Create a conversation.

Request body · ConversationCreate
title
string
mode
string

Chat mode preference (e.g. `fast`, `think`).

GET/conversations/{id}200read scope

Get a conversation.

Path params: {id}

PATCH/conversations/{id}200write scope

Update a conversation's title or mode.

Path params: {id}

Request body · ConversationUpdate
title
string
mode
string

Chat mode preference (e.g. `fast`, `think`).

DELETE/conversations/{id}204write scope

Delete a conversation and its messages.

Path params: {id}

GET/conversations/{id}/messages200read scope

List a conversation's messages (oldest first).

Path params: {id}

Media

5 endpoints
POST/extract-flowchart201ai scope

Extract a flowchart project from a document (PDF, PPTX, or image).

Request body · ExtractFlowchartRequest
documentBase64required
string

Base64-encoded document content (no `data:` prefix). Max 10MB decoded.

mimeTyperequired
application/pdf | application/vnd.openxmlformats-officedocument.presentationml.presentation | image/png | image/jpeg | image/webp
fileName
string

Original file name (used as a title fallback).

POST/images200ai scope

Generate an image synchronously.

Request body · ImageRequest
promptrequired
string
engine
auto | theo-creative | theo-imagine | theo-photo | theo-rapid | theo-design | …
aspectRatio
1:1 | 16:9 | 9:16 | 4:3 | 3:4
style
string
referenceImageUrls
array<string>
includeBase64
boolean
POST/videos202ai scope

Start a video generation job.

Request body · VideoRequest
promptrequired
string
aspectRatio
16:9 | 9:16
modelTier
fast | max
referenceImageUrl
string
POST/songs202ai scope

Start a song generation job.

Request body · SongRequest
stylerequired
string
title
string
lyrics
string
autoLyrics
boolean
instrumental
boolean
tier
auto | premium | fast
POST/code-builds202ai scope

Start a Code Canvas build job.

Request body · CodeBuildRequest
promptrequired
string
name
string
framework
html | react | auto
planFirst
boolean

Jobs

1 endpoint
GET/jobs/{id}200read | ai scope

Poll any async job by its type-prefixed id.

Path params: {id}

Agents

3 endpoints
POST/agents/{id}/run202ai scope

Dispatch a Theo Agent.

Path params: {id}

GET/agents/{id}/runs200read scope

List an agent's runs.

Path params: {id}

GET/agents/{id}/runs/{runId}200read scope

Get an agent run's status.

Path params: {id}, {runId}

Research

2 endpoints
POST/research202ai scope

Start a deep-research job (returns a res_-prefixed job id; poll it at GET /jobs/{id}).

Request body · ResearchRequest
queryrequired
string
GET/research/{jobId}200read | ai scope

Poll a deep-research job (legacy alias of GET /jobs/{id}; accepts raw or res_-prefixed ids).

Path params: {jobId}

Webhooks

6 endpoints
GET/webhooks200read scope

List webhooks.

POST/webhooks201write scope

Register a webhook (secret returned once).

Request body · WebhookCreate
namerequired
string
urlrequired
string
eventsrequired
array<project.created | project.updated | project.shared | project.deleted | team.member_added | team.member_removed | …>

Event names to subscribe to. The enum lists every currently emitted event (generated from the same registry the dispatcher validates against); unknown or not-yet-emitted events return a 400 naming them. Naming note: the `code` job type (job ids `code_...`) emits `code_build.*`, and Theo Agent runs emit `evi.run_*`.

GET/webhooks/{id}200read scope

Get a webhook.

Path params: {id}

PATCH/webhooks/{id}200write scope

Update a webhook.

Path params: {id}

Request body · WebhookUpdate
name
string
url
string
events
array<project.created | project.updated | project.shared | project.deleted | team.member_added | team.member_removed | …>
isActive
boolean
DELETE/webhooks/{id}204write scope

Delete a webhook.

Path params: {id}

GET/webhooks/{id}/deliveries200read scope

List a webhook's recent deliveries.

Path params: {id}

Lists return { data, total, cursor? }; async work returns a job envelope polled at GET /jobs/{id}; errors are { error: { code, message, requestId } }. Register webhooks on the Developers hub to skip polling.