Apply one operation to many workflows
workflow:writeApplies a single operation to up to 200 workflows. It is BEST-EFFORT PER WORKFLOW and always answers 200 when the request itself is well formed: each id lands in succeeded or in failed with its own message, so one workflow that cannot be activated never blocks the rest. Always read the result body — a 200 does not mean every id worked.
Operations: activate runs the same publish validation and trigger registration as POST /api/workflows/{id}/publish (a workflow that fails validation fails only its own entry); pause takes a live workflow offline; delete deletes permanently, including its runs and their stored payloads; addTags MERGES the given tags into each workflow's existing set (deduplicated case-insensitively, refused per-workflow past 50 tags) — it does not replace, use PUT /api/workflows/{id}/tags for that; move files each workflow into folderId (send null to un-file).
This route does NOT accept Idempotency-Key. Every operation it offers is naturally repeatable except delete, whose second attempt simply fails that id.
Authorization
bearerAuth An API token: Authorization: Bearer grt_…. Mint one in the app under Settings → Workspace → API tokens; the raw value is shown once. Scopes confine the token — see x-permission on each operation.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/api/workflows/bulk" \ -H "Content-Type: application/json" \ -d '{ "op": "addTags", "ids": [ "8a3172d2-1e17-49b3-9482-f9d97cea2848" ], "tags": [ "prod" ] }'{ "data": { "op": "activate", "succeeded": [ "e1794397-6c94-46c1-a460-b264efd4c81b" ], "failed": [ { "id": "string", "error": "string" } ] }}