@1claw/openapi-spec 0.59.8 → 0.59.10
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.
- package/openapi.json +3514 -270
- package/openapi.yaml +2227 -138
- 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.59.
|
|
5
|
+
version: "0.59.10"
|
|
6
6
|
description: |
|
|
7
7
|
Secure secret management for AI agents. Provides vaults, secrets,
|
|
8
8
|
policy-based access control, agent identity, Intents API,
|
|
@@ -29,7 +29,7 @@ info:
|
|
|
29
29
|
All endpoints require JWT Bearer authentication unless marked with
|
|
30
30
|
`security: []`.
|
|
31
31
|
contact:
|
|
32
|
-
email: ops@1claw.
|
|
32
|
+
email: ops@1claw.co
|
|
33
33
|
|
|
34
34
|
servers:
|
|
35
35
|
- url: https://api.1claw.co
|
|
@@ -1649,7 +1649,17 @@ paths:
|
|
|
1649
1649
|
schema:
|
|
1650
1650
|
$ref: "#/components/schemas/VaultResponse"
|
|
1651
1651
|
"400":
|
|
1652
|
-
|
|
1652
|
+
description: The name is empty or longer than 255 characters. Checked before the consensus gate and the quota, so a malformed request consumes neither an approval nor a rate-limit slot.
|
|
1653
|
+
content:
|
|
1654
|
+
application/json:
|
|
1655
|
+
schema:
|
|
1656
|
+
$ref: "#/components/schemas/ProblemDetails"
|
|
1657
|
+
"409":
|
|
1658
|
+
description: A vault with that name already exists in this organization. Names are unique per org; this previously surfaced as a 500.
|
|
1659
|
+
content:
|
|
1660
|
+
application/json:
|
|
1661
|
+
schema:
|
|
1662
|
+
$ref: "#/components/schemas/ProblemDetails"
|
|
1653
1663
|
get:
|
|
1654
1664
|
tags: [Vaults]
|
|
1655
1665
|
summary: List vaults
|
|
@@ -7504,6 +7514,26 @@ paths:
|
|
|
7504
7514
|
"404":
|
|
7505
7515
|
$ref: "#/components/responses/NotFound"
|
|
7506
7516
|
|
|
7517
|
+
post:
|
|
7518
|
+
tags: [Platform]
|
|
7519
|
+
summary: Create an approval on a platform connection
|
|
7520
|
+
operationId: createConnectionApproval
|
|
7521
|
+
security:
|
|
7522
|
+
- BearerAuth: []
|
|
7523
|
+
parameters:
|
|
7524
|
+
- in: path
|
|
7525
|
+
name: connectionId
|
|
7526
|
+
required: true
|
|
7527
|
+
schema:
|
|
7528
|
+
type: string
|
|
7529
|
+
format: uuid
|
|
7530
|
+
responses:
|
|
7531
|
+
"201":
|
|
7532
|
+
description: Approval created
|
|
7533
|
+
"403":
|
|
7534
|
+
$ref: "#/components/responses/Forbidden"
|
|
7535
|
+
"404":
|
|
7536
|
+
$ref: "#/components/responses/NotFound"
|
|
7507
7537
|
/v1/platform/connections/{connectionId}/approvals/{approvalId}:
|
|
7508
7538
|
get:
|
|
7509
7539
|
tags: [Platform]
|
|
@@ -7896,6 +7926,32 @@ paths:
|
|
|
7896
7926
|
"404":
|
|
7897
7927
|
$ref: "#/components/responses/NotFound"
|
|
7898
7928
|
|
|
7929
|
+
post:
|
|
7930
|
+
tags: [Platform]
|
|
7931
|
+
summary: "Alias for PATCH on this path — same handler, same limited settings. Present because some clients cannot send PATCH."
|
|
7932
|
+
operationId: postConnectionAgent
|
|
7933
|
+
security:
|
|
7934
|
+
- BearerAuth: []
|
|
7935
|
+
parameters:
|
|
7936
|
+
- in: path
|
|
7937
|
+
name: connectionId
|
|
7938
|
+
required: true
|
|
7939
|
+
schema:
|
|
7940
|
+
type: string
|
|
7941
|
+
format: uuid
|
|
7942
|
+
- in: path
|
|
7943
|
+
name: agentId
|
|
7944
|
+
required: true
|
|
7945
|
+
schema:
|
|
7946
|
+
type: string
|
|
7947
|
+
format: uuid
|
|
7948
|
+
responses:
|
|
7949
|
+
"200":
|
|
7950
|
+
description: Agent updated
|
|
7951
|
+
"403":
|
|
7952
|
+
$ref: "#/components/responses/Forbidden"
|
|
7953
|
+
"404":
|
|
7954
|
+
$ref: "#/components/responses/NotFound"
|
|
7899
7955
|
/v1/platform/connections/{connectionId}/portfolio:
|
|
7900
7956
|
get:
|
|
7901
7957
|
tags: [Platform]
|
|
@@ -8074,6 +8130,10 @@ paths:
|
|
|
8074
8130
|
type: string
|
|
8075
8131
|
- in: query
|
|
8076
8132
|
name: agent_id
|
|
8133
|
+
description: |
|
|
8134
|
+
Optional only while the connection has exactly one agent.
|
|
8135
|
+
With more than one it becomes required and the call answers
|
|
8136
|
+
400 without it — the Fleet template provisions three.
|
|
8077
8137
|
required: false
|
|
8078
8138
|
schema:
|
|
8079
8139
|
type: string
|
|
@@ -8238,10 +8298,30 @@ paths:
|
|
|
8238
8298
|
/v1/platform/connections/{connectionId}/passkeys/enroll/begin:
|
|
8239
8299
|
post:
|
|
8240
8300
|
tags: [Platform]
|
|
8241
|
-
summary: Begin passkey enrollment for a connected user
|
|
8301
|
+
summary: Begin passkey enrollment for a connected user (always 403)
|
|
8302
|
+
deprecated: true
|
|
8242
8303
|
description: |
|
|
8243
|
-
|
|
8244
|
-
|
|
8304
|
+
**This endpoint always returns 403 and cannot be made to work.**
|
|
8305
|
+
The description here previously said platform apps should use it
|
|
8306
|
+
instead of `POST /v1/auth/passkeys/register/begin`, which was
|
|
8307
|
+
wrong and cost integrators a WebAuthn ceremony to discover.
|
|
8308
|
+
|
|
8309
|
+
A passkey enrolled this way is login-capable: it can be asserted
|
|
8310
|
+
through the public sign-in flow to mint a full, non-delegated
|
|
8311
|
+
user session, so an app that enrolled one would hold a credential
|
|
8312
|
+
stronger than the delegation boundary it operates under. The
|
|
8313
|
+
capability was removed for that reason and will not return.
|
|
8314
|
+
|
|
8315
|
+
**A passkey is enrolled by the user, in their own session**, via
|
|
8316
|
+
`POST /v1/auth/passkeys/register/begin`. For a connected user
|
|
8317
|
+
that means completing the claim flow on the connection first.
|
|
8318
|
+
|
|
8319
|
+
To *use* a passkey a connected user already has, see:
|
|
8320
|
+
- `GET /v1/platform/connections/{connectionId}/passkeys` —
|
|
8321
|
+
whether the confirm step can be offered at all.
|
|
8322
|
+
- `POST /v1/platform/connections/{connectionId}/passkeys/tx-assert/begin`
|
|
8323
|
+
and `.../complete` — ask that user to touch their
|
|
8324
|
+
authenticator over a specific digest.
|
|
8245
8325
|
operationId: connectionPasskeyEnrollBegin
|
|
8246
8326
|
security:
|
|
8247
8327
|
- BearerAuth: []
|
|
@@ -8253,19 +8333,24 @@ paths:
|
|
|
8253
8333
|
type: string
|
|
8254
8334
|
format: uuid
|
|
8255
8335
|
responses:
|
|
8256
|
-
"
|
|
8257
|
-
description:
|
|
8336
|
+
"403":
|
|
8337
|
+
description: |
|
|
8338
|
+
Always. Platform apps cannot enroll login passkeys for
|
|
8339
|
+
connected users.
|
|
8258
8340
|
content:
|
|
8259
8341
|
application/json:
|
|
8260
8342
|
schema:
|
|
8261
|
-
$ref: "#/components/schemas/
|
|
8262
|
-
"404":
|
|
8263
|
-
$ref: "#/components/responses/NotFound"
|
|
8343
|
+
$ref: "#/components/schemas/ProblemDetails"
|
|
8264
8344
|
|
|
8265
8345
|
/v1/platform/connections/{connectionId}/passkeys/enroll/complete:
|
|
8266
8346
|
post:
|
|
8267
8347
|
tags: [Platform]
|
|
8268
|
-
summary: Complete passkey enrollment for a connected user
|
|
8348
|
+
summary: Complete passkey enrollment for a connected user (always 403)
|
|
8349
|
+
deprecated: true
|
|
8350
|
+
description: |
|
|
8351
|
+
**This endpoint always returns 403.** See
|
|
8352
|
+
`POST /v1/platform/connections/{connectionId}/passkeys/enroll/begin`
|
|
8353
|
+
for why, and for the paths that do work.
|
|
8269
8354
|
operationId: connectionPasskeyEnrollComplete
|
|
8270
8355
|
security:
|
|
8271
8356
|
- BearerAuth: []
|
|
@@ -8283,14 +8368,197 @@ paths:
|
|
|
8283
8368
|
schema:
|
|
8284
8369
|
$ref: "#/components/schemas/PasskeyRegisterCompleteRequest"
|
|
8285
8370
|
responses:
|
|
8286
|
-
"
|
|
8287
|
-
description:
|
|
8371
|
+
"403":
|
|
8372
|
+
description: |
|
|
8373
|
+
Always. Platform apps cannot enroll login passkeys for
|
|
8374
|
+
connected users.
|
|
8375
|
+
content:
|
|
8376
|
+
application/json:
|
|
8377
|
+
schema:
|
|
8378
|
+
$ref: "#/components/schemas/ProblemDetails"
|
|
8379
|
+
|
|
8380
|
+
/v1/platform/connections/{connectionId}/passkeys:
|
|
8381
|
+
get:
|
|
8382
|
+
tags: [Platform]
|
|
8383
|
+
summary: Whether a connected user can be asked for a passkey touch
|
|
8384
|
+
description: |
|
|
8385
|
+
Answers one question: can this app offer the passkey confirm
|
|
8386
|
+
step to this user? No credential material is returned — not
|
|
8387
|
+
credential ids, not public keys, not enrolment times.
|
|
8388
|
+
|
|
8389
|
+
`count` is what matters. Passkeys are bound to the domain they
|
|
8390
|
+
were registered on, so an account can hold credentials that this
|
|
8391
|
+
domain cannot offer; `count` reports only those usable on
|
|
8392
|
+
`rp_id`, while `registered_count` is the raw total. Branch on
|
|
8393
|
+
`has_passkey`.
|
|
8394
|
+
operationId: listConnectionPasskeys
|
|
8395
|
+
security:
|
|
8396
|
+
- BearerAuth: []
|
|
8397
|
+
parameters:
|
|
8398
|
+
- in: path
|
|
8399
|
+
name: connectionId
|
|
8400
|
+
required: true
|
|
8401
|
+
schema:
|
|
8402
|
+
type: string
|
|
8403
|
+
format: uuid
|
|
8404
|
+
responses:
|
|
8405
|
+
"200":
|
|
8406
|
+
description: Passkey availability for this connection
|
|
8407
|
+
content:
|
|
8408
|
+
application/json:
|
|
8409
|
+
schema:
|
|
8410
|
+
type: object
|
|
8411
|
+
required: [has_passkey, count, registered_count, rp_id]
|
|
8412
|
+
properties:
|
|
8413
|
+
has_passkey:
|
|
8414
|
+
type: boolean
|
|
8415
|
+
description: True when count > 0.
|
|
8416
|
+
count:
|
|
8417
|
+
type: integer
|
|
8418
|
+
format: int64
|
|
8419
|
+
description: Passkeys usable on rp_id.
|
|
8420
|
+
registered_count:
|
|
8421
|
+
type: integer
|
|
8422
|
+
format: int64
|
|
8423
|
+
description: |
|
|
8424
|
+
All passkeys on the account, including any
|
|
8425
|
+
bound to a different domain.
|
|
8426
|
+
rp_id:
|
|
8427
|
+
type: string
|
|
8428
|
+
description: The domain these counts are measured against.
|
|
8429
|
+
"403":
|
|
8430
|
+
$ref: "#/components/responses/Forbidden"
|
|
8431
|
+
"404":
|
|
8432
|
+
$ref: "#/components/responses/NotFound"
|
|
8433
|
+
|
|
8434
|
+
/v1/platform/connections/{connectionId}/passkeys/tx-assert/begin:
|
|
8435
|
+
post:
|
|
8436
|
+
tags: [Platform]
|
|
8437
|
+
summary: Ask a connected user to touch their authenticator
|
|
8438
|
+
description: |
|
|
8439
|
+
Begins a WebAuthn assertion bound to `tx_digest`, for the user on
|
|
8440
|
+
this connection. The connection in the path is the addressing
|
|
8441
|
+
that `POST /v1/auth/passkeys/tx-assert/begin` lacks: that route
|
|
8442
|
+
resolves the *calling* principal, so with a `plt_` key it looks
|
|
8443
|
+
up the app itself and reports no passkeys. An app never needs to
|
|
8444
|
+
hold an email to name one of its users.
|
|
8445
|
+
|
|
8446
|
+
Returns 404 when the user has no passkey usable on this domain —
|
|
8447
|
+
check `GET /v1/platform/connections/{connectionId}/passkeys`
|
|
8448
|
+
first and only offer the step when `has_passkey` is true.
|
|
8449
|
+
operationId: connectionPasskeyTxAssertBegin
|
|
8450
|
+
security:
|
|
8451
|
+
- BearerAuth: []
|
|
8452
|
+
parameters:
|
|
8453
|
+
- in: path
|
|
8454
|
+
name: connectionId
|
|
8455
|
+
required: true
|
|
8456
|
+
schema:
|
|
8457
|
+
type: string
|
|
8458
|
+
format: uuid
|
|
8459
|
+
requestBody:
|
|
8460
|
+
required: true
|
|
8461
|
+
content:
|
|
8462
|
+
application/json:
|
|
8463
|
+
schema:
|
|
8464
|
+
type: object
|
|
8465
|
+
required: [tx_digest]
|
|
8466
|
+
properties:
|
|
8467
|
+
tx_digest:
|
|
8468
|
+
type: string
|
|
8469
|
+
description: SHA-256 hex of the exact text being confirmed.
|
|
8470
|
+
action:
|
|
8471
|
+
type: string
|
|
8472
|
+
enum: [send, swap]
|
|
8473
|
+
default: send
|
|
8474
|
+
responses:
|
|
8475
|
+
"200":
|
|
8476
|
+
description: WebAuthn assertion ceremony options
|
|
8477
|
+
content:
|
|
8478
|
+
application/json:
|
|
8479
|
+
schema:
|
|
8480
|
+
$ref: "#/components/schemas/PasskeyAssertBeginResponse"
|
|
8481
|
+
"400":
|
|
8482
|
+
$ref: "#/components/responses/BadRequest"
|
|
8483
|
+
"403":
|
|
8484
|
+
$ref: "#/components/responses/Forbidden"
|
|
8485
|
+
"404":
|
|
8486
|
+
description: This user has no passkey registered.
|
|
8487
|
+
content:
|
|
8488
|
+
application/json:
|
|
8489
|
+
schema:
|
|
8490
|
+
$ref: "#/components/schemas/ProblemDetails"
|
|
8491
|
+
|
|
8492
|
+
/v1/platform/connections/{connectionId}/passkeys/tx-assert/complete:
|
|
8493
|
+
post:
|
|
8494
|
+
tags: [Platform]
|
|
8495
|
+
summary: Verify the touch and return proof of it
|
|
8496
|
+
description: |
|
|
8497
|
+
Verifies the assertion — origin, rpIdHash, the user-verified
|
|
8498
|
+
flag, the signature, and a sign count that must increase, which
|
|
8499
|
+
is what catches a cloned authenticator — and returns a
|
|
8500
|
+
short-lived token proving this user touched their authenticator
|
|
8501
|
+
over that digest.
|
|
8502
|
+
|
|
8503
|
+
The token records that a platform app requested it. That
|
|
8504
|
+
provenance is deliberate: it proves the touch to your
|
|
8505
|
+
application, and it is **refused** as authorization for a
|
|
8506
|
+
1Claw treasury transfer. A user consenting to your action has
|
|
8507
|
+
not consented to moving funds, and those remain a separate
|
|
8508
|
+
assertion from the user's own session.
|
|
8509
|
+
operationId: connectionPasskeyTxAssertComplete
|
|
8510
|
+
security:
|
|
8511
|
+
- BearerAuth: []
|
|
8512
|
+
parameters:
|
|
8513
|
+
- in: path
|
|
8514
|
+
name: connectionId
|
|
8515
|
+
required: true
|
|
8516
|
+
schema:
|
|
8517
|
+
type: string
|
|
8518
|
+
format: uuid
|
|
8519
|
+
requestBody:
|
|
8520
|
+
required: true
|
|
8521
|
+
content:
|
|
8522
|
+
application/json:
|
|
8523
|
+
schema:
|
|
8524
|
+
type: object
|
|
8525
|
+
required:
|
|
8526
|
+
[
|
|
8527
|
+
credential_id,
|
|
8528
|
+
authenticator_data,
|
|
8529
|
+
client_data_json,
|
|
8530
|
+
signature,
|
|
8531
|
+
]
|
|
8532
|
+
properties:
|
|
8533
|
+
credential_id:
|
|
8534
|
+
type: string
|
|
8535
|
+
authenticator_data:
|
|
8536
|
+
type: string
|
|
8537
|
+
client_data_json:
|
|
8538
|
+
type: string
|
|
8539
|
+
signature:
|
|
8540
|
+
type: string
|
|
8541
|
+
responses:
|
|
8542
|
+
"200":
|
|
8543
|
+
description: Assertion verified
|
|
8288
8544
|
content:
|
|
8289
8545
|
application/json:
|
|
8290
8546
|
schema:
|
|
8291
|
-
|
|
8547
|
+
type: object
|
|
8548
|
+
required: [passkey_token, expires_in]
|
|
8549
|
+
properties:
|
|
8550
|
+
passkey_token:
|
|
8551
|
+
type: string
|
|
8552
|
+
description: |
|
|
8553
|
+
Single-use proof of the touch, bound to the
|
|
8554
|
+
digest and to this user.
|
|
8555
|
+
expires_in:
|
|
8556
|
+
type: integer
|
|
8557
|
+
description: Seconds until the token expires.
|
|
8292
8558
|
"400":
|
|
8293
8559
|
$ref: "#/components/responses/BadRequest"
|
|
8560
|
+
"403":
|
|
8561
|
+
$ref: "#/components/responses/Forbidden"
|
|
8294
8562
|
"404":
|
|
8295
8563
|
$ref: "#/components/responses/NotFound"
|
|
8296
8564
|
|
|
@@ -8501,6 +8769,30 @@ paths:
|
|
|
8501
8769
|
"409":
|
|
8502
8770
|
$ref: "#/components/responses/Conflict"
|
|
8503
8771
|
|
|
8772
|
+
post:
|
|
8773
|
+
tags: [Approvals]
|
|
8774
|
+
summary: "One-click approve or deny, as an API call. The GET on this path is the preview an email link opens; this is the decision itself."
|
|
8775
|
+
operationId: quickDecide
|
|
8776
|
+
requestBody:
|
|
8777
|
+
required: true
|
|
8778
|
+
content:
|
|
8779
|
+
application/json:
|
|
8780
|
+
schema:
|
|
8781
|
+
type: object
|
|
8782
|
+
required: [token, decision]
|
|
8783
|
+
properties:
|
|
8784
|
+
token:
|
|
8785
|
+
type: string
|
|
8786
|
+
decision:
|
|
8787
|
+
type: string
|
|
8788
|
+
enum: [approve, deny]
|
|
8789
|
+
responses:
|
|
8790
|
+
"200":
|
|
8791
|
+
description: Decision recorded
|
|
8792
|
+
"400":
|
|
8793
|
+
description: Malformed or expired token
|
|
8794
|
+
"404":
|
|
8795
|
+
$ref: "#/components/responses/NotFound"
|
|
8504
8796
|
/v1/deposit-destinations:
|
|
8505
8797
|
post:
|
|
8506
8798
|
tags: [Treasury]
|
|
@@ -10304,6 +10596,17 @@ paths:
|
|
|
10304
10596
|
$ref: "#/components/responses/Forbidden"
|
|
10305
10597
|
"404":
|
|
10306
10598
|
$ref: "#/components/responses/NotFound"
|
|
10599
|
+
"503":
|
|
10600
|
+
description: |
|
|
10601
|
+
The runtime's last start failed less than 120 seconds ago and is not
|
|
10602
|
+
being retried yet. Chat starts a stopped runtime, so a client that
|
|
10603
|
+
retries on failure turns every attempt into another deploy — one
|
|
10604
|
+
polling client did exactly that every 8 seconds for days. Wait out
|
|
10605
|
+
the cooldown, or call the start endpoint to see the underlying error.
|
|
10606
|
+
content:
|
|
10607
|
+
application/json:
|
|
10608
|
+
schema:
|
|
10609
|
+
$ref: "#/components/schemas/ProblemDetails"
|
|
10307
10610
|
|
|
10308
10611
|
# ---------------------------------------------------------------------------
|
|
10309
10612
|
# Agent Memory
|
|
@@ -10351,6 +10654,24 @@ paths:
|
|
|
10351
10654
|
$ref: "#/components/responses/Unauthorized"
|
|
10352
10655
|
"404":
|
|
10353
10656
|
$ref: "#/components/responses/NotFound"
|
|
10657
|
+
delete:
|
|
10658
|
+
tags: [Agent Memory]
|
|
10659
|
+
summary: "Delete a memory namespace and every entry in it. Destructive and not reversible; there is no per-entry confirmation."
|
|
10660
|
+
operationId: deleteMemoryNamespace
|
|
10661
|
+
parameters:
|
|
10662
|
+
- $ref: "#/components/parameters/AgentId"
|
|
10663
|
+
- name: namespace
|
|
10664
|
+
in: path
|
|
10665
|
+
required: true
|
|
10666
|
+
schema:
|
|
10667
|
+
type: string
|
|
10668
|
+
responses:
|
|
10669
|
+
"204":
|
|
10670
|
+
description: Namespace deleted
|
|
10671
|
+
"401":
|
|
10672
|
+
$ref: "#/components/responses/Unauthorized"
|
|
10673
|
+
"404":
|
|
10674
|
+
$ref: "#/components/responses/NotFound"
|
|
10354
10675
|
|
|
10355
10676
|
/v1/agents/{agent_id}/memory/{namespace}/{key}:
|
|
10356
10677
|
put:
|
|
@@ -12444,30 +12765,6 @@ paths:
|
|
|
12444
12765
|
"404":
|
|
12445
12766
|
$ref: "#/components/responses/NotFound"
|
|
12446
12767
|
|
|
12447
|
-
/v1/auth/credential-recovery/requests/{id}:
|
|
12448
|
-
delete:
|
|
12449
|
-
tags: [Credential Recovery]
|
|
12450
|
-
summary: Cancel or reject a recovery request
|
|
12451
|
-
operationId: cancelCredentialRecovery
|
|
12452
|
-
security:
|
|
12453
|
-
- BearerAuth: []
|
|
12454
|
-
parameters:
|
|
12455
|
-
- name: id
|
|
12456
|
-
in: path
|
|
12457
|
-
required: true
|
|
12458
|
-
schema:
|
|
12459
|
-
type: string
|
|
12460
|
-
format: uuid
|
|
12461
|
-
responses:
|
|
12462
|
-
"204":
|
|
12463
|
-
description: Request cancelled
|
|
12464
|
-
"401":
|
|
12465
|
-
$ref: "#/components/responses/Unauthorized"
|
|
12466
|
-
"403":
|
|
12467
|
-
$ref: "#/components/responses/Forbidden"
|
|
12468
|
-
"404":
|
|
12469
|
-
$ref: "#/components/responses/NotFound"
|
|
12470
|
-
|
|
12471
12768
|
# ---------------------------------------------------------------------------
|
|
12472
12769
|
# Org Credential Recovery Policy
|
|
12473
12770
|
# ---------------------------------------------------------------------------
|
|
@@ -12518,139 +12815,1916 @@ paths:
|
|
|
12518
12815
|
# Shamir KEK
|
|
12519
12816
|
# ---------------------------------------------------------------------------
|
|
12520
12817
|
|
|
12521
|
-
/v1/
|
|
12818
|
+
/v1/agents/batch-delete:
|
|
12522
12819
|
post:
|
|
12523
|
-
tags: [
|
|
12524
|
-
summary:
|
|
12525
|
-
|
|
12526
|
-
|
|
12527
|
-
|
|
12528
|
-
|
|
12529
|
-
|
|
12530
|
-
|
|
12531
|
-
|
|
12820
|
+
tags: [Agents]
|
|
12821
|
+
summary: "batch delete agents"
|
|
12822
|
+
operationId: batch_delete_agents
|
|
12823
|
+
responses:
|
|
12824
|
+
'200':
|
|
12825
|
+
description: Success
|
|
12826
|
+
'401':
|
|
12827
|
+
description: Unauthenticated
|
|
12828
|
+
'403':
|
|
12829
|
+
description: Forbidden, or the plan does not include this
|
|
12830
|
+
'404':
|
|
12831
|
+
description: Not found
|
|
12832
|
+
/v1/agents/enroll/approve:
|
|
12833
|
+
post:
|
|
12834
|
+
tags: [Agents]
|
|
12835
|
+
summary: "Authenticated: consume token, create agent, return API key once. **Email-bound pending:** caller must belong to the same org and match `human_email`."
|
|
12836
|
+
operationId: approve_enrollment
|
|
12532
12837
|
requestBody:
|
|
12533
12838
|
required: true
|
|
12534
12839
|
content:
|
|
12535
12840
|
application/json:
|
|
12536
12841
|
schema:
|
|
12537
|
-
|
|
12538
|
-
|
|
12539
|
-
|
|
12540
|
-
|
|
12541
|
-
|
|
12542
|
-
|
|
12543
|
-
|
|
12544
|
-
|
|
12545
|
-
|
|
12546
|
-
|
|
12547
|
-
|
|
12548
|
-
|
|
12549
|
-
|
|
12550
|
-
|
|
12551
|
-
|
|
12552
|
-
|
|
12553
|
-
|
|
12554
|
-
|
|
12555
|
-
|
|
12556
|
-
|
|
12557
|
-
|
|
12558
|
-
|
|
12559
|
-
|
|
12560
|
-
|
|
12561
|
-
|
|
12562
|
-
description:
|
|
12842
|
+
type: object
|
|
12843
|
+
required:
|
|
12844
|
+
- token
|
|
12845
|
+
properties:
|
|
12846
|
+
token:
|
|
12847
|
+
type: string
|
|
12848
|
+
approval_id:
|
|
12849
|
+
type: string
|
|
12850
|
+
format: uuid
|
|
12851
|
+
description: |
|
|
12852
|
+
Consensus approval to spend on this creation.
|
|
12853
|
+
Approving an enrollment creates an agent, so it is
|
|
12854
|
+
gated on `agent.create` exactly as POST /v1/agents
|
|
12855
|
+
is. Orgs without a control-plane consensus policy
|
|
12856
|
+
never need this.
|
|
12857
|
+
responses:
|
|
12858
|
+
'200':
|
|
12859
|
+
description: Success
|
|
12860
|
+
'401':
|
|
12861
|
+
description: Unauthenticated
|
|
12862
|
+
'403':
|
|
12863
|
+
description: |
|
|
12864
|
+
Forbidden, the plan does not include this, or the org requires
|
|
12865
|
+
M-of-N consensus for `agent.create` and no approval was supplied.
|
|
12866
|
+
'404':
|
|
12867
|
+
description: Not found
|
|
12868
|
+
/v1/agents/enroll/deny:
|
|
12869
|
+
post:
|
|
12870
|
+
tags: [Agents]
|
|
12871
|
+
summary: "Authenticated: consume token and delete pending enrollment (deny). **Email-bound:** caller org and email must match the pending row. **Link-only:** "
|
|
12872
|
+
operationId: deny_enrollment
|
|
12873
|
+
requestBody:
|
|
12874
|
+
required: true
|
|
12875
|
+
content:
|
|
12876
|
+
application/json:
|
|
12877
|
+
schema:
|
|
12878
|
+
type: object
|
|
12879
|
+
required:
|
|
12880
|
+
- token
|
|
12881
|
+
properties:
|
|
12882
|
+
token:
|
|
12883
|
+
type: string
|
|
12884
|
+
responses:
|
|
12885
|
+
'200':
|
|
12886
|
+
description: Success
|
|
12887
|
+
'401':
|
|
12888
|
+
description: Unauthenticated
|
|
12889
|
+
'403':
|
|
12890
|
+
description: Forbidden, or the plan does not include this
|
|
12891
|
+
'404':
|
|
12892
|
+
description: Not found
|
|
12893
|
+
/v1/agents/enroll/pending:
|
|
12894
|
+
get:
|
|
12895
|
+
tags: [Agents]
|
|
12896
|
+
summary: "Public: validate enrollment token and return pending info for the dashboard (agent name, expires_at). Used so the UI can show 'Approve agent X?' witho"
|
|
12897
|
+
operationId: get_enrollment_pending
|
|
12898
|
+
security: []
|
|
12899
|
+
responses:
|
|
12900
|
+
'200':
|
|
12901
|
+
description: Success
|
|
12902
|
+
'404':
|
|
12903
|
+
description: Not found
|
|
12904
|
+
/v1/agents/{agent_id}/channels/{channel_id}/refresh-webhook:
|
|
12905
|
+
parameters:
|
|
12906
|
+
- name: agent_id
|
|
12907
|
+
in: path
|
|
12908
|
+
required: true
|
|
12909
|
+
schema:
|
|
12910
|
+
type: string
|
|
12911
|
+
- name: channel_id
|
|
12912
|
+
in: path
|
|
12913
|
+
required: true
|
|
12914
|
+
schema:
|
|
12915
|
+
type: string
|
|
12916
|
+
post:
|
|
12917
|
+
tags: [Agents]
|
|
12918
|
+
summary: "Re-register the provider webhook for this channel (repairs a stale or revoked subscription)."
|
|
12919
|
+
operationId: refresh_channel_webhook
|
|
12920
|
+
responses:
|
|
12921
|
+
'200':
|
|
12922
|
+
description: Success
|
|
12923
|
+
'401':
|
|
12924
|
+
description: Unauthenticated
|
|
12925
|
+
'403':
|
|
12926
|
+
description: Forbidden, or the plan does not include this
|
|
12927
|
+
'404':
|
|
12928
|
+
description: Not found
|
|
12929
|
+
/v1/agents/{agent_id}/channels/{channel_id}/repair:
|
|
12930
|
+
parameters:
|
|
12931
|
+
- name: agent_id
|
|
12932
|
+
in: path
|
|
12933
|
+
required: true
|
|
12934
|
+
schema:
|
|
12935
|
+
type: string
|
|
12936
|
+
- name: channel_id
|
|
12937
|
+
in: path
|
|
12938
|
+
required: true
|
|
12939
|
+
schema:
|
|
12940
|
+
type: string
|
|
12941
|
+
post:
|
|
12942
|
+
tags: [Agents]
|
|
12943
|
+
summary: "Repair a channel: alias of refresh-webhook, re-registers the provider webhook for this channel."
|
|
12944
|
+
operationId: repair_channel_webhook
|
|
12945
|
+
responses:
|
|
12946
|
+
'200':
|
|
12947
|
+
description: Success
|
|
12948
|
+
'401':
|
|
12949
|
+
description: Unauthenticated
|
|
12950
|
+
'403':
|
|
12951
|
+
description: Forbidden, or the plan does not include this
|
|
12952
|
+
'404':
|
|
12953
|
+
description: Not found
|
|
12954
|
+
/v1/agents/{agent_id}/eoa:
|
|
12955
|
+
parameters:
|
|
12956
|
+
- name: agent_id
|
|
12957
|
+
in: path
|
|
12958
|
+
required: true
|
|
12959
|
+
schema:
|
|
12960
|
+
type: string
|
|
12961
|
+
get:
|
|
12962
|
+
tags: [Agents]
|
|
12963
|
+
summary: "Get the agent's EVM address (no private key exposure)."
|
|
12964
|
+
operationId: get_agent_eoa
|
|
12965
|
+
responses:
|
|
12966
|
+
'200':
|
|
12967
|
+
description: Success
|
|
12968
|
+
'401':
|
|
12969
|
+
description: Unauthenticated
|
|
12970
|
+
'403':
|
|
12971
|
+
description: Forbidden, or the plan does not include this
|
|
12972
|
+
'404':
|
|
12973
|
+
description: Not found
|
|
12974
|
+
post:
|
|
12975
|
+
tags: [Agents]
|
|
12976
|
+
summary: "Generate an EVM EOA for an agent. Creates a secp256k1 key, stores it in the __agent-keys vault, and records the derived address on the agent record."
|
|
12977
|
+
operationId: generate_agent_eoa
|
|
12978
|
+
responses:
|
|
12979
|
+
'200':
|
|
12980
|
+
description: Success
|
|
12981
|
+
'401':
|
|
12982
|
+
description: Unauthenticated
|
|
12983
|
+
'403':
|
|
12984
|
+
description: Forbidden, or the plan does not include this
|
|
12985
|
+
'404':
|
|
12986
|
+
description: Not found
|
|
12987
|
+
/v1/agents/{agent_id}/rotate-signer-key:
|
|
12988
|
+
parameters:
|
|
12989
|
+
- name: agent_id
|
|
12990
|
+
in: path
|
|
12991
|
+
required: true
|
|
12992
|
+
schema:
|
|
12993
|
+
type: string
|
|
12994
|
+
post:
|
|
12995
|
+
tags: [Agents]
|
|
12996
|
+
summary: "Rotate the agent's EVM signer key. Generates a new secp256k1 key, builds a swapOwner UserOp on the Safe, signs with the old key, submits to bundler, a"
|
|
12997
|
+
operationId: rotate_signer_key
|
|
12998
|
+
responses:
|
|
12999
|
+
'200':
|
|
13000
|
+
description: Success
|
|
13001
|
+
'401':
|
|
13002
|
+
description: Unauthenticated
|
|
13003
|
+
'403':
|
|
13004
|
+
description: Forbidden, or the plan does not include this
|
|
13005
|
+
'404':
|
|
13006
|
+
description: Not found
|
|
13007
|
+
/v1/agents/{agent_id}/smart-accounts/{chain_id}:
|
|
13008
|
+
parameters:
|
|
13009
|
+
- name: agent_id
|
|
13010
|
+
in: path
|
|
13011
|
+
required: true
|
|
13012
|
+
schema:
|
|
13013
|
+
type: string
|
|
13014
|
+
- name: chain_id
|
|
13015
|
+
in: path
|
|
13016
|
+
required: true
|
|
13017
|
+
schema:
|
|
13018
|
+
type: string
|
|
13019
|
+
delete:
|
|
13020
|
+
tags: [Agents]
|
|
13021
|
+
summary: "delete smart account"
|
|
13022
|
+
operationId: delete_smart_account
|
|
13023
|
+
responses:
|
|
13024
|
+
'200':
|
|
13025
|
+
description: Success
|
|
13026
|
+
'401':
|
|
13027
|
+
description: Unauthenticated
|
|
13028
|
+
'403':
|
|
13029
|
+
description: Forbidden, or the plan does not include this
|
|
13030
|
+
'404':
|
|
13031
|
+
description: Not found
|
|
13032
|
+
/v1/agents/{agent_id}/unlock-platform:
|
|
13033
|
+
parameters:
|
|
13034
|
+
- name: agent_id
|
|
13035
|
+
in: path
|
|
13036
|
+
required: true
|
|
13037
|
+
schema:
|
|
13038
|
+
type: string
|
|
13039
|
+
post:
|
|
13040
|
+
tags: [Agents]
|
|
13041
|
+
summary: "User-only. Clears platform_locked when the app is no longer actively connected."
|
|
13042
|
+
operationId: unlock_agent_platform
|
|
13043
|
+
responses:
|
|
13044
|
+
'200':
|
|
13045
|
+
description: Success
|
|
13046
|
+
'401':
|
|
13047
|
+
description: Unauthenticated
|
|
13048
|
+
'403':
|
|
13049
|
+
description: Forbidden, or the plan does not include this
|
|
13050
|
+
'404':
|
|
13051
|
+
description: Not found
|
|
13052
|
+
/v1/audit/export:
|
|
13053
|
+
get:
|
|
13054
|
+
tags: [Audit]
|
|
13055
|
+
summary: "export audit events"
|
|
13056
|
+
operationId: export_audit_events
|
|
13057
|
+
responses:
|
|
13058
|
+
'200':
|
|
13059
|
+
description: Success
|
|
13060
|
+
'401':
|
|
13061
|
+
description: Unauthenticated
|
|
13062
|
+
'403':
|
|
13063
|
+
description: Forbidden, or the plan does not include this
|
|
13064
|
+
'404':
|
|
13065
|
+
description: Not found
|
|
13066
|
+
/v1/auth/credential-recovery/requests/{id}/cancel:
|
|
13067
|
+
parameters:
|
|
13068
|
+
- name: id
|
|
13069
|
+
in: path
|
|
13070
|
+
required: true
|
|
13071
|
+
schema:
|
|
13072
|
+
type: string
|
|
13073
|
+
post:
|
|
13074
|
+
tags: [Auth]
|
|
13075
|
+
summary: "cancel request"
|
|
13076
|
+
operationId: cancel_request
|
|
13077
|
+
responses:
|
|
13078
|
+
'200':
|
|
13079
|
+
description: Success
|
|
13080
|
+
'401':
|
|
13081
|
+
description: Unauthenticated
|
|
13082
|
+
'403':
|
|
13083
|
+
description: Forbidden, or the plan does not include this
|
|
13084
|
+
'404':
|
|
13085
|
+
description: Not found
|
|
13086
|
+
/v1/auth/migration-status:
|
|
13087
|
+
get:
|
|
13088
|
+
tags: [Auth]
|
|
13089
|
+
summary: "What the account is currently anchored on, and what has to happen next. The ordering is the part people get wrong, so it lives here rather than being"
|
|
13090
|
+
operationId: migration_status
|
|
13091
|
+
responses:
|
|
13092
|
+
'200':
|
|
13093
|
+
description: Success
|
|
13094
|
+
'401':
|
|
13095
|
+
description: Unauthenticated
|
|
13096
|
+
'403':
|
|
13097
|
+
description: Forbidden, or the plan does not include this
|
|
13098
|
+
'404':
|
|
13099
|
+
description: Not found
|
|
13100
|
+
/v1/auth/passkeys/vault-assert/begin:
|
|
13101
|
+
post:
|
|
13102
|
+
tags: [Auth]
|
|
13103
|
+
summary: "Begin a passkey assertion that unlocks vault secret reads for users who have `require_passkey_for_vaults` enabled."
|
|
13104
|
+
operationId: vault_assert_begin
|
|
13105
|
+
responses:
|
|
13106
|
+
'200':
|
|
13107
|
+
description: Success
|
|
13108
|
+
'401':
|
|
13109
|
+
description: Unauthenticated
|
|
13110
|
+
'403':
|
|
13111
|
+
description: Forbidden, or the plan does not include this
|
|
13112
|
+
'404':
|
|
13113
|
+
description: Not found
|
|
13114
|
+
/v1/auth/passkeys/vault-assert/complete:
|
|
13115
|
+
post:
|
|
13116
|
+
tags: [Auth]
|
|
13117
|
+
summary: "Returns a short-lived `passkey_token` for the `X-Passkey-Token` header on secret reads."
|
|
13118
|
+
operationId: vault_assert_complete
|
|
13119
|
+
requestBody:
|
|
13120
|
+
required: true
|
|
13121
|
+
content:
|
|
13122
|
+
application/json:
|
|
13123
|
+
schema:
|
|
13124
|
+
type: object
|
|
13125
|
+
required:
|
|
13126
|
+
- credential_id
|
|
13127
|
+
- authenticator_data
|
|
13128
|
+
- client_data_json
|
|
13129
|
+
- signature
|
|
13130
|
+
properties:
|
|
13131
|
+
credential_id:
|
|
13132
|
+
type: string
|
|
13133
|
+
authenticator_data:
|
|
13134
|
+
type: string
|
|
13135
|
+
client_data_json:
|
|
13136
|
+
type: string
|
|
13137
|
+
signature:
|
|
13138
|
+
type: string
|
|
13139
|
+
responses:
|
|
13140
|
+
'200':
|
|
13141
|
+
description: Success
|
|
13142
|
+
'401':
|
|
13143
|
+
description: Unauthenticated
|
|
13144
|
+
'403':
|
|
13145
|
+
description: Forbidden, or the plan does not include this
|
|
13146
|
+
'404':
|
|
13147
|
+
description: Not found
|
|
13148
|
+
/v1/auth/reauth/begin:
|
|
13149
|
+
post:
|
|
13150
|
+
tags: [Auth]
|
|
13151
|
+
summary: "start a re-authentication ceremony. For passkey: returns a WebAuthn challenge. For password: returns immediately (no challenge needed)."
|
|
13152
|
+
operationId: reauth_begin
|
|
13153
|
+
requestBody:
|
|
13154
|
+
required: true
|
|
13155
|
+
content:
|
|
13156
|
+
application/json:
|
|
13157
|
+
schema:
|
|
13158
|
+
type: object
|
|
13159
|
+
required:
|
|
13160
|
+
- method
|
|
13161
|
+
properties:
|
|
13162
|
+
method:
|
|
13163
|
+
type: string
|
|
13164
|
+
purpose:
|
|
13165
|
+
type: string
|
|
13166
|
+
responses:
|
|
13167
|
+
'200':
|
|
13168
|
+
description: Success
|
|
13169
|
+
'401':
|
|
13170
|
+
description: Unauthenticated
|
|
13171
|
+
'403':
|
|
13172
|
+
description: Forbidden, or the plan does not include this
|
|
13173
|
+
'404':
|
|
13174
|
+
description: Not found
|
|
13175
|
+
/v1/auth/reauth/complete:
|
|
13176
|
+
post:
|
|
13177
|
+
tags: [Auth]
|
|
13178
|
+
summary: "verify re-authentication and issue a single-use token."
|
|
13179
|
+
operationId: reauth_complete
|
|
13180
|
+
requestBody:
|
|
13181
|
+
required: true
|
|
13182
|
+
content:
|
|
13183
|
+
application/json:
|
|
13184
|
+
schema:
|
|
13185
|
+
type: object
|
|
13186
|
+
required:
|
|
13187
|
+
- method
|
|
13188
|
+
properties:
|
|
13189
|
+
method:
|
|
13190
|
+
type: string
|
|
13191
|
+
purpose:
|
|
13192
|
+
type: string
|
|
13193
|
+
password:
|
|
13194
|
+
type: string
|
|
13195
|
+
credential_id:
|
|
13196
|
+
type: string
|
|
13197
|
+
authenticator_data:
|
|
13198
|
+
type: string
|
|
13199
|
+
client_data_json:
|
|
13200
|
+
type: string
|
|
13201
|
+
signature:
|
|
13202
|
+
type: string
|
|
13203
|
+
responses:
|
|
13204
|
+
'200':
|
|
13205
|
+
description: Success
|
|
13206
|
+
'401':
|
|
13207
|
+
description: Unauthenticated
|
|
13208
|
+
'403':
|
|
13209
|
+
description: Forbidden, or the plan does not include this
|
|
13210
|
+
'404':
|
|
13211
|
+
description: Not found
|
|
13212
|
+
/v1/auth/social/disconnect:
|
|
13213
|
+
post:
|
|
13214
|
+
tags: [Auth]
|
|
13215
|
+
summary: "Sever every social identity link, so a social account that once owned this login can no longer reach it. The case this exists for: someone leaves a c"
|
|
13216
|
+
operationId: disconnect_social
|
|
13217
|
+
responses:
|
|
13218
|
+
'200':
|
|
13219
|
+
description: Success
|
|
13220
|
+
'401':
|
|
13221
|
+
description: Unauthenticated
|
|
13222
|
+
'403':
|
|
13223
|
+
description: Forbidden, or the plan does not include this
|
|
13224
|
+
'404':
|
|
13225
|
+
description: Not found
|
|
13226
|
+
/v1/auth/sso/authorize:
|
|
13227
|
+
get:
|
|
13228
|
+
tags: [Auth]
|
|
13229
|
+
summary: "returns JSON with authorization_url for WorkOS Hosted Auth."
|
|
13230
|
+
operationId: sso_authorize
|
|
13231
|
+
responses:
|
|
13232
|
+
'200':
|
|
13233
|
+
description: Success
|
|
13234
|
+
'401':
|
|
13235
|
+
description: Unauthenticated
|
|
13236
|
+
'403':
|
|
13237
|
+
description: Forbidden, or the plan does not include this
|
|
13238
|
+
'404':
|
|
13239
|
+
description: Not found
|
|
13240
|
+
/v1/auth/sso/callback:
|
|
13241
|
+
get:
|
|
13242
|
+
tags: [Auth]
|
|
13243
|
+
summary: "exchange code for profile, find/create user, redirect to dashboard with token."
|
|
13244
|
+
operationId: sso_callback
|
|
13245
|
+
responses:
|
|
13246
|
+
'200':
|
|
13247
|
+
description: Success
|
|
13248
|
+
'401':
|
|
13249
|
+
description: Unauthenticated
|
|
13250
|
+
'403':
|
|
13251
|
+
description: Forbidden, or the plan does not include this
|
|
13252
|
+
'404':
|
|
13253
|
+
description: Not found
|
|
13254
|
+
/v1/auth/sso/status:
|
|
13255
|
+
get:
|
|
13256
|
+
tags: [Auth]
|
|
13257
|
+
summary: "returns whether SSO is configured (for dashboard to show/hide SSO button)."
|
|
13258
|
+
operationId: sso_status
|
|
13259
|
+
responses:
|
|
13260
|
+
'200':
|
|
13261
|
+
description: Success
|
|
13262
|
+
'401':
|
|
13263
|
+
description: Unauthenticated
|
|
13264
|
+
'403':
|
|
13265
|
+
description: Forbidden, or the plan does not include this
|
|
13266
|
+
'404':
|
|
13267
|
+
description: Not found
|
|
13268
|
+
/v1/billing/llm-models:
|
|
13269
|
+
get:
|
|
13270
|
+
tags: [Billing]
|
|
13271
|
+
summary: "get llm models"
|
|
13272
|
+
operationId: get_llm_models
|
|
13273
|
+
responses:
|
|
13274
|
+
'200':
|
|
13275
|
+
description: Success
|
|
13276
|
+
'401':
|
|
13277
|
+
description: Unauthenticated
|
|
13278
|
+
'403':
|
|
13279
|
+
description: Forbidden, or the plan does not include this
|
|
13280
|
+
'404':
|
|
13281
|
+
description: Not found
|
|
13282
|
+
/v1/billing/llm-pricing:
|
|
13283
|
+
get:
|
|
13284
|
+
tags: [Billing]
|
|
13285
|
+
summary: "get llm pricing"
|
|
13286
|
+
operationId: get_llm_pricing
|
|
13287
|
+
responses:
|
|
13288
|
+
'200':
|
|
13289
|
+
description: Success
|
|
13290
|
+
'401':
|
|
13291
|
+
description: Unauthenticated
|
|
13292
|
+
'403':
|
|
13293
|
+
description: Forbidden, or the plan does not include this
|
|
13294
|
+
'404':
|
|
13295
|
+
description: Not found
|
|
13296
|
+
/v1/billing/promo/redeem:
|
|
13297
|
+
get:
|
|
13298
|
+
tags: [Billing]
|
|
13299
|
+
summary: "get llm billing status"
|
|
13300
|
+
operationId: get_llm_billing_status
|
|
13301
|
+
responses:
|
|
13302
|
+
'200':
|
|
13303
|
+
description: Success
|
|
13304
|
+
'401':
|
|
13305
|
+
description: Unauthenticated
|
|
13306
|
+
'403':
|
|
13307
|
+
description: Forbidden, or the plan does not include this
|
|
13308
|
+
'404':
|
|
13309
|
+
description: Not found
|
|
13310
|
+
post:
|
|
13311
|
+
tags: [Billing]
|
|
13312
|
+
summary: "redeem promo"
|
|
13313
|
+
operationId: redeem_promo
|
|
13314
|
+
requestBody:
|
|
13315
|
+
required: true
|
|
13316
|
+
content:
|
|
13317
|
+
application/json:
|
|
13318
|
+
schema:
|
|
13319
|
+
type: object
|
|
13320
|
+
required:
|
|
13321
|
+
- code
|
|
13322
|
+
properties:
|
|
13323
|
+
code:
|
|
13324
|
+
type: string
|
|
13325
|
+
responses:
|
|
13326
|
+
'200':
|
|
13327
|
+
description: Success
|
|
13328
|
+
'401':
|
|
13329
|
+
description: Unauthenticated
|
|
13330
|
+
'403':
|
|
13331
|
+
description: Forbidden, or the plan does not include this
|
|
13332
|
+
'404':
|
|
13333
|
+
description: Not found
|
|
13334
|
+
/v1/billing/promo/validate:
|
|
13335
|
+
get:
|
|
13336
|
+
tags: [Billing]
|
|
13337
|
+
summary: "validate promo"
|
|
13338
|
+
operationId: validate_promo
|
|
13339
|
+
responses:
|
|
13340
|
+
'200':
|
|
13341
|
+
description: Success
|
|
13342
|
+
'401':
|
|
13343
|
+
description: Unauthenticated
|
|
13344
|
+
'403':
|
|
13345
|
+
description: Forbidden, or the plan does not include this
|
|
13346
|
+
'404':
|
|
13347
|
+
description: Not found
|
|
13348
|
+
/v1/chains/rpc:
|
|
13349
|
+
post:
|
|
13350
|
+
tags: [Chains]
|
|
13351
|
+
summary: "Proxy a single JSON-RPC call to the chain's RPC URL. Only read-only methods in ALLOWED_RPC_METHODS are allowed (Treasury balances, Safe deployment, et"
|
|
13352
|
+
operationId: chain_rpc_proxy
|
|
13353
|
+
requestBody:
|
|
13354
|
+
required: true
|
|
13355
|
+
content:
|
|
13356
|
+
application/json:
|
|
13357
|
+
schema:
|
|
13358
|
+
type: object
|
|
13359
|
+
required:
|
|
13360
|
+
- chain_id
|
|
13361
|
+
- method
|
|
13362
|
+
- params
|
|
13363
|
+
properties:
|
|
13364
|
+
chain_id:
|
|
13365
|
+
type: integer
|
|
13366
|
+
method:
|
|
13367
|
+
type: string
|
|
13368
|
+
params:
|
|
13369
|
+
type: array
|
|
13370
|
+
items:
|
|
13371
|
+
type: object
|
|
13372
|
+
additionalProperties: true
|
|
13373
|
+
responses:
|
|
13374
|
+
'200':
|
|
13375
|
+
description: Success
|
|
13376
|
+
'401':
|
|
13377
|
+
description: Unauthenticated
|
|
13378
|
+
'403':
|
|
13379
|
+
description: Forbidden, or the plan does not include this
|
|
13380
|
+
'404':
|
|
13381
|
+
description: Not found
|
|
13382
|
+
/v1/fiat/webhooks:
|
|
13383
|
+
post:
|
|
13384
|
+
tags: [Fiat]
|
|
13385
|
+
summary: "Receive completion events from fiat partners (MoonPay signed body or generic JSON)."
|
|
13386
|
+
operationId: fiat_webhook
|
|
13387
|
+
responses:
|
|
13388
|
+
'200':
|
|
13389
|
+
description: Success
|
|
13390
|
+
'401':
|
|
13391
|
+
description: Unauthenticated
|
|
13392
|
+
'403':
|
|
13393
|
+
description: Forbidden, or the plan does not include this
|
|
13394
|
+
'404':
|
|
13395
|
+
description: Not found
|
|
13396
|
+
/v1/memory/shared-namespaces:
|
|
13397
|
+
get:
|
|
13398
|
+
tags: [Memory]
|
|
13399
|
+
summary: "list shared namespaces"
|
|
13400
|
+
operationId: list_shared_namespaces
|
|
13401
|
+
responses:
|
|
13402
|
+
'200':
|
|
13403
|
+
description: Success
|
|
13404
|
+
'401':
|
|
13405
|
+
description: Unauthenticated
|
|
13406
|
+
'403':
|
|
13407
|
+
description: Forbidden, or the plan does not include this
|
|
13408
|
+
'404':
|
|
13409
|
+
description: Not found
|
|
13410
|
+
post:
|
|
13411
|
+
tags: [Memory]
|
|
13412
|
+
summary: "create shared namespace"
|
|
13413
|
+
operationId: create_shared_namespace
|
|
13414
|
+
requestBody:
|
|
13415
|
+
required: true
|
|
13416
|
+
content:
|
|
13417
|
+
application/json:
|
|
13418
|
+
schema:
|
|
13419
|
+
type: object
|
|
13420
|
+
required:
|
|
13421
|
+
- namespace
|
|
13422
|
+
- agent_ids
|
|
13423
|
+
properties:
|
|
13424
|
+
namespace:
|
|
13425
|
+
type: string
|
|
13426
|
+
agent_ids:
|
|
13427
|
+
type: array
|
|
13428
|
+
items:
|
|
13429
|
+
type: string
|
|
13430
|
+
format: uuid
|
|
13431
|
+
responses:
|
|
13432
|
+
'200':
|
|
13433
|
+
description: Success
|
|
13434
|
+
'401':
|
|
13435
|
+
description: Unauthenticated
|
|
13436
|
+
'403':
|
|
13437
|
+
description: Forbidden, or the plan does not include this
|
|
13438
|
+
'404':
|
|
13439
|
+
description: Not found
|
|
13440
|
+
/v1/memory/shared-namespaces/{id}:
|
|
13441
|
+
parameters:
|
|
13442
|
+
- name: id
|
|
13443
|
+
in: path
|
|
13444
|
+
required: true
|
|
13445
|
+
schema:
|
|
13446
|
+
type: string
|
|
13447
|
+
delete:
|
|
13448
|
+
tags: [Memory]
|
|
13449
|
+
summary: "delete shared namespace"
|
|
13450
|
+
operationId: delete_shared_namespace
|
|
13451
|
+
responses:
|
|
13452
|
+
'200':
|
|
13453
|
+
description: Success
|
|
13454
|
+
'401':
|
|
13455
|
+
description: Unauthenticated
|
|
13456
|
+
'403':
|
|
13457
|
+
description: Forbidden, or the plan does not include this
|
|
13458
|
+
'404':
|
|
13459
|
+
description: Not found
|
|
13460
|
+
patch:
|
|
13461
|
+
tags: [Memory]
|
|
13462
|
+
summary: "update shared namespace"
|
|
13463
|
+
operationId: update_shared_namespace
|
|
13464
|
+
requestBody:
|
|
13465
|
+
required: true
|
|
13466
|
+
content:
|
|
13467
|
+
application/json:
|
|
13468
|
+
schema:
|
|
13469
|
+
type: object
|
|
13470
|
+
required:
|
|
13471
|
+
- agent_ids
|
|
13472
|
+
properties:
|
|
13473
|
+
agent_ids:
|
|
13474
|
+
type: array
|
|
13475
|
+
items:
|
|
13476
|
+
type: string
|
|
13477
|
+
format: uuid
|
|
13478
|
+
responses:
|
|
13479
|
+
'200':
|
|
13480
|
+
description: Success
|
|
13481
|
+
'401':
|
|
13482
|
+
description: Unauthenticated
|
|
13483
|
+
'403':
|
|
13484
|
+
description: Forbidden, or the plan does not include this
|
|
13485
|
+
'404':
|
|
13486
|
+
description: Not found
|
|
13487
|
+
/v1/onboarding/journey:
|
|
13488
|
+
post:
|
|
13489
|
+
tags: [Onboarding]
|
|
13490
|
+
summary: "record which path a user chose. The dashboard already had `track()` calls for the wizard, but they POST to a dashboard route that does not exist, so "
|
|
13491
|
+
operationId: record_journey
|
|
13492
|
+
requestBody:
|
|
13493
|
+
required: true
|
|
13494
|
+
content:
|
|
13495
|
+
application/json:
|
|
13496
|
+
schema:
|
|
13497
|
+
type: object
|
|
13498
|
+
required:
|
|
13499
|
+
- journey
|
|
13500
|
+
properties:
|
|
13501
|
+
journey:
|
|
13502
|
+
type: string
|
|
13503
|
+
step:
|
|
13504
|
+
type: string
|
|
13505
|
+
responses:
|
|
13506
|
+
'200':
|
|
13507
|
+
description: Success
|
|
13508
|
+
'401':
|
|
13509
|
+
description: Unauthenticated
|
|
13510
|
+
'403':
|
|
13511
|
+
description: Forbidden, or the plan does not include this
|
|
13512
|
+
'404':
|
|
13513
|
+
description: Not found
|
|
13514
|
+
/v1/org/env-vars/{id}/delete:
|
|
13515
|
+
parameters:
|
|
13516
|
+
- name: id
|
|
13517
|
+
in: path
|
|
13518
|
+
required: true
|
|
13519
|
+
schema:
|
|
13520
|
+
type: string
|
|
13521
|
+
post:
|
|
13522
|
+
tags: [Org]
|
|
13523
|
+
summary: "delete org env var"
|
|
13524
|
+
operationId: delete_org_env_var
|
|
13525
|
+
responses:
|
|
13526
|
+
'200':
|
|
13527
|
+
description: Success
|
|
13528
|
+
'401':
|
|
13529
|
+
description: Unauthenticated
|
|
13530
|
+
'403':
|
|
13531
|
+
description: Forbidden, or the plan does not include this
|
|
13532
|
+
'404':
|
|
13533
|
+
description: Not found
|
|
13534
|
+
/v1/org/kek-custody:
|
|
13535
|
+
get:
|
|
13536
|
+
tags: [Org]
|
|
13537
|
+
summary: "Get current custody mode and share metadata"
|
|
13538
|
+
operationId: get_custody
|
|
13539
|
+
responses:
|
|
13540
|
+
'200':
|
|
13541
|
+
description: Success
|
|
13542
|
+
'401':
|
|
13543
|
+
description: Unauthenticated
|
|
13544
|
+
'403':
|
|
13545
|
+
description: Forbidden, or the plan does not include this
|
|
13546
|
+
'404':
|
|
13547
|
+
description: Not found
|
|
13548
|
+
post:
|
|
13549
|
+
tags: [Org]
|
|
13550
|
+
summary: "Setup Shamir key custody"
|
|
13551
|
+
operationId: setup_custody
|
|
13552
|
+
requestBody:
|
|
13553
|
+
required: true
|
|
13554
|
+
content:
|
|
13555
|
+
application/json:
|
|
13556
|
+
schema:
|
|
13557
|
+
type: object
|
|
13558
|
+
required:
|
|
13559
|
+
- custody_mode
|
|
13560
|
+
properties:
|
|
13561
|
+
custody_mode:
|
|
13562
|
+
type: string
|
|
13563
|
+
responses:
|
|
13564
|
+
'200':
|
|
13565
|
+
description: Success
|
|
13566
|
+
'401':
|
|
13567
|
+
description: Unauthenticated
|
|
13568
|
+
'403':
|
|
13569
|
+
description: Forbidden, or the plan does not include this
|
|
13570
|
+
'404':
|
|
13571
|
+
description: Not found
|
|
13572
|
+
/v1/org/kek-custody/reconstruct:
|
|
13573
|
+
get:
|
|
13574
|
+
tags: [Org]
|
|
13575
|
+
summary: "list org env vars"
|
|
13576
|
+
operationId: list_org_env_vars
|
|
13577
|
+
responses:
|
|
13578
|
+
'200':
|
|
13579
|
+
description: Success
|
|
13580
|
+
'401':
|
|
13581
|
+
description: Unauthenticated
|
|
13582
|
+
'403':
|
|
13583
|
+
description: Forbidden, or the plan does not include this
|
|
13584
|
+
'404':
|
|
13585
|
+
description: Not found
|
|
13586
|
+
post:
|
|
13587
|
+
tags: [Org]
|
|
13588
|
+
summary: "TEE-bound reconstruction request"
|
|
13589
|
+
operationId: reconstruct
|
|
13590
|
+
requestBody:
|
|
13591
|
+
required: true
|
|
13592
|
+
content:
|
|
13593
|
+
application/json:
|
|
13594
|
+
schema:
|
|
13595
|
+
type: object
|
|
13596
|
+
required:
|
|
13597
|
+
- approval_id
|
|
13598
|
+
- action
|
|
13599
|
+
properties:
|
|
13600
|
+
approval_id:
|
|
13601
|
+
type: object
|
|
13602
|
+
client_share:
|
|
13603
|
+
type: string
|
|
13604
|
+
action:
|
|
13605
|
+
type: object
|
|
13606
|
+
additionalProperties: true
|
|
13607
|
+
responses:
|
|
13608
|
+
'200':
|
|
13609
|
+
description: Success
|
|
13610
|
+
'401':
|
|
13611
|
+
description: Unauthenticated
|
|
13612
|
+
'403':
|
|
13613
|
+
description: Forbidden, or the plan does not include this
|
|
13614
|
+
'404':
|
|
13615
|
+
description: Not found
|
|
13616
|
+
/v1/org/settings:
|
|
13617
|
+
get:
|
|
13618
|
+
tags: [Org]
|
|
13619
|
+
summary: "list org settings"
|
|
13620
|
+
operationId: list_org_settings
|
|
13621
|
+
responses:
|
|
13622
|
+
'200':
|
|
13623
|
+
description: Success
|
|
13624
|
+
'401':
|
|
13625
|
+
description: Unauthenticated
|
|
13626
|
+
'403':
|
|
13627
|
+
description: Forbidden, or the plan does not include this
|
|
13628
|
+
'404':
|
|
13629
|
+
description: Not found
|
|
13630
|
+
patch:
|
|
13631
|
+
tags: [Org]
|
|
13632
|
+
summary: "update org setting"
|
|
13633
|
+
operationId: update_org_setting
|
|
13634
|
+
requestBody:
|
|
13635
|
+
required: true
|
|
13636
|
+
content:
|
|
13637
|
+
application/json:
|
|
13638
|
+
schema:
|
|
13639
|
+
type: object
|
|
13640
|
+
required:
|
|
13641
|
+
- key
|
|
13642
|
+
- value
|
|
13643
|
+
properties:
|
|
13644
|
+
key:
|
|
13645
|
+
type: string
|
|
13646
|
+
value:
|
|
13647
|
+
type: string
|
|
13648
|
+
approval_id:
|
|
13649
|
+
type: string
|
|
13650
|
+
format: uuid
|
|
13651
|
+
responses:
|
|
13652
|
+
'200':
|
|
13653
|
+
description: Success
|
|
13654
|
+
'401':
|
|
13655
|
+
description: Unauthenticated
|
|
13656
|
+
'403':
|
|
13657
|
+
description: Forbidden, or the plan does not include this
|
|
13658
|
+
'404':
|
|
13659
|
+
description: Not found
|
|
13660
|
+
/v1/platform/apps/by-slug/{slug}/branding:
|
|
13661
|
+
parameters:
|
|
13662
|
+
- name: slug
|
|
13663
|
+
in: path
|
|
13664
|
+
required: true
|
|
13665
|
+
schema:
|
|
13666
|
+
type: string
|
|
13667
|
+
get:
|
|
13668
|
+
tags: [Platform]
|
|
13669
|
+
summary: "Public, returns app name + logo."
|
|
13670
|
+
operationId: app_branding
|
|
13671
|
+
security: []
|
|
13672
|
+
responses:
|
|
13673
|
+
'200':
|
|
13674
|
+
description: Success
|
|
13675
|
+
'404':
|
|
13676
|
+
description: Not found
|
|
13677
|
+
/v1/platform/apps/{app_id}/automations:
|
|
13678
|
+
parameters:
|
|
13679
|
+
- name: app_id
|
|
13680
|
+
in: path
|
|
13681
|
+
required: true
|
|
13682
|
+
schema:
|
|
13683
|
+
type: string
|
|
13684
|
+
get:
|
|
13685
|
+
tags: [Platform]
|
|
13686
|
+
summary: "list platform automations"
|
|
13687
|
+
operationId: list_platform_automations
|
|
13688
|
+
responses:
|
|
13689
|
+
'200':
|
|
13690
|
+
description: Success
|
|
13691
|
+
'401':
|
|
13692
|
+
description: Unauthenticated
|
|
13693
|
+
'403':
|
|
13694
|
+
description: Forbidden, or the plan does not include this
|
|
13695
|
+
'404':
|
|
13696
|
+
description: Not found
|
|
13697
|
+
post:
|
|
13698
|
+
tags: [Platform]
|
|
13699
|
+
summary: "upsert user"
|
|
13700
|
+
operationId: upsert_user
|
|
13701
|
+
requestBody:
|
|
13702
|
+
required: true
|
|
13703
|
+
content:
|
|
13704
|
+
application/json:
|
|
13705
|
+
schema:
|
|
13706
|
+
type: object
|
|
13707
|
+
properties:
|
|
13708
|
+
subject_token:
|
|
13709
|
+
type: string
|
|
13710
|
+
subject_token_type:
|
|
13711
|
+
type: string
|
|
13712
|
+
email:
|
|
13713
|
+
type: string
|
|
13714
|
+
display_name:
|
|
13715
|
+
type: string
|
|
13716
|
+
siwe_message:
|
|
13717
|
+
type: string
|
|
13718
|
+
siwe_signature:
|
|
13719
|
+
type: string
|
|
13720
|
+
return_to:
|
|
13721
|
+
type: string
|
|
13722
|
+
create_sub_org:
|
|
13723
|
+
type: boolean
|
|
13724
|
+
app_id:
|
|
13725
|
+
type: object
|
|
13726
|
+
responses:
|
|
13727
|
+
'200':
|
|
13728
|
+
description: Success
|
|
13729
|
+
'401':
|
|
13730
|
+
description: Unauthenticated
|
|
13731
|
+
'403':
|
|
13732
|
+
description: Forbidden, or the plan does not include this
|
|
13733
|
+
'404':
|
|
13734
|
+
description: Not found
|
|
13735
|
+
/v1/platform/connected-apps/{connection_id}/unlock-resources:
|
|
13736
|
+
parameters:
|
|
13737
|
+
- name: connection_id
|
|
13738
|
+
in: path
|
|
13739
|
+
required: true
|
|
13740
|
+
schema:
|
|
13741
|
+
type: string
|
|
13742
|
+
post:
|
|
13743
|
+
tags: [Platform]
|
|
13744
|
+
summary: "Unlocks platform-locked resources for a disconnected (or active) connection the user owns."
|
|
13745
|
+
operationId: unlock_connection_resources
|
|
13746
|
+
responses:
|
|
13747
|
+
'200':
|
|
13748
|
+
description: Success
|
|
13749
|
+
'401':
|
|
13750
|
+
description: Unauthenticated
|
|
13751
|
+
'403':
|
|
13752
|
+
description: Forbidden, or the plan does not include this
|
|
13753
|
+
'404':
|
|
13754
|
+
description: Not found
|
|
13755
|
+
/v1/platform/connections/{connection_id}/memory:
|
|
13756
|
+
parameters:
|
|
13757
|
+
- name: connection_id
|
|
13758
|
+
in: path
|
|
13759
|
+
required: true
|
|
13760
|
+
schema:
|
|
13761
|
+
type: string
|
|
13762
|
+
get:
|
|
13763
|
+
tags: [Platform]
|
|
13764
|
+
summary: "list connection memory namespaces"
|
|
13765
|
+
operationId: list_connection_memory_namespaces
|
|
13766
|
+
responses:
|
|
13767
|
+
'200':
|
|
13768
|
+
description: Success
|
|
13769
|
+
'401':
|
|
13770
|
+
description: Unauthenticated
|
|
13771
|
+
'403':
|
|
13772
|
+
description: Forbidden, or the plan does not include this
|
|
13773
|
+
'404':
|
|
13774
|
+
description: Not found
|
|
13775
|
+
/v1/platform/connections/{connection_id}/memory/{namespace}:
|
|
13776
|
+
parameters:
|
|
13777
|
+
- name: connection_id
|
|
13778
|
+
in: path
|
|
13779
|
+
required: true
|
|
13780
|
+
schema:
|
|
13781
|
+
type: string
|
|
13782
|
+
- name: namespace
|
|
13783
|
+
in: path
|
|
13784
|
+
required: true
|
|
13785
|
+
schema:
|
|
13786
|
+
type: string
|
|
13787
|
+
get:
|
|
13788
|
+
tags: [Platform]
|
|
13789
|
+
summary: "list connection memory entries"
|
|
13790
|
+
operationId: list_connection_memory_entries
|
|
13791
|
+
responses:
|
|
13792
|
+
'200':
|
|
13793
|
+
description: Success
|
|
13794
|
+
'401':
|
|
13795
|
+
description: Unauthenticated
|
|
13796
|
+
'403':
|
|
13797
|
+
description: Forbidden, or the plan does not include this
|
|
13798
|
+
'404':
|
|
13799
|
+
description: Not found
|
|
13800
|
+
/v1/platform/connections/{connection_id}/resources:
|
|
13801
|
+
parameters:
|
|
13802
|
+
- name: connection_id
|
|
13803
|
+
in: path
|
|
13804
|
+
required: true
|
|
13805
|
+
schema:
|
|
13806
|
+
type: string
|
|
13807
|
+
get:
|
|
13808
|
+
tags: [Platform]
|
|
13809
|
+
summary: "list connection resources"
|
|
13810
|
+
operationId: list_connection_resources
|
|
13811
|
+
responses:
|
|
13812
|
+
'200':
|
|
13813
|
+
description: Success
|
|
13814
|
+
'401':
|
|
13815
|
+
description: Unauthenticated
|
|
13816
|
+
'403':
|
|
13817
|
+
description: Forbidden, or the plan does not include this
|
|
13818
|
+
'404':
|
|
13819
|
+
description: Not found
|
|
13820
|
+
post:
|
|
13821
|
+
tags: [Platform]
|
|
13822
|
+
summary: "create app policy"
|
|
13823
|
+
operationId: create_app_policy
|
|
13824
|
+
requestBody:
|
|
13825
|
+
required: true
|
|
13826
|
+
content:
|
|
13827
|
+
application/json:
|
|
13828
|
+
schema:
|
|
13829
|
+
type: object
|
|
13830
|
+
properties:
|
|
13831
|
+
user_id:
|
|
13832
|
+
type: object
|
|
13833
|
+
to_allowlist:
|
|
13834
|
+
type: array
|
|
13835
|
+
items:
|
|
13836
|
+
type: string
|
|
13837
|
+
to_denylist:
|
|
13838
|
+
type: array
|
|
13839
|
+
items:
|
|
13840
|
+
type: string
|
|
13841
|
+
max_value_per_tx_eth:
|
|
13842
|
+
type: string
|
|
13843
|
+
daily_limit_eth:
|
|
13844
|
+
type: string
|
|
13845
|
+
allowed_chains:
|
|
13846
|
+
type: array
|
|
13847
|
+
items:
|
|
13848
|
+
type: string
|
|
13849
|
+
allowed_tokens:
|
|
13850
|
+
type: array
|
|
13851
|
+
items:
|
|
13852
|
+
type: string
|
|
13853
|
+
max_transactions_per_day:
|
|
13854
|
+
type: integer
|
|
13855
|
+
human_factor_auth:
|
|
13856
|
+
type: object
|
|
13857
|
+
additionalProperties: true
|
|
13858
|
+
responses:
|
|
13859
|
+
'200':
|
|
13860
|
+
description: Success
|
|
13861
|
+
'401':
|
|
13862
|
+
description: Unauthenticated
|
|
13863
|
+
'403':
|
|
13864
|
+
description: Forbidden, or the plan does not include this
|
|
13865
|
+
'404':
|
|
13866
|
+
description: Not found
|
|
13867
|
+
/v1/platform/link-account:
|
|
13868
|
+
post:
|
|
13869
|
+
tags: [Platform]
|
|
13870
|
+
summary: "Authenticated user links their account to a platform app. Used by the dashboard `/connect/{slug}/link` consent flow for cross-org users."
|
|
13871
|
+
operationId: link_account
|
|
13872
|
+
requestBody:
|
|
13873
|
+
required: true
|
|
13874
|
+
content:
|
|
13875
|
+
application/json:
|
|
13876
|
+
schema:
|
|
13877
|
+
type: object
|
|
13878
|
+
required:
|
|
13879
|
+
- client_id
|
|
13880
|
+
properties:
|
|
13881
|
+
client_id:
|
|
13882
|
+
type: string
|
|
13883
|
+
responses:
|
|
13884
|
+
'200':
|
|
13885
|
+
description: Success
|
|
13886
|
+
'401':
|
|
13887
|
+
description: Unauthenticated
|
|
13888
|
+
'403':
|
|
13889
|
+
description: Forbidden, or the plan does not include this
|
|
13890
|
+
'404':
|
|
13891
|
+
description: Not found
|
|
13892
|
+
/v1/platform/orphaned-resources:
|
|
13893
|
+
get:
|
|
13894
|
+
tags: [Platform]
|
|
13895
|
+
summary: "platform-locked agents/vaults with no active connection."
|
|
13896
|
+
operationId: list_orphaned_platform_resources
|
|
13897
|
+
responses:
|
|
13898
|
+
'200':
|
|
13899
|
+
description: Success
|
|
13900
|
+
'401':
|
|
13901
|
+
description: Unauthenticated
|
|
13902
|
+
'403':
|
|
13903
|
+
description: Forbidden, or the plan does not include this
|
|
13904
|
+
'404':
|
|
13905
|
+
description: Not found
|
|
13906
|
+
/v1/reports/request:
|
|
13907
|
+
post:
|
|
13908
|
+
tags: [Reports]
|
|
13909
|
+
summary: "Public (no auth). Submits lead info, sends email with download link."
|
|
13910
|
+
operationId: request_report
|
|
13911
|
+
security: []
|
|
13912
|
+
requestBody:
|
|
13913
|
+
required: true
|
|
13914
|
+
content:
|
|
13915
|
+
application/json:
|
|
13916
|
+
schema:
|
|
13917
|
+
type: object
|
|
13918
|
+
required:
|
|
13919
|
+
- first_name
|
|
13920
|
+
- last_name
|
|
13921
|
+
- email
|
|
13922
|
+
- company
|
|
13923
|
+
properties:
|
|
13924
|
+
first_name:
|
|
13925
|
+
type: string
|
|
13926
|
+
last_name:
|
|
13927
|
+
type: string
|
|
13928
|
+
email:
|
|
13929
|
+
type: string
|
|
13930
|
+
company:
|
|
13931
|
+
type: string
|
|
13932
|
+
job_title:
|
|
13933
|
+
type: string
|
|
13934
|
+
report_slug:
|
|
13935
|
+
type: string
|
|
13936
|
+
marketing_consent:
|
|
13937
|
+
type: boolean
|
|
13938
|
+
responses:
|
|
13939
|
+
'200':
|
|
13940
|
+
description: Success
|
|
13941
|
+
'404':
|
|
13942
|
+
description: Not found
|
|
13943
|
+
/v1/runtimes/{runtime_id}/chat/conversations:
|
|
13944
|
+
parameters:
|
|
13945
|
+
- name: runtime_id
|
|
13946
|
+
in: path
|
|
13947
|
+
required: true
|
|
13948
|
+
schema:
|
|
13949
|
+
type: string
|
|
13950
|
+
get:
|
|
13951
|
+
tags: [Runtimes]
|
|
13952
|
+
summary: "list runtime chat conversations"
|
|
13953
|
+
operationId: list_runtime_chat_conversations
|
|
13954
|
+
responses:
|
|
13955
|
+
'200':
|
|
13956
|
+
description: Success
|
|
13957
|
+
'401':
|
|
13958
|
+
description: Unauthenticated
|
|
13959
|
+
'403':
|
|
13960
|
+
description: Forbidden, or the plan does not include this
|
|
13961
|
+
'404':
|
|
13962
|
+
description: Not found
|
|
13963
|
+
/v1/runtimes/{runtime_id}/chat/conversations/{conversation_id}:
|
|
13964
|
+
parameters:
|
|
13965
|
+
- name: runtime_id
|
|
13966
|
+
in: path
|
|
13967
|
+
required: true
|
|
13968
|
+
schema:
|
|
13969
|
+
type: string
|
|
13970
|
+
- name: conversation_id
|
|
13971
|
+
in: path
|
|
13972
|
+
required: true
|
|
13973
|
+
schema:
|
|
13974
|
+
type: string
|
|
13975
|
+
delete:
|
|
13976
|
+
tags: [Runtimes]
|
|
13977
|
+
summary: "Archives a runtime chat session so the next message starts a fresh conversation."
|
|
13978
|
+
operationId: archive_runtime_chat_conversation
|
|
13979
|
+
responses:
|
|
13980
|
+
'200':
|
|
13981
|
+
description: Success
|
|
13982
|
+
'401':
|
|
13983
|
+
description: Unauthenticated
|
|
13984
|
+
'403':
|
|
13985
|
+
description: Forbidden, or the plan does not include this
|
|
13986
|
+
'404':
|
|
13987
|
+
description: Not found
|
|
13988
|
+
get:
|
|
13989
|
+
tags: [Runtimes]
|
|
13990
|
+
summary: "get runtime chat conversation"
|
|
13991
|
+
operationId: get_runtime_chat_conversation
|
|
13992
|
+
responses:
|
|
13993
|
+
'200':
|
|
13994
|
+
description: Success
|
|
13995
|
+
'401':
|
|
13996
|
+
description: Unauthenticated
|
|
13997
|
+
'403':
|
|
13998
|
+
description: Forbidden, or the plan does not include this
|
|
13999
|
+
'404':
|
|
14000
|
+
description: Not found
|
|
14001
|
+
/v1/runtimes/{runtime_id}/chat/diagnostics:
|
|
14002
|
+
parameters:
|
|
14003
|
+
- name: runtime_id
|
|
14004
|
+
in: path
|
|
14005
|
+
required: true
|
|
14006
|
+
schema:
|
|
14007
|
+
type: string
|
|
14008
|
+
get:
|
|
14009
|
+
tags: [Runtimes]
|
|
14010
|
+
summary: "Human-only snapshot of chat auth wiring: which platform env vars Vault will inject on the next Start and which upstream URL chat proxies to."
|
|
14011
|
+
operationId: runtime_chat_diagnostics
|
|
14012
|
+
responses:
|
|
14013
|
+
'200':
|
|
14014
|
+
description: Success
|
|
14015
|
+
'401':
|
|
14016
|
+
description: Unauthenticated
|
|
14017
|
+
'403':
|
|
14018
|
+
description: Forbidden, or the plan does not include this
|
|
14019
|
+
'404':
|
|
14020
|
+
description: Not found
|
|
14021
|
+
/v1/runtimes/{runtime_id}/chat/unlock:
|
|
14022
|
+
parameters:
|
|
14023
|
+
- name: runtime_id
|
|
14024
|
+
in: path
|
|
14025
|
+
required: true
|
|
14026
|
+
schema:
|
|
14027
|
+
type: string
|
|
14028
|
+
post:
|
|
14029
|
+
tags: [Runtimes]
|
|
14030
|
+
summary: "Step-up (password or passkey reauth token, purpose=`runtime_chat`) unlocks dashboard runtime chat for 15 minutes — same trust bar as Shell/Logs."
|
|
14031
|
+
operationId: unlock_runtime_chat
|
|
14032
|
+
responses:
|
|
14033
|
+
'200':
|
|
14034
|
+
description: Success
|
|
14035
|
+
'401':
|
|
14036
|
+
description: Unauthenticated
|
|
14037
|
+
'403':
|
|
14038
|
+
description: Forbidden, or the plan does not include this
|
|
14039
|
+
'404':
|
|
14040
|
+
description: Not found
|
|
14041
|
+
/v1/runtimes/{runtime_id}/logs/stream:
|
|
14042
|
+
parameters:
|
|
14043
|
+
- name: runtime_id
|
|
14044
|
+
in: path
|
|
14045
|
+
required: true
|
|
14046
|
+
schema:
|
|
14047
|
+
type: string
|
|
14048
|
+
get:
|
|
14049
|
+
tags: [Runtimes]
|
|
14050
|
+
summary: "SSE live log streaming"
|
|
14051
|
+
operationId: stream_runtime_logs
|
|
14052
|
+
responses:
|
|
14053
|
+
'200':
|
|
14054
|
+
description: Success
|
|
14055
|
+
'401':
|
|
14056
|
+
description: Unauthenticated
|
|
14057
|
+
'403':
|
|
14058
|
+
description: Forbidden, or the plan does not include this
|
|
14059
|
+
'404':
|
|
14060
|
+
description: Not found
|
|
14061
|
+
/v1/runtimes/{runtime_id}/logs/unlock:
|
|
14062
|
+
parameters:
|
|
14063
|
+
- name: runtime_id
|
|
14064
|
+
in: path
|
|
14065
|
+
required: true
|
|
14066
|
+
schema:
|
|
14067
|
+
type: string
|
|
14068
|
+
post:
|
|
14069
|
+
tags: [Runtimes]
|
|
14070
|
+
summary: "Step-up (password or passkey reauth token) unlocks log fetch/stream for 15 minutes."
|
|
14071
|
+
operationId: unlock_runtime_logs
|
|
14072
|
+
responses:
|
|
14073
|
+
'200':
|
|
14074
|
+
description: Success
|
|
14075
|
+
'401':
|
|
14076
|
+
description: Unauthenticated
|
|
14077
|
+
'403':
|
|
14078
|
+
description: Forbidden, or the plan does not include this
|
|
14079
|
+
'404':
|
|
14080
|
+
description: Not found
|
|
14081
|
+
/v1/runtimes/{runtime_id}/rebuild:
|
|
14082
|
+
parameters:
|
|
14083
|
+
- name: runtime_id
|
|
14084
|
+
in: path
|
|
14085
|
+
required: true
|
|
14086
|
+
schema:
|
|
14087
|
+
type: string
|
|
14088
|
+
post:
|
|
14089
|
+
tags: [Runtimes]
|
|
14090
|
+
summary: "Phase 1: invalidate the cached image tag and return the runtime to `stopped`. Next `start` re-pulls the image; for `source_repo` runtimes the entrypoi"
|
|
14091
|
+
operationId: rebuild_runtime
|
|
14092
|
+
responses:
|
|
14093
|
+
'200':
|
|
14094
|
+
description: Success
|
|
14095
|
+
'401':
|
|
14096
|
+
description: Unauthenticated
|
|
14097
|
+
'403':
|
|
14098
|
+
description: Forbidden, or the plan does not include this
|
|
14099
|
+
'404':
|
|
14100
|
+
description: Not found
|
|
14101
|
+
/v1/runtimes/{runtime_id}/restart:
|
|
14102
|
+
parameters:
|
|
14103
|
+
- name: runtime_id
|
|
14104
|
+
in: path
|
|
14105
|
+
required: true
|
|
14106
|
+
schema:
|
|
14107
|
+
type: string
|
|
14108
|
+
post:
|
|
14109
|
+
tags: [Runtimes]
|
|
14110
|
+
summary: "Force stop (best-effort) then start. Recovers stale `running` rows and proxy timeouts where the client never received the start response."
|
|
14111
|
+
operationId: restart_runtime
|
|
14112
|
+
responses:
|
|
14113
|
+
'200':
|
|
14114
|
+
description: Success
|
|
14115
|
+
'401':
|
|
14116
|
+
description: Unauthenticated
|
|
14117
|
+
'403':
|
|
14118
|
+
description: Forbidden, or the plan does not include this
|
|
14119
|
+
'404':
|
|
14120
|
+
description: Not found
|
|
14121
|
+
/v1/vaults/{vault_id}/secret-version-disable/{*path_and_version}:
|
|
14122
|
+
parameters:
|
|
14123
|
+
- name: vault_id
|
|
14124
|
+
in: path
|
|
14125
|
+
required: true
|
|
14126
|
+
schema:
|
|
14127
|
+
type: string
|
|
14128
|
+
post:
|
|
14129
|
+
tags: [Vaults]
|
|
14130
|
+
summary: "Disable a specific version so it can no longer be read (but is retained for audit)."
|
|
14131
|
+
operationId: disable_version
|
|
14132
|
+
responses:
|
|
14133
|
+
'200':
|
|
14134
|
+
description: Success
|
|
14135
|
+
'401':
|
|
14136
|
+
description: Unauthenticated
|
|
14137
|
+
'403':
|
|
14138
|
+
description: Forbidden, or the plan does not include this
|
|
14139
|
+
'404':
|
|
14140
|
+
description: Not found
|
|
14141
|
+
/v1/vaults/{vault_id}/secret-version/{*path_and_version}:
|
|
14142
|
+
parameters:
|
|
14143
|
+
- name: vault_id
|
|
14144
|
+
in: path
|
|
14145
|
+
required: true
|
|
14146
|
+
schema:
|
|
14147
|
+
type: string
|
|
14148
|
+
get:
|
|
14149
|
+
tags: [Vaults]
|
|
14150
|
+
summary: "get secret version"
|
|
14151
|
+
operationId: get_secret_version
|
|
14152
|
+
responses:
|
|
14153
|
+
'200':
|
|
14154
|
+
description: Success
|
|
14155
|
+
'401':
|
|
14156
|
+
description: Unauthenticated
|
|
14157
|
+
'403':
|
|
14158
|
+
description: Forbidden, or the plan does not include this
|
|
14159
|
+
'404':
|
|
14160
|
+
description: Not found
|
|
14161
|
+
/v1/vaults/{vault_id}/unlock-platform:
|
|
14162
|
+
parameters:
|
|
14163
|
+
- name: vault_id
|
|
14164
|
+
in: path
|
|
14165
|
+
required: true
|
|
14166
|
+
schema:
|
|
14167
|
+
type: string
|
|
14168
|
+
post:
|
|
14169
|
+
tags: [Vaults]
|
|
14170
|
+
summary: "unlock vault platform"
|
|
14171
|
+
operationId: unlock_vault_platform
|
|
14172
|
+
responses:
|
|
14173
|
+
'200':
|
|
14174
|
+
description: Success
|
|
14175
|
+
'401':
|
|
14176
|
+
description: Unauthenticated
|
|
14177
|
+
'403':
|
|
14178
|
+
description: Forbidden, or the plan does not include this
|
|
14179
|
+
'404':
|
|
14180
|
+
description: Not found
|
|
14181
|
+
/v1/webinars/register:
|
|
14182
|
+
post:
|
|
14183
|
+
tags: [Webinars]
|
|
14184
|
+
summary: "Public (no auth). Registers for a webinar, sends confirmation + calendar invite."
|
|
14185
|
+
operationId: register_webinar
|
|
14186
|
+
security: []
|
|
14187
|
+
requestBody:
|
|
14188
|
+
required: true
|
|
14189
|
+
content:
|
|
14190
|
+
application/json:
|
|
14191
|
+
schema:
|
|
14192
|
+
type: object
|
|
14193
|
+
required:
|
|
14194
|
+
- first_name
|
|
14195
|
+
- last_name
|
|
14196
|
+
- email
|
|
14197
|
+
- company
|
|
14198
|
+
properties:
|
|
14199
|
+
first_name:
|
|
14200
|
+
type: string
|
|
14201
|
+
last_name:
|
|
14202
|
+
type: string
|
|
14203
|
+
email:
|
|
14204
|
+
type: string
|
|
14205
|
+
company:
|
|
14206
|
+
type: string
|
|
14207
|
+
job_title:
|
|
14208
|
+
type: string
|
|
14209
|
+
webinar_slug:
|
|
14210
|
+
type: string
|
|
14211
|
+
marketing_consent:
|
|
14212
|
+
type: boolean
|
|
14213
|
+
responses:
|
|
14214
|
+
'200':
|
|
14215
|
+
description: Success
|
|
14216
|
+
'404':
|
|
14217
|
+
description: Not found
|
|
14218
|
+
|
|
14219
|
+
/v1/runtimes/templates:
|
|
14220
|
+
get:
|
|
14221
|
+
tags: [Runtimes]
|
|
14222
|
+
summary: "The provisionable runtime templates, with licence and whether the agent needs its own vendor account"
|
|
14223
|
+
operationId: list_runtime_templates
|
|
14224
|
+
responses:
|
|
14225
|
+
'200':
|
|
14226
|
+
description: The template catalogue
|
|
12563
14227
|
content:
|
|
12564
14228
|
application/json:
|
|
12565
14229
|
schema:
|
|
12566
|
-
|
|
12567
|
-
|
|
12568
|
-
|
|
12569
|
-
|
|
12570
|
-
|
|
14230
|
+
type: object
|
|
14231
|
+
properties:
|
|
14232
|
+
templates:
|
|
14233
|
+
type: array
|
|
14234
|
+
items:
|
|
14235
|
+
type: object
|
|
14236
|
+
properties:
|
|
14237
|
+
id:
|
|
14238
|
+
type: string
|
|
14239
|
+
description:
|
|
14240
|
+
type: string
|
|
14241
|
+
chat_capable:
|
|
14242
|
+
type: boolean
|
|
14243
|
+
license:
|
|
14244
|
+
type: string
|
|
14245
|
+
nullable: true
|
|
14246
|
+
description: SPDX id, or null when the agent is proprietary
|
|
14247
|
+
requires_vendor_subscription:
|
|
14248
|
+
type: boolean
|
|
14249
|
+
description: Whether the agent needs a paid account with its vendor. Independent of licence — the Codex CLI is Apache-2.0 and still requires a ChatGPT plan.
|
|
14250
|
+
vendor_credential_env:
|
|
14251
|
+
type: string
|
|
14252
|
+
nullable: true
|
|
14253
|
+
'401':
|
|
14254
|
+
description: Unauthenticated
|
|
14255
|
+
/v1/automations/step-types:
|
|
14256
|
+
get:
|
|
14257
|
+
tags: [Automations]
|
|
14258
|
+
summary: "The automation step vocabulary an automation may use"
|
|
14259
|
+
operationId: list_automation_step_types
|
|
14260
|
+
responses:
|
|
14261
|
+
'200':
|
|
14262
|
+
description: Supported step types
|
|
14263
|
+
'401':
|
|
14264
|
+
description: Unauthenticated
|
|
14265
|
+
/v1/platform/apps/{app_id}/runtimes:
|
|
14266
|
+
parameters:
|
|
14267
|
+
- name: app_id
|
|
14268
|
+
in: path
|
|
14269
|
+
required: true
|
|
14270
|
+
schema:
|
|
14271
|
+
type: string
|
|
14272
|
+
format: uuid
|
|
14273
|
+
get:
|
|
14274
|
+
tags: [Platform]
|
|
14275
|
+
summary: "Runtimes belonging to a platform app"
|
|
14276
|
+
operationId: list_platform_runtimes
|
|
14277
|
+
responses:
|
|
14278
|
+
'200':
|
|
14279
|
+
description: Success
|
|
14280
|
+
'401':
|
|
14281
|
+
description: Unauthenticated
|
|
14282
|
+
'403':
|
|
14283
|
+
description: Forbidden
|
|
14284
|
+
/v1/browser/devices:
|
|
12571
14285
|
post:
|
|
12572
|
-
tags: [
|
|
12573
|
-
summary:
|
|
12574
|
-
|
|
12575
|
-
Submit Shamir shares to reconstruct the org KEK. Requires at least
|
|
12576
|
-
`threshold` valid shares. Used during disaster recovery.
|
|
12577
|
-
operationId: reconstructShamirKek
|
|
12578
|
-
security:
|
|
12579
|
-
- BearerAuth: []
|
|
14286
|
+
tags: [Browser Bridge]
|
|
14287
|
+
summary: "Pair a browser bridge and mint its credential. Human callers only, behind a step-up re-auth: pairing is what gives a browser the standing to ask for credentials later."
|
|
14288
|
+
operationId: pair_browser_device
|
|
12580
14289
|
requestBody:
|
|
12581
14290
|
required: true
|
|
12582
14291
|
content:
|
|
12583
14292
|
application/json:
|
|
12584
14293
|
schema:
|
|
12585
|
-
|
|
14294
|
+
type: object
|
|
14295
|
+
required: [label, public_key_pin]
|
|
14296
|
+
properties:
|
|
14297
|
+
label:
|
|
14298
|
+
type: string
|
|
14299
|
+
description: Name for this device. Re-pairing an existing label must present the same key.
|
|
14300
|
+
public_key_pin:
|
|
14301
|
+
type: string
|
|
14302
|
+
description: The bridge's public key, pinned on first use for this label.
|
|
14303
|
+
bridge_version:
|
|
14304
|
+
type: string
|
|
14305
|
+
platform:
|
|
14306
|
+
type: string
|
|
12586
14307
|
responses:
|
|
12587
|
-
|
|
12588
|
-
description:
|
|
14308
|
+
'201':
|
|
14309
|
+
description: "Paired. The credential is returned once and there is no endpoint that returns it again."
|
|
12589
14310
|
content:
|
|
12590
14311
|
application/json:
|
|
12591
14312
|
schema:
|
|
12592
|
-
|
|
12593
|
-
|
|
12594
|
-
|
|
12595
|
-
|
|
12596
|
-
|
|
12597
|
-
|
|
12598
|
-
|
|
12599
|
-
|
|
12600
|
-
|
|
14313
|
+
type: object
|
|
14314
|
+
properties:
|
|
14315
|
+
device_id:
|
|
14316
|
+
type: string
|
|
14317
|
+
format: uuid
|
|
14318
|
+
label:
|
|
14319
|
+
type: string
|
|
14320
|
+
credential:
|
|
14321
|
+
type: string
|
|
14322
|
+
description: The bb_ bridge credential. Shown once.
|
|
14323
|
+
'401':
|
|
14324
|
+
description: Unauthenticated, or step-up re-auth not satisfied
|
|
14325
|
+
'403':
|
|
14326
|
+
description: Not a human caller — agents and platform keys cannot pair a device
|
|
14327
|
+
'409':
|
|
14328
|
+
description: That label is already pinned to a different key
|
|
12601
14329
|
get:
|
|
12602
|
-
tags: [
|
|
12603
|
-
summary:
|
|
12604
|
-
|
|
12605
|
-
Returns the one-time recovery codes for the Shamir KEK. These codes
|
|
12606
|
-
can be used as an emergency fallback if custodian shares are lost.
|
|
12607
|
-
Codes are only returned once — subsequent calls return 410.
|
|
12608
|
-
operationId: getShamirKekRecoveryCodes
|
|
12609
|
-
security:
|
|
12610
|
-
- BearerAuth: []
|
|
14330
|
+
tags: [Browser Bridge]
|
|
14331
|
+
summary: "List the browser bridges paired to this organization. Revoked devices are included: 'was this machine ever paired' is the question asked after a laptop goes missing."
|
|
14332
|
+
operationId: list_browser_devices
|
|
12611
14333
|
responses:
|
|
12612
|
-
|
|
12613
|
-
description:
|
|
14334
|
+
'200':
|
|
14335
|
+
description: The paired devices. No credential material is returned — the row holds an Argon2 hash and a prefix, and neither is exposed.
|
|
12614
14336
|
content:
|
|
12615
14337
|
application/json:
|
|
12616
14338
|
schema:
|
|
12617
|
-
|
|
12618
|
-
|
|
12619
|
-
|
|
12620
|
-
|
|
12621
|
-
|
|
12622
|
-
|
|
12623
|
-
|
|
12624
|
-
|
|
12625
|
-
|
|
14339
|
+
type: object
|
|
14340
|
+
properties:
|
|
14341
|
+
devices:
|
|
14342
|
+
type: array
|
|
14343
|
+
items:
|
|
14344
|
+
type: object
|
|
14345
|
+
properties:
|
|
14346
|
+
id:
|
|
14347
|
+
type: string
|
|
14348
|
+
format: uuid
|
|
14349
|
+
label:
|
|
14350
|
+
type: string
|
|
14351
|
+
platform:
|
|
14352
|
+
type: string
|
|
14353
|
+
nullable: true
|
|
14354
|
+
bridge_version:
|
|
14355
|
+
type: string
|
|
14356
|
+
nullable: true
|
|
14357
|
+
last_seen_at:
|
|
14358
|
+
type: string
|
|
14359
|
+
format: date-time
|
|
14360
|
+
nullable: true
|
|
14361
|
+
revoked_at:
|
|
14362
|
+
type: string
|
|
14363
|
+
format: date-time
|
|
14364
|
+
nullable: true
|
|
14365
|
+
description: Set once revoked. A revoked credential stops resolving.
|
|
14366
|
+
created_at:
|
|
14367
|
+
type: string
|
|
14368
|
+
format: date-time
|
|
14369
|
+
'401':
|
|
14370
|
+
description: Unauthenticated
|
|
14371
|
+
/v1/browser/devices/{id}:
|
|
14372
|
+
delete:
|
|
14373
|
+
tags: [Browser Bridge]
|
|
14374
|
+
summary: "Revoke a paired bridge. This is what makes a leaked bb_ credential stop working."
|
|
14375
|
+
operationId: revoke_browser_device
|
|
14376
|
+
parameters:
|
|
14377
|
+
- name: id
|
|
14378
|
+
in: path
|
|
14379
|
+
required: true
|
|
14380
|
+
schema:
|
|
14381
|
+
type: string
|
|
14382
|
+
format: uuid
|
|
14383
|
+
responses:
|
|
14384
|
+
'204':
|
|
14385
|
+
description: Revoked. Subsequent use of that credential resolves to nothing.
|
|
14386
|
+
'401':
|
|
14387
|
+
description: Unauthenticated
|
|
14388
|
+
'404':
|
|
14389
|
+
description: No such device in this organization
|
|
14390
|
+
/v1/browser/credentials:
|
|
12626
14391
|
post:
|
|
12627
|
-
tags: [
|
|
12628
|
-
summary:
|
|
12629
|
-
|
|
12630
|
-
operationId: verifyShamirKekRecoveryCode
|
|
12631
|
-
security:
|
|
12632
|
-
- BearerAuth: []
|
|
14392
|
+
tags: [Browser Bridge]
|
|
14393
|
+
summary: "Define a binding: which secret may be typed, and into which hosts. Humans only, behind a step-up — an agent that could create one could nominate any path it liked as fillable."
|
|
14394
|
+
operationId: create_browser_credential
|
|
12633
14395
|
requestBody:
|
|
12634
14396
|
required: true
|
|
12635
14397
|
content:
|
|
12636
14398
|
application/json:
|
|
12637
14399
|
schema:
|
|
12638
|
-
|
|
14400
|
+
type: object
|
|
14401
|
+
required: [label, vault_id, secret_path, login_url, allowed_hosts]
|
|
14402
|
+
properties:
|
|
14403
|
+
label:
|
|
14404
|
+
type: string
|
|
14405
|
+
vault_id:
|
|
14406
|
+
type: string
|
|
14407
|
+
format: uuid
|
|
14408
|
+
description: Must belong to the caller's org.
|
|
14409
|
+
secret_path:
|
|
14410
|
+
type: string
|
|
14411
|
+
description: Path of the secret inside that vault. The value never lands in the binding.
|
|
14412
|
+
login_url:
|
|
14413
|
+
type: string
|
|
14414
|
+
description: "https only, and its host must be in allowed_hosts or sso_hosts — the bridge navigates here itself, one step before a password is typed."
|
|
14415
|
+
allowed_hosts:
|
|
14416
|
+
type: array
|
|
14417
|
+
minItems: 1
|
|
14418
|
+
items:
|
|
14419
|
+
type: string
|
|
14420
|
+
description: "Hostnames. A bare entry matches only itself; a leading dot ('.example.com') matches that host and any subdomain. URLs, ports and '*' are refused — '*' has no meaning to the matcher, so it would be stored and then match nothing."
|
|
14421
|
+
sso_hosts:
|
|
14422
|
+
type: array
|
|
14423
|
+
items:
|
|
14424
|
+
type: string
|
|
14425
|
+
description: Identity-provider hosts the login legitimately bounces through.
|
|
14426
|
+
responses:
|
|
14427
|
+
'201':
|
|
14428
|
+
description: Created. Every field is a pointer or a policy; none is secret.
|
|
14429
|
+
'400':
|
|
14430
|
+
description: A host is not a bare hostname, allowed_hosts is empty, or login_url is http or outside the allowlist
|
|
14431
|
+
'403':
|
|
14432
|
+
description: Not a human caller, step-up not satisfied, or the vault belongs to another org
|
|
14433
|
+
'404':
|
|
14434
|
+
description: Vault not found
|
|
14435
|
+
get:
|
|
14436
|
+
tags: [Browser Bridge]
|
|
14437
|
+
summary: List this org's browser credential bindings
|
|
14438
|
+
operationId: list_browser_credentials
|
|
14439
|
+
responses:
|
|
14440
|
+
'200':
|
|
14441
|
+
description: The bindings
|
|
14442
|
+
/v1/browser/credentials/{id}:
|
|
14443
|
+
parameters:
|
|
14444
|
+
- name: id
|
|
14445
|
+
in: path
|
|
14446
|
+
required: true
|
|
14447
|
+
schema:
|
|
14448
|
+
type: string
|
|
14449
|
+
format: uuid
|
|
14450
|
+
delete:
|
|
14451
|
+
tags: [Browser Bridge]
|
|
14452
|
+
summary: Remove a browser credential binding
|
|
14453
|
+
operationId: delete_browser_credential
|
|
12639
14454
|
responses:
|
|
12640
|
-
|
|
12641
|
-
description:
|
|
14455
|
+
'204':
|
|
14456
|
+
description: Deleted
|
|
14457
|
+
'403':
|
|
14458
|
+
description: Not a human caller
|
|
14459
|
+
'404':
|
|
14460
|
+
description: Binding not found
|
|
14461
|
+
/v1/agents/{id}/browser/sessions:
|
|
14462
|
+
parameters:
|
|
14463
|
+
- name: id
|
|
14464
|
+
in: path
|
|
14465
|
+
required: true
|
|
14466
|
+
schema:
|
|
14467
|
+
type: string
|
|
14468
|
+
format: uuid
|
|
14469
|
+
post:
|
|
14470
|
+
tags: [Browser Bridge]
|
|
14471
|
+
summary: "Open a browser session. Accepts a paired bridge credential only — an agent token is refused, so a session cannot be bootstrapped on an unpaired machine."
|
|
14472
|
+
operationId: create_browser_session
|
|
14473
|
+
parameters:
|
|
14474
|
+
- name: x-1claw-bridge-credential
|
|
14475
|
+
in: header
|
|
14476
|
+
required: true
|
|
14477
|
+
schema:
|
|
14478
|
+
type: string
|
|
14479
|
+
description: The bb_ credential from `1claw browser-bridge login`
|
|
14480
|
+
- name: x-1claw-bridge-version
|
|
14481
|
+
in: header
|
|
14482
|
+
required: true
|
|
14483
|
+
schema:
|
|
14484
|
+
type: string
|
|
14485
|
+
description: Bridge build. Versions below the server minimum are refused.
|
|
14486
|
+
requestBody:
|
|
14487
|
+
required: true
|
|
14488
|
+
content:
|
|
14489
|
+
application/json:
|
|
14490
|
+
schema:
|
|
14491
|
+
type: object
|
|
14492
|
+
required: [agent_id, client_id]
|
|
14493
|
+
properties:
|
|
14494
|
+
agent_id:
|
|
14495
|
+
type: string
|
|
14496
|
+
format: uuid
|
|
14497
|
+
description: Must belong to the same org as the paired device.
|
|
14498
|
+
client_id:
|
|
14499
|
+
type: string
|
|
14500
|
+
bridge_version:
|
|
14501
|
+
type: string
|
|
14502
|
+
protocol_version:
|
|
14503
|
+
type: string
|
|
14504
|
+
responses:
|
|
14505
|
+
'200':
|
|
14506
|
+
description: Session created
|
|
12642
14507
|
content:
|
|
12643
14508
|
application/json:
|
|
12644
14509
|
schema:
|
|
12645
|
-
|
|
12646
|
-
|
|
12647
|
-
|
|
12648
|
-
|
|
12649
|
-
|
|
12650
|
-
|
|
12651
|
-
|
|
12652
|
-
|
|
12653
|
-
|
|
14510
|
+
type: object
|
|
14511
|
+
properties:
|
|
14512
|
+
session_id:
|
|
14513
|
+
type: string
|
|
14514
|
+
format: uuid
|
|
14515
|
+
session_token:
|
|
14516
|
+
type: string
|
|
14517
|
+
description: bs_ prefixed. Only its hash is stored.
|
|
14518
|
+
expires_at:
|
|
14519
|
+
type: string
|
|
14520
|
+
format: date-time
|
|
14521
|
+
'400':
|
|
14522
|
+
description: Missing or unsupported bridge version
|
|
14523
|
+
'401':
|
|
14524
|
+
description: Not a paired bridge, or an agent token was presented
|
|
14525
|
+
'403':
|
|
14526
|
+
description: The device and the agent are not in the same org
|
|
14527
|
+
/v1/agents/{id}/browser/fills:
|
|
14528
|
+
parameters:
|
|
14529
|
+
- name: id
|
|
14530
|
+
in: path
|
|
14531
|
+
required: true
|
|
14532
|
+
schema:
|
|
14533
|
+
type: string
|
|
14534
|
+
format: uuid
|
|
14535
|
+
post:
|
|
14536
|
+
tags: [Browser Bridge]
|
|
14537
|
+
summary: "Authorise one credential fill. Requires the bridge credential *and* an agent JWT — neither alone is sufficient."
|
|
14538
|
+
operationId: authorize_browser_fill
|
|
14539
|
+
parameters:
|
|
14540
|
+
- name: x-1claw-bridge-credential
|
|
14541
|
+
in: header
|
|
14542
|
+
required: true
|
|
14543
|
+
schema:
|
|
14544
|
+
type: string
|
|
14545
|
+
- name: x-1claw-bridge-version
|
|
14546
|
+
in: header
|
|
14547
|
+
required: true
|
|
14548
|
+
schema:
|
|
14549
|
+
type: string
|
|
14550
|
+
requestBody:
|
|
14551
|
+
required: true
|
|
14552
|
+
content:
|
|
14553
|
+
application/json:
|
|
14554
|
+
schema:
|
|
14555
|
+
type: object
|
|
14556
|
+
# form_path, field_names, redirect_chain and current_generation are
|
|
14557
|
+
# required, not optional. They were accepted as absent and defaulted
|
|
14558
|
+
# server-side, which turned three of the policy's checks off: the
|
|
14559
|
+
# redirect loop never ran, current_generation was compared against
|
|
14560
|
+
# itself, and form_path defaulted to "", matching no fingerprint
|
|
14561
|
+
# pattern and denying every binding that carried one.
|
|
14562
|
+
required: [session_id, binding_id, tab_origin, frame_origin, frame_id, generation, form_path, field_names, redirect_chain, current_generation]
|
|
14563
|
+
properties:
|
|
14564
|
+
session_id:
|
|
14565
|
+
type: string
|
|
14566
|
+
format: uuid
|
|
14567
|
+
description: Must match the session the presented bs_ token opened.
|
|
14568
|
+
binding_id:
|
|
14569
|
+
type: string
|
|
14570
|
+
format: uuid
|
|
14571
|
+
frame_id:
|
|
14572
|
+
type: string
|
|
14573
|
+
description: The target the fill is for. Recorded on the grant.
|
|
14574
|
+
generation:
|
|
14575
|
+
type: integer
|
|
14576
|
+
format: int64
|
|
14577
|
+
description: "The bridge's navigation counter. Compared again at consume: a navigation in between means the page decided about is no longer the page in front of the bridge."
|
|
14578
|
+
form_action_origin:
|
|
14579
|
+
type: string
|
|
14580
|
+
description: "Where the form would POST. Checked as well as the two origins — a login form on an allowed page can still submit to somebody else's host. Absent is not treated as 'same as the tab'; it denies."
|
|
14581
|
+
form_path:
|
|
14582
|
+
type: string
|
|
14583
|
+
description: Path of the form being filled, checked against the binding's fingerprint.
|
|
14584
|
+
field_names:
|
|
14585
|
+
type: array
|
|
14586
|
+
items:
|
|
14587
|
+
type: string
|
|
14588
|
+
description: "Field names on that form. Every field the fingerprint expects must be present; extra fields are fine, since sites add hidden inputs."
|
|
14589
|
+
redirect_chain:
|
|
14590
|
+
type: array
|
|
14591
|
+
items:
|
|
14592
|
+
type: string
|
|
14593
|
+
description: "Hosts the login has redirected through, in order. Each is checked against the binding's allowed hosts union its sso hosts."
|
|
14594
|
+
current_generation:
|
|
14595
|
+
type: integer
|
|
14596
|
+
format: int64
|
|
14597
|
+
description: The target's generation now. A mismatch with `generation` means the page moved and the fill is denied.
|
|
14598
|
+
tab_origin:
|
|
14599
|
+
type: string
|
|
14600
|
+
description: "Origin of the tab being driven. Checked against the binding's allowed and sso hosts by exact host match."
|
|
14601
|
+
frame_origin:
|
|
14602
|
+
type: string
|
|
14603
|
+
description: "Origin of the frame holding the form. Checked separately — a credential typed into an allowed tab can still land in an attacker's iframe."
|
|
14604
|
+
responses:
|
|
14605
|
+
'200':
|
|
14606
|
+
description: A grant, a denial, or a pending approval. Never a secret.
|
|
14607
|
+
content:
|
|
14608
|
+
application/json:
|
|
14609
|
+
schema:
|
|
14610
|
+
type: object
|
|
14611
|
+
properties:
|
|
14612
|
+
kind:
|
|
14613
|
+
type: string
|
|
14614
|
+
enum: [grant]
|
|
14615
|
+
grant_id:
|
|
14616
|
+
type: string
|
|
14617
|
+
format: uuid
|
|
14618
|
+
description: Single-use, short-lived, redeemable only by the session it was issued to.
|
|
14619
|
+
binding_id:
|
|
14620
|
+
type: string
|
|
14621
|
+
format: uuid
|
|
14622
|
+
expires_at:
|
|
14623
|
+
type: string
|
|
14624
|
+
format: date-time
|
|
14625
|
+
login_url:
|
|
14626
|
+
type: string
|
|
14627
|
+
description: "The bridge navigates here itself. An agent-supplied URL would be the agent choosing who receives the password."
|
|
14628
|
+
'400':
|
|
14629
|
+
description: Missing or unsupported bridge version
|
|
14630
|
+
'403':
|
|
14631
|
+
description: "Only one of the two required credentials was presented, an origin is not on the binding's allowlist, or the fill velocity cap was hit"
|
|
14632
|
+
'404':
|
|
14633
|
+
description: No such binding for this org
|
|
14634
|
+
|
|
14635
|
+
/v1/agents/{id}/browser/fills/consume:
|
|
14636
|
+
parameters:
|
|
14637
|
+
- name: id
|
|
14638
|
+
in: path
|
|
14639
|
+
required: true
|
|
14640
|
+
schema:
|
|
14641
|
+
type: string
|
|
14642
|
+
format: uuid
|
|
14643
|
+
post:
|
|
14644
|
+
tags: [Browser Bridge]
|
|
14645
|
+
summary: "Redeem a grant for the credential it authorised. Takes the browser session token and the bridge credential, and refuses an agent principal — the agent asks which binding, the bridge collects the answer."
|
|
14646
|
+
operationId: consume_browser_fill
|
|
14647
|
+
parameters:
|
|
14648
|
+
- name: x-1claw-bridge-credential
|
|
14649
|
+
in: header
|
|
14650
|
+
required: true
|
|
14651
|
+
schema:
|
|
14652
|
+
type: string
|
|
14653
|
+
- name: x-1claw-bridge-session
|
|
14654
|
+
in: header
|
|
14655
|
+
required: true
|
|
14656
|
+
schema:
|
|
14657
|
+
type: string
|
|
14658
|
+
description: The bs_ session token. Proof the redemption belongs to a session this bridge opened.
|
|
14659
|
+
- name: x-1claw-bridge-version
|
|
14660
|
+
in: header
|
|
14661
|
+
required: true
|
|
14662
|
+
schema:
|
|
14663
|
+
type: string
|
|
14664
|
+
requestBody:
|
|
14665
|
+
required: true
|
|
14666
|
+
content:
|
|
14667
|
+
application/json:
|
|
14668
|
+
schema:
|
|
14669
|
+
type: object
|
|
14670
|
+
required: [session_id, grant_id, generation]
|
|
14671
|
+
properties:
|
|
14672
|
+
session_id:
|
|
14673
|
+
type: string
|
|
14674
|
+
format: uuid
|
|
14675
|
+
grant_id:
|
|
14676
|
+
type: string
|
|
14677
|
+
format: uuid
|
|
14678
|
+
generation:
|
|
14679
|
+
type: integer
|
|
14680
|
+
format: int64
|
|
14681
|
+
description: The bridge's navigation counter now. A mismatch means the page moved after the decision.
|
|
14682
|
+
responses:
|
|
14683
|
+
'200':
|
|
14684
|
+
description: "The credential itself, as raw bytes — the only route in the feature that returns secret material. Not a JSON envelope: the bridge adopts the body into a zeroable buffer, and a wrapper would force it to parse, interning the secret as a string that lives until GC. Metadata rides in `x-1claw-binding-id` and `x-1claw-form-fingerprint`; the response is `cache-control: no-store`."
|
|
14685
|
+
headers:
|
|
14686
|
+
x-1claw-binding-id:
|
|
14687
|
+
schema:
|
|
14688
|
+
type: string
|
|
14689
|
+
format: uuid
|
|
14690
|
+
x-1claw-form-fingerprint:
|
|
14691
|
+
schema:
|
|
14692
|
+
type: string
|
|
14693
|
+
format: byte
|
|
14694
|
+
description: "The binding's form fingerprint, base64-encoded JSON, when it has one. Base64 because a fingerprint naming a non-ASCII field is not a legal header value as raw JSON."
|
|
14695
|
+
content:
|
|
14696
|
+
application/octet-stream:
|
|
14697
|
+
schema:
|
|
14698
|
+
type: string
|
|
14699
|
+
format: binary
|
|
14700
|
+
'400':
|
|
14701
|
+
description: Missing or unsupported bridge version
|
|
14702
|
+
'403':
|
|
14703
|
+
description: "Grant expired, already used, issued to another session or device; the page navigated after authorisation; or an agent principal was presented"
|
|
14704
|
+
'404':
|
|
14705
|
+
description: The binding or the secret behind it is missing
|
|
14706
|
+
|
|
14707
|
+
/v1/agents/{agent_id}/chat/unlock:
|
|
14708
|
+
parameters:
|
|
14709
|
+
- name: agent_id
|
|
14710
|
+
in: path
|
|
14711
|
+
required: true
|
|
14712
|
+
schema:
|
|
14713
|
+
type: string
|
|
14714
|
+
format: uuid
|
|
14715
|
+
post:
|
|
14716
|
+
tags: [Chat]
|
|
14717
|
+
summary: "Unlock an agent's chat history for reading"
|
|
14718
|
+
operationId: unlock_agent_chat
|
|
14719
|
+
responses:
|
|
14720
|
+
'200':
|
|
14721
|
+
description: Unlocked
|
|
14722
|
+
'401':
|
|
14723
|
+
description: Unauthenticated
|
|
14724
|
+
'403':
|
|
14725
|
+
description: Forbidden
|
|
14726
|
+
'404':
|
|
14727
|
+
description: Agent not found
|
|
12654
14728
|
|
|
12655
14729
|
components:
|
|
12656
14730
|
securitySchemes:
|
|
@@ -13365,6 +15439,9 @@ components:
|
|
|
13365
15439
|
properties:
|
|
13366
15440
|
name:
|
|
13367
15441
|
type: string
|
|
15442
|
+
minLength: 1
|
|
15443
|
+
maxLength: 255
|
|
15444
|
+
description: Unique within the organization. Trimmed before it is stored, and the trimmed value is what must be unique. Counted in characters, not bytes.
|
|
13368
15445
|
description:
|
|
13369
15446
|
type: string
|
|
13370
15447
|
mpc_custody:
|
|
@@ -15424,11 +17501,21 @@ components:
|
|
|
15424
17501
|
|
|
15425
17502
|
PatchConnectionAgentRequest:
|
|
15426
17503
|
type: object
|
|
17504
|
+
description: |
|
|
17505
|
+
At least one field is required.
|
|
15427
17506
|
properties:
|
|
15428
17507
|
intents_api_enabled:
|
|
15429
17508
|
type: boolean
|
|
15430
17509
|
execution_intents_enabled:
|
|
15431
17510
|
type: boolean
|
|
17511
|
+
memory_enabled:
|
|
17512
|
+
type: boolean
|
|
17513
|
+
description: |
|
|
17514
|
+
Agent memory, off by default. Until this field existed a
|
|
17515
|
+
platform app had no way to turn it on: a bootstrap template
|
|
17516
|
+
accepted `memory_enabled` in its spec and never read it, so
|
|
17517
|
+
the capability was reachable only from the end user's own
|
|
17518
|
+
dashboard. Templates now honour the flag too.
|
|
15432
17519
|
system_prompt:
|
|
15433
17520
|
type: string
|
|
15434
17521
|
nullable: true
|
|
@@ -15443,6 +17530,8 @@ components:
|
|
|
15443
17530
|
type: boolean
|
|
15444
17531
|
execution_intents_enabled:
|
|
15445
17532
|
type: boolean
|
|
17533
|
+
memory_enabled:
|
|
17534
|
+
type: boolean
|
|
15446
17535
|
system_prompt:
|
|
15447
17536
|
type: string
|
|
15448
17537
|
nullable: true
|