На этой странице

Разработчикам

API ZeeDo

Обновлено 2026-11-07.OpenAPI 3.1224 операцииСкачать документ OpenAPI 3.1

Всё, что человек может сделать в ZeeDo, программа может сделать через API на тарифе Pro и выше; ключи Starter только читают, на Free ключей нет. Удаление рабочего пространства и действия, где человек подтверждает, что это именно он, доступны только в браузере.

Сгенерируйте клиент из документа: по этому же документу продукт собирают и тестируют.

Быстрый старт

Ключи, соглашения и ограничения

Создайте ключ в разделе «Настройки → API и вебхуки» (владелец сначала подтверждает, что это он), затем вызывайте API с ним как с bearer-токеном. Базовый URL: https://api.zeedo.cloud/v1.

curl https://api.zeedo.cloud/v1/me \
  -H "Authorization: Bearer <ваш ключ API>"
  • Ключи принадлежат организации, имеют область действия — read, write или admin — и могут быть ограничены одним рабочим пространством.
  • Тела в JSON, поля в snake_case, время в ISO 8601 UTC.
  • Ошибки — документы проблем RFC 9457: type, title, status, detail и, для отклонённого поля, errors[] с указателем JSON.
  • Списки разбиты на страницы с помощью limit (не более 200) и next_cursor.
  • Отправляйте заголовок Idempotency-Key с каждым POST: повтор в течение 24 часов вернёт тот же ответ, что и первый запрос.
  • 600 запросов в минуту и 10 открытых потоков на ключ, с заголовками RateLimit-*.

Вебхуки

Подписанная доставка выбранных вами событий

Организация регистрирует одну конечную точку («Настройки → API и вебхуки» или POST /webhooks) и выбирает события. Каждое событие — POST с JSON, содержащим идентификаторы, тип и метки времени, — никогда имя, адрес электронной почты или IP-адрес человека: их вы читаете через API с ключом.

{
  "id": "evt_eu_01J9ZQ3M7X5V2K8R4T6Y1N0PBA",
  "type": "run.completed",
  "version": 1,
  "occurred_at": "2026-09-27T10:02:31.000Z",
  "org_id": "org_eu_01J9ZQ1C4H8D6F2W5S7K3M9QXE",
  "data": {
    "run_id": "run_eu_01J9ZQ2V8N4B6C1X3Z5Q7W9ERT",
    "bot_id": "bot_eu_01J9ZQ2A3S5D7F9G1H3J5K7L9M"
  }
}

Каждая доставка подписана: ZeeDo-Signature: t=<секунды unix>,v1=<подпись>, где подпись — шестнадцатеричный HMAC-SHA256 от <t>.<исходное тело> с секретом вашей конечной точки. После смены секрета прежний ещё 24 часа подписывает рядом с новым, как второй v1. Отклоняйте подпись старше 5 мин.

import { createHmac, timingSafeEqual } from 'node:crypto';

// header: значение ZeeDo-Signature; body: исходное тело запроса до разбора JSON
export function verified(header, body, secret) {
  const parts = header.split(',');
  const t = parts.find((p) => p.startsWith('t='))?.slice(2);
  if (!t || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
  const expected = createHmac('sha256', secret).update(`${t}.${body}`).digest('hex');
  return parts.filter((p) => p.startsWith('v1=')).some((p) =>
    p.length === expected.length + 3 && timingSafeEqual(Buffer.from(p.slice(3)), Buffer.from(expected)));
}
  • Ответьте любым кодом 2xx в течение 10 секунд. Всё остальное — ошибка, перенаправление, отсутствие ответа — повторяется с растущими паузами 24 часа; затем доставка попадает в недоставленные (dead letter), хранится 7 дней, и её можно отправить снова из настроек.
  • Доставка выполняется как минимум один раз и в произвольном порядке: пропускайте id, который уже обработали.
  • Запросы также содержат ZeeDo-Event-Id, ZeeDo-Event-Type и ZeeDo-Delivery-Id. Конечные точки — https на порту 443 с публичным именем хоста.
  • События: alert.fired, approval.decided, approval.requested, billing.service_state_changed, bot.state_changed, budget.threshold, connection.created, connection.error, consent.recorded, memory.note_created, policy.updated, run.cancelled, run.completed, run.failed, run.parked, task.completed и task.created.
  • Чтобы проверить конечную точку, нажмите «Отправить тест» в разделе «Настройки → API и вебхуки»: придёт одна доставка типа webhook.test с пустым data, подписанная, как и все остальные, независимо от выбранных событий. Не чаще одного раза в минуту.

Операции

224 операции. В документе OpenAPI для каждой указаны параметры, тела, области действия и ошибки.

Боты

  • GET/botsList bots
  • POST/botsCreate a bot
  • GET/bots/exportExport a workspace's bots and their budgets
  • GET/bots/{id}Get a bot, with its schedule and budget
  • PATCH/bots/{id}Change a bot - who it is, its model, schedule, budget and manager
  • DELETE/bots/{id}Delete a bot
  • POST/bots/{id}/pausePause a bot
  • PUT/bots/{id}/pinPin a bot for the caller
  • DELETE/bots/{id}/pinUnpin a bot for the caller
  • PUT/bots/{id}/look-outTurn a bot's look-out on or off
  • POST/bots/{id}/packages/emptyEmpty a bot's installed packages
  • PUT/bots/{id}/rules/{rule}/shapeSet what a person's rule checks
  • POST/bots/{id}/rules/{rule}/keysAdd an exact address to a person's rule
  • POST/bots/{id}/rule-questions/{q}/answerAnswer a question about a person's rule
  • POST/bots/{id}/rules/{rule}/undoUndo a rule kept from a person's message
  • POST/bots/{id}/rules/{rule}/put-backPut back a rule just undone
  • POST/bots/{id}/rules/{rule}/restoreBring back a stopped rule
  • POST/bots/{id}/rule-exceptions/{e}/voidTake back a step allowed once
  • POST/bots/{id}/messages/{m}/keep-as-ruleKeep a person's message as a rule
  • POST/bots/{id}/rules/{rule}/retireStop using a person's rule
  • POST/bots/{id}/rulesAdd a person's rule for a bot
  • PATCH/bots/{id}/rules/{rule}Change the words of a person's rule
  • POST/bots/{id}/kept-lines/{line}/keep-as-ruleKeep a line kept from the chat as a rule
  • POST/bots/{id}/resumeResume a paused bot
  • POST/bots/{id}/stopStop a bot (its open run ends, cancelled on blocker stopped; the bot returns to its schedule)
  • POST/bots/{id}/archiveArchive (fire) a bot
  • GET/bots/{id}/filesList a bot's files as its Files tab shows them
  • GET/bots/{id}/conversationRead a bot's chat record
  • GET/bots/{id}/conversation/searchSearch a bot's chat record
  • GET/bots/{id}/messagesRead a bot's conversation
  • POST/bots/{id}/messagesSend a message to a bot
  • POST/bots/{id}/runStart a run now
  • GET/bots/{id}/instructionsRead the instruction stack a bot runs on
  • POST/bots/{id}/brief-proposalsPropose a change of a bot's brief
  • PATCH/bots/{id}/approvals/{class}Change whether a bot needs approval for an action class

Вебхуки

  • GET/webhooksList the organisation's webhook endpoint
  • POST/webhooksRegister the organisation's webhook endpoint
  • GET/webhooks/{id}Read the webhook endpoint
  • PATCH/webhooks/{id}Change the webhook endpoint
  • DELETE/webhooks/{id}Remove the webhook endpoint
  • POST/webhooks/{id}/rotate-secretRotate the webhook signing secret
  • GET/webhooks/{id}/deliveriesList the webhook deliveries and dead letters
  • POST/webhooks/{id}/deliveries/{delivery_id}/replaySend a dead letter again
  • POST/webhooks/{id}/testSend a test delivery

Возможности тарифа

  • GET/entitlementsGet the entitlements of the organisation

Вызывающий

  • GET/meDescribe the calling principal

Единый вход

  • GET/sso/connectionsList SSO connections
  • POST/sso/connections/syncRefresh the SSO connection mirror from WorkOS
  • POST/sso/portal-linkCreate a WorkOS admin portal link
  • PATCH/ssoChange the organisation's SSO settings

Ежедневная сводка

  • GET/alert-digestGet a workspace's scheduled digest
  • PUT/alert-digestSet or turn off a workspace's scheduled digest

Журнал аудита

  • GET/auditList audit events
  • GET/audit/exportExport audit events

Задачи

  • GET/tasksList tasks
  • POST/tasksGive a bot a task
  • PATCH/tasks/{id}Move or change a task

Замеченное ботами

  • POST/findings/{id}/helpAsk the bot to help with a finding
  • POST/findings/{id}/dismissDismiss a finding
  • POST/findings/{id}/muteStop the bot telling this kind of finding

Запуски

  • GET/runsList runs
  • GET/runs/{id}Get a run
  • GET/runs/{id}/stepsList the steps of a run
  • POST/runs/{id}/forkFork a run from a step, with a changed instruction
  • POST/runs/{id}/cancelCancel a run (stops its bot, or that job alone when it stands aside; it ends cancelled on blocker stopped)
  • POST/runs/{id}/recheckAsk a run parked because the AI service did not answer to check again now
  • GET/runs/{id}/artifacts/archiveDownload a run's files as one archive

Инструменты

  • GET/toolsList tools
  • PATCH/tools/{id}Adjust an imported tool's classification

Карточки

  • GET/cardsList interaction cards
  • GET/cards/{id}Get an interaction card
  • POST/cards/{id}/answerAnswer an interaction card (answer, approve, deny or skip)

Ключи API

  • GET/api-keysList API keys
  • POST/api-keysCreate an API key
  • DELETE/api-keys/{id}Revoke an API key
  • POST/api-keys/{id}/rotateRotate an API key

Конфиденциальность

  • GET/privacy/erasureList erasure requests
  • POST/privacy/erasureRequest erasure of personal data
  • GET/privacy/erasure/{id}Get an erasure request
  • POST/privacy/exportRequest an export of the organisation
  • GET/privacy/exportsList exports
  • GET/privacy/exports/{id}Get an export
  • GET/privacy/exports/{id}/downloadDownload an export

Машины

  • GET/machinesThe workspace's machine and the machine pill's figures

Модели

  • GET/modelsList the model catalog

Наблюдения

  • GET/watchesList standing watches
  • GET/watches/{id}Get a standing watch
  • PATCH/watches/{id}Pause, resume or cancel a standing watch

Одобрения

  • GET/approvalsList approvals
  • POST/approvals/{id}/decideDecide an approval (approved or denied, optionally granting a standing approval)

Оплата

  • GET/billingThe organisation's billing overview
  • GET/billing/invoicesList the organisation's invoices
  • PUT/billing/detailsSave the organisation's billing details
  • POST/billing/checkout-sessionsOpen a Stripe Checkout for the first purchase or a reactivation
  • POST/billing/previewsPreview what a billing change costs now and at renewal
  • POST/billing/changesChange a plan, an add-on, managed keys or the interval
  • GET/billing/changes/{id}Get a billing change
  • DELETE/billing/changes/{id}Undo a scheduled change, or void a pending payment
  • PATCH/billing/workspaces/{workspace_id}Set a workspace's managed-key opt-in or recording days
  • POST/billing/cancellationCancel the subscription at the end of the paid period
  • DELETE/billing/cancellationRevoke a scheduled cancellation
  • POST/billing/portal-sessionsOpen Stripe's Customer Portal
  • POST/billing/payment-retryRetry the owed invoices now

Оповещения

  • GET/alertsList fired alerts

Организация

  • GET/orgGet the organisation
  • PATCH/orgUpdate the organisation
  • GET/org/eu-checksWhere the organisation's model checks are made
  • PUT/org/eu-checksKeep every model check in the EU, or stop keeping them there

Память

  • GET/memory/searchSearch memory
  • GET/memory/factsList facts
  • POST/memory/notesCreate a note
  • DELETE/memory/notes/{id}Delete a note
  • GET/memory/procedures/{path}Get a procedure
  • PUT/memory/procedures/{path}Create or replace a procedure
  • GET/memory/episodes/{id}Get an episode
  • POST/memory/{kind}/{id}/pinPin a memory item
  • POST/memory/{kind}/{id}/retractRetract a memory item
  • POST/memory/erasuresErase memory
  • GET/memory/erasures/{id}Get a memory erasure
  • POST/memory/{kind}/{id}/confirmConfirm a note or a relation
  • GET/memory/capturesList the steps people showed or took over, waiting to be saved as flows
  • POST/memory/captures/{id}/saveSave captured steps as a flow
  • DELETE/memory/captures/{id}Discard captured steps

Панели

  • GET/dashboards/spendThe organisation's spend, by workspace, team, model or member
  • GET/dashboards/runsHow the organisation's jobs went, per bot and per trigger, with approval waits
  • GET/dashboards/toolsTool calls, errors and latency per connector and tool, and per hour

Поверхности

  • GET/surfaces/{id}/hold/stepsThe steps so far of your own recording on a bot's screen
  • POST/surfaces/{id}/hold/capturePause or resume your own recording on a bot's screen
  • POST/surfaces/{id}/streamWatch a bot's live screen, or take it over

Подключения

  • GET/connectionsList connections
  • POST/connectionsCreate a connection
  • GET/connections/{id}Get a connection
  • PATCH/connections/{id}Change who may use a connection
  • DELETE/connections/{id}Remove a connection
  • PUT/connections/{id}/keyReplace a connection's key

Поставщики ИИ

  • GET/providersList providers
  • POST/providersRegister a provider
  • GET/providers/{id}Get a provider
  • PATCH/providers/{id}Rename, disable or re-enable a provider, or price a custom endpoint's models
  • DELETE/providers/{id}Remove a provider
  • POST/providers/{id}/keysAdd or rotate a provider key
  • DELETE/providers/{id}/keys/{key_id}Revoke a provider key
  • POST/providers/{id}/probeValidate a provider's key, and probe a custom endpoint
  • GET/providers/key-recipientGet the public key a provider key is sealed to
  • GET/providers/defaultsGet the workspace's default models
  • PUT/providers/defaultsSet the workspace's default model for a purpose
  • DELETE/providers/defaults/{purpose}Clear a purpose's own model
  • GET/providers/chainsGet the fallback chains
  • PUT/providers/chainsReplace the fallback chains

Постоянные правила

  • GET/standing-approvalsList standing approvals
  • POST/standing-approvalsCreate a standing approval
  • DELETE/standing-approvals/{id}Revoke a standing approval

Поток в реальном времени

  • GET/streamServer-sent event stream

Правила оповещений

  • GET/alert-rulesList alert rules
  • POST/alert-rulesCreate an alert rule
  • GET/alert-rules/{id}Get an alert rule
  • PATCH/alert-rules/{id}Change an alert rule's channels or settings
  • DELETE/alert-rules/{id}Remove an alert rule

Предложения заданий

  • GET/brief-proposalsList the proposed changes of bots' briefs
  • GET/brief-proposals/{id}Get a proposed change of a bot's brief
  • POST/brief-proposals/{id}/answerAnswer a proposed change of a brief, or a rule card

Приглашения

  • GET/invitesList invitations
  • POST/invitesInvite a member
  • DELETE/invites/{id}Revoke an invitation
  • POST/invites/{id}/resendSend an invitation again

Приложения

  • GET/connectorsList connectors

Приостановки

  • POST/suspensions/{id}/appealAppeal a suspension

Рабочие пространства

  • GET/workspacesList workspaces
  • POST/workspacesCreate a workspace
  • GET/workspaces/{id}Get a workspace
  • PATCH/workspaces/{id}Update a workspace
  • POST/workspaces/{id}/uploadsStore a file to hand to a bot
  • DELETE/workspaces/{id}/uploads/{upload_id}Remove a file before it is sent
  • GET/workspaces/{id}/budgetGet the workspace budget a person set
  • PUT/workspaces/{id}/budgetSet, change or remove the workspace budget
  • GET/workspaces/{id}/report-recipientsGet who gets a copy of the workspace's monthly report
  • PUT/workspaces/{id}/report-recipientsSet who gets a copy of the workspace's monthly report
  • GET/workspaces/{id}/usageGet the share of the AI usage the plan includes and its dates
  • GET/workspaces/{id}/activityRead the workspace's activity feed
  • GET/workspaces/{id}/egressThe workspace's egress allowlist and host deny list
  • PUT/workspaces/{id}/egressReplace the workspace's egress allowlist and host deny list
  • GET/workspaces/{id}/policyGet the workspace policy
  • PATCH/workspaces/{id}/policyChange the workspace policy
  • GET/workspaces/{id}/policy-documentGet the workspace policy document
  • PUT/workspaces/{id}/policy-documentReplace the workspace policy document
  • GET/workspaces/{id}/standingThe workspace's standing - its suspension in force and its fair-use flag

Расходы

  • GET/costsCost breakdown, grouped by bot, model, tool, member or day

Регулярные задачи

  • GET/automationsList a bot's automations
  • POST/automationsSchedule an automation
  • GET/automations/{id}Get an automation
  • PATCH/automations/{id}Pause, resume, cancel or change an automation
  • DELETE/automations/{id}Cancel an automation
  • POST/automations/{id}/adoptKeep a bot's tainted automation as the caller's own

Решения

  • GET/decisionsList decisions

Сеансы

  • GET/sessionsList sessions
  • DELETE/sessions/{id}Revoke a session

Сеансы браузера

  • GET/browser-sessionsList browser sessions
  • GET/browser-sessions/{id}Get a browser session

Серверы MCP

  • GET/mcp-serversList MCP servers
  • POST/mcp-serversRegister an MCP server
  • POST/mcp-servers/previewCheck an MCP server before registering it
  • DELETE/mcp-servers/{id}Remove an MCP server that has no tools
  • GET/mcp-servers/{id}/accessRead each bot's access to an MCP server
  • PUT/mcp-servers/{id}/accessSet bots' access to an MCP server
  • POST/mcp-servers/{id}/reopenOpen a rejected MCP server for another review
  • POST/mcp-servers/{id}/pausePause an MCP server
  • POST/mcp-servers/{id}/resumeResume a paused MCP server
  • POST/mcp-servers/{id}/turn-onTurn a rejected MCP server back on
  • POST/mcp-servers/{id}/approveApprove an MCP server
  • POST/mcp-servers/{id}/rejectReject an MCP server
  • POST/mcp-servers/{id}/discoverImport an MCP server's tools

Участники

  • GET/membersList members
  • POST/membersAdd a member
  • GET/members/{id}Get a member
  • PATCH/members/{id}Update a member - their role and their grants
  • DELETE/members/{id}Remove a member
  • POST/members/{id}/transfer-ownershipTransfer ownership of the organisation

Файлы

  • GET/artifactsList artifacts
  • DELETE/artifacts/{id}Delete an artefact
  • GET/artifacts/{id}/contentDownload an artefact's file
  • GET/artifacts/{id}/previewPreview the first lines, rows or blocks of an artefact's file

Хранилище паролей

  • GET/vault/entriesList the credential vault's entries
  • GET/vault/entries/{id}Get a vault entry
  • POST/vault/entries/{id}/revealReveal a credential to the person asking

Пути, описания и примеры кода — это слова самого документа OpenAPI, они остаются на английском, чтобы сгенерированный из него клиент говорил то же самое.