@1claw/openapi-spec 0.61.34 → 0.61.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/openapi.json +653 -3
  2. package/openapi.yaml +460 -3
  3. package/package.json +1 -1
package/openapi.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "openapi": "3.1.0",
3
3
  "info": {
4
4
  "title": "1Claw API",
5
- "version": "0.61.34",
5
+ "version": "0.61.36",
6
6
  "description": "Secure secret management for AI agents. Provides vaults, secrets,\npolicy-based access control, agent identity, Intents API,\nsharing, billing, and audit logging. Automations (workflow_spec,\nwebhook tokens, event triggers, Assist), cloud runtimes with\ninteractive shell sessions, agent memory, and discovery.\n\n## Domains\n\n`api.1claw.co` is canonical: it is the OIDC issuer, the `aud` the API\nmints, and the first entry in `servers` — a generated client takes its\nbase URL from there, and the previous ordering pointed every SDK at the\ndomain the issuer had already left. `api.1claw.xyz` still answers and is\nstill accepted on token validation, because tokens minted before the\nmove carry it; it is never minted now.\n\nOne deliberate exception: the Shroud attestation identity token is\nrequested from GCP with `audience: https://api.1claw.xyz`, so\n`/v1/shroud/attestation` reports that as its `expected_audience`. That\nis accurate rather than stale — the audience is a verification contract\nwith anyone already checking the token, and moving it is a breaking\nchange for them, not a rename.\n\nAll endpoints require JWT Bearer authentication unless marked with\n`security: []`.\n",
7
7
  "contact": {
8
8
  "email": "ops@1claw.co"
@@ -18839,6 +18839,7 @@
18839
18839
  ],
18840
18840
  "summary": "Trigger automation",
18841
18841
  "operationId": "triggerAutomation",
18842
+ "description": "Start a run now. With an `idempotency_key` (body or `Idempotency-Key` header) the\nsame key returns the run already started for it (200) rather than a second run\n(201). `input` is exposed to steps as `{{trigger.*}}`.\n",
18842
18843
  "parameters": [
18843
18844
  {
18844
18845
  "name": "automationId",
@@ -18850,9 +18851,29 @@
18850
18851
  }
18851
18852
  }
18852
18853
  ],
18854
+ "requestBody": {
18855
+ "required": false,
18856
+ "content": {
18857
+ "application/json": {
18858
+ "schema": {
18859
+ "$ref": "#/components/schemas/TriggerAutomationRequest"
18860
+ }
18861
+ }
18862
+ }
18863
+ },
18853
18864
  "responses": {
18854
18865
  "200": {
18855
- "description": "Automation triggered",
18866
+ "description": "An earlier run with the same idempotency key",
18867
+ "content": {
18868
+ "application/json": {
18869
+ "schema": {
18870
+ "$ref": "#/components/schemas/AutomationRunResponse"
18871
+ }
18872
+ }
18873
+ }
18874
+ },
18875
+ "201": {
18876
+ "description": "Run started",
18856
18877
  "content": {
18857
18878
  "application/json": {
18858
18879
  "schema": {
@@ -19267,6 +19288,326 @@
19267
19288
  }
19268
19289
  }
19269
19290
  },
19291
+ "/v1/automations/{automationId}/runs/{runId}/callback/{token}": {
19292
+ "post": {
19293
+ "tags": [
19294
+ "Automations"
19295
+ ],
19296
+ "summary": "Continue a run parked on awaiting_callback",
19297
+ "operationId": "automationRunCallback",
19298
+ "security": [],
19299
+ "description": "Public, authenticated by the per-run token. A spec with an `awaiting_callback`\nstep gets the token at run start as `{{run.callback_url}}` / `{{run.callback_token}}`;\nan earlier step hands the URL to the external system, the step parks the run\n(`awaiting_callback`, up to its `timeout_secs`), and this POST continues it. The\nJSON body becomes `{{resume.*}}`. 409 when the run is not (yet) parked on a\ncallback; 401 for a wrong token.\n",
19300
+ "parameters": [
19301
+ {
19302
+ "name": "automationId",
19303
+ "in": "path",
19304
+ "required": true,
19305
+ "schema": {
19306
+ "type": "string",
19307
+ "format": "uuid"
19308
+ }
19309
+ },
19310
+ {
19311
+ "name": "runId",
19312
+ "in": "path",
19313
+ "required": true,
19314
+ "schema": {
19315
+ "type": "string",
19316
+ "format": "uuid"
19317
+ }
19318
+ },
19319
+ {
19320
+ "name": "token",
19321
+ "in": "path",
19322
+ "required": true,
19323
+ "schema": {
19324
+ "type": "string"
19325
+ }
19326
+ }
19327
+ ],
19328
+ "requestBody": {
19329
+ "required": false,
19330
+ "content": {
19331
+ "application/json": {
19332
+ "schema": {
19333
+ "type": "object",
19334
+ "additionalProperties": true
19335
+ }
19336
+ }
19337
+ }
19338
+ },
19339
+ "responses": {
19340
+ "202": {
19341
+ "description": "The run, continuing",
19342
+ "content": {
19343
+ "application/json": {
19344
+ "schema": {
19345
+ "$ref": "#/components/schemas/AutomationRunResponse"
19346
+ }
19347
+ }
19348
+ }
19349
+ },
19350
+ "401": {
19351
+ "$ref": "#/components/responses/Unauthorized"
19352
+ },
19353
+ "409": {
19354
+ "$ref": "#/components/responses/Conflict"
19355
+ }
19356
+ }
19357
+ }
19358
+ },
19359
+ "/v1/automations/dry-run": {
19360
+ "post": {
19361
+ "tags": [
19362
+ "Automations"
19363
+ ],
19364
+ "summary": "Preview an unsaved workflow spec",
19365
+ "operationId": "dryRunAutomationSpec",
19366
+ "description": "What a run would do, with nothing done: every step after template substitution\nagainst a simulated context, its side effect, its `on_error` policy, templates\nthat would resolve to nothing, conditions, and the budget it would hit. Step\noutputs are placeholders, so later steps' `{{steps.N.output…}}` show empty here.\n",
19367
+ "requestBody": {
19368
+ "required": true,
19369
+ "content": {
19370
+ "application/json": {
19371
+ "schema": {
19372
+ "$ref": "#/components/schemas/DryRunRequest"
19373
+ }
19374
+ }
19375
+ }
19376
+ },
19377
+ "responses": {
19378
+ "200": {
19379
+ "description": "Preview",
19380
+ "content": {
19381
+ "application/json": {
19382
+ "schema": {
19383
+ "$ref": "#/components/schemas/DryRunResponse"
19384
+ }
19385
+ }
19386
+ }
19387
+ },
19388
+ "401": {
19389
+ "$ref": "#/components/responses/Unauthorized"
19390
+ }
19391
+ }
19392
+ }
19393
+ },
19394
+ "/v1/automations/{automationId}/dry-run": {
19395
+ "post": {
19396
+ "tags": [
19397
+ "Automations"
19398
+ ],
19399
+ "summary": "Preview a run of this automation",
19400
+ "operationId": "dryRunAutomation",
19401
+ "description": "Same as the unsaved preview, defaulting to the automation's current spec.",
19402
+ "parameters": [
19403
+ {
19404
+ "name": "automationId",
19405
+ "in": "path",
19406
+ "required": true,
19407
+ "schema": {
19408
+ "type": "string",
19409
+ "format": "uuid"
19410
+ }
19411
+ }
19412
+ ],
19413
+ "requestBody": {
19414
+ "required": false,
19415
+ "content": {
19416
+ "application/json": {
19417
+ "schema": {
19418
+ "$ref": "#/components/schemas/DryRunRequest"
19419
+ }
19420
+ }
19421
+ }
19422
+ },
19423
+ "responses": {
19424
+ "200": {
19425
+ "description": "Preview",
19426
+ "content": {
19427
+ "application/json": {
19428
+ "schema": {
19429
+ "$ref": "#/components/schemas/DryRunResponse"
19430
+ }
19431
+ }
19432
+ }
19433
+ },
19434
+ "401": {
19435
+ "$ref": "#/components/responses/Unauthorized"
19436
+ },
19437
+ "404": {
19438
+ "$ref": "#/components/responses/NotFound"
19439
+ }
19440
+ }
19441
+ }
19442
+ },
19443
+ "/v1/automations/{automationId}/runs/{runId}/rerun": {
19444
+ "post": {
19445
+ "tags": [
19446
+ "Automations"
19447
+ ],
19448
+ "summary": "Re-run from a step",
19449
+ "operationId": "rerunAutomationFromStep",
19450
+ "description": "Start a new run seeded with this run's results up to `from_step` and continue from\nthere, on the spec version the original run executed. Human-only; the original\nrun must be finished. The new run has `trigger_source: rerun` and `parent_run_id`.\n",
19451
+ "parameters": [
19452
+ {
19453
+ "name": "automationId",
19454
+ "in": "path",
19455
+ "required": true,
19456
+ "schema": {
19457
+ "type": "string",
19458
+ "format": "uuid"
19459
+ }
19460
+ },
19461
+ {
19462
+ "name": "runId",
19463
+ "in": "path",
19464
+ "required": true,
19465
+ "schema": {
19466
+ "type": "string",
19467
+ "format": "uuid"
19468
+ }
19469
+ }
19470
+ ],
19471
+ "requestBody": {
19472
+ "required": false,
19473
+ "content": {
19474
+ "application/json": {
19475
+ "schema": {
19476
+ "type": "object",
19477
+ "properties": {
19478
+ "from_step": {
19479
+ "type": "integer",
19480
+ "minimum": 0,
19481
+ "default": 0,
19482
+ "description": "Zero-based step index to start from."
19483
+ }
19484
+ }
19485
+ }
19486
+ }
19487
+ }
19488
+ },
19489
+ "responses": {
19490
+ "201": {
19491
+ "description": "The new run",
19492
+ "content": {
19493
+ "application/json": {
19494
+ "schema": {
19495
+ "$ref": "#/components/schemas/AutomationRunResponse"
19496
+ }
19497
+ }
19498
+ }
19499
+ },
19500
+ "400": {
19501
+ "$ref": "#/components/responses/BadRequest"
19502
+ },
19503
+ "401": {
19504
+ "$ref": "#/components/responses/Unauthorized"
19505
+ },
19506
+ "404": {
19507
+ "$ref": "#/components/responses/NotFound"
19508
+ }
19509
+ }
19510
+ }
19511
+ },
19512
+ "/v1/automations/{automationId}/versions": {
19513
+ "get": {
19514
+ "tags": [
19515
+ "Automations"
19516
+ ],
19517
+ "summary": "List spec versions",
19518
+ "operationId": "listAutomationVersions",
19519
+ "description": "Every `workflow_spec` the automation has had, newest first. Version 1 is the\nspec it was created with; every update that changes the spec publishes the\nnext one. Runs record the version they executed.\n",
19520
+ "parameters": [
19521
+ {
19522
+ "name": "automationId",
19523
+ "in": "path",
19524
+ "required": true,
19525
+ "schema": {
19526
+ "type": "string",
19527
+ "format": "uuid"
19528
+ }
19529
+ }
19530
+ ],
19531
+ "responses": {
19532
+ "200": {
19533
+ "description": "Versions",
19534
+ "content": {
19535
+ "application/json": {
19536
+ "schema": {
19537
+ "$ref": "#/components/schemas/AutomationVersionListResponse"
19538
+ }
19539
+ }
19540
+ }
19541
+ },
19542
+ "401": {
19543
+ "$ref": "#/components/responses/Unauthorized"
19544
+ },
19545
+ "404": {
19546
+ "$ref": "#/components/responses/NotFound"
19547
+ }
19548
+ }
19549
+ }
19550
+ },
19551
+ "/v1/automations/{automationId}/versions/{version}/rollback": {
19552
+ "post": {
19553
+ "tags": [
19554
+ "Automations"
19555
+ ],
19556
+ "summary": "Roll back to an earlier spec version",
19557
+ "operationId": "rollbackAutomationVersion",
19558
+ "description": "Publishes the chosen version's spec as a new version and makes it current.\nHuman-only. A rollback that widens what the automation can do relative to the\nlive spec goes through the `automation.widen` control-plane consensus gate,\nlike an edit would.\n",
19559
+ "parameters": [
19560
+ {
19561
+ "name": "automationId",
19562
+ "in": "path",
19563
+ "required": true,
19564
+ "schema": {
19565
+ "type": "string",
19566
+ "format": "uuid"
19567
+ }
19568
+ },
19569
+ {
19570
+ "name": "version",
19571
+ "in": "path",
19572
+ "required": true,
19573
+ "schema": {
19574
+ "type": "integer"
19575
+ }
19576
+ }
19577
+ ],
19578
+ "requestBody": {
19579
+ "required": false,
19580
+ "content": {
19581
+ "application/json": {
19582
+ "schema": {
19583
+ "$ref": "#/components/schemas/RollbackAutomationRequest"
19584
+ }
19585
+ }
19586
+ }
19587
+ },
19588
+ "responses": {
19589
+ "200": {
19590
+ "description": "The automation with the rolled-back spec current",
19591
+ "content": {
19592
+ "application/json": {
19593
+ "schema": {
19594
+ "$ref": "#/components/schemas/AutomationResponse"
19595
+ }
19596
+ }
19597
+ }
19598
+ },
19599
+ "401": {
19600
+ "$ref": "#/components/responses/Unauthorized"
19601
+ },
19602
+ "403": {
19603
+ "$ref": "#/components/responses/Forbidden"
19604
+ },
19605
+ "404": {
19606
+ "$ref": "#/components/responses/NotFound"
19607
+ }
19608
+ }
19609
+ }
19610
+ },
19270
19611
  "/v1/automations/presets": {
19271
19612
  "get": {
19272
19613
  "tags": [
@@ -42891,6 +43232,260 @@
42891
43232
  },
42892
43233
  "is_active": {
42893
43234
  "type": "boolean"
43235
+ },
43236
+ "approval_id": {
43237
+ "type": "string",
43238
+ "format": "uuid",
43239
+ "description": "Control-plane approval authorising a widening change (adding a step that\nmoves funds or reaches the network, raising or removing a `budget` cap).\nRequired only when the org's consensus policy gates `automation.widen`.\n"
43240
+ },
43241
+ "version_note": {
43242
+ "type": "string",
43243
+ "description": "Note recorded on the new spec version."
43244
+ },
43245
+ "webhook_signature": {
43246
+ "nullable": true,
43247
+ "description": "Inbound signature scheme for a webhook-triggered automation. `stripe`\n(`Stripe-Signature: t=…,v1=…` over `<t>.<body>`), `github`\n(`X-Hub-Signature-256: sha256=…` over the body) or `hmac_sha256`\n(`<header>: <hex|base64>` over the body). The secret is stored encrypted\nand never returned; `null` removes the scheme. With a scheme set, an\nunsigned or mis-signed delivery starts nothing.\n",
43248
+ "type": "object",
43249
+ "properties": {
43250
+ "scheme": {
43251
+ "type": "string",
43252
+ "enum": [
43253
+ "stripe",
43254
+ "github",
43255
+ "hmac_sha256"
43256
+ ]
43257
+ },
43258
+ "secret": {
43259
+ "type": "string",
43260
+ "minLength": 8,
43261
+ "maxLength": 512
43262
+ },
43263
+ "header": {
43264
+ "type": "string",
43265
+ "description": "Header carrying the signature (defaults per scheme)."
43266
+ },
43267
+ "tolerance_secs": {
43268
+ "type": "integer",
43269
+ "default": 300,
43270
+ "description": "Timestamp tolerance for schemes that carry one (stripe)."
43271
+ }
43272
+ }
43273
+ }
43274
+ }
43275
+ },
43276
+ "AutomationVersionResponse": {
43277
+ "type": "object",
43278
+ "required": [
43279
+ "version",
43280
+ "spec_hash",
43281
+ "workflow_spec",
43282
+ "created_by_type",
43283
+ "created_at",
43284
+ "current"
43285
+ ],
43286
+ "properties": {
43287
+ "version": {
43288
+ "type": "integer"
43289
+ },
43290
+ "spec_hash": {
43291
+ "type": "string",
43292
+ "description": "SHA-256 of the canonical (sorted-key) JSON of the spec."
43293
+ },
43294
+ "workflow_spec": {
43295
+ "oneOf": [
43296
+ {
43297
+ "type": "array",
43298
+ "items": {
43299
+ "type": "object",
43300
+ "additionalProperties": true
43301
+ }
43302
+ },
43303
+ {
43304
+ "type": "object",
43305
+ "additionalProperties": true
43306
+ }
43307
+ ]
43308
+ },
43309
+ "created_by_type": {
43310
+ "type": "string"
43311
+ },
43312
+ "note": {
43313
+ "type": "string",
43314
+ "nullable": true
43315
+ },
43316
+ "created_at": {
43317
+ "type": "string",
43318
+ "format": "date-time"
43319
+ },
43320
+ "current": {
43321
+ "type": "boolean"
43322
+ }
43323
+ }
43324
+ },
43325
+ "AutomationVersionListResponse": {
43326
+ "type": "object",
43327
+ "required": [
43328
+ "current_version",
43329
+ "versions"
43330
+ ],
43331
+ "properties": {
43332
+ "current_version": {
43333
+ "type": "integer"
43334
+ },
43335
+ "versions": {
43336
+ "type": "array",
43337
+ "items": {
43338
+ "$ref": "#/components/schemas/AutomationVersionResponse"
43339
+ }
43340
+ }
43341
+ }
43342
+ },
43343
+ "RollbackAutomationRequest": {
43344
+ "type": "object",
43345
+ "properties": {
43346
+ "note": {
43347
+ "type": "string"
43348
+ },
43349
+ "approval_id": {
43350
+ "type": "string",
43351
+ "format": "uuid",
43352
+ "description": "Control-plane approval when rolling back to a wider spec."
43353
+ }
43354
+ }
43355
+ },
43356
+ "DryRunRequest": {
43357
+ "type": "object",
43358
+ "properties": {
43359
+ "workflow_spec": {
43360
+ "description": "Spec to preview (required on the unsaved-spec route).",
43361
+ "oneOf": [
43362
+ {
43363
+ "type": "array",
43364
+ "items": {
43365
+ "type": "object",
43366
+ "additionalProperties": true
43367
+ }
43368
+ },
43369
+ {
43370
+ "type": "object",
43371
+ "additionalProperties": true
43372
+ }
43373
+ ]
43374
+ },
43375
+ "input": {
43376
+ "type": "object",
43377
+ "additionalProperties": true,
43378
+ "description": "Simulated trigger payload (`{{trigger.*}}`)."
43379
+ }
43380
+ }
43381
+ },
43382
+ "DryRunResponse": {
43383
+ "type": "object",
43384
+ "required": [
43385
+ "ok"
43386
+ ],
43387
+ "properties": {
43388
+ "ok": {
43389
+ "type": "boolean",
43390
+ "description": "True when there are no warnings."
43391
+ },
43392
+ "error": {
43393
+ "type": "string"
43394
+ },
43395
+ "warnings": {
43396
+ "type": "array",
43397
+ "items": {
43398
+ "type": "string"
43399
+ }
43400
+ },
43401
+ "parks": {
43402
+ "type": "integer",
43403
+ "description": "How many steps park the run."
43404
+ },
43405
+ "budget": {
43406
+ "type": "object",
43407
+ "additionalProperties": true
43408
+ },
43409
+ "steps": {
43410
+ "type": "array",
43411
+ "items": {
43412
+ "type": "object",
43413
+ "required": [
43414
+ "index",
43415
+ "type",
43416
+ "known",
43417
+ "resolved",
43418
+ "effect",
43419
+ "on_error",
43420
+ "unresolved_templates"
43421
+ ],
43422
+ "properties": {
43423
+ "index": {
43424
+ "type": "integer"
43425
+ },
43426
+ "name": {
43427
+ "type": "string",
43428
+ "nullable": true
43429
+ },
43430
+ "type": {
43431
+ "type": "string"
43432
+ },
43433
+ "known": {
43434
+ "type": "boolean"
43435
+ },
43436
+ "resolved": {
43437
+ "type": "object",
43438
+ "additionalProperties": true,
43439
+ "description": "The step after template substitution."
43440
+ },
43441
+ "skipped_by": {
43442
+ "type": "string",
43443
+ "nullable": true
43444
+ },
43445
+ "effect": {
43446
+ "type": "string"
43447
+ },
43448
+ "on_error": {
43449
+ "type": "object",
43450
+ "properties": {
43451
+ "action": {
43452
+ "type": "string"
43453
+ },
43454
+ "max_attempts": {
43455
+ "type": "integer"
43456
+ },
43457
+ "backoff_secs": {
43458
+ "type": "integer"
43459
+ }
43460
+ }
43461
+ },
43462
+ "unresolved_templates": {
43463
+ "type": "array",
43464
+ "items": {
43465
+ "type": "string"
43466
+ }
43467
+ },
43468
+ "budget_exceeded": {
43469
+ "type": "string",
43470
+ "nullable": true
43471
+ }
43472
+ }
43473
+ }
43474
+ }
43475
+ }
43476
+ },
43477
+ "TriggerAutomationRequest": {
43478
+ "type": "object",
43479
+ "properties": {
43480
+ "input": {
43481
+ "type": "object",
43482
+ "additionalProperties": true,
43483
+ "description": "Exposed to steps as `{{trigger.*}}`."
43484
+ },
43485
+ "idempotency_key": {
43486
+ "type": "string",
43487
+ "maxLength": 128,
43488
+ "description": "Same key twice for one automation returns the existing run (200) instead\nof starting a second (201). `Idempotency-Key` header is equivalent.\n"
42894
43489
  }
42895
43490
  }
42896
43491
  },
@@ -43003,6 +43598,15 @@
43003
43598
  "updated_at": {
43004
43599
  "type": "string",
43005
43600
  "format": "date-time"
43601
+ },
43602
+ "spec_version": {
43603
+ "type": "integer",
43604
+ "description": "Current `automation_versions` version."
43605
+ },
43606
+ "webhook_signature_scheme": {
43607
+ "type": "string",
43608
+ "nullable": true,
43609
+ "description": "Inbound signature scheme name, never the secret."
43006
43610
  }
43007
43611
  }
43008
43612
  },
@@ -43135,12 +43739,58 @@
43135
43739
  "enum": [
43136
43740
  "running",
43137
43741
  "success",
43742
+ "completed_with_skips",
43138
43743
  "failed",
43139
43744
  "timed_out",
43140
43745
  "cancelled",
43141
- "awaiting_approval"
43746
+ "awaiting_approval",
43747
+ "waiting",
43748
+ "awaiting_callback"
43749
+ ],
43750
+ "description": "`awaiting_approval`, `waiting` (a `wait_until` park) and `awaiting_callback`\nare parked states: the run's clock is stopped and it continues when the\napproval is decided, the wake time passes, or the callback URL is posted to.\n"
43751
+ },
43752
+ "paused_reason": {
43753
+ "type": "string",
43754
+ "nullable": true,
43755
+ "enum": [
43756
+ "approval",
43757
+ "wait_until",
43758
+ "callback"
43142
43759
  ]
43143
43760
  },
43761
+ "paused_at_step": {
43762
+ "type": "integer",
43763
+ "nullable": true
43764
+ },
43765
+ "paused_approval_id": {
43766
+ "type": "string",
43767
+ "format": "uuid",
43768
+ "nullable": true
43769
+ },
43770
+ "paused_until": {
43771
+ "type": "string",
43772
+ "format": "date-time",
43773
+ "nullable": true
43774
+ },
43775
+ "paused_expires_at": {
43776
+ "type": "string",
43777
+ "format": "date-time",
43778
+ "nullable": true
43779
+ },
43780
+ "spec_version": {
43781
+ "type": "integer",
43782
+ "nullable": true
43783
+ },
43784
+ "idempotency_key": {
43785
+ "type": "string",
43786
+ "nullable": true
43787
+ },
43788
+ "parent_run_id": {
43789
+ "type": "string",
43790
+ "format": "uuid",
43791
+ "nullable": true,
43792
+ "description": "Set when a `call_automation` step started this run."
43793
+ },
43144
43794
  "step_results": {
43145
43795
  "nullable": true
43146
43796
  },
package/openapi.yaml CHANGED
@@ -2,7 +2,7 @@ openapi: 3.1.0
2
2
 
3
3
  info:
4
4
  title: 1Claw API
5
- version: "0.61.34"
5
+ version: "0.61.36"
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -11989,6 +11989,10 @@ paths:
11989
11989
  tags: [Automations]
11990
11990
  summary: Trigger automation
11991
11991
  operationId: triggerAutomation
11992
+ description: |
11993
+ Start a run now. With an `idempotency_key` (body or `Idempotency-Key` header) the
11994
+ same key returns the run already started for it (200) rather than a second run
11995
+ (201). `input` is exposed to steps as `{{trigger.*}}`.
11992
11996
  parameters:
11993
11997
  - name: automationId
11994
11998
  in: path
@@ -11996,9 +12000,21 @@ paths:
11996
12000
  schema:
11997
12001
  type: string
11998
12002
  format: uuid
12003
+ requestBody:
12004
+ required: false
12005
+ content:
12006
+ application/json:
12007
+ schema:
12008
+ $ref: "#/components/schemas/TriggerAutomationRequest"
11999
12009
  responses:
12010
+ "201":
12011
+ description: Run started
12012
+ content:
12013
+ application/json:
12014
+ schema:
12015
+ $ref: "#/components/schemas/AutomationRunResponse"
12000
12016
  "200":
12001
- description: Automation triggered
12017
+ description: An earlier run with the same idempotency key
12002
12018
  content:
12003
12019
  application/json:
12004
12020
  schema:
@@ -12272,6 +12288,231 @@ paths:
12272
12288
  "404":
12273
12289
  $ref: "#/components/responses/NotFound"
12274
12290
 
12291
+ /v1/automations/{automationId}/runs/{runId}/callback/{token}:
12292
+ post:
12293
+ tags: [Automations]
12294
+ summary: Continue a run parked on awaiting_callback
12295
+ operationId: automationRunCallback
12296
+ security: []
12297
+ description: |
12298
+ Public, authenticated by the per-run token. A spec with an `awaiting_callback`
12299
+ step gets the token at run start as `{{run.callback_url}}` / `{{run.callback_token}}`;
12300
+ an earlier step hands the URL to the external system, the step parks the run
12301
+ (`awaiting_callback`, up to its `timeout_secs`), and this POST continues it. The
12302
+ JSON body becomes `{{resume.*}}`. 409 when the run is not (yet) parked on a
12303
+ callback; 401 for a wrong token.
12304
+ parameters:
12305
+ - name: automationId
12306
+ in: path
12307
+ required: true
12308
+ schema:
12309
+ type: string
12310
+ format: uuid
12311
+ - name: runId
12312
+ in: path
12313
+ required: true
12314
+ schema:
12315
+ type: string
12316
+ format: uuid
12317
+ - name: token
12318
+ in: path
12319
+ required: true
12320
+ schema:
12321
+ type: string
12322
+ requestBody:
12323
+ required: false
12324
+ content:
12325
+ application/json:
12326
+ schema:
12327
+ type: object
12328
+ additionalProperties: true
12329
+ responses:
12330
+ "202":
12331
+ description: The run, continuing
12332
+ content:
12333
+ application/json:
12334
+ schema:
12335
+ $ref: "#/components/schemas/AutomationRunResponse"
12336
+ "401":
12337
+ $ref: "#/components/responses/Unauthorized"
12338
+ "409":
12339
+ $ref: "#/components/responses/Conflict"
12340
+
12341
+ /v1/automations/dry-run:
12342
+ post:
12343
+ tags: [Automations]
12344
+ summary: Preview an unsaved workflow spec
12345
+ operationId: dryRunAutomationSpec
12346
+ description: |
12347
+ What a run would do, with nothing done: every step after template substitution
12348
+ against a simulated context, its side effect, its `on_error` policy, templates
12349
+ that would resolve to nothing, conditions, and the budget it would hit. Step
12350
+ outputs are placeholders, so later steps' `{{steps.N.output…}}` show empty here.
12351
+ requestBody:
12352
+ required: true
12353
+ content:
12354
+ application/json:
12355
+ schema:
12356
+ $ref: "#/components/schemas/DryRunRequest"
12357
+ responses:
12358
+ "200":
12359
+ description: Preview
12360
+ content:
12361
+ application/json:
12362
+ schema:
12363
+ $ref: "#/components/schemas/DryRunResponse"
12364
+ "401":
12365
+ $ref: "#/components/responses/Unauthorized"
12366
+
12367
+ /v1/automations/{automationId}/dry-run:
12368
+ post:
12369
+ tags: [Automations]
12370
+ summary: Preview a run of this automation
12371
+ operationId: dryRunAutomation
12372
+ description: Same as the unsaved preview, defaulting to the automation's current spec.
12373
+ parameters:
12374
+ - name: automationId
12375
+ in: path
12376
+ required: true
12377
+ schema:
12378
+ type: string
12379
+ format: uuid
12380
+ requestBody:
12381
+ required: false
12382
+ content:
12383
+ application/json:
12384
+ schema:
12385
+ $ref: "#/components/schemas/DryRunRequest"
12386
+ responses:
12387
+ "200":
12388
+ description: Preview
12389
+ content:
12390
+ application/json:
12391
+ schema:
12392
+ $ref: "#/components/schemas/DryRunResponse"
12393
+ "401":
12394
+ $ref: "#/components/responses/Unauthorized"
12395
+ "404":
12396
+ $ref: "#/components/responses/NotFound"
12397
+
12398
+ /v1/automations/{automationId}/runs/{runId}/rerun:
12399
+ post:
12400
+ tags: [Automations]
12401
+ summary: Re-run from a step
12402
+ operationId: rerunAutomationFromStep
12403
+ description: |
12404
+ Start a new run seeded with this run's results up to `from_step` and continue from
12405
+ there, on the spec version the original run executed. Human-only; the original
12406
+ run must be finished. The new run has `trigger_source: rerun` and `parent_run_id`.
12407
+ parameters:
12408
+ - name: automationId
12409
+ in: path
12410
+ required: true
12411
+ schema:
12412
+ type: string
12413
+ format: uuid
12414
+ - name: runId
12415
+ in: path
12416
+ required: true
12417
+ schema:
12418
+ type: string
12419
+ format: uuid
12420
+ requestBody:
12421
+ required: false
12422
+ content:
12423
+ application/json:
12424
+ schema:
12425
+ type: object
12426
+ properties:
12427
+ from_step:
12428
+ type: integer
12429
+ minimum: 0
12430
+ default: 0
12431
+ description: Zero-based step index to start from.
12432
+ responses:
12433
+ "201":
12434
+ description: The new run
12435
+ content:
12436
+ application/json:
12437
+ schema:
12438
+ $ref: "#/components/schemas/AutomationRunResponse"
12439
+ "400":
12440
+ $ref: "#/components/responses/BadRequest"
12441
+ "401":
12442
+ $ref: "#/components/responses/Unauthorized"
12443
+ "404":
12444
+ $ref: "#/components/responses/NotFound"
12445
+
12446
+ /v1/automations/{automationId}/versions:
12447
+ get:
12448
+ tags: [Automations]
12449
+ summary: List spec versions
12450
+ operationId: listAutomationVersions
12451
+ description: |
12452
+ Every `workflow_spec` the automation has had, newest first. Version 1 is the
12453
+ spec it was created with; every update that changes the spec publishes the
12454
+ next one. Runs record the version they executed.
12455
+ parameters:
12456
+ - name: automationId
12457
+ in: path
12458
+ required: true
12459
+ schema:
12460
+ type: string
12461
+ format: uuid
12462
+ responses:
12463
+ "200":
12464
+ description: Versions
12465
+ content:
12466
+ application/json:
12467
+ schema:
12468
+ $ref: "#/components/schemas/AutomationVersionListResponse"
12469
+ "401":
12470
+ $ref: "#/components/responses/Unauthorized"
12471
+ "404":
12472
+ $ref: "#/components/responses/NotFound"
12473
+
12474
+ /v1/automations/{automationId}/versions/{version}/rollback:
12475
+ post:
12476
+ tags: [Automations]
12477
+ summary: Roll back to an earlier spec version
12478
+ operationId: rollbackAutomationVersion
12479
+ description: |
12480
+ Publishes the chosen version's spec as a new version and makes it current.
12481
+ Human-only. A rollback that widens what the automation can do relative to the
12482
+ live spec goes through the `automation.widen` control-plane consensus gate,
12483
+ like an edit would.
12484
+ parameters:
12485
+ - name: automationId
12486
+ in: path
12487
+ required: true
12488
+ schema:
12489
+ type: string
12490
+ format: uuid
12491
+ - name: version
12492
+ in: path
12493
+ required: true
12494
+ schema:
12495
+ type: integer
12496
+ requestBody:
12497
+ required: false
12498
+ content:
12499
+ application/json:
12500
+ schema:
12501
+ $ref: "#/components/schemas/RollbackAutomationRequest"
12502
+ responses:
12503
+ "200":
12504
+ description: The automation with the rolled-back spec current
12505
+ content:
12506
+ application/json:
12507
+ schema:
12508
+ $ref: "#/components/schemas/AutomationResponse"
12509
+ "401":
12510
+ $ref: "#/components/responses/Unauthorized"
12511
+ "403":
12512
+ $ref: "#/components/responses/Forbidden"
12513
+ "404":
12514
+ $ref: "#/components/responses/NotFound"
12515
+
12275
12516
  /v1/automations/presets:
12276
12517
  get:
12277
12518
  tags: [Automations]
@@ -27735,6 +27976,181 @@ components:
27735
27976
  additionalProperties: true
27736
27977
  is_active:
27737
27978
  type: boolean
27979
+ approval_id:
27980
+ type: string
27981
+ format: uuid
27982
+ description: |
27983
+ Control-plane approval authorising a widening change (adding a step that
27984
+ moves funds or reaches the network, raising or removing a `budget` cap).
27985
+ Required only when the org's consensus policy gates `automation.widen`.
27986
+ version_note:
27987
+ type: string
27988
+ description: Note recorded on the new spec version.
27989
+ webhook_signature:
27990
+ nullable: true
27991
+ description: |
27992
+ Inbound signature scheme for a webhook-triggered automation. `stripe`
27993
+ (`Stripe-Signature: t=…,v1=…` over `<t>.<body>`), `github`
27994
+ (`X-Hub-Signature-256: sha256=…` over the body) or `hmac_sha256`
27995
+ (`<header>: <hex|base64>` over the body). The secret is stored encrypted
27996
+ and never returned; `null` removes the scheme. With a scheme set, an
27997
+ unsigned or mis-signed delivery starts nothing.
27998
+ type: object
27999
+ properties:
28000
+ scheme:
28001
+ type: string
28002
+ enum: [stripe, github, hmac_sha256]
28003
+ secret:
28004
+ type: string
28005
+ minLength: 8
28006
+ maxLength: 512
28007
+ header:
28008
+ type: string
28009
+ description: Header carrying the signature (defaults per scheme).
28010
+ tolerance_secs:
28011
+ type: integer
28012
+ default: 300
28013
+ description: Timestamp tolerance for schemes that carry one (stripe).
28014
+
28015
+ AutomationVersionResponse:
28016
+ type: object
28017
+ required: [version, spec_hash, workflow_spec, created_by_type, created_at, current]
28018
+ properties:
28019
+ version:
28020
+ type: integer
28021
+ spec_hash:
28022
+ type: string
28023
+ description: SHA-256 of the canonical (sorted-key) JSON of the spec.
28024
+ workflow_spec:
28025
+ oneOf:
28026
+ - type: array
28027
+ items:
28028
+ type: object
28029
+ additionalProperties: true
28030
+ - type: object
28031
+ additionalProperties: true
28032
+ created_by_type:
28033
+ type: string
28034
+ note:
28035
+ type: string
28036
+ nullable: true
28037
+ created_at:
28038
+ type: string
28039
+ format: date-time
28040
+ current:
28041
+ type: boolean
28042
+
28043
+ AutomationVersionListResponse:
28044
+ type: object
28045
+ required: [current_version, versions]
28046
+ properties:
28047
+ current_version:
28048
+ type: integer
28049
+ versions:
28050
+ type: array
28051
+ items:
28052
+ $ref: "#/components/schemas/AutomationVersionResponse"
28053
+
28054
+ RollbackAutomationRequest:
28055
+ type: object
28056
+ properties:
28057
+ note:
28058
+ type: string
28059
+ approval_id:
28060
+ type: string
28061
+ format: uuid
28062
+ description: Control-plane approval when rolling back to a wider spec.
28063
+
28064
+ DryRunRequest:
28065
+ type: object
28066
+ properties:
28067
+ workflow_spec:
28068
+ description: Spec to preview (required on the unsaved-spec route).
28069
+ oneOf:
28070
+ - type: array
28071
+ items:
28072
+ type: object
28073
+ additionalProperties: true
28074
+ - type: object
28075
+ additionalProperties: true
28076
+ input:
28077
+ type: object
28078
+ additionalProperties: true
28079
+ description: Simulated trigger payload (`{{trigger.*}}`).
28080
+
28081
+ DryRunResponse:
28082
+ type: object
28083
+ required: [ok]
28084
+ properties:
28085
+ ok:
28086
+ type: boolean
28087
+ description: True when there are no warnings.
28088
+ error:
28089
+ type: string
28090
+ warnings:
28091
+ type: array
28092
+ items:
28093
+ type: string
28094
+ parks:
28095
+ type: integer
28096
+ description: How many steps park the run.
28097
+ budget:
28098
+ type: object
28099
+ additionalProperties: true
28100
+ steps:
28101
+ type: array
28102
+ items:
28103
+ type: object
28104
+ required: [index, type, known, resolved, effect, on_error, unresolved_templates]
28105
+ properties:
28106
+ index:
28107
+ type: integer
28108
+ name:
28109
+ type: string
28110
+ nullable: true
28111
+ type:
28112
+ type: string
28113
+ known:
28114
+ type: boolean
28115
+ resolved:
28116
+ type: object
28117
+ additionalProperties: true
28118
+ description: The step after template substitution.
28119
+ skipped_by:
28120
+ type: string
28121
+ nullable: true
28122
+ effect:
28123
+ type: string
28124
+ on_error:
28125
+ type: object
28126
+ properties:
28127
+ action:
28128
+ type: string
28129
+ max_attempts:
28130
+ type: integer
28131
+ backoff_secs:
28132
+ type: integer
28133
+ unresolved_templates:
28134
+ type: array
28135
+ items:
28136
+ type: string
28137
+ budget_exceeded:
28138
+ type: string
28139
+ nullable: true
28140
+
28141
+ TriggerAutomationRequest:
28142
+ type: object
28143
+ properties:
28144
+ input:
28145
+ type: object
28146
+ additionalProperties: true
28147
+ description: Exposed to steps as `{{trigger.*}}`.
28148
+ idempotency_key:
28149
+ type: string
28150
+ maxLength: 128
28151
+ description: |
28152
+ Same key twice for one automation returns the existing run (200) instead
28153
+ of starting a second (201). `Idempotency-Key` header is equivalent.
27738
28154
 
27739
28155
  AutomationResponse:
27740
28156
  type: object
@@ -27804,6 +28220,13 @@ components:
27804
28220
  updated_at:
27805
28221
  type: string
27806
28222
  format: date-time
28223
+ spec_version:
28224
+ type: integer
28225
+ description: Current `automation_versions` version.
28226
+ webhook_signature_scheme:
28227
+ type: string
28228
+ nullable: true
28229
+ description: Inbound signature scheme name, never the secret.
27807
28230
 
27808
28231
  AutomationCreatedResponse:
27809
28232
  allOf:
@@ -27882,7 +28305,41 @@ components:
27882
28305
  format: uuid
27883
28306
  status:
27884
28307
  type: string
27885
- enum: [running, success, failed, timed_out, cancelled, awaiting_approval]
28308
+ enum: [running, success, completed_with_skips, failed, timed_out, cancelled, awaiting_approval, waiting, awaiting_callback]
28309
+ description: |
28310
+ `awaiting_approval`, `waiting` (a `wait_until` park) and `awaiting_callback`
28311
+ are parked states: the run's clock is stopped and it continues when the
28312
+ approval is decided, the wake time passes, or the callback URL is posted to.
28313
+ paused_reason:
28314
+ type: string
28315
+ nullable: true
28316
+ enum: [approval, wait_until, callback]
28317
+ paused_at_step:
28318
+ type: integer
28319
+ nullable: true
28320
+ paused_approval_id:
28321
+ type: string
28322
+ format: uuid
28323
+ nullable: true
28324
+ paused_until:
28325
+ type: string
28326
+ format: date-time
28327
+ nullable: true
28328
+ paused_expires_at:
28329
+ type: string
28330
+ format: date-time
28331
+ nullable: true
28332
+ spec_version:
28333
+ type: integer
28334
+ nullable: true
28335
+ idempotency_key:
28336
+ type: string
28337
+ nullable: true
28338
+ parent_run_id:
28339
+ type: string
28340
+ format: uuid
28341
+ nullable: true
28342
+ description: Set when a `call_automation` step started this run.
27886
28343
  step_results:
27887
28344
  nullable: true
27888
28345
  error:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1claw/openapi-spec",
3
- "version": "0.61.34",
3
+ "version": "0.61.36",
4
4
  "description": "OpenAPI 3.1.0 specification for the 1Claw Vault API \u2014 generate clients in any language",
5
5
  "license": "MIT",
6
6
  "repository": {