Skip to content

API reference

Base URL https://api.grozro.com. Authenticate with a tenant API key (ak_) as a Bearer token. Rendered from /api/v1/openapi.json.

Authentication

curl -H "Authorization: Bearer ak_…" \
  https://api.grozro.com/api/v1/growth/items?status=drafted

API keys reach /api/v1/growth/*, /api/v1/mcp, and the public spec. 401 means a missing/invalid key; 403 with plan_quota_exceeded:… or plan_feature_disabled:… means the workspace plan does not allow the call.

growth

GET/api/v1/growth/overviewWorkspace snapshot: profile, channels, drafted queue, learnings

Params: include (query)

Responses: 200

GET/api/v1/growth/batchesList recent batches

Responses: 200

POST/api/v1/growth/batchesDraft a batch of ready-to-post content (async — poll the batch)

Body fields: count, focus

Responses: 201, 403

GET/api/v1/growth/batches/{id}One batch with its drafted items (settles in-flight generation)

Params: id (path, required)

Responses: 200

GET/api/v1/growth/articlesList long-form articles

Responses: 200

POST/api/v1/growth/articlesDraft one long-form X article (async — poll GET /articles)

Body fields: topic, outline, length

Responses: 201, 403

GET/api/v1/growth/articles/{id}One article

Params: id (path, required)

Responses: 200, 404

GET/api/v1/growth/itemsList content items by status

Params: status (query)

Responses: 200

POST/api/v1/growth/items/{id}/approveApprove a drafted item (optional edited body; articles may retitle)

Params: id (path, required)

Body fields: edited_body, title

Responses: 200, 409

POST/api/v1/growth/items/{id}/rejectReject a drafted item

Params: id (path, required)

Body fields: reason

Responses: 200, 409

POST/api/v1/growth/items/{id}/postedMark an approved item posted (manual publish path)

Params: id (path, required)

Body fields: external_url

Responses: 200, 409

POST/api/v1/growth/items/{id}/scheduleSchedule an approved item; the worker posts it when due

Params: id (path, required)

Body fields: post_at

Responses: 200

POST/api/v1/growth/items/{id}/post-nowPost an approved item to X immediately (articles go out as one long post)

Params: id (path, required)

Responses: 200, 400, 409, 502

GET/api/v1/growth/connectionConnected X account state

Responses: 200

DELETE/api/v1/growth/connectionDisconnect the X account

Responses: 200

GET/api/v1/growth/connectionsList connected X accounts (multi-account)

Responses: 200

POST/api/v1/growth/connections/{id}/defaultMake an account the default new content posts from

Responses: 200

PUT/api/v1/growth/profileUpdate the growth profile (voice, goal, audience…)

Responses: 200

PUT/api/v1/growth/channels/{id}Update a platform channel (status, format rules, cadence)

Params: id (path, required)

Responses: 200

POST/api/v1/growth/auditsRun an analytics audit (from synced metrics by default)

Responses: 200

GET/api/v1/growth/audits/{id}Audit result with extracted learnings

Params: id (path, required)

Responses: 200

GET/api/v1/growth/learningsList learnings (what worked / flopped / hypotheses)

Responses: 200

POST/api/v1/growth/learningsAdd a learning

Responses: 200

POST/api/v1/growth/learnings/{id}/retireRetire a learning

Params: id (path, required)

Responses: 200

GET/api/v1/growth/engagementsList engagement suggestions/drafts (replies, quotes)

Responses: 200

POST/api/v1/growth/engagementsDraft an engagement against an X post

Responses: 200

POST/api/v1/growth/engagements/{id}/approveApprove a drafted engagement

Params: id (path, required)

Responses: 200

POST/api/v1/growth/engagements/{id}/rejectReject a drafted engagement

Params: id (path, required)

Responses: 200

POST/api/v1/growth/engagements/{id}/executeExecute an approved engagement on X

Params: id (path, required)

Responses: 200

GET/api/v1/growth/targetsList target accounts

Responses: 200

POST/api/v1/growth/targetsAdd a target account to watch

Responses: 200

PUT/api/v1/growth/targets/{id}Update or pause a target

Params: id (path, required)

Responses: 200

GET/api/v1/growth/signalsList open signals from watched targets

Responses: 200

POST/api/v1/growth/signals/{id}/dismissDismiss a signal

Params: id (path, required)

Responses: 200

POST/api/v1/growth/signals/{id}/engageEngage a signal (drafts a reply/quote)

Params: id (path, required)

Responses: 200

GET/api/v1/growth/productsList products available for self-promotion weaving

Responses: 200

POST/api/v1/growth/productsAdd a product

Responses: 200

PUT/api/v1/growth/products/{id}Update or archive a product

Params: id (path, required)

Responses: 200

GET/api/v1/growth/hooksHook-pattern library with usage stats

Responses: 200

GET/api/v1/growth/reportsList weekly reports

Responses: 200

POST/api/v1/growth/reportsGenerate a weekly report

Responses: 200

GET/api/v1/growth/experimentsList experiments

Responses: 200

POST/api/v1/growth/experimentsCreate an experiment

Responses: 200

POST/api/v1/growth/experiments/{id}/concludeConclude an experiment with a verdict

Params: id (path, required)

Responses: 200

GET/api/v1/growth/rulesList automation rules

Responses: 200

POST/api/v1/growth/rulesCreate an automation rule

Responses: 200

PUT/api/v1/growth/rules/{id}Update an automation rule

Params: id (path, required)

Responses: 200

GET/api/v1/growth/rule-runsList recent automation rule runs

Responses: 200

POST/api/v1/growth/automation/pause-allPause all automation (kill switch)

Responses: 200

POST/api/v1/growth/automation/resume-allResume automation

Responses: 200

POST/api/v1/growth/connect/xBegin the X OAuth connect flow (returns the authorize URL)

Responses: 200

GET/api/v1/growth/connect/x/callbackX OAuth redirect landing (browser flow, unauthenticated)

Params: code (query), state (query)

Responses: 200

actions

POST/api/v1/actions/{name}Execute a registered capability

Params: name (path, required)

Responses: 200, 400, 404, 409, 422

agent

GET/api/v1/agent/conversationsList agent conversations

Params: limit (query)

Responses: 200

POST/api/v1/agent/conversationsCreate an agent conversation

Body fields: title

Responses: 201, 400

GET/api/v1/agent/conversations/{id}Get an agent conversation

Params: id (path, required)

Responses: 200, 404

POST/api/v1/agent/conversations/{id}/messagesPost a user turn and enqueue an agent run

Params: id (path, required)

Body fields: content, model, toolNames

Responses: 201, 400, 404, 409

GET/api/v1/agent/conversations/{id}/feedbackList the current users feedback for one agent conversation

Params: id (path, required)

Responses: 200, 401, 404

POST/api/v1/agent/conversations/{id}/feedbackSubmit feedback for an assistant message

Params: id (path, required)

Body fields: messageId, verdict, correction

Responses: 201, 400, 401, 404, 500

GET/api/v1/agent/feedbackList tenant agent message feedback

Params: verdict (query), since (query), limit (query)

Responses: 200, 400, 401

GET/api/v1/agent/jobs/{id}/traceGet an agent job trace

Params: id (path, required)

Responses: 200, 401, 404, 500

GET/api/v1/agent/jobs/{id}Get an agent job detail, including steps, approvals, and child jobs

Params: id (path, required)

Responses: 200, 401, 404

POST/api/v1/agent/jobs/{id}/cancelCancel an agent job and any non-terminal children

Params: id (path, required)

Responses: 200, 401, 404

GET/api/v1/agent/approvalsList agent approvals

Params: status (query), limit (query)

Responses: 200, 400, 401

GET/api/v1/agent/usageGet tenant agent usage and budget limits

Responses: 200, 401

GET/api/v1/agent/analyticsGet tenant agent analytics

Params: window (query)

Responses: 200, 400, 401

GET/api/v1/agent/tasksList structured agent tasks

Params: limit (query), status (query)

Responses: 200, 401

POST/api/v1/agent/tasksCreate and enqueue a structured agent task

Body fields: taskType, input, tier, model, maxAttempts

Responses: 201, 400, 401, 500

GET/api/v1/agent/tasks/{id}Get structured agent task detail

Params: id (path, required)

Responses: 200, 401, 404

POST/api/v1/agent/tasks/{id}/cancelCancel a queued structured agent task

Params: id (path, required)

Responses: 200, 401, 404, 409

GET/api/v1/agent/playbooksList tenant agent playbooks

Params: status (query)

Responses: 200, 401

POST/api/v1/agent/playbooksCreate a playbook with version 1 active

Body fields: slug, name, description, content, pinned

Responses: 201, 400, 409

GET/api/v1/agent/playbooks/{id}Get a playbook and all versions

Params: id (path, required)

Responses: 200, 404

PATCH/api/v1/agent/playbooks/{id}Update playbook metadata

Params: id (path, required)

Body fields: name, description, pinned, status

Responses: 200, 400, 404

POST/api/v1/agent/playbooks/{id}/versionsCreate a draft playbook version

Params: id (path, required)

Body fields: content, rationale

Responses: 201, 400, 404

POST/api/v1/agent/playbooks/{id}/versions/{versionId}/activateActivate a draft or retired playbook version

Params: id (path, required), versionId (path, required)

Responses: 200, 400, 404

POST/api/v1/agent/playbooks/{id}/versions/{versionId}/rejectReject a draft playbook version

Params: id (path, required), versionId (path, required)

Responses: 200, 400, 404

artifacts

GET/api/v1/artifactsList tenant artifacts

Params: limit (query), cursor (query)

Responses: 200, 401

GET/api/v1/artifacts/{id}Get a tenant artifact and active shares

Params: id (path, required)

Responses: 200, 404

DELETE/api/v1/artifacts/{id}Soft-delete a tenant artifact and revoke its shares

Params: id (path, required)

Responses: 200, 404

GET/api/v1/artifacts/{id}/downloadDownload a tenant artifact as an attachment

Params: id (path, required)

Responses: 200, 404

POST/api/v1/artifacts/{id}/sharesCreate a public artifact share token

Params: id (path, required)

Body fields: expiresInDays

Responses: 201, 404

DELETE/api/v1/artifacts/{id}/shares/{shareId}Revoke an artifact share token

Params: id (path, required), shareId (path, required)

Responses: 200, 404

GET/api/v1/artifacts/shared/{token}Download an artifact through a public share token

Params: token (path, required)

Responses: 200, 404

auth

POST/api/v1/cli/login/startBegin a device-flow CLI login (returns device_code, user_code, verification_url)

Body fields: client_name

Responses: 201

POST/api/v1/cli/login/pollPoll a device-flow login; returns the API key once approved

Body fields: device_code

Responses: 200, 404, 410

POST/api/v1/cli/login/approveApprove a pending CLI login with its user code (session auth)

Body fields: user_code

Responses: 200, 404

channels

GET/api/v1/channelsList channel adapters and tenant connections

Responses: 200, 401

POST/api/v1/channelsCreate a channel connection

Body fields: channel, routingKey, displayName, senderPolicy, config, credentials

Responses: 201, 400, 401, 409

PATCH/api/v1/channels/{id}Update a channel connection

Params: id (path, required)

Responses: 200, 400, 401, 404

DELETE/api/v1/channels/{id}Delete a channel connection

Params: id (path, required)

Responses: 200, 401, 404

core

GET/healthHealth check

Responses: 200

POST/webhooks/channels/{channel}Receive signed inbound channel webhooks

Params: channel (path, required)

Responses: 200, 401, 404, 503

documents

GET/api/v1/documentsList tenant documents

Params: limit (query)

Responses: 200

POST/api/v1/documentsCreate a tenant document and enqueue ingest

Body fields: fileName, mimeType, content, metadata

Responses: 201, 400, 409, 500

GET/api/v1/documents/{id}Get a tenant document

Params: id (path, required)

Responses: 200, 404

DELETE/api/v1/documents/{id}Delete a tenant document

Params: id (path, required)

Responses: 200, 404

POST/api/v1/documents/{id}/retryRetry a failed document ingest

Params: id (path, required)

Responses: 202, 404, 409

mcp

GET/api/v1/mcpMCP Streamable HTTP SSE endpoint

Responses: 200, 401, 403

POST/api/v1/mcpMCP Streamable HTTP endpoint

Responses: 200, 401, 403

DELETE/api/v1/mcpTerminate an MCP Streamable HTTP session

Responses: 200, 401, 403

GET/api/v1/mcp/serversList external MCP servers for the tenant

Responses: 200

POST/api/v1/mcp/serversCreate an external MCP server config

Body fields: name, transport, url, command, args, headers, env, toolPrefix, enabled, metadata

Responses: 201, 400

DELETE/api/v1/mcp/servers/{id}Delete an external MCP server config

Params: id (path, required)

Responses: 200