Auf dieser Seite

Entwickler

Die ZeeDo-API

Stand: 2026-11-07OpenAPI 3.1224 OperationenOpenAPI-3.1-Dokument herunterladen

Alles, was eine Person in ZeeDo tun kann, kann ein Programm ab Pro über die API tun; Starter-Schlüssel lesen, und Free hat keine Schlüssel. Das Löschen eines Workspace und die Handlungen, bei denen eine Person bestätigen muss, dass sie es selbst ist, bleiben im Browser.

Generieren Sie einen Client aus dem Dokument: Es ist dasselbe, nach dem das Produkt gebaut und gegen das es getestet wird.

Schnellstart

Schlüssel, Konventionen und Grenzen

Erstellen Sie einen Schlüssel unter Einstellungen → API & Webhooks (ein Inhaber bestätigt zuerst, dass er es selbst ist), und rufen Sie die API dann mit ihm als Bearer-Token auf. Die Basis-URL ist https://api.zeedo.cloud/v1.

curl https://api.zeedo.cloud/v1/me \
  -H "Authorization: Bearer <Ihr API-Schlüssel>"
  • Schlüssel gehören der Organisation, haben einen Bereich — read, write oder admin — und können auf einen Workspace beschränkt werden.
  • JSON-Bodys, Felder in snake_case, Zeiten in ISO 8601 UTC.
  • Fehler sind Problem-Dokumente nach RFC 9457: type, title, status, detail und, für ein abgelehntes Feld, errors[] mit einem JSON-Pointer.
  • Listen blättern mit limit (höchstens 200) und next_cursor.
  • Senden Sie bei jedem POST einen Idempotency-Key-Header: Eine Wiederholung innerhalb von 24 Stunden erhält dieselbe Antwort wie der erste Aufruf.
  • 600 Anfragen pro Minute und 10 offene Streams pro Schlüssel, mit RateLimit-*-Headern.

Webhooks

Signierte Zustellungen der Ereignisse, die Sie wählen

Eine Organisation registriert einen Endpunkt (Einstellungen → API & Webhooks oder POST /webhooks) und wählt ihre Ereignisse. Jedes Ereignis ist ein POST mit JSON, das IDs, den Typ und Zeitstempel enthält — nie den Namen, die E-Mail-Adresse oder die IP-Adresse einer Person; diese lesen Sie mit einem Schlüssel über die API nach.

{
  "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"
  }
}

Jede Zustellung ist signiert: ZeeDo-Signature: t=<Unix-Sekunden>,v1=<Signatur>, wobei die Signatur der hexadezimale HMAC-SHA256 von <t>.<Roh-Body> mit dem Geheimnis Ihres Endpunkts als Schlüssel ist. Nachdem Sie das Geheimnis rotiert haben, signiert das vorherige noch 24 Stunden daneben, als zweites v1. Lehnen Sie eine Signatur ab, die älter als 5 Minuten ist.

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

// header: der Wert von ZeeDo-Signature; body: der Request-Body im Rohzustand, vor jedem JSON-Parsen
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)));
}
  • Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx. Alles andere — ein Fehler, eine Weiterleitung, keine Antwort — wird 24 Stunden lang mit wachsenden Pausen erneut versucht; danach ist die Zustellung ein Dead Letter, wird 7 Tage aufbewahrt und kann unter Einstellungen erneut gesendet werden.
  • Zustellungen erfolgen mindestens einmal und in keiner bestimmten Reihenfolge: Überspringen Sie eine id, die Sie schon verarbeitet haben.
  • Anfragen tragen außerdem ZeeDo-Event-Id, ZeeDo-Event-Type und ZeeDo-Delivery-Id. Endpunkte sind https auf Port 443 unter einem öffentlichen Hostnamen.
  • Ereignisse: 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 und task.created.
  • Zum Prüfen Ihres Endpunkts drücken Sie unter Einstellungen → API & Webhooks auf „Test senden“: eine Zustellung vom Typ webhook.test mit leerem data, signiert wie jede andere und gesendet, welche Ereignisse Sie auch gewählt haben. Höchstens eine pro Minute.

Operationen

224 Operationen. Das OpenAPI-Dokument nennt für jede ihre Parameter, Bodys, Bereiche und Fehler.

Abrechnung

  • 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

Anbieter

  • 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

API-Schlüssel

  • 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

Audit-Log

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

Aufgaben

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

Automationen

  • 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

Benachrichtigungen

  • GET/alertsList fired alerts

Benachrichtigungsregeln

  • 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

Beobachtungen

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

Berechtigungen

  • GET/entitlementsGet the entitlements of the organisation

Bots

  • 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

Briefing-Vorschläge

  • 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

Browser-Sitzungen

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

Dashboards

  • 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

Dateien

  • 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

Datenschutz

  • 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

Dauerregeln

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

Der Aufrufer

  • GET/meDescribe the calling principal

Einladungen

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

Entscheidungen

  • GET/decisionsList decisions

Freigaben

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

Gedächtnis

  • 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

Hinweise

  • 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

Interaktionskarten

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

Konnektoren

  • GET/connectorsList connectors

Kosten

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

Läufe

  • 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

Live-Stream

  • GET/streamServer-sent event stream

Maschinen

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

MCP-Server

  • 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

Mitglieder

  • 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

Modelle

  • GET/modelsList the model catalog

Oberflächen

  • 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

Organisation

  • 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

Single Sign-on

  • 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

Sitzungen

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

Sperren

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

Tägliche Zusammenfassung

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

Tresor

  • 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

Verbindungen

  • 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

Webhooks

  • 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

Werkzeuge

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

Workspaces

  • 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

Pfade, Zusammenfassungen und Codebeispiele sind die Worte des OpenAPI-Dokuments selbst und bleiben auf Englisch, damit ein daraus generierter Client dasselbe sagt.