Mycel API
The Mycel API lets your own software, scripts and AI agents do what a firm owner does in Mycel: see what needs them, list clients, start client work, approve and send it, invoice and chase payment. It is a REST API over HTTPS with JSON in and out, described by an OpenAPI 3.1 specification. The same operations are available as tools on the Mycel MCP server.
Authentication
Every request carries the firm owner’s API key as a bearer token. Create one in Mycel under Settings, MCP. A key acts as the owner, so keep it on a server. Operations that reach a client (approve_and_send, send_invoice, chase_invoice) should be confirmed with the owner before an agent calls them.
Authorization: Bearer $MYCEL_API_KEY
Example request
Every operation is a POST to https://app.mycelhq.com/api/v1/<operation> with its inputs as a JSON body.
curl -X POST https://app.mycelhq.com/api/v1/list_clients \
-H "Authorization: Bearer $MYCEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Operations
- POST /api/v1/what_needs_me
- The owner's ranked to-do list right now: work waiting for sign-off, clients who have not answered, overdue invoices, and why each matters.
- POST /api/v1/list_clients
- Every client of the firm, with their ids.
- POST /api/v1/get_clientneeds client_id
- What the firm knows about one client: their work, history, rules learned from corrections, and context.
- POST /api/v1/add_clientneeds name
- Add a client. Adding one can open their engagement if the firm has a live service; nothing is sent to them without the owner's OK.
- POST /api/v1/list_deliverables
- Client work produced by Mycel. Filter by status: in_review (waiting for the owner), with_client, accepted, drafting.
- POST /api/v1/get_deliverableneeds deliverable_id
- One deliverable: its versions, files, what was checked, and its timeline.
- POST /api/v1/send_back_for_changesneeds deliverable_id, note
- Send a deliverable back to be redone, with what is wrong. The note is kept as a correction the firm learns from.
- POST /api/v1/list_client_requests
- What the firm is waiting on from clients (documents, answers, decisions), and how long each has been open.
- POST /api/v1/list_invoices
- The firm's invoices, with status (draft, sent, overdue, paid) and amounts.
- POST /api/v1/list_recurring_work
- The recurring jobs per client (what runs, for whom, and when it is next due).
- POST /api/v1/change_timingneeds job_id, instruction
- Change when a recurring job runs, in plain words: 'push it to the 15th', 'skip October', 'quarterly from now on'. Unclear requests are refused with a question.
- POST /api/v1/what_the_firm_knows
- The firm's brain: what it sells, to whom, its clients and kinds of work, learned from its own mail and files.
- POST /api/v1/approve_and_sendneeds deliverable_id
- The owner's OK: send a deliverable that is waiting for review to its client.
- POST /api/v1/list_approvals
- Actions waiting for the owner's approval (emails, changes in client systems, spend).
- POST /api/v1/decide_approvalneeds approval_id, decision
- Approve or reject one pending approval.
- POST /api/v1/send_invoiceneeds invoice_id
- Send a drafted invoice to its client (moves it to sent and emails it).
- POST /api/v1/chase_invoiceneeds invoice_id
- Chase an overdue invoice now, politely, from the firm's inbox.
- POST /api/v1/start_workneeds case_id, task_type
- Start a piece of work on a client engagement (a case) — e.g. this month's report.
- POST /api/v1/firm_files
- List the firm's repository: a folder (path, default the root) or a search across it (q). The repo is how the firm works: practice/, rules/, clients/<name>/, gtm/ (icp.md, playbook.md, pipeline.md, deals.md), analytics/, site/.
- POST /api/v1/read_firm_fileneeds path
- Read one file in the firm's repository, e.g. gtm/playbook.md (which angle earns replies per buying moment) or rules/house.md.
- POST /api/v1/firm_history
- The repository's history: every commit to how the firm works, the proposed versions waiting, merged, declined or switched off.
- POST /api/v1/edit_firm_fileneeds path, body
- Edit a file the owner may edit (gtm/icp.md, gtm/playbook.md's 'Your angles' and 'Your opener', practice/*.md, a service's SKILL.md, a client's card.md). The change is a commit; every later run reads it.
- POST /api/v1/decide_firm_changeneeds consolidation_id, index, decision
- Merge, dismiss, or undo a change to how the firm works that its agents proposed (see firm_history and what_needs_me). Undo reverses a merged change and records it.
- POST /api/v1/call_mycelneeds method, path
- Any Mycel API route not covered above. method GET or POST (or PATCH/DELETE), path under /v1/, optional JSON body. See https://docs.mycelai.dev for the routes.
Errors
Every 4xx and 5xx response is JSON with a stable machine-readable code, a message for people and a hint for what to do next. Codes: missing_input (400), unauthorized (401), forbidden (403), unknown_tool and not_found (404), rate_limited (429), request_failed (500).
{ "error": { "code": "unauthorized", "message": "No key, or the key is not valid.", "hint": "Send Authorization: Bearer <owner API key> from Mycel's MCP settings." } }Rate limits
Each key may make 120 requests per 60 seconds. Every response carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset and RateLimit-Policy headers. Over the limit, the API answers 429 with a Retry-After header in seconds; wait that long, then retry.
Versioning and deprecation
The version is in the path: this is v1. Adding operations, optional inputs or response fields is not a breaking change. A breaking change ships as /api/v2, and v1 keeps working for at least six months after v2 ships. An operation that is going away answers with a Deprecation header (RFC 9745), a Sunset header with its last day (RFC 8594) and a Link to its replacement, and is announced in the changelog.
For AI agents
Agents can read llms.txt for when to use Mycel, connect over MCP, or load the OpenAPI specification as function definitions: every operation has a unique operationId, a description and a typed input schema.