Sur cette page

Développeurs

L’API ZeeDo

Dernière mise à jour : 2026-11-07.OpenAPI 3.1224 opérationsTélécharger le document OpenAPI 3.1

Tout ce qu’une personne peut faire dans ZeeDo, un programme peut le faire via l’API à partir du forfait Pro ; les clés Starter sont en lecture seule et Free n’a pas de clé. La suppression d’un espace de travail et les actes qui demandent à une personne de confirmer son identité restent dans le navigateur.

Générez un client à partir du document : c’est celui-là même sur lequel le produit est construit et testé.

Démarrage rapide

Clés, conventions et limites

Créez une clé dans Paramètres → API et webhooks (un propriétaire confirme d’abord son identité), puis appelez l’API avec cette clé comme jeton bearer. L’URL de base est https://api.zeedo.cloud/v1.

curl https://api.zeedo.cloud/v1/me \
  -H "Authorization: Bearer <votre clé d’API>"
  • Les clés appartiennent à l’organisation, portent une portée — read, write ou admin — et peuvent être limitées à un espace de travail.
  • Corps en JSON, champs en snake_case, heures au format ISO 8601 UTC.
  • Les erreurs sont des documents de problème RFC 9457 : type, title, status, detail et, pour un champ refusé, errors[] avec un pointeur JSON.
  • Les listes se paginent avec limit (200 au plus) et next_cursor.
  • Envoyez un en-tête Idempotency-Key avec chaque POST : une répétition dans les 24 heures reçoit la même réponse que la première.
  • 600 requêtes par minute et 10 flux ouverts par clé, avec les en-têtes RateLimit-*.

Webhooks

Des envois signés des événements de votre choix

Une organisation enregistre une adresse de réception (Paramètres → API et webhooks, ou POST /webhooks) et choisit ses événements. Chaque événement est un POST en JSON avec des identifiants, le type et les horodatages — jamais le nom, l’e-mail ou l’adresse IP d’une personne, que vous relisez via l’API avec une clé.

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

Chaque envoi est signé : ZeeDo-Signature: t=<secondes unix>,v1=<signature>, où la signature est le HMAC-SHA256 hexadécimal de <t>.<corps brut> avec le secret de votre adresse de réception. Après une rotation du secret, l’ancien signe encore à côté pendant 24 heures, comme second v1. Refusez une signature vieille de plus de 5 minutes.

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

// header : la valeur ZeeDo-Signature ; body : le corps brut de la requête, avant toute analyse 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)));
}
  • Répondez par un code 2xx en moins de 10 secondes. Toute autre réponse — une erreur, une redirection, aucune réponse — est retentée à intervalles croissants pendant 24 heures ; l’envoi devient ensuite une lettre morte, conservée 7 jours et renvoyable depuis les Paramètres.
  • Les envois arrivent au moins une fois et dans n’importe quel ordre : ignorez un id déjà traité.
  • Les requêtes portent aussi ZeeDo-Event-Id, ZeeDo-Event-Type et ZeeDo-Delivery-Id. Les adresses de réception sont en https, sur le port 443, à un nom d’hôte public.
  • Événements : 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 et task.created.
  • Pour vérifier votre adresse de réception, appuyez sur Envoyer un test dans Paramètres → API et webhooks : un envoi du type webhook.test avec un data vide, signé comme les autres et envoyé quels que soient les événements choisis. Un par minute au plus.

Opérations

224 opérations. Le document OpenAPI donne pour chacune ses paramètres, corps, portées et erreurs.

Alertes

  • GET/alertsList fired alerts

Applications

  • GET/connectorsList connectors

Authentification unique

  • 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

Automatisations

  • 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

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

Cartes d’échange

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

Clés d’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

Coffre-fort

  • 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

Confidentialité

  • 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

Connexions

  • 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

Constats

  • 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

Coûts

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

Décisions

  • GET/decisionsList decisions

Demandes d’approbation

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

Droits du forfait

  • GET/entitlementsGet the entitlements of the organisation

Espaces de travail

  • 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

Exécutions

  • 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

Facturation

  • 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

Fichiers

  • 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

Flux en direct

  • GET/streamServer-sent event stream

Fournisseurs d’IA

  • 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

Invitations

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

Journal d’audit

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

L’appelant

  • GET/meDescribe the calling principal

Machines

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

Membres

  • 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

Mémoire

  • 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

Modèles d’IA

  • GET/modelsList the model catalog

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

Outils

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

Propositions de mission

  • 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

Récapitulatif quotidien

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

Règles d’alerte

  • 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

Règles permanentes

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

Serveurs 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

Sessions

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

Sessions de navigateur

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

Surfaces

  • 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

Surveillances

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

Suspensions

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

Tableaux de bord

  • 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

Tâches

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

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

Les chemins, résumés et exemples de code sont les mots du document OpenAPI et restent en anglais, pour qu’un client généré à partir de lui dise la même chose.