@1claw/openapi-spec 0.57.0 → 0.58.2

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 (4) hide show
  1. package/README.md +22 -2
  2. package/openapi.json +1066 -25
  3. package/openapi.yaml +730 -58
  4. package/package.json +1 -1
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.57.0
5
+ version: 0.58.0
6
6
  description: |
7
7
  Secure secret management for AI agents. Provides vaults, secrets,
8
8
  policy-based access control, agent identity, Intents API,
@@ -6216,11 +6216,59 @@ paths:
6216
6216
  type: string
6217
6217
  format: uuid
6218
6218
  responses:
6219
- "204":
6220
- description: Deleted
6219
+ "200":
6220
+ description: Soft-deleted; slug released for reuse within the org
6221
+ content:
6222
+ application/json:
6223
+ schema:
6224
+ $ref: "#/components/schemas/PlatformAppDeleteResponse"
6221
6225
  "403":
6222
6226
  description: Only human users can delete platform apps
6223
6227
 
6228
+ /v1/platform/apps/{appId}/transfer-ownership:
6229
+ post:
6230
+ tags: [Platform]
6231
+ summary: Transfer platform app to another organization
6232
+ description: |
6233
+ Moves the platform app record to another organization. Requires org
6234
+ owner/admin in the source org and step-up auth (`X-Auth-Confirm`,
6235
+ purpose `platform.app.transfer`). End-user connections and provisioned
6236
+ resources remain in their original organizations.
6237
+ operationId: transferPlatformAppOwnership
6238
+ security:
6239
+ - BearerAuth: []
6240
+ parameters:
6241
+ - in: path
6242
+ name: appId
6243
+ required: true
6244
+ schema:
6245
+ type: string
6246
+ format: uuid
6247
+ - in: header
6248
+ name: X-Auth-Confirm
6249
+ required: true
6250
+ schema:
6251
+ type: string
6252
+ requestBody:
6253
+ required: true
6254
+ content:
6255
+ application/json:
6256
+ schema:
6257
+ $ref: "#/components/schemas/TransferPlatformAppOwnershipRequest"
6258
+ responses:
6259
+ "200":
6260
+ description: Ownership transferred
6261
+ content:
6262
+ application/json:
6263
+ schema:
6264
+ $ref: "#/components/schemas/TransferPlatformAppOwnershipResponse"
6265
+ "400":
6266
+ $ref: "#/components/responses/BadRequest"
6267
+ "403":
6268
+ $ref: "#/components/responses/Forbidden"
6269
+ "404":
6270
+ $ref: "#/components/responses/NotFound"
6271
+
6224
6272
  /v1/platform/apps/{appId}/rotate-key:
6225
6273
  post:
6226
6274
  tags: [Platform]
@@ -6377,6 +6425,35 @@ paths:
6377
6425
  $ref: "#/components/schemas/PlatformTemplateResponse"
6378
6426
 
6379
6427
  /v1/platform/apps/{appId}/templates/{template_id}:
6428
+ get:
6429
+ tags: [Platform]
6430
+ summary: Get a bootstrap template
6431
+ description: Returns the full template spec for a platform app. plt_ or user JWT.
6432
+ operationId: getPlatformTemplate
6433
+ security:
6434
+ - BearerAuth: []
6435
+ parameters:
6436
+ - in: path
6437
+ name: appId
6438
+ required: true
6439
+ schema:
6440
+ type: string
6441
+ format: uuid
6442
+ - in: path
6443
+ name: template_id
6444
+ required: true
6445
+ schema:
6446
+ type: string
6447
+ format: uuid
6448
+ responses:
6449
+ "200":
6450
+ description: Template details
6451
+ content:
6452
+ application/json:
6453
+ schema:
6454
+ $ref: "#/components/schemas/PlatformTemplateResponse"
6455
+ "404":
6456
+ $ref: "#/components/responses/NotFound"
6380
6457
  patch:
6381
6458
  tags: [Platform]
6382
6459
  summary: Update a bootstrap template
@@ -7026,41 +7103,400 @@ paths:
7026
7103
  Public endpoint — the token itself is the authentication. Returns 409 if already claimed, 410 if expired.
7027
7104
  parameters:
7028
7105
  - in: path
7029
- name: token
7106
+ name: token
7107
+ required: true
7108
+ schema:
7109
+ type: string
7110
+ description: The `ct_` prefixed claim token from the bootstrap response
7111
+ responses:
7112
+ "200":
7113
+ description: Claim redeemed
7114
+ content:
7115
+ application/json:
7116
+ schema:
7117
+ $ref: "#/components/schemas/ClaimRedeemResponse"
7118
+ "404":
7119
+ description: Invalid claim token
7120
+ "409":
7121
+ description: Claim token already used
7122
+ "410":
7123
+ description: Claim token has expired
7124
+
7125
+ # --- Spend Policies ---
7126
+
7127
+ /v1/platform/apps/{appId}/spend-policies:
7128
+ post:
7129
+ tags: [Platform]
7130
+ summary: Create wallet spend policy
7131
+ description: |
7132
+ Create an app-wide spend policy that governs what embedded wallet users
7133
+ can do with their wallets. Policies apply to all connected users by default
7134
+ and can be overridden per-user via connection-level policies.
7135
+ operationId: createSpendPolicy
7136
+ security:
7137
+ - BearerAuth: []
7138
+ parameters:
7139
+ - in: path
7140
+ name: appId
7141
+ required: true
7142
+ schema:
7143
+ type: string
7144
+ format: uuid
7145
+ requestBody:
7146
+ required: true
7147
+ content:
7148
+ application/json:
7149
+ schema:
7150
+ $ref: "#/components/schemas/CreateSpendPolicyRequest"
7151
+ responses:
7152
+ "201":
7153
+ description: Spend policy created
7154
+ content:
7155
+ application/json:
7156
+ schema:
7157
+ $ref: "#/components/schemas/SpendPolicyResponse"
7158
+ "400":
7159
+ $ref: "#/components/responses/BadRequest"
7160
+ "403":
7161
+ $ref: "#/components/responses/Forbidden"
7162
+ get:
7163
+ tags: [Platform]
7164
+ summary: List spend policies for app
7165
+ description: Returns all spend policies configured for the platform app.
7166
+ operationId: listSpendPolicies
7167
+ security:
7168
+ - BearerAuth: []
7169
+ parameters:
7170
+ - in: path
7171
+ name: appId
7172
+ required: true
7173
+ schema:
7174
+ type: string
7175
+ format: uuid
7176
+ responses:
7177
+ "200":
7178
+ description: Spend policies
7179
+ content:
7180
+ application/json:
7181
+ schema:
7182
+ type: object
7183
+ properties:
7184
+ policies:
7185
+ type: array
7186
+ items:
7187
+ $ref: "#/components/schemas/SpendPolicyResponse"
7188
+
7189
+ /v1/platform/apps/{appId}/spend-policies/{policyId}:
7190
+ get:
7191
+ tags: [Platform]
7192
+ summary: Get a spend policy by ID
7193
+ operationId: getSpendPolicy
7194
+ security:
7195
+ - BearerAuth: []
7196
+ parameters:
7197
+ - in: path
7198
+ name: appId
7199
+ required: true
7200
+ schema:
7201
+ type: string
7202
+ format: uuid
7203
+ - in: path
7204
+ name: policyId
7205
+ required: true
7206
+ schema:
7207
+ type: string
7208
+ format: uuid
7209
+ responses:
7210
+ "200":
7211
+ description: Spend policy
7212
+ content:
7213
+ application/json:
7214
+ schema:
7215
+ $ref: "#/components/schemas/SpendPolicyResponse"
7216
+ "404":
7217
+ $ref: "#/components/responses/NotFound"
7218
+ delete:
7219
+ tags: [Platform]
7220
+ summary: Delete a spend policy
7221
+ operationId: deleteSpendPolicy
7222
+ security:
7223
+ - BearerAuth: []
7224
+ parameters:
7225
+ - in: path
7226
+ name: appId
7227
+ required: true
7228
+ schema:
7229
+ type: string
7230
+ format: uuid
7231
+ - in: path
7232
+ name: policyId
7233
+ required: true
7234
+ schema:
7235
+ type: string
7236
+ format: uuid
7237
+ responses:
7238
+ "204":
7239
+ description: Deleted
7240
+ "404":
7241
+ $ref: "#/components/responses/NotFound"
7242
+
7243
+ /v1/platform/connections/{connectionId}/spend-policy:
7244
+ get:
7245
+ tags: [Platform]
7246
+ summary: Get effective spend policy for a connection
7247
+ description: |
7248
+ Returns the effective spend policy for the connected user, resolving
7249
+ per-user overrides before app-level defaults. Requires plt_ platform auth.
7250
+ operationId: getConnectionSpendPolicy
7251
+ security:
7252
+ - BearerAuth: []
7253
+ parameters:
7254
+ - in: path
7255
+ name: connectionId
7256
+ required: true
7257
+ schema:
7258
+ type: string
7259
+ format: uuid
7260
+ responses:
7261
+ "200":
7262
+ description: Effective spend policy (or null)
7263
+ content:
7264
+ application/json:
7265
+ schema:
7266
+ type: object
7267
+ properties:
7268
+ policy:
7269
+ oneOf:
7270
+ - $ref: "#/components/schemas/SpendPolicyResponse"
7271
+ - type: "null"
7272
+ "404":
7273
+ $ref: "#/components/responses/NotFound"
7274
+ put:
7275
+ tags: [Platform]
7276
+ summary: Set per-user spend policy override
7277
+ description: |
7278
+ Replace the per-user spend policy for a connected user (deactivates the
7279
+ previous active row, then inserts). Requires plt_ platform auth.
7280
+ Optional `Idempotency-Key` header must cover the full request body — reusing
7281
+ the same key with different parameters returns 409.
7282
+ operationId: setUserSpendPolicy
7283
+ security:
7284
+ - BearerAuth: []
7285
+ parameters:
7286
+ - in: path
7287
+ name: connectionId
7288
+ required: true
7289
+ schema:
7290
+ type: string
7291
+ format: uuid
7292
+ - in: header
7293
+ name: Idempotency-Key
7294
+ required: false
7295
+ schema:
7296
+ type: string
7297
+ description: Optional replay protection; same key + body returns cached response (409 on body mismatch).
7298
+ requestBody:
7299
+ required: true
7300
+ content:
7301
+ application/json:
7302
+ schema:
7303
+ $ref: "#/components/schemas/CreateSpendPolicyRequest"
7304
+ responses:
7305
+ "200":
7306
+ description: Spend policy set (or idempotent replay)
7307
+ content:
7308
+ application/json:
7309
+ schema:
7310
+ $ref: "#/components/schemas/SpendPolicyResponse"
7311
+ "201":
7312
+ description: Spend policy created
7313
+ content:
7314
+ application/json:
7315
+ schema:
7316
+ $ref: "#/components/schemas/SpendPolicyResponse"
7317
+ "409":
7318
+ description: Idempotency-Key reused with different body
7319
+ "400":
7320
+ $ref: "#/components/responses/BadRequest"
7321
+ "403":
7322
+ $ref: "#/components/responses/Forbidden"
7323
+
7324
+ "404":
7325
+ $ref: "#/components/responses/NotFound"
7326
+
7327
+ /v1/platform/connections/{connectionId}/approvals:
7328
+ get:
7329
+ tags: [Platform]
7330
+ summary: List approvals for a platform connection
7331
+ description: |
7332
+ Returns approvals assigned to the connection's user, filtered to agents
7333
+ provisioned on the connection. Requires plt_ platform auth.
7334
+ operationId: listConnectionApprovals
7335
+ security:
7336
+ - BearerAuth: []
7337
+ parameters:
7338
+ - in: path
7339
+ name: connectionId
7340
+ required: true
7341
+ schema:
7342
+ type: string
7343
+ format: uuid
7344
+ - name: status
7345
+ in: query
7346
+ required: false
7347
+ schema:
7348
+ type: string
7349
+ - name: risk_tier
7350
+ in: query
7351
+ required: false
7352
+ schema:
7353
+ type: integer
7354
+ - name: limit
7355
+ in: query
7356
+ required: false
7357
+ schema:
7358
+ type: integer
7359
+ default: 50
7360
+ - name: offset
7361
+ in: query
7362
+ required: false
7363
+ schema:
7364
+ type: integer
7365
+ default: 0
7366
+ responses:
7367
+ "200":
7368
+ description: Connection-scoped approvals
7369
+ content:
7370
+ application/json:
7371
+ schema:
7372
+ $ref: "#/components/schemas/ApprovalListResponse"
7373
+ "404":
7374
+ $ref: "#/components/responses/NotFound"
7375
+
7376
+ /v1/platform/connections/{connectionId}/approvals/{approvalId}:
7377
+ get:
7378
+ tags: [Platform]
7379
+ summary: Get a connection-scoped approval
7380
+ operationId: getConnectionApproval
7381
+ security:
7382
+ - BearerAuth: []
7383
+ parameters:
7384
+ - in: path
7385
+ name: connectionId
7386
+ required: true
7387
+ schema:
7388
+ type: string
7389
+ format: uuid
7390
+ - in: path
7391
+ name: approvalId
7392
+ required: true
7393
+ schema:
7394
+ type: string
7395
+ format: uuid
7396
+ responses:
7397
+ "200":
7398
+ description: Approval detail
7399
+ content:
7400
+ application/json:
7401
+ schema:
7402
+ $ref: "#/components/schemas/ApprovalResponse"
7403
+ "404":
7404
+ $ref: "#/components/responses/NotFound"
7405
+
7406
+ /v1/platform/connections/{connectionId}/pending-approvals:
7407
+ get:
7408
+ tags: [Platform]
7409
+ summary: List pending consensus approvals for a connection
7410
+ description: |
7411
+ Returns pending approvals for agents provisioned on the connection,
7412
+ including `action_payload` and `payload_hash` for consensus UX.
7413
+ Requires plt_ platform auth.
7414
+ operationId: listConnectionPendingApprovals
7415
+ security:
7416
+ - BearerAuth: []
7417
+ parameters:
7418
+ - in: path
7419
+ name: connectionId
7420
+ required: true
7421
+ schema:
7422
+ type: string
7423
+ format: uuid
7424
+ - name: status
7425
+ in: query
7426
+ schema:
7427
+ type: string
7428
+ default: pending
7429
+ - name: limit
7430
+ in: query
7431
+ schema:
7432
+ type: integer
7433
+ default: 50
7434
+ - name: offset
7435
+ in: query
7436
+ schema:
7437
+ type: integer
7438
+ default: 0
7439
+ responses:
7440
+ "200":
7441
+ description: Pending approvals list
7442
+ content:
7443
+ application/json:
7444
+ schema:
7445
+ $ref: "#/components/schemas/PendingApprovalListResponse"
7446
+ "404":
7447
+ $ref: "#/components/responses/NotFound"
7448
+
7449
+ /v1/platform/connections/{connectionId}/pending-approvals/{approvalId}:
7450
+ get:
7451
+ tags: [Platform]
7452
+ summary: Get a connection-scoped pending approval (with payload_hash)
7453
+ operationId: getConnectionPendingApproval
7454
+ security:
7455
+ - BearerAuth: []
7456
+ parameters:
7457
+ - in: path
7458
+ name: connectionId
7459
+ required: true
7460
+ schema:
7461
+ type: string
7462
+ format: uuid
7463
+ - in: path
7464
+ name: approvalId
7030
7465
  required: true
7031
7466
  schema:
7032
7467
  type: string
7033
- description: The `ct_` prefixed claim token from the bootstrap response
7468
+ format: uuid
7034
7469
  responses:
7035
7470
  "200":
7036
- description: Claim redeemed
7471
+ description: Pending approval detail including action_payload and payload_hash
7037
7472
  content:
7038
7473
  application/json:
7039
7474
  schema:
7040
- $ref: "#/components/schemas/ClaimRedeemResponse"
7475
+ $ref: "#/components/schemas/PendingApprovalResponse"
7041
7476
  "404":
7042
- description: Invalid claim token
7043
- "409":
7044
- description: Claim token already used
7045
- "410":
7046
- description: Claim token has expired
7047
-
7048
- # --- Spend Policies ---
7477
+ $ref: "#/components/responses/NotFound"
7049
7478
 
7050
- /v1/platform/apps/{appId}/spend-policies:
7479
+ /v1/platform/connections/{connectionId}/pending-approvals/{approvalId}/decide:
7051
7480
  post:
7052
7481
  tags: [Platform]
7053
- summary: Create wallet spend policy
7482
+ summary: Decide a pending approval for a connection user
7054
7483
  description: |
7055
- Create an app-wide spend policy that governs what embedded wallet users
7056
- can do with their wallets. Policies apply to all connected users by default
7057
- and can be overridden per-user via connection-level policies.
7058
- operationId: createSpendPolicy
7484
+ Platform apps vote on behalf of the connected user after verifying intent
7485
+ out-of-band (e.g. wallet mandate). Requires `payload_hash` matching the
7486
+ pending row. Accepts `decision`: `approve` or `reject` (aliases `approved` /
7487
+ `rejected`). plt_ auth only; scoped to agents on the connection.
7488
+ operationId: decideConnectionPendingApproval
7059
7489
  security:
7060
7490
  - BearerAuth: []
7061
7491
  parameters:
7062
7492
  - in: path
7063
- name: appId
7493
+ name: connectionId
7494
+ required: true
7495
+ schema:
7496
+ type: string
7497
+ format: uuid
7498
+ - in: path
7499
+ name: approvalId
7064
7500
  required: true
7065
7501
  schema:
7066
7502
  type: string
@@ -7070,80 +7506,119 @@ paths:
7070
7506
  content:
7071
7507
  application/json:
7072
7508
  schema:
7073
- $ref: "#/components/schemas/CreateSpendPolicyRequest"
7509
+ $ref: "#/components/schemas/ApprovePendingApprovalRequest"
7074
7510
  responses:
7075
- "201":
7076
- description: Spend policy created
7511
+ "200":
7512
+ description: Updated pending approval
7077
7513
  content:
7078
7514
  application/json:
7079
7515
  schema:
7080
- $ref: "#/components/schemas/SpendPolicyResponse"
7516
+ $ref: "#/components/schemas/PendingApprovalResponse"
7081
7517
  "400":
7082
7518
  $ref: "#/components/responses/BadRequest"
7083
7519
  "403":
7084
7520
  $ref: "#/components/responses/Forbidden"
7085
- get:
7521
+ "404":
7522
+ $ref: "#/components/responses/NotFound"
7523
+ "409":
7524
+ description: Already voted
7525
+
7526
+ /v1/platform/connections/{connectionId}/approvals/{approvalId}/decide:
7527
+ post:
7086
7528
  tags: [Platform]
7087
- summary: List spend policies for app
7088
- description: Returns all spend policies configured for the platform app.
7089
- operationId: listSpendPolicies
7529
+ summary: Decide a mobile/agent approval for a connection user
7530
+ description: |
7531
+ Platform apps decide agent approval requests on behalf of the connected user.
7532
+ Accepts `decision`: `approved` or `rejected` (aliases `approve` / `reject`).
7533
+ plt_ auth only.
7534
+ operationId: decideConnectionApproval
7090
7535
  security:
7091
7536
  - BearerAuth: []
7092
7537
  parameters:
7093
7538
  - in: path
7094
- name: appId
7539
+ name: connectionId
7095
7540
  required: true
7096
7541
  schema:
7097
7542
  type: string
7098
7543
  format: uuid
7544
+ - in: path
7545
+ name: approvalId
7546
+ required: true
7547
+ schema:
7548
+ type: string
7549
+ format: uuid
7550
+ requestBody:
7551
+ required: true
7552
+ content:
7553
+ application/json:
7554
+ schema:
7555
+ type: object
7556
+ required: [decision]
7557
+ properties:
7558
+ decision:
7559
+ type: string
7560
+ enum: [approved, rejected, approve, reject]
7561
+ reason:
7562
+ type: string
7099
7563
  responses:
7100
7564
  "200":
7101
- description: Spend policies
7565
+ description: Decided approval
7102
7566
  content:
7103
7567
  application/json:
7104
7568
  schema:
7105
- type: object
7106
- properties:
7107
- policies:
7108
- type: array
7109
- items:
7110
- $ref: "#/components/schemas/SpendPolicyResponse"
7569
+ $ref: "#/components/schemas/ApprovalResponse"
7570
+ "403":
7571
+ $ref: "#/components/responses/Forbidden"
7572
+ "404":
7573
+ $ref: "#/components/responses/NotFound"
7574
+ "409":
7575
+ description: Already decided
7111
7576
 
7112
- /v1/platform/apps/{appId}/spend-policies/{policyId}:
7577
+ /v1/platform/connections/{connectionId}/signing-keys/{chain}:
7113
7578
  delete:
7114
7579
  tags: [Platform]
7115
- summary: Delete a spend policy
7116
- operationId: deleteSpendPolicy
7580
+ summary: Deactivate a signing key for a connection agent
7581
+ description: |
7582
+ Deactivates the signing key for an agent provisioned on the connection.
7583
+ When multiple agents exist, pass `agent_id` query param. plt_ auth only.
7584
+ operationId: deactivateConnectionSigningKey
7117
7585
  security:
7118
7586
  - BearerAuth: []
7119
7587
  parameters:
7120
7588
  - in: path
7121
- name: appId
7589
+ name: connectionId
7122
7590
  required: true
7123
7591
  schema:
7124
7592
  type: string
7125
7593
  format: uuid
7126
7594
  - in: path
7127
- name: policyId
7595
+ name: chain
7128
7596
  required: true
7597
+ schema:
7598
+ type: string
7599
+ - in: query
7600
+ name: agent_id
7601
+ required: false
7129
7602
  schema:
7130
7603
  type: string
7131
7604
  format: uuid
7132
7605
  responses:
7133
7606
  "204":
7134
- description: Deleted
7607
+ description: Key deactivated
7608
+ "400":
7609
+ description: Multiple agents — agent_id required
7135
7610
  "404":
7136
7611
  $ref: "#/components/responses/NotFound"
7137
7612
 
7138
- /v1/platform/connections/{connectionId}/spend-policy:
7139
- put:
7613
+ /v1/platform/connections/{connectionId}/runtimes:
7614
+ post:
7140
7615
  tags: [Platform]
7141
- summary: Set per-user spend policy override
7616
+ summary: Create a runtime for a connection agent
7142
7617
  description: |
7143
- Override the app-wide spend policy for a specific connected user. This
7144
- policy takes precedence over the app default. Remove by deleting the
7145
- connection-level policy.
7146
- operationId: setUserSpendPolicy
7618
+ Creates a Cloud Runtime in the end-user's org for an agent on this connection.
7619
+ Use instead of `POST /v1/runtimes` with a plt_ key (which resolves to the platform org).
7620
+ App must verify user intent out-of-band (e.g. wallet mandate) before calling.
7621
+ operationId: createConnectionRuntime
7147
7622
  security:
7148
7623
  - BearerAuth: []
7149
7624
  parameters:
@@ -7158,18 +7633,55 @@ paths:
7158
7633
  content:
7159
7634
  application/json:
7160
7635
  schema:
7161
- $ref: "#/components/schemas/CreateSpendPolicyRequest"
7636
+ $ref: "#/components/schemas/CreateConnectionRuntimeRequest"
7162
7637
  responses:
7163
- "200":
7164
- description: Spend policy set
7638
+ "201":
7639
+ description: Runtime created
7165
7640
  content:
7166
7641
  application/json:
7167
7642
  schema:
7168
- $ref: "#/components/schemas/SpendPolicyResponse"
7169
- "400":
7170
- $ref: "#/components/responses/BadRequest"
7643
+ $ref: "#/components/schemas/RuntimeResponse"
7644
+ "403":
7645
+ $ref: "#/components/responses/Forbidden"
7646
+ "404":
7647
+ $ref: "#/components/responses/NotFound"
7648
+
7649
+ /v1/platform/connections/{connectionId}/agents/{agentId}/chat:
7650
+ post:
7651
+ tags: [Platform]
7652
+ summary: Chat with a connection agent (plt_ scoped)
7653
+ description: |
7654
+ Send a chat message to an agent provisioned on this connection, acting as the
7655
+ connected end-user. Use instead of `POST /v1/agents/{id}/chat` with a plt_ key.
7656
+ operationId: connectionAgentChat
7657
+ security:
7658
+ - BearerAuth: []
7659
+ parameters:
7660
+ - in: path
7661
+ name: connectionId
7662
+ required: true
7663
+ schema:
7664
+ type: string
7665
+ format: uuid
7666
+ - in: path
7667
+ name: agentId
7668
+ required: true
7669
+ schema:
7670
+ type: string
7671
+ format: uuid
7672
+ requestBody:
7673
+ required: true
7674
+ content:
7675
+ application/json:
7676
+ schema:
7677
+ $ref: "#/components/schemas/SendChatMessageRequest"
7678
+ responses:
7679
+ "200":
7680
+ description: Message sent (JSON or SSE stream)
7171
7681
  "403":
7172
7682
  $ref: "#/components/responses/Forbidden"
7683
+ "404":
7684
+ $ref: "#/components/responses/NotFound"
7173
7685
 
7174
7686
  # --- Approvals ---
7175
7687
 
@@ -8749,6 +9261,45 @@ paths:
8749
9261
  schema:
8750
9262
  $ref: "#/components/schemas/AutomationPresetsResponse"
8751
9263
 
9264
+ /v1/agents/{agent_id}/automations:
9265
+ post:
9266
+ tags: [Automations]
9267
+ summary: Create agent automation (agent-only)
9268
+ operationId: createAgentAutomation
9269
+ description: |
9270
+ Agent-scoped create for simple manual or webhook automations from chat/runtime tools.
9271
+ Allowed step types: log, notify, memory_get, memory_put, wait (max 10).
9272
+ Cron, swap, http, and transaction steps require human dashboard setup.
9273
+ Requires agent JWT; agent_id in path must match the caller.
9274
+ parameters:
9275
+ - name: agent_id
9276
+ in: path
9277
+ required: true
9278
+ schema:
9279
+ type: string
9280
+ format: uuid
9281
+ requestBody:
9282
+ required: true
9283
+ content:
9284
+ application/json:
9285
+ schema:
9286
+ $ref: "#/components/schemas/AgentCreateAutomationRequest"
9287
+ responses:
9288
+ "201":
9289
+ description: Automation created (includes one-time webhook credentials when trigger_type is webhook)
9290
+ content:
9291
+ application/json:
9292
+ schema:
9293
+ $ref: "#/components/schemas/AutomationCreatedResponse"
9294
+ "400":
9295
+ $ref: "#/components/responses/BadRequest"
9296
+ "401":
9297
+ $ref: "#/components/responses/Unauthorized"
9298
+ "403":
9299
+ $ref: "#/components/responses/Forbidden"
9300
+ "404":
9301
+ $ref: "#/components/responses/NotFound"
9302
+
8752
9303
  # ---------------------------------------------------------------------------
8753
9304
  # Runtimes
8754
9305
  # ---------------------------------------------------------------------------
@@ -9053,7 +9604,7 @@ paths:
9053
9604
  summary: Chat with a running runtime agent
9054
9605
  description: |
9055
9606
  Human-only. Proxies to the runtime container's OpenAI-compatible
9056
- `POST /v1/chat/completions` (hermes / openclaw / openclaude chat bridge).
9607
+ `POST /v1/chat/completions` (hermes / openclaw / openclaude / opencode chat bridge).
9057
9608
  Starts the runtime if stopped. Streams SSE when `Accept: text/event-stream`
9058
9609
  or `stream: true`. Conversation history is ephemeral (pass `messages`).
9059
9610
  Requires a public URL (shell access, Shroud sidecar, or HTTP hosting).
@@ -16353,6 +16904,46 @@ components:
16353
16904
  nullable: true
16354
16905
  description: Optional expiration time for the platform API key. Set to null to clear.
16355
16906
 
16907
+ PlatformAppDeleteResponse:
16908
+ type: object
16909
+ required: [deleted, soft_delete, slug_released, former_slug]
16910
+ properties:
16911
+ deleted:
16912
+ type: boolean
16913
+ soft_delete:
16914
+ type: boolean
16915
+ slug_released:
16916
+ type: boolean
16917
+ former_slug:
16918
+ type: string
16919
+
16920
+ TransferPlatformAppOwnershipRequest:
16921
+ type: object
16922
+ properties:
16923
+ target_org_id:
16924
+ type: string
16925
+ format: uuid
16926
+ target_user_email:
16927
+ type: string
16928
+ format: email
16929
+ description: Provide `target_org_id` or `target_user_email` (owner/admin in destination org).
16930
+
16931
+ TransferPlatformAppOwnershipResponse:
16932
+ type: object
16933
+ required: [app_id, former_org_id, new_org_id, message]
16934
+ properties:
16935
+ app_id:
16936
+ type: string
16937
+ format: uuid
16938
+ former_org_id:
16939
+ type: string
16940
+ format: uuid
16941
+ new_org_id:
16942
+ type: string
16943
+ format: uuid
16944
+ message:
16945
+ type: string
16946
+
16356
16947
  PlatformAppResponse:
16357
16948
  type: object
16358
16949
  properties:
@@ -17080,6 +17671,17 @@ components:
17080
17671
  type: string
17081
17672
  format: date-time
17082
17673
 
17674
+ ApprovalListResponse:
17675
+ type: object
17676
+ required: [approvals, total]
17677
+ properties:
17678
+ approvals:
17679
+ type: array
17680
+ items:
17681
+ $ref: "#/components/schemas/ApprovalResponse"
17682
+ total:
17683
+ type: integer
17684
+
17083
17685
  ApprovalStatusResponse:
17084
17686
  type: object
17085
17687
  required: [status]
@@ -17358,6 +17960,16 @@ components:
17358
17960
  items:
17359
17961
  type: string
17360
17962
  format: uuid
17963
+ runtime_ids:
17964
+ type: array
17965
+ items:
17966
+ type: string
17967
+ format: uuid
17968
+ automation_ids:
17969
+ type: array
17970
+ items:
17971
+ type: string
17972
+ format: uuid
17361
17973
  claimed_at:
17362
17974
  type: string
17363
17975
  format: date-time
@@ -18206,6 +18818,33 @@ components:
18206
18818
  - type: object
18207
18819
  additionalProperties: true
18208
18820
 
18821
+ AgentCreateAutomationRequest:
18822
+ type: object
18823
+ required: [name, workflow_spec]
18824
+ description: |
18825
+ Agent-scoped automation create. Defaults to manual trigger.
18826
+ workflow_spec must use only agent-allowed step types (log, notify, memory_get, memory_put, wait).
18827
+ properties:
18828
+ name:
18829
+ type: string
18830
+ maxLength: 128
18831
+ trigger_type:
18832
+ type: string
18833
+ enum: [manual, webhook]
18834
+ default: manual
18835
+ workflow_spec:
18836
+ oneOf:
18837
+ - type: array
18838
+ items:
18839
+ type: object
18840
+ additionalProperties: true
18841
+ - type: object
18842
+ additionalProperties: true
18843
+ auto_trigger:
18844
+ type: boolean
18845
+ default: false
18846
+ description: When true (manual trigger only), start a run immediately after creation
18847
+
18209
18848
  UpdateAutomationRequest:
18210
18849
  type: object
18211
18850
  properties:
@@ -18289,6 +18928,10 @@ components:
18289
18928
  type: string
18290
18929
  nullable: true
18291
18930
  description: Resolved agent display name (enriched list field)
18931
+ created_by_type:
18932
+ type: string
18933
+ enum: [user, agent]
18934
+ description: Whether the automation was created by a human or agent (chat-native create)
18292
18935
  created_at:
18293
18936
  type: string
18294
18937
  format: date-time
@@ -18434,6 +19077,35 @@ components:
18434
19077
 
18435
19078
  # --- Runtimes ---
18436
19079
 
19080
+ CreateConnectionRuntimeRequest:
19081
+ type: object
19082
+ required: [name]
19083
+ properties:
19084
+ name:
19085
+ type: string
19086
+ agent_id:
19087
+ type: string
19088
+ format: uuid
19089
+ description: Required when multiple agents on the connection; defaults to sole agent
19090
+ template:
19091
+ type: string
19092
+ preset:
19093
+ type: string
19094
+ default: medium
19095
+ env_public:
19096
+ type: object
19097
+ additionalProperties: true
19098
+ idle_timeout_secs:
19099
+ type: integer
19100
+ expose_http:
19101
+ type: boolean
19102
+ slug:
19103
+ type: string
19104
+ inbound_auth:
19105
+ type: string
19106
+ startup_command:
19107
+ type: string
19108
+
18437
19109
  CreateRuntimeRequest:
18438
19110
  type: object
18439
19111
  required: [name, agent_id]
@@ -20332,7 +21004,7 @@ components:
20332
21004
  properties:
20333
21005
  decision:
20334
21006
  type: string
20335
- enum: [approve, reject]
21007
+ enum: [approve, reject, approved, rejected]
20336
21008
  payload_hash:
20337
21009
  type: string
20338
21010
  reason: