Skip to content

Exécutions ​

Les routes sont relatives à <PUBLIC_BASE_URL> ; les corps de requête et de réponse sont en JSON sauf mention contraire. L’authentification, les portées, la pagination et le format des erreurs sont décrits dans les guides de l’API REST.

GET /api/v1/executions ​

Lister mes exécutions

Les plus récentes d’abord, paginées par curseur (nextCursor, null à la fin). Filtres par workflow, boîte, statut et simulation. Le filtre de boîte est intersecté avec les boîtes du membre : celle d’un autre rend une page vide.

Accès — Session de membre ou clé d’API portant executions:read.

Paramètres

NomOùTypeRequis
workflowIdrequêtestringnon
mailboxIdrequêtestringnon
statusrequête"queued" | "running" | "waiting" | "succeeded" | "failed" | "cancelled"non
simulatedrequêtestringnon
qrequêtestringnon
cursorrequêtestringnon
limitrequêteintegernon

Réponses

200 — Une page d’exécutions.

ChampTypeRequis
executionsobject[]oui
nextCursorstring | nulloui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "executions": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "workflowId": { "type": "string" },
          "workflowVersionId": { "type": "string" },
          "mailboxId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "messageId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "waiting",
              "succeeded",
              "failed",
              "cancelled"
            ]
          },
          "simulated": { "type": "boolean" },
          "parentExecutionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "triggerNodeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "triggerType": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "retryOfExecutionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "messageHeadline": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "subject": { "type": "string" },
                  "fromName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
                  "fromEmail": { "type": "string" }
                },
                "required": [ "subject", "fromName", "fromEmail" ],
                "additionalProperties": false
              },
              { "type": "null" }
            ]
          },
          "error": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "code": { "type": "string" },
                  "message": { "type": "string" },
                  "nodeId": { "type": "string" },
                  "kind": { "type": "string", "enum": [ "transient", "permanent" ] },
                  "attempts": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "nodeType": { "type": "string" },
                  "details": {
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": {}
                  },
                  "at": { "type": "string" }
                },
                "required": [ "code", "message" ],
                "additionalProperties": false
              },
              { "type": "null" }
            ]
          },
          "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "finishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "createdAt": { "type": "string" }
        },
        "required": [
          "id",
          "workflowId",
          "workflowVersionId",
          "mailboxId",
          "messageId",
          "status",
          "simulated",
          "error",
          "startedAt",
          "finishedAt",
          "createdAt"
        ],
        "additionalProperties": false
      }
    },
    "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
  },
  "required": [ "executions", "nextCursor" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — request.bad_request. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/executions/{id} ​

Lire une exécution pas à pas

L’exécution, ses étapes avec leurs tentatives et leurs données, les pièces qu’elle a produites, et le nom du workflow (vide s’il a été supprimé depuis). L’exécution d’un autre membre est un 404.

Accès — Session de membre ou clé d’API portant executions:read.

Paramètres

NomOùTypeRequis
idcheminstringoui

Réponses

200 — L’exécution.

ChampTypeRequis
idstringoui
workflowIdstringoui
workflowVersionIdstringoui
mailboxIdstring | nulloui
messageIdstring | nulloui
status"queued" | "running" | "waiting" | "succeeded" | "failed" | "cancelled"oui
simulatedbooleanoui
parentExecutionIdstring | nullnon
triggerNodeIdstring | nullnon
triggerTypestring | nullnon
retryOfExecutionIdstring | nullnon
messageHeadlineobject | nullnon
errorobject | nulloui
startedAtstring | nulloui
finishedAtstring | nulloui
createdAtstringoui
workflowNamestringoui
triggerDataobject | nullnon
stepsobject[]oui
attachmentsobject[]non
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "id": { "type": "string" },
    "workflowId": { "type": "string" },
    "workflowVersionId": { "type": "string" },
    "mailboxId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
    "messageId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
    "status": {
      "type": "string",
      "enum": [ "queued", "running", "waiting", "succeeded", "failed", "cancelled" ]
    },
    "simulated": { "type": "boolean" },
    "parentExecutionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
    "triggerNodeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
    "triggerType": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
    "retryOfExecutionId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
    "messageHeadline": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "subject": { "type": "string" },
            "fromName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
            "fromEmail": { "type": "string" }
          },
          "required": [ "subject", "fromName", "fromEmail" ],
          "additionalProperties": false
        },
        { "type": "null" }
      ]
    },
    "error": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "code": { "type": "string" },
            "message": { "type": "string" },
            "nodeId": { "type": "string" },
            "kind": { "type": "string", "enum": [ "transient", "permanent" ] },
            "attempts": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
            "nodeType": { "type": "string" },
            "details": {
              "type": "object",
              "propertyNames": { "type": "string" },
              "additionalProperties": {}
            },
            "at": { "type": "string" }
          },
          "required": [ "code", "message" ],
          "additionalProperties": false
        },
        { "type": "null" }
      ]
    },
    "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
    "finishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
    "createdAt": { "type": "string" },
    "workflowName": { "type": "string" },
    "triggerData": {
      "anyOf": [
        {
          "type": "object",
          "propertyNames": { "type": "string" },
          "additionalProperties": {}
        },
        { "type": "null" }
      ]
    },
    "steps": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "nodeId": { "type": "string" },
          "status": {
            "type": "string",
            "enum": [ "queued", "running", "waiting", "succeeded", "failed", "skipped" ]
          },
          "attempt": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "output": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "data": {
            "anyOf": [
              {
                "type": "object",
                "propertyNames": { "type": "string" },
                "additionalProperties": {}
              },
              { "type": "null" }
            ]
          },
          "dataTruncated": { "type": "boolean" },
          "durationMs": {
            "anyOf": [
              { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
              { "type": "null" }
            ]
          },
          "effects": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": { "type": "string" },
                "description": { "type": "string" },
                "simulated": { "type": "boolean" }
              },
              "required": [ "kind", "description" ],
              "additionalProperties": false
            }
          },
          "llmSkipped": { "type": "boolean" },
          "attempts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "attempt": {
                  "type": "integer",
                  "exclusiveMinimum": 0,
                  "maximum": 9007199254740991
                },
                "at": { "type": "string" },
                "code": { "type": "string" },
                "message": { "type": "string" },
                "kind": { "type": "string", "enum": [ "transient", "permanent" ] },
                "interrupted": { "type": "boolean" },
                "retried": { "type": "boolean" }
              },
              "required": [ "attempt", "at", "code", "message", "kind", "retried" ],
              "additionalProperties": false
            }
          },
          "copiedFrom": { "type": "string" },
          "warnings": { "type": "array", "items": { "type": "string" } },
          "input": {
            "type": "object",
            "propertyNames": { "type": "string" },
            "additionalProperties": {}
          },
          "pinned": { "type": "boolean" },
          "disabled": { "type": "boolean" },
          "loop": {
            "type": "object",
            "properties": {
              "total": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
              "started": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
              "succeeded": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
              "failed": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
              "concurrency": {
                "type": "integer",
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991
              },
              "status": {
                "type": "string",
                "enum": [ "running", "done", "failed", "timeout" ]
              },
              "simulatedLimit": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
            },
            "required": [
              "total",
              "started",
              "succeeded",
              "failed",
              "concurrency",
              "status"
            ],
            "additionalProperties": false
          },
          "error": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "code": { "type": "string" },
                  "message": { "type": "string" },
                  "nodeId": { "type": "string" },
                  "kind": { "type": "string", "enum": [ "transient", "permanent" ] },
                  "attempts": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "nodeType": { "type": "string" },
                  "details": {
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": {}
                  },
                  "at": { "type": "string" }
                },
                "required": [ "code", "message" ],
                "additionalProperties": false
              },
              { "type": "null" }
            ]
          },
          "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "finishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
        },
        "required": [
          "id",
          "nodeId",
          "status",
          "attempt",
          "output",
          "data",
          "dataTruncated",
          "durationMs",
          "effects",
          "pinned",
          "error",
          "startedAt",
          "finishedAt"
        ],
        "additionalProperties": false
      }
    },
    "attachments": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "position": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "filename": { "type": "string" },
          "mime": { "type": "string" },
          "size": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "nodeId": { "type": "string" },
          "integration": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "createdAt": { "type": "string" }
        },
        "required": [
          "position",
          "filename",
          "mime",
          "size",
          "nodeId",
          "integration",
          "createdAt"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "id",
    "workflowId",
    "workflowVersionId",
    "mailboxId",
    "messageId",
    "status",
    "simulated",
    "error",
    "startedAt",
    "finishedAt",
    "createdAt",
    "workflowName",
    "steps"
  ],
  "additionalProperties": false
}

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — execution.not_found. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/executions/{id}/attachments/{position} ​

Télécharger une pièce produite par une exécution

Les octets de la pièce en position position de l’exécution, servis en attachment avec leur propre type et un nom de fichier encodé RFC 5987. Un blob purgé est attachment.unavailable (404).

Accès — Session de membre ou clé d’API portant executions:read.

Paramètres

NomOùTypeRequis
idcheminstringoui
positioncheminstringoui

Réponses

200 — Le fichier, en pièce jointe.

Type de contenu : application/octet-stream

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — execution.not_found, attachment.not_found, attachment.unavailable. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/executions/{id}/steps/{nodeId}/iterations ​

Lister les itérations d’une étape de boucle

Les exécutions filles d’un nœud flow.loop, une par élément, tenues hors de la liste et du détail à dessein. Le périmètre est celui de l’exécution parente.

Accès — Session de membre ou clé d’API portant executions:read.

Paramètres

NomOùTypeRequis
idcheminstringoui
nodeIdcheminstringoui

Réponses

200 — Les itérations.

ChampTypeRequis
nodeIdstringoui
iterationsobject[]oui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "nodeId": { "type": "string" },
    "iterations": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "executionId": { "type": "string" },
          "index": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
          "status": {
            "type": "string",
            "enum": [
              "queued",
              "running",
              "waiting",
              "succeeded",
              "failed",
              "cancelled"
            ]
          },
          "error": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "code": { "type": "string" },
                  "message": { "type": "string" },
                  "nodeId": { "type": "string" },
                  "kind": { "type": "string", "enum": [ "transient", "permanent" ] },
                  "attempts": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 9007199254740991
                  },
                  "nodeType": { "type": "string" },
                  "details": {
                    "type": "object",
                    "propertyNames": { "type": "string" },
                    "additionalProperties": {}
                  },
                  "at": { "type": "string" }
                },
                "required": [ "code", "message" ],
                "additionalProperties": false
              },
              { "type": "null" }
            ]
          },
          "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "finishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "createdAt": { "type": "string" }
        },
        "required": [
          "executionId",
          "index",
          "status",
          "error",
          "startedAt",
          "finishedAt",
          "createdAt"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [ "nodeId", "iterations" ],
  "additionalProperties": false
}

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — execution.not_found. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

POST /api/v1/executions/{id}/retry ​

Rejouer une exécution échouée

Planifie une nouvelle exécution à partir des données de déclenchement d’une échouée. Un corps vide rejoue depuis le début sur la version publiée ; from: "failed_step" réutilise les étapes réussies, version: "origin" rejoue la version qui a tourné. 202 : l’exécution est planifiée. Tracé au journal d’audit.

Accès — Session de membre ou clé d’API portant executions:write.

Paramètres

NomOùTypeRequis
idcheminstringoui

Corps de la requête (application/json)

ChampTypeRequis
from"start" | "failed_step"non
version"published" | "origin"non
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "from": { "default": "start", "type": "string", "enum": [ "start", "failed_step" ] },
    "version": {
      "default": "published",
      "type": "string",
      "enum": [ "published", "origin" ]
    }
  }
}

Réponses

202 — L’identifiant de la nouvelle exécution.

ChampTypeRequis
executionIdstringoui
Schéma JSON
json
{
  "type": "object",
  "properties": { "executionId": { "type": "string" } },
  "required": [ "executionId" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Cette opération accepte un en-tête Idempotency-Key : rejouer la même requête avec la même clé rend la réponse d’origine au lieu d’agir deux fois. Voir Idempotence.

Codes d’erreur — request.bad_request, execution.not_found, execution.not_retryable, execution.version_unavailable, workflow.invalid_graph. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

Exemple de requête

json
{ "from": "failed_step" }

Exemple de réponse (202)

json
{ "executionId": "0192f1c2-bbbb-7000-8000-000000000008" }

POST /api/v1/executions/{id}/cancel ​

Annuler une exécution en cours

Arrête l’exécution et ses filles ; 200 avec le statut final. Une exécution déjà conclue à la lecture est execution.not_cancellable (409).

Accès — Session de membre ou clé d’API portant executions:write.

Paramètres

NomOùTypeRequis
idcheminstringoui

Réponses

200 — Le statut final.

ChampTypeRequis
status"queued" | "running" | "waiting" | "succeeded" | "failed" | "cancelled"oui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [ "queued", "running", "waiting", "succeeded", "failed", "cancelled" ]
    }
  },
  "required": [ "status" ],
  "additionalProperties": false
}

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — execution.not_found, execution.not_cancellable. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

POST /api/v1/executions/cancel ​

Annuler une sélection d’exécutions

Annule jusqu’à 200 exécutions par identifiant, dans le périmètre du membre. Le lot ne s’arrête jamais sur un intrus : un id inconnu, ou d’un autre membre, est rendu not_found dans skipped, une exécution déjà conclue already_settled. 200 : les annulations sont faites, pas planifiées ; hasMore est toujours faux ici.

Accès — Session de membre ou clé d’API portant executions:write.

Corps de la requête (application/json)

ChampTypeRequis
executionIdsstring[]oui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "executionIds": {
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": { "type": "string" }
    }
  },
  "required": [ "executionIds" ]
}

Réponses

200 — Ce qui a été annulé, et ce qui a été ignoré.

ChampTypeRequis
executionIdsstring[]oui
skippedobject[]oui
hasMorebooleanoui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "executionIds": { "type": "array", "items": { "type": "string" } },
    "skipped": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "reason": { "type": "string", "enum": [ "not_found", "already_settled" ] }
        },
        "required": [ "id", "reason" ],
        "additionalProperties": false
      }
    },
    "hasMore": { "type": "boolean" }
  },
  "required": [ "executionIds", "skipped", "hasMore" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Cette opération accepte un en-tête Idempotency-Key : rejouer la même requête avec la même clé rend la réponse d’origine au lieu d’agir deux fois. Voir Idempotence.

Codes d’erreur — request.bad_request. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

GET /api/v1/executions/waiting ​

Lister les exécutions en attente

Les exécutions réelles suspendues sur un nœud d’attente, avec leur instant de réveil et leur clé de signal, triées par échéance et paginées par curseur. signalKey filtre par préfixe ; overdueOnly ne garde que les retards.

Accès — Session de membre ou clé d’API portant executions:read.

Paramètres

NomOùTypeRequis
signalKeyrequêtestringnon
workflowIdrequêtestring (uuid)non
overdueOnlyrequêtebooleannon
limitrequêteintegernon
cursorrequêtestringnon

Réponses

200 — Une page d’exécutions en attente.

ChampTypeRequis
itemsobject[]oui
nextCursorstring | nulloui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "executionId": { "type": "string" },
          "stepId": { "type": "string" },
          "nodeId": { "type": "string" },
          "workflowId": { "type": "string" },
          "workflowName": { "type": "string" },
          "wakeAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              { "type": "null" }
            ]
          },
          "signalKey": { "anyOf": [ { "type": "string" }, { "type": "null" } ] },
          "overdue": { "type": "boolean" },
          "outcomes": { "type": "array", "items": { "type": "string" } },
          "startedAt": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
              },
              { "type": "null" }
            ]
          },
          "subject": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
        },
        "required": [
          "executionId",
          "stepId",
          "nodeId",
          "workflowId",
          "workflowName",
          "wakeAt",
          "signalKey",
          "overdue",
          "outcomes",
          "startedAt",
          "subject"
        ],
        "additionalProperties": false
      }
    },
    "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }
  },
  "required": [ "items", "nextCursor" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — wait.bad_request. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

POST /api/v1/executions/waiting/{stepId}/wake ​

Réveiller une attente à la main

Reprend l’étape par le port choisi : done comme si l’échéance était atteinte, event comme si l’événement attendu était arrivé. Les deux branches ne font pas la même chose : l’API ne choisit jamais. Tracé au journal d’audit.

Accès — Session de membre ou clé d’API portant executions:write.

Paramètres

NomOùTypeRequis
stepIdcheminstringoui

Corps de la requête (application/json)

ChampTypeRequis
outcome"done" | "event"non
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "outcome": { "default": "done", "type": "string", "enum": [ "done", "event" ] }
  }
}

Réponses

200 — Reprise.

ChampTypeRequis
resumedtrueoui
Schéma JSON
json
{
  "type": "object",
  "properties": { "resumed": { "type": "boolean", "const": true } },
  "required": [ "resumed" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Codes d’erreur — wait.bad_request, wait.step_not_found, wait.step_not_waiting, wait.outcome_not_available, wait.already_settled. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

POST /api/v1/signals ​

Émettre un signal

Réveille (resume) ou annule (cancel) toute exécution en attente de key, à l’échelle de l’instance : un signal est organisationnel, pas borné à un membre. matched compte les attentes atteintes, 0 quand rien n’écoute encore ; le signal est conservé un temps pour qu’une attente installée plus tard l’attrape. duplicate dit qu’une émission identique a été absorbée.

Accès — Session de membre ou clé d’API portant signals:write.

Corps de la requête (application/json)

ChampTypeRequis
keystringoui
action"resume" | "cancel"non
payloadobjectnon
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "key": { "type": "string", "minLength": 1, "maxLength": 200 },
    "action": { "default": "resume", "type": "string", "enum": [ "resume", "cancel" ] },
    "payload": {
      "type": "object",
      "propertyNames": { "type": "string" },
      "additionalProperties": {
        "anyOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" } ]
      }
    }
  },
  "required": [ "key" ]
}

Réponses

200 — Le signal et ce qu’il a atteint.

ChampTypeRequis
signalIdstringoui
matchedintegeroui
duplicatebooleanoui
Schéma JSON
json
{
  "type": "object",
  "properties": {
    "signalId": { "type": "string" },
    "matched": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
    "duplicate": { "type": "boolean" }
  },
  "required": [ "signalId", "matched", "duplicate" ],
  "additionalProperties": false
}

400 — La requête ne respecte pas son schéma.

401 — Aucune session ni clé d’API valide (auth.unauthenticated).

403 — Refusé : rôle insuffisant (auth.forbidden), portée manquante (api_key.scope_missing, details.required la nomme) ou route fermée aux clés (api_key.session_required).

429 — La clé d’API dépasse son débit (api_key.rate_limited) ; Retry-After dit quand réessayer.

Cette opération accepte un en-tête Idempotency-Key : rejouer la même requête avec la même clé rend la réponse d’origine au lieu d’agir deux fois. Voir Idempotence.

Codes d’erreur — wait.bad_request. Les codes communs (request.bad_request, auth.unauthenticated, api_key.scope_missing, api_key.rate_limited…) s’appliquent à toutes les routes ; voir Erreurs.

Exemple de requête

json
{
  "key": "mandat:PSD-2026-0142",
  "action": "resume",
  "payload": { "signedBy": "client" }
}

Exemple de réponse (200)

json
{
  "signalId": "0192f1c2-cccc-7000-8000-000000000003",
  "matched": 1,
  "duplicate": false
}