Neuromancer
API Reference

Everything the platform exposes, in one place.

Auth, streaming chat, multimodal content, learnings, kanban, webhooks, publishing and observability. Every route lives under /api/v1.

Start

The basics every route shares.

Base URL
https://{your-host}/api/v1
Auth
Authorization: Bearer <JWT>

On every route — except the public allow-list below.

Content-Type
application/json

Except multipart uploads marked explicitly.

Streaming
text/event-stream · frames: data: {...}\n\n

Endpoints marked SSE return frames on the standard protocol.

Errors
{ "detail": "<msg>" }

401 on invalid token, 429 on rate-limit, standard HTTP status codes.

Rate limits
/auth/login — 5/min per IP

Sensitive endpoints have their own limits. The rest inherits the global limiter.

Public allow-list

Endpoints reachable without a Bearer token.

GET
/health
Public

Health check.

POST
/auth/login
Public

Exchange email+password for a JWT. Rate-limited 5/min.

GET
/auth/status
Public

Whether auth is enabled on this deployment.

GET
/auth/supabase-config
Public

Public Supabase config (URL + anon key).

POST
/auth/supabase-exchange
Public

Exchange a Supabase OAuth token for an internal JWT.

GETPOST
/approvals/public/*
Public

Tokenized approval pages — view and respond.

GET
/screenshots
Public

Static previews for shared resources.

GET
/assets
Public

Generated assets served to external reviewers.

GET
/docs
Public

Interactive API docs (this page).

GET
/openapi.json
Public

Full OpenAPI schema.

GET
/redoc
Public

ReDoc rendering of the schema.

SSE endpoints

Streaming routes — all return text/event-stream with data: {...}\n\n frames.

POST
/chat/conversations/{id}/messages
SSE

Streaming chat reply with tool calls.

POST
/content/generate
SSE

Generate content via the agent.

POST
/content/refine
SSE

Refine an existing content.

POST
/multimodal/plan
SSE

Generate a multimodal production plan.

POST
/multimodal/execute-plan
SSE

Execute the approved plan, asset by asset.

POST
/planner/plans/{id}/generate
SSE

Generate items for an existing plan.

POST
/planner/generate
SSE

Generate an autonomous plan from a brief.

POST
/learnings/generate
SSE

Extract writing_style + preferences from sources.

POST
/learnings/generate-design-system
SSE

Extract the design system.

POST
/learnings/generate-product-knowledge
SSE

Extract product knowledge.

POST
/linkedin/structure-with-ai
SSE

Structure raw text via AI.

GET
/chat/conversations/{id}/events
SSE

Real-time participant events.

Event catalogs

Self-describing catalogs — call them to list available triggers, actions and webhook events.

GET
/automations/triggers

Every trigger (task.created, task.moved, …) automations listen to.

GET
/automations/actions

Every action an automation can run.

GET
/webhooks/events

Every event_type a webhook can subscribe to.

Chat frames

Shapes streamed by POST /chat/conversations/{id}/messages, one per data: line.

FRAME
{ content }

A chunk of streamed content.

FRAME
{ tool_use, status }

The agent is invoking a tool. status ∈ started | finished | failed.

FRAME
{ done: true }

The message is complete.

FRAME
{ error }

Generation failed; payload carries the reason.

AI Chat

Conversations, sharing, upload, transcription, and the streaming message with tool calling.

/chat

GET
/chat/conversations

List conversations.

Query
search, client_id, project_id
POST
/chat/conversations

Create a conversation.

Body
title?, metadata?
PATCH
/chat/conversations/{id}

Update title/metadata.

DELETE
/chat/conversations/{id}

Delete conversation. 204.

POST
/chat/conversations/{id}/share

Share with another user_id.

GET
/chat/conversations/{id}/participants

List participants.

DELETE
/chat/conversations/{id}/participants/{user_id}

Remove participant.

GET
/chat/conversations/{id}/events
SSE

Real-time events (new messages from other participants).

POST
/chat/conversations/{id}/upload

Attach a file (PDF/DOCX/TXT/MD/CSV + images).

Note
multipart/form-data
POST
/chat/conversations/{id}/transcribe

Transcribe audio (Whisper).

Note
multipart/form-data
POST
/chat/conversations/{id}/messages
SSE

Send a message and receive a streaming reply. Frames: {content}, {tool_use, status}, {done: true}, {error}.

Body
content, tools_enabled, provider?, model?, attachments?
GET
/chat/conversations/{id}/messages

Full history.

Content

Generate, refine, templates, multimodal (plan/execute), and the Content Planner.

/content

POST
/content/generate
SSE

Generate content via the agent.

Body
platform, brief, collection_ids?, provider?, model?, temperature?, persona_id?, client_id?, project_id?
POST
/content/refine
SSE

Refine an existing content.

Body
content_id, instructions, provider?
GET
/content/

List contents.

Query
task_id?, platform?, status?, client_id?, project_id?
GET
/content/{id}

Detail with assets + feedback.

PUT
/content/{id}

Update draft_content, status, etc.

DELETE
/content/{id}

Delete. 204.

POST
/content/{id}/feedback

Record score/summary/tags.

GET
/content/templates

List built-in templates (creative_brief, media_brief, email, etc.).

POST
/content/templates

Create a custom template.

DELETE
/content/templates/{id}

Delete template.

/multimodal

Providers, multimodal production plans and asset-by-asset execution.

GETPOSTPUTDELETE
/multimodal/providers[/{id}]

CRUD providers (DALL-E, Gemini Imagen/Veo, GPT Image…).

GET
/multimodal/providers/known

Known-provider templates.

POST
/multimodal/providers/{id}/test

Test credentials.

POST
/multimodal/plan
SSE

Generate a production plan (text + assets array).

POST
/multimodal/execute-plan
SSE

Execute the approved plan. Frames: asset_start, asset_complete, asset_failed, done.

POST
/multimodal/generate-asset

Generate a single asset.

POST
/multimodal/content/{id}/assets/{asset_id}/regenerate

Regenerate a specific asset.

GETDELETE
/multimodal/content/{id}/assets[/{asset_id}]

List/delete assets of the content.

/planner

Editorial plans — created, AI-generated, or autonomous.

POSTGETPUTDELETE
/planner/plans[/{id}]

CRUD editorial plans.

POST
/planner/plans/{id}/generate
SSE

Generate plan items via AI.

POST
/planner/generate
SSE

Generate an autonomous plan (no plan_id) from a brief.

PUTDELETE
/planner/items/{id}

Update/delete item.

Knowledge

Learnings (patterns), skills, personas and the memory log — what the agent knows about your work.

/learnings

POST
/learnings/generate
SSE

Extract writing_style + preferences from sources.

POST
/learnings/generate-design-system
SSE

Extract the design system.

POST
/learnings/generate-product-knowledge
SSE

Extract product knowledge.

GET
/learnings/

List learnings (Patterns).

Query
type?, source_id?, client_id?
PATCH
/learnings/{id}

Update.

DELETE
/learnings/{id}

Delete.

POST
/learnings/bulk-delete

Delete many.

Body
ids: string[]
GET
/learnings/custom-rules

Return the client's dos/don'ts.

PUT
/learnings/custom-rules

Update dos/don'ts.

POST
/learnings/{id}/feedback

Record feedback on the pattern.

POST
/learnings/merge

Consolidate N patterns into a single merged_*.

/skills

GET
/skills/

List skills (12 seeded on first call).

Query
skill_type?
POST
/skills/generate

Generate a skill via AI from a description.

POSTPUTDELETE
/skills[/{id}]

CRUD.

PUT
/skills/{id}/toggle

Enable/disable.

PUT
/skills/{id}/move

Move to a folder.

GETPOSTPUTDELETE
/skills/folders[/{id}]

CRUD folders.

GET
/skills/active-instructions

Return the combined prompt of active skills.

/personas

GET
/personas/

List (5 seeded).

POST
/personas/generate

Generate a persona via AI.

POSTGETPUTDELETE
/personas[/{id}]

CRUD.

POST
/personas/{id}/simulate

Simulate the persona's reaction to a content. Returns relevance_score, reaction, strengths, weaknesses, suggestions.

/memory

GET
/memory/

List recent events.

GET
/memory/search

Semantic search (RAG).

Query
q, limit?
DELETE
/memory/{id}

Delete entry.

GET
/memory/stats

Total, by type, latest_at.

Sources & Collections

Importers (paste, URL, file, folders, per-platform) and vector collections.

/sources

POST
/sources/import/paste

Import pasted text.

POST
/sources/import/url

Import from a URL (trafilatura).

POST
/sources/import/file

Upload a file.

Note
multipart
POST
/sources/import/folder

Import a directory.

GET
/sources/

List.

Query
collection_id?, status?, platform?
GET
/sources/{id}

Detail with chunks/metadata.

DELETE
/sources/{id}

Delete.

POST
/sources/bulk-delete

Delete many.

Body
ids
POST
/sources/{id}/analyze

Reprocess source.

/collections

POSTGETPUTDELETE
/collections[/{id}]

CRUD.

POST
/collections/{id}/cross-reference

Vector search crossing collections.

/platforms

Per-platform typed importers. POST /platforms/{type}/import with type ∈ substack, medium, twitter, youtube, rss, notion, github, website, visual-scan.

POST
/platforms/{type}/import

Import from a specific platform. type ∈ substack | medium | twitter | youtube | rss | notion | github | website | visual-scan.

/linkedin

LinkedIn-dedicated pipeline, with cookie-based and AI-based extraction.

POST
/linkedin/import/url

A single profile/post URL.

POST
/linkedin/import/multi-url

Multiple URLs.

POST
/linkedin/import/batch-paste

Batch of pasted texts.

POST
/linkedin/import/data-export

Import the official LinkedIn data export (zip).

POST
/linkedin/auto-extract

Automatic cookie-based extraction.

GETPOST
/linkedin/cookie-status, /linkedin/save-cookie

Manage the li_at cookie.

GET
/linkedin/sections/{source_id}

List profile sections.

POST
/linkedin/structure-with-ai
SSE

Structure raw text via AI.

Work Management

Kanban (tasks, columns, subtasks, timers), enterprise (clients/projects/teams/org chart), and timesheets.

/tasks

GET
/tasks/columns

List Kanban columns.

Query
project_id?, scope_type?, scope_id?
POST
/tasks/columns

Create a column.

PUTDELETE
/tasks/columns/{id}

Update/delete.

GET
/tasks/

List tasks. Default hides subtasks; each card includes subtask_count.

Query
project_id?, client_id?, assignee_id?, column_id?, priority?, parent_task_id?, include_subtasks?
POST
/tasks/

Create a task (or subtask via parent_task_id).

GET
/tasks/{id}

Detail.

PUT
/tasks/{id}

Update.

DELETE
/tasks/{id}

Delete (cascades to subtasks).

PUT
/tasks/{id}/move

Move column/position.

PUT
/tasks/{id}/timer

Start/Stop timer.

GET
/tasks/productivity-report

completion_rate, on_time_rate, variance_pct, breakdowns.

POST
/tasks/check-overdue

Fire task.overdue for overdue tasks.

GETPOST
/tasks/{id}/comments

List/create comments.

DELETE
/tasks/comments/{id}

Delete comment.

/enterprise

Clients, projects, project groups, users, teams, shares and orgchart.

POSTGETPUTDELETE
/enterprise/clients[/{id}]

CRUD clients.

POST
/enterprise/clients/{client_id}/projects

Create a project.

GET
/enterprise/projects

List projects (with filters).

GET
/enterprise/clients/{client_id}/projects

Projects of the client.

GETPUTDELETE
/enterprise/projects/{id}

CRUD.

POST
/enterprise/clients/{client_id}/groups

Create a project group.

GET
/enterprise/clients/{client_id}/groups

List groups.

PUTDELETE
/enterprise/groups/{id}

Update/delete.

POSTGETPUTDELETE
/enterprise/users[/{id}]

CRUD.

POST
/enterprise/projects/{id}/subtasks

Legacy. Kept for compatibility. Kanban subtasks live under /tasks/ with parent_task_id.

POSTGETDELETE
/enterprise/share, /enterprise/shares[/{id}]

Share resources (source/content/collection/plan/learning) with another client/project.

PUT
/enterprise/associate

Associate a resource to a client+project.

POSTGETPUTDELETE
/enterprise/teams[/{id}]

CRUD teams.

GET
/enterprise/allocation

Resource allocation.

GET
/enterprise/orgchart

Hierarchical tree (reports_to).

/timesheets

POST
/timesheets/

Create a manual time entry.

Body
task_id, minutes, billable, description?, date?
GET
/timesheets/

List entries.

Query
user_id?, project_id?, task_id?, date_from?, date_to?, billable?
PUTDELETE
/timesheets/{id}

Update/delete.

GET
/timesheets/report

Aggregated. Returns by_user, by_client, by_project, daily, billable/non-billable split.

Query
days?, user_id?, client_id?, project_id?
Automation & Delivery

Automations (trigger→action), HMAC-signed webhooks, notifications, publishing and approvals.

/automations

GET
/automations/triggers

Trigger catalog (task.created, task.moved, etc.).

GET
/automations/actions

Action catalog.

POSTGETPUTDELETE
/automations[/{id}]

CRUD.

GET
/automations/{id}/runs

Run history.

POST
/automations/{id}/test

Execute with a test payload.

/webhooks

GET
/webhooks/events

Available event_types.

POSTGETPUTDELETE
/webhooks[/{id}]

CRUD.

Body
url, events[], secret?, headers?, active
POST
/webhooks/{id}/test

Send a sample payload.

GET
/webhooks/{id}/deliveries

Delivery history with status code, duration, response body.

/notifications

GET
/notifications/

List (per-user + broadcast).

GET
/notifications/unread-count

{count}.

PUT
/notifications/{id}/read

Mark as read.

PUT
/notifications/read-all

Mark all as read.

DELETE
/notifications/{id}

Delete.

/publishing

GETPOSTPUTDELETE
/publishing/accounts[/{id}]

Connected social accounts.

GET
/publishing/linkedin/auth-url

Start LinkedIn OAuth.

GET
/publishing/linkedin/callback

LinkedIn OAuth callback.

GET
/publishing/linkedin/status

Connection status.

POST
/publishing/linkedin/publish

Publish a content to LinkedIn.

GET
/publishing/meta/auth-url

Meta (FB+IG) OAuth — init.

GET
/publishing/meta/callback

Meta OAuth callback.

GET
/publishing/meta/status

Meta connection status.

POST
/publishing/meta/publish/facebook

Publish to Facebook.

POST
/publishing/meta/publish/instagram

Publish to Instagram.

GETPOSTPUTDELETE
/publishing/scheduled[/{id}]

Scheduled posts CRUD + cancel.

/approvals

POST
/approvals/content/{content_id}

Create an approval link with a token.

GET
/approvals/content/{content_id}

List approvals of the content.

GET
/approvals/public/{token}
Public

Approval page (view).

POST
/approvals/public/{token}
Public

Approve/reject with a comment.

Observability

AI logs, token usage, leaderboard and the knowledge graph.

/ai-logs

GET
/ai-logs

List logs.

Query
provider?, model?, function?, status?, user_id?, date_from?, date_to?, limit?, offset?
GET
/ai-logs/stats

Summary.

GET
/ai-logs/token-usage

Daily + by model + by user + by function.

GET
/ai-logs/leaderboard

Score + badges (champion, top3, power_user).

/graph

GET
/graph/knowledge

Full graph (nodes + edges).

GET
/graph/stats

Pipeline counts.

GET
/graph/influence

Influence analysis across sources/learnings/contents.

Admin

Settings, default providers, embedding model and internal Claude Code helpers.

/settings

GET
/settings/

Return settings (secrets masked).

PUT
/settings/

Update API keys, default providers, embedding model/provider, frontend_url, etc.

POST
/settings/test-provider

Validate a provider's credentials.

POST
/settings/test-github

Validate a GitHub PAT.

GET
/settings/available-models

Models available by provider.

GET
/settings/claude-code/auth-status

Local Claude Code CLI status.

POST
/settings/claude-code/save-token

Save the Claude Code OAuth token.

/claude-code

Internal reasoning helpers.

GET
/claude-code/context

Build a context block for the agent.

POST
/claude-code/query

Vector query.

POST
/claude-code/generate

Generate from a brief.

GET
/claude-code/patterns/{collection_id}

Patterns of a collection.

POST
/claude-code/memory

Persist an event to the memory log.

Auth

Login, identity, Supabase OAuth exchange and TOTP (MFA).

/auth

POST
/auth/login
Public

Exchange email+password for a JWT. Rate-limited 5/min.

GET
/auth/me

Return the current user.

GET
/auth/status
Public

{auth_enabled: bool} — used by the frontend to decide whether to require login.

GET
/auth/supabase-config
Public

Public Supabase config (URL + anon key).

POST
/auth/supabase-exchange
Public

Exchange a Supabase OAuth token for an internal JWT.

PUT
/auth/change-password

Change the authenticated user's password.

/mfa

GET
/mfa/status

Whether the user has TOTP enabled.

POST
/mfa/enroll

Generate TOTP secret + backup codes.

POST
/mfa/verify-enrollment

Confirm the first TOTP code.

POST
/mfa/disable

Remove TOTP (rate-limited).