Developer
API Docs
Three ways in from outside the app: product API keys for sōtem Studio and the Prospecting Agent (part of sōtem Team), a read-only MCP server that lets AI clients search a workspace, and signed webhooks that tell your systems when records change.
Product API keys
Every request carries one key in the Authorization header. A key belongs to one home and names the products it may use (its scopes): voice, radar, create or mcp. The secret is shown once, when you create it.
Authorization: Bearer md_live_…
- Workspace keys: an admin creates them in Mondaily, Settings › Integrations, with the scopes voice, radar, create and mcp. They act as the member who created them, with that member's current role.
- Personal keys: a sōtem profile creates them on its sōtem Account page, with the scope voice. They work only on the personal addresses under
/api/v1/sotem/. - A workspace key on a personal address, or the other way round, is refused with
403 wrong_home; a key without the product's scope with403 scope_missing. - Studio, prospecting and Create keys need a plan with API access: sōtem Pro or higher, or a Mondaily plan that includes it. Your plan must also include the product itself.
Endpoints that accept a key
sōtem Studio, workspace key:
https://api.mondaily.com/api/v1/voice/…
personal key:
https://api.mondaily.com/api/v1/sotem/voice/…
Both take the same paths: POST tts (JSON text, voice_id, optional locale, format mp3, wav or opus; answers with the audio), POST stt, sts, isolate, sfx, music, dub, detect, voices/clone, and GET voices, history, usage, status. Generated audio always carries an AI watermark.
Prospecting Agent (sōtem Team), workspace key; its scope is radar:
POST https://api.mondaily.com/api/v1/discovery/search
{ "query": "Aesthetic clinics in Dubai", "deep": false }Also POST search/stream (server-sent events), GET /api/v1/discovery for the results, POST save to save leads into the Graph, and GET / POST monitors for searches that run again every day.
sōtem Create, workspace key:
POST https://api.mondaily.com/api/v1/create/presentation
{ "template": "monthly_results", "period": "last_month", "lang": "en" }
POST https://api.mondaily.com/api/v1/create/document
{ "template": "proposal", "record_id": "<a company or deal id>" }Presentation templates: monthly_results, sales_deck, investor_update, client_pitch. Document templates: proposal, client_letter, meeting_summary, monthly_report, contract_draft (a labelled template draft, not legal advice). sōtem builds the files from your records, and every figure is checked against them; a file that states a number the records don't hold is refused with 422 ungrounded. Then GET /api/v1/create lists saved files, GET /api/v1/create/:id returns one, and GET /api/v1/create/:id/download?format=pptx (or docx, pdf) returns the file. Sending a file to anyone outside always waits for a person's approval.
When the plan says no
A request your plan does not cover is answered with 402 and a body that names the plan that lifts it. plan_feature means the plan lacks the product or feature (API access, sōtem Studio, deep research); plan_limit means this month's limit is reached and adds metric, limit and used.
HTTP/1.1 402 Payment Required
{
"error": "API access isn't included on the Scout plan (sōtem Free).",
"code": "plan_feature",
"plan": "free",
"upgrade_to": "pro",
"tier": "scout"
}tier is the Mondaily plan of a workspace and null for a personal profile. Limits reset on the 1st of each month (UTC).
Rate limits
Each Studio, prospecting or Create key may make a set number of requests a minute, by plan. Above it the answer is 429 rate_limited with Retry-After: 60.
- sōtem Free: no API access
- sōtem Pro: 60 requests a minute per key
- sōtem Team: 300 requests a minute per key
- sōtem Sovereign licence: agreed with you
Each route also keeps its own short safety limit (for example 30 speech requests a minute), the same as in the app.
MCP server (read-only)
Endpoint, using the MCP Streamable-HTTP transport (JSON-RPC 2.0 over POST):
https://api.mondaily.com/api/mcp
Authenticate with a workspace API key that has the mcp scope, created by an admin in Settings › Integrations. MCP keys work on every plan:
Authorization: Bearer md_live_…
A key can search and read that workspace's records; it cannot create, change or delete anything. Revoking a key stops it immediately. Available tools:
search_records: find records by keywordget_record: fetch one record and its fields by idlist_recent: the most recently updated records, optionally of one type
Webhooks
Admins add webhook URLs (https only) in Settings → Integrations and choose the events to receive, such as a record being created, updated or deleted, a deal changing stage, or an invoice being paid. Each delivery is a JSON POST signed in the X-Mondaily-Signature header as t=<unix time>,v1=<hex>, where the hex value is the HMAC-SHA256 of <t>.<raw body> using that webhook's secret. Verify it by recomputing it on your side.
Connect your own system
Send records from your own system, let sōtem read its API and give agents actions there: Connect your own system.
The rest of the API
Everything else under /api/v1 is the API the Mondaily app itself uses. It only accepts a signed-in browser session, so keys don't work there. A full public reference is on the roadmap.
Need something specific?
Email support@mondaily.com and tell us what you're building.