Bearer authentication
Send the key only from a trusted server. It is never a browser-side approval credential.
Authorization: Bearer mm_live_…
Content-Type: application/jsonConnect your own tools to MarkMate through a workspace-scoped bearer key. Discover the live public catalog, inspect exact schemas, prepare human approvals, and execute with durable idempotency.
Disabled providers are omitted from discovery, docs, workflows, and execution.
Create a scoped key in Settings, keep it server-side, and use the workspace id attached to that key. The public contract is available as OpenAPI 3.1 JSON.
Send the key only from a trusted server. It is never a browser-side approval credential.
Authorization: Bearer mm_live_…
Content-Type: application/jsonUse the response as the source of truth for the current rollout and your key allowlist.
curl https://markmateos.com/api/v1/workspaces/WORKSPACE_ID/operations \
+ -H "Authorization: Bearer $MARKMATE_API_KEY"Every route is workspace-aware, capability-checked, and backed by the same registry as the app, agent, workflows, and MCP.
/v1/workspaces/{workspaceId}/operationsReturns only operations that are public, enabled, and allowlisted for the bearer key.
/v1/workspaces/{workspaceId}/operations/{opId}Returns operation metadata plus the exact input_schema and output_schema for the key.
/v1/workspaces/{workspaceId}/connectionsReturns visible same-workspace connection metadata. Credentials are never returned.
/v1/workspaces/{workspaceId}/operations/prepare-writeCreates a human-reviewable draft with statement, risk level, and approval id. It does not execute.
/v1/workspaces/{workspaceId}/operations/runReads can run directly. Writes require an existing human approvalId and stable idempotencyKey.
A write request is a two-step contract: prepare the exact draft, then run only after a human in the workspace has approved it. No API endpoint, AI model, webhook, or workflow listener receives approval authority.
POST /api/v1/workspaces/WORKSPACE_ID/operations/prepare-write
{ "opId": "…", "input": { … }, "idempotencyKey": "client-run-001" }
POST /api/v1/workspaces/WORKSPACE_ID/operations/run
{ "opId": "…", "input": { … }, "approvalId": "…", "idempotencyKey": "client-run-001" }Never retry a failed write blindly. Inspect the stable code and preserve the same idempotency key for a deliberate redelivery.
Missing, expired, revoked, or invalid bearer key.
The key or workspace role lacks the requested capability or resource scope.
The operation is disabled, private, unavailable, or not allowlisted.
Idempotency or approval state conflicts with an existing execution.
The request or operation input failed schema validation.
The key or provider/workspace admission limit was reached.
Private and disabled providers are intentionally absent. Re-fetch discovery when your workspace or key scope changes.