@1claw/openapi-spec 0.61.29 → 0.61.31
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 +249 -2
- package/openapi.yaml +159 -1
- package/package.json +1 -1
package/openapi.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
4
|
"title": "1Claw API",
|
|
5
|
-
"version": "0.61.
|
|
5
|
+
"version": "0.61.31",
|
|
6
6
|
"description": "Secure secret management for AI agents. Provides vaults, secrets,\npolicy-based access control, agent identity, Intents API,\nsharing, billing, and audit logging. Automations (workflow_spec,\nwebhook tokens, event triggers, Assist), cloud runtimes with\ninteractive shell sessions, agent memory, and discovery.\n\n## Domains\n\n`api.1claw.co` is canonical: it is the OIDC issuer, the `aud` the API\nmints, and the first entry in `servers` — a generated client takes its\nbase URL from there, and the previous ordering pointed every SDK at the\ndomain the issuer had already left. `api.1claw.xyz` still answers and is\nstill accepted on token validation, because tokens minted before the\nmove carry it; it is never minted now.\n\nOne deliberate exception: the Shroud attestation identity token is\nrequested from GCP with `audience: https://api.1claw.xyz`, so\n`/v1/shroud/attestation` reports that as its `expected_audience`. That\nis accurate rather than stale — the audience is a verification contract\nwith anyone already checking the token, and moving it is a breaking\nchange for them, not a rename.\n\nAll endpoints require JWT Bearer authentication unless marked with\n`security: []`.\n",
|
|
7
7
|
"contact": {
|
|
8
8
|
"email": "ops@1claw.co"
|
|
@@ -277,7 +277,7 @@
|
|
|
277
277
|
"Authentication"
|
|
278
278
|
],
|
|
279
279
|
"summary": "Exchange agent credentials for JWT",
|
|
280
|
-
"description": "Returns a short-lived EdDSA-signed JWT (`access_token`). Standard claims include `sub`\n(`agent:<uuid>`), `org`, `scopes`, `vault_ids`, optional `intents_api_enabled`, optional\n`shroud_enabled`, optional `llm_token_billing` / `stripe_customer_id` when org LLM billing is on.\n\nWhen **`shroud_enabled`** is true, the JWT payload may include **`shroud_config`**: a JSON object\nmirroring the agent row in Vault (same shape as `ShroudConfig` on `GET /v1/agents/{id}`).\n**Shroud** (TEE proxy) decodes this on each LLM request and runs **PolicyEngine** after the\nglobal inspection pipeline so per-agent limits and threat **block** actions apply without a\nseparate policy fetch. Re-exchange the agent token after changing `shroud_config` so the JWT\nis fresh.\n\nUser JWTs from password, API key, or device flow do **not** include `shroud_config`.\n",
|
|
280
|
+
"description": "Returns a short-lived EdDSA-signed JWT (`access_token`). Standard claims include `sub`\n(`agent:<uuid>`), `org`, `scopes`, `vault_ids`, optional `intents_api_enabled`, optional\n`shroud_enabled`, optional `llm_token_billing` / `stripe_customer_id` when org LLM billing is on.\n\nWhen **`shroud_enabled`** is true, the JWT payload may include **`shroud_config`**: a JSON object\nmirroring the agent row in Vault (same shape as `ShroudConfig` on `GET /v1/agents/{id}`).\n**Shroud** (TEE proxy) decodes this on each LLM request and runs **PolicyEngine** after the\nglobal inspection pipeline so per-agent limits and threat **block** actions apply without a\nseparate policy fetch. Re-exchange the agent token after changing `shroud_config` so the JWT\nis fresh.\n\nUser JWTs from password, API key, or device flow do **not** include `shroud_config`.\n\n**Router keys.** An `sk-shroud-v1-…` key (minted at\n`POST /v1/agents/{agent_id}/router-keys`) is exchanged key-only — send `api_key`\nalone, no `agent_id`. The token carries a `router_key` claim\n(`{id, max_concurrent_streams?, spend_cap_micro_usd?}`), lives at most **60 s**\n(revocation SLA), and is only issued for Shroud-enabled agents. Revoked keys get 401.\n",
|
|
281
281
|
"operationId": "agentToken",
|
|
282
282
|
"security": [],
|
|
283
283
|
"requestBody": {
|
|
@@ -23741,6 +23741,136 @@
|
|
|
23741
23741
|
}
|
|
23742
23742
|
}
|
|
23743
23743
|
},
|
|
23744
|
+
"/v1/agents/{agent_id}/router-keys": {
|
|
23745
|
+
"post": {
|
|
23746
|
+
"tags": [
|
|
23747
|
+
"Agents"
|
|
23748
|
+
],
|
|
23749
|
+
"summary": "Mint a router key (sk-shroud-v1)",
|
|
23750
|
+
"description": "Creates an `sk-shroud-v1-<32>` static Bearer for the Shroud gateway, mapped to this\nagent. A stock OpenAI or Anthropic SDK sends it as `Authorization: Bearer …` with\n`base_url` set to the gateway; the gateway exchanges it key-only for the agent's\ntoken. The plaintext key is returned **once**. Up to 20 live keys per agent.\nHuman users only; the agent must have `shroud_enabled: true`.\n",
|
|
23751
|
+
"operationId": "createRouterKey",
|
|
23752
|
+
"parameters": [
|
|
23753
|
+
{
|
|
23754
|
+
"$ref": "#/components/parameters/AgentId"
|
|
23755
|
+
}
|
|
23756
|
+
],
|
|
23757
|
+
"requestBody": {
|
|
23758
|
+
"required": false,
|
|
23759
|
+
"content": {
|
|
23760
|
+
"application/json": {
|
|
23761
|
+
"schema": {
|
|
23762
|
+
"$ref": "#/components/schemas/CreateRouterKeyRequest"
|
|
23763
|
+
}
|
|
23764
|
+
}
|
|
23765
|
+
}
|
|
23766
|
+
},
|
|
23767
|
+
"responses": {
|
|
23768
|
+
"201": {
|
|
23769
|
+
"description": "Router key created (plaintext returned once)",
|
|
23770
|
+
"content": {
|
|
23771
|
+
"application/json": {
|
|
23772
|
+
"schema": {
|
|
23773
|
+
"$ref": "#/components/schemas/RouterKeyCreated"
|
|
23774
|
+
}
|
|
23775
|
+
}
|
|
23776
|
+
}
|
|
23777
|
+
},
|
|
23778
|
+
"400": {
|
|
23779
|
+
"$ref": "#/components/responses/BadRequest"
|
|
23780
|
+
},
|
|
23781
|
+
"403": {
|
|
23782
|
+
"$ref": "#/components/responses/Forbidden"
|
|
23783
|
+
},
|
|
23784
|
+
"404": {
|
|
23785
|
+
"$ref": "#/components/responses/NotFound"
|
|
23786
|
+
}
|
|
23787
|
+
}
|
|
23788
|
+
},
|
|
23789
|
+
"get": {
|
|
23790
|
+
"tags": [
|
|
23791
|
+
"Agents"
|
|
23792
|
+
],
|
|
23793
|
+
"summary": "List router keys",
|
|
23794
|
+
"description": "Every router key of the agent, live and revoked, without secrets.",
|
|
23795
|
+
"operationId": "listRouterKeys",
|
|
23796
|
+
"parameters": [
|
|
23797
|
+
{
|
|
23798
|
+
"$ref": "#/components/parameters/AgentId"
|
|
23799
|
+
}
|
|
23800
|
+
],
|
|
23801
|
+
"responses": {
|
|
23802
|
+
"200": {
|
|
23803
|
+
"description": "Router keys",
|
|
23804
|
+
"content": {
|
|
23805
|
+
"application/json": {
|
|
23806
|
+
"schema": {
|
|
23807
|
+
"type": "object",
|
|
23808
|
+
"required": [
|
|
23809
|
+
"keys"
|
|
23810
|
+
],
|
|
23811
|
+
"properties": {
|
|
23812
|
+
"keys": {
|
|
23813
|
+
"type": "array",
|
|
23814
|
+
"items": {
|
|
23815
|
+
"$ref": "#/components/schemas/RouterKey"
|
|
23816
|
+
}
|
|
23817
|
+
}
|
|
23818
|
+
}
|
|
23819
|
+
}
|
|
23820
|
+
}
|
|
23821
|
+
}
|
|
23822
|
+
},
|
|
23823
|
+
"403": {
|
|
23824
|
+
"$ref": "#/components/responses/Forbidden"
|
|
23825
|
+
},
|
|
23826
|
+
"404": {
|
|
23827
|
+
"$ref": "#/components/responses/NotFound"
|
|
23828
|
+
}
|
|
23829
|
+
}
|
|
23830
|
+
}
|
|
23831
|
+
},
|
|
23832
|
+
"/v1/agents/{agent_id}/router-keys/{key_id}": {
|
|
23833
|
+
"delete": {
|
|
23834
|
+
"tags": [
|
|
23835
|
+
"Agents"
|
|
23836
|
+
],
|
|
23837
|
+
"summary": "Revoke a router key",
|
|
23838
|
+
"description": "Revokes the key. The gateway stops accepting it within 60 s (router-key tokens\nlive at most that long and the gateway re-exchanges on expiry). Idempotent.\nHuman users only.\n",
|
|
23839
|
+
"operationId": "revokeRouterKey",
|
|
23840
|
+
"parameters": [
|
|
23841
|
+
{
|
|
23842
|
+
"$ref": "#/components/parameters/AgentId"
|
|
23843
|
+
},
|
|
23844
|
+
{
|
|
23845
|
+
"name": "key_id",
|
|
23846
|
+
"in": "path",
|
|
23847
|
+
"required": true,
|
|
23848
|
+
"schema": {
|
|
23849
|
+
"type": "string",
|
|
23850
|
+
"format": "uuid"
|
|
23851
|
+
}
|
|
23852
|
+
}
|
|
23853
|
+
],
|
|
23854
|
+
"responses": {
|
|
23855
|
+
"200": {
|
|
23856
|
+
"description": "Revoked",
|
|
23857
|
+
"content": {
|
|
23858
|
+
"application/json": {
|
|
23859
|
+
"schema": {
|
|
23860
|
+
"$ref": "#/components/schemas/RouterKey"
|
|
23861
|
+
}
|
|
23862
|
+
}
|
|
23863
|
+
}
|
|
23864
|
+
},
|
|
23865
|
+
"403": {
|
|
23866
|
+
"$ref": "#/components/responses/Forbidden"
|
|
23867
|
+
},
|
|
23868
|
+
"404": {
|
|
23869
|
+
"$ref": "#/components/responses/NotFound"
|
|
23870
|
+
}
|
|
23871
|
+
}
|
|
23872
|
+
}
|
|
23873
|
+
},
|
|
23744
23874
|
"/v1/agents/{agent_id}/oauth/connections": {
|
|
23745
23875
|
"get": {
|
|
23746
23876
|
"tags": [
|
|
@@ -33768,6 +33898,26 @@
|
|
|
33768
33898
|
"minimum": 0,
|
|
33769
33899
|
"maximum": 365,
|
|
33770
33900
|
"description": "Number of days to retain flagged request bodies for replay/investigation"
|
|
33901
|
+
},
|
|
33902
|
+
"streaming_inspection_mode": {
|
|
33903
|
+
"type": "string",
|
|
33904
|
+
"enum": [
|
|
33905
|
+
"rolling",
|
|
33906
|
+
"holdback"
|
|
33907
|
+
],
|
|
33908
|
+
"description": "How streamed LLM responses are inspected before release. `rolling` (default) releases text behind a tail buffer at least as long as the org's longest vault secret (capped at 256 bytes; longer secrets are matched by prefix); `holdback` buffers `streaming_holdback_chars` for full parity with buffered inspection. Tool-call deltas are always held until the call is complete."
|
|
33909
|
+
},
|
|
33910
|
+
"streaming_holdback_chars": {
|
|
33911
|
+
"type": "integer",
|
|
33912
|
+
"minimum": 64,
|
|
33913
|
+
"maximum": 65536,
|
|
33914
|
+
"description": "Characters held back per stream in holdback mode (default 512)"
|
|
33915
|
+
},
|
|
33916
|
+
"max_concurrent_streams": {
|
|
33917
|
+
"type": "integer",
|
|
33918
|
+
"minimum": 1,
|
|
33919
|
+
"maximum": 1000,
|
|
33920
|
+
"description": "Open streaming responses allowed per agent key (default 20; 429 with Retry-After beyond it)"
|
|
33771
33921
|
}
|
|
33772
33922
|
}
|
|
33773
33923
|
},
|
|
@@ -39788,6 +39938,103 @@
|
|
|
39788
39938
|
}
|
|
39789
39939
|
}
|
|
39790
39940
|
},
|
|
39941
|
+
"CreateRouterKeyRequest": {
|
|
39942
|
+
"type": "object",
|
|
39943
|
+
"additionalProperties": false,
|
|
39944
|
+
"properties": {
|
|
39945
|
+
"name": {
|
|
39946
|
+
"type": "string",
|
|
39947
|
+
"maxLength": 64,
|
|
39948
|
+
"description": "Shown in lists; defaults to `default`"
|
|
39949
|
+
},
|
|
39950
|
+
"max_concurrent_streams": {
|
|
39951
|
+
"type": "integer",
|
|
39952
|
+
"minimum": 1,
|
|
39953
|
+
"maximum": 1000,
|
|
39954
|
+
"description": "Open streaming responses this key may hold at once (gateway default 20)"
|
|
39955
|
+
},
|
|
39956
|
+
"spend_cap_usd": {
|
|
39957
|
+
"type": "number",
|
|
39958
|
+
"minimum": 0,
|
|
39959
|
+
"description": "Optional spend cap in USD, metered by the gateway"
|
|
39960
|
+
}
|
|
39961
|
+
}
|
|
39962
|
+
},
|
|
39963
|
+
"RouterKey": {
|
|
39964
|
+
"type": "object",
|
|
39965
|
+
"required": [
|
|
39966
|
+
"id",
|
|
39967
|
+
"agent_id",
|
|
39968
|
+
"name",
|
|
39969
|
+
"key_prefix",
|
|
39970
|
+
"created_at"
|
|
39971
|
+
],
|
|
39972
|
+
"properties": {
|
|
39973
|
+
"id": {
|
|
39974
|
+
"type": "string",
|
|
39975
|
+
"format": "uuid"
|
|
39976
|
+
},
|
|
39977
|
+
"agent_id": {
|
|
39978
|
+
"type": "string",
|
|
39979
|
+
"format": "uuid"
|
|
39980
|
+
},
|
|
39981
|
+
"name": {
|
|
39982
|
+
"type": "string"
|
|
39983
|
+
},
|
|
39984
|
+
"key_prefix": {
|
|
39985
|
+
"type": "string",
|
|
39986
|
+
"description": "First 20 characters (`sk-shroud-v1-` + 7) — enough to recognise, not to use"
|
|
39987
|
+
},
|
|
39988
|
+
"max_concurrent_streams": {
|
|
39989
|
+
"type": "integer",
|
|
39990
|
+
"nullable": true
|
|
39991
|
+
},
|
|
39992
|
+
"spend_cap_usd": {
|
|
39993
|
+
"type": "number",
|
|
39994
|
+
"nullable": true
|
|
39995
|
+
},
|
|
39996
|
+
"created_at": {
|
|
39997
|
+
"type": "string",
|
|
39998
|
+
"format": "date-time"
|
|
39999
|
+
},
|
|
40000
|
+
"last_used_at": {
|
|
40001
|
+
"type": "string",
|
|
40002
|
+
"format": "date-time",
|
|
40003
|
+
"nullable": true
|
|
40004
|
+
},
|
|
40005
|
+
"revoked_at": {
|
|
40006
|
+
"type": "string",
|
|
40007
|
+
"format": "date-time",
|
|
40008
|
+
"nullable": true
|
|
40009
|
+
}
|
|
40010
|
+
}
|
|
40011
|
+
},
|
|
40012
|
+
"RouterKeyCreated": {
|
|
40013
|
+
"allOf": [
|
|
40014
|
+
{
|
|
40015
|
+
"$ref": "#/components/schemas/RouterKey"
|
|
40016
|
+
},
|
|
40017
|
+
{
|
|
40018
|
+
"type": "object",
|
|
40019
|
+
"required": [
|
|
40020
|
+
"router_key",
|
|
40021
|
+
"base_url"
|
|
40022
|
+
],
|
|
40023
|
+
"properties": {
|
|
40024
|
+
"router_key": {
|
|
40025
|
+
"type": "string",
|
|
40026
|
+
"description": "The plaintext `sk-shroud-v1-…` key. Returned once.",
|
|
40027
|
+
"example": "sk-shroud-v1-Q2c5o0yQ3bHkT9m1vXz8Lw7nRp4aEf6u"
|
|
40028
|
+
},
|
|
40029
|
+
"base_url": {
|
|
40030
|
+
"type": "string",
|
|
40031
|
+
"description": "The Shroud gateway to point the SDK at",
|
|
40032
|
+
"example": "https://shroud.1claw.co"
|
|
40033
|
+
}
|
|
40034
|
+
}
|
|
40035
|
+
}
|
|
40036
|
+
]
|
|
40037
|
+
},
|
|
39791
40038
|
"EventSubscription": {
|
|
39792
40039
|
"type": "object",
|
|
39793
40040
|
"required": [
|
package/openapi.yaml
CHANGED
|
@@ -2,7 +2,7 @@ openapi: 3.1.0
|
|
|
2
2
|
|
|
3
3
|
info:
|
|
4
4
|
title: 1Claw API
|
|
5
|
-
version: "0.61.
|
|
5
|
+
version: "0.61.31"
|
|
6
6
|
description: |
|
|
7
7
|
Secure secret management for AI agents. Provides vaults, secrets,
|
|
8
8
|
policy-based access control, agent identity, Intents API,
|
|
@@ -198,6 +198,12 @@ paths:
|
|
|
198
198
|
is fresh.
|
|
199
199
|
|
|
200
200
|
User JWTs from password, API key, or device flow do **not** include `shroud_config`.
|
|
201
|
+
|
|
202
|
+
**Router keys.** An `sk-shroud-v1-…` key (minted at
|
|
203
|
+
`POST /v1/agents/{agent_id}/router-keys`) is exchanged key-only — send `api_key`
|
|
204
|
+
alone, no `agent_id`. The token carries a `router_key` claim
|
|
205
|
+
(`{id, max_concurrent_streams?, spend_cap_micro_usd?}`), lives at most **60 s**
|
|
206
|
+
(revocation SLA), and is only issued for Shroud-enabled agents. Revoked keys get 401.
|
|
201
207
|
operationId: agentToken
|
|
202
208
|
security: []
|
|
203
209
|
requestBody:
|
|
@@ -15180,6 +15186,90 @@ paths:
|
|
|
15180
15186
|
"404":
|
|
15181
15187
|
$ref: "#/components/responses/NotFound"
|
|
15182
15188
|
|
|
15189
|
+
/v1/agents/{agent_id}/router-keys:
|
|
15190
|
+
post:
|
|
15191
|
+
tags: [Agents]
|
|
15192
|
+
summary: Mint a router key (sk-shroud-v1)
|
|
15193
|
+
description: |
|
|
15194
|
+
Creates an `sk-shroud-v1-<32>` static Bearer for the Shroud gateway, mapped to this
|
|
15195
|
+
agent. A stock OpenAI or Anthropic SDK sends it as `Authorization: Bearer …` with
|
|
15196
|
+
`base_url` set to the gateway; the gateway exchanges it key-only for the agent's
|
|
15197
|
+
token. The plaintext key is returned **once**. Up to 20 live keys per agent.
|
|
15198
|
+
Human users only; the agent must have `shroud_enabled: true`.
|
|
15199
|
+
operationId: createRouterKey
|
|
15200
|
+
parameters:
|
|
15201
|
+
- $ref: "#/components/parameters/AgentId"
|
|
15202
|
+
requestBody:
|
|
15203
|
+
required: false
|
|
15204
|
+
content:
|
|
15205
|
+
application/json:
|
|
15206
|
+
schema:
|
|
15207
|
+
$ref: "#/components/schemas/CreateRouterKeyRequest"
|
|
15208
|
+
responses:
|
|
15209
|
+
"201":
|
|
15210
|
+
description: Router key created (plaintext returned once)
|
|
15211
|
+
content:
|
|
15212
|
+
application/json:
|
|
15213
|
+
schema:
|
|
15214
|
+
$ref: "#/components/schemas/RouterKeyCreated"
|
|
15215
|
+
"400":
|
|
15216
|
+
$ref: "#/components/responses/BadRequest"
|
|
15217
|
+
"403":
|
|
15218
|
+
$ref: "#/components/responses/Forbidden"
|
|
15219
|
+
"404":
|
|
15220
|
+
$ref: "#/components/responses/NotFound"
|
|
15221
|
+
get:
|
|
15222
|
+
tags: [Agents]
|
|
15223
|
+
summary: List router keys
|
|
15224
|
+
description: Every router key of the agent, live and revoked, without secrets.
|
|
15225
|
+
operationId: listRouterKeys
|
|
15226
|
+
parameters:
|
|
15227
|
+
- $ref: "#/components/parameters/AgentId"
|
|
15228
|
+
responses:
|
|
15229
|
+
"200":
|
|
15230
|
+
description: Router keys
|
|
15231
|
+
content:
|
|
15232
|
+
application/json:
|
|
15233
|
+
schema:
|
|
15234
|
+
type: object
|
|
15235
|
+
required: [keys]
|
|
15236
|
+
properties:
|
|
15237
|
+
keys:
|
|
15238
|
+
type: array
|
|
15239
|
+
items:
|
|
15240
|
+
$ref: "#/components/schemas/RouterKey"
|
|
15241
|
+
"403":
|
|
15242
|
+
$ref: "#/components/responses/Forbidden"
|
|
15243
|
+
"404":
|
|
15244
|
+
$ref: "#/components/responses/NotFound"
|
|
15245
|
+
|
|
15246
|
+
/v1/agents/{agent_id}/router-keys/{key_id}:
|
|
15247
|
+
delete:
|
|
15248
|
+
tags: [Agents]
|
|
15249
|
+
summary: Revoke a router key
|
|
15250
|
+
description: |
|
|
15251
|
+
Revokes the key. The gateway stops accepting it within 60 s (router-key tokens
|
|
15252
|
+
live at most that long and the gateway re-exchanges on expiry). Idempotent.
|
|
15253
|
+
Human users only.
|
|
15254
|
+
operationId: revokeRouterKey
|
|
15255
|
+
parameters:
|
|
15256
|
+
- $ref: "#/components/parameters/AgentId"
|
|
15257
|
+
- name: key_id
|
|
15258
|
+
in: path
|
|
15259
|
+
required: true
|
|
15260
|
+
schema: { type: string, format: uuid }
|
|
15261
|
+
responses:
|
|
15262
|
+
"200":
|
|
15263
|
+
description: Revoked
|
|
15264
|
+
content:
|
|
15265
|
+
application/json:
|
|
15266
|
+
schema:
|
|
15267
|
+
$ref: "#/components/schemas/RouterKey"
|
|
15268
|
+
"403":
|
|
15269
|
+
$ref: "#/components/responses/Forbidden"
|
|
15270
|
+
"404":
|
|
15271
|
+
$ref: "#/components/responses/NotFound"
|
|
15272
|
+
|
|
15183
15273
|
/v1/agents/{agent_id}/oauth/connections:
|
|
15184
15274
|
get:
|
|
15185
15275
|
tags: [OAuth Connect]
|
|
@@ -21757,6 +21847,25 @@ components:
|
|
|
21757
21847
|
minimum: 0
|
|
21758
21848
|
maximum: 365
|
|
21759
21849
|
description: Number of days to retain flagged request bodies for replay/investigation
|
|
21850
|
+
streaming_inspection_mode:
|
|
21851
|
+
type: string
|
|
21852
|
+
enum: [rolling, holdback]
|
|
21853
|
+
description: >-
|
|
21854
|
+
How streamed LLM responses are inspected before release. `rolling` (default)
|
|
21855
|
+
releases text behind a tail buffer at least as long as the org's longest vault
|
|
21856
|
+
secret (capped at 256 bytes; longer secrets are matched by prefix); `holdback`
|
|
21857
|
+
buffers `streaming_holdback_chars` for full parity with buffered inspection.
|
|
21858
|
+
Tool-call deltas are always held until the call is complete.
|
|
21859
|
+
streaming_holdback_chars:
|
|
21860
|
+
type: integer
|
|
21861
|
+
minimum: 64
|
|
21862
|
+
maximum: 65536
|
|
21863
|
+
description: Characters held back per stream in holdback mode (default 512)
|
|
21864
|
+
max_concurrent_streams:
|
|
21865
|
+
type: integer
|
|
21866
|
+
minimum: 1
|
|
21867
|
+
maximum: 1000
|
|
21868
|
+
description: Open streaming responses allowed per agent key (default 20; 429 with Retry-After beyond it)
|
|
21760
21869
|
|
|
21761
21870
|
UnicodeNormalizationConfig:
|
|
21762
21871
|
type: object
|
|
@@ -25824,6 +25933,55 @@ components:
|
|
|
25824
25933
|
description: Pointers within one item whose values together identify it.
|
|
25825
25934
|
min_interval_secs: { type: integer, example: 60 }
|
|
25826
25935
|
|
|
25936
|
+
CreateRouterKeyRequest:
|
|
25937
|
+
type: object
|
|
25938
|
+
additionalProperties: false
|
|
25939
|
+
properties:
|
|
25940
|
+
name:
|
|
25941
|
+
type: string
|
|
25942
|
+
maxLength: 64
|
|
25943
|
+
description: Shown in lists; defaults to `default`
|
|
25944
|
+
max_concurrent_streams:
|
|
25945
|
+
type: integer
|
|
25946
|
+
minimum: 1
|
|
25947
|
+
maximum: 1000
|
|
25948
|
+
description: Open streaming responses this key may hold at once (gateway default 20)
|
|
25949
|
+
spend_cap_usd:
|
|
25950
|
+
type: number
|
|
25951
|
+
minimum: 0
|
|
25952
|
+
description: Optional spend cap in USD, metered by the gateway
|
|
25953
|
+
|
|
25954
|
+
RouterKey:
|
|
25955
|
+
type: object
|
|
25956
|
+
required: [id, agent_id, name, key_prefix, created_at]
|
|
25957
|
+
properties:
|
|
25958
|
+
id: { type: string, format: uuid }
|
|
25959
|
+
agent_id: { type: string, format: uuid }
|
|
25960
|
+
name: { type: string }
|
|
25961
|
+
key_prefix:
|
|
25962
|
+
type: string
|
|
25963
|
+
description: First 20 characters (`sk-shroud-v1-` + 7) — enough to recognise, not to use
|
|
25964
|
+
max_concurrent_streams: { type: integer, nullable: true }
|
|
25965
|
+
spend_cap_usd: { type: number, nullable: true }
|
|
25966
|
+
created_at: { type: string, format: date-time }
|
|
25967
|
+
last_used_at: { type: string, format: date-time, nullable: true }
|
|
25968
|
+
revoked_at: { type: string, format: date-time, nullable: true }
|
|
25969
|
+
|
|
25970
|
+
RouterKeyCreated:
|
|
25971
|
+
allOf:
|
|
25972
|
+
- $ref: "#/components/schemas/RouterKey"
|
|
25973
|
+
- type: object
|
|
25974
|
+
required: [router_key, base_url]
|
|
25975
|
+
properties:
|
|
25976
|
+
router_key:
|
|
25977
|
+
type: string
|
|
25978
|
+
description: The plaintext `sk-shroud-v1-…` key. Returned once.
|
|
25979
|
+
example: sk-shroud-v1-Q2c5o0yQ3bHkT9m1vXz8Lw7nRp4aEf6u
|
|
25980
|
+
base_url:
|
|
25981
|
+
type: string
|
|
25982
|
+
description: The Shroud gateway to point the SDK at
|
|
25983
|
+
example: https://shroud.1claw.co
|
|
25984
|
+
|
|
25827
25985
|
EventSubscription:
|
|
25828
25986
|
type: object
|
|
25829
25987
|
required: [id, agent_id, binding_id, event_type, interval_secs, is_active, primed, next_poll_at, consecutive_errors, events_emitted, created_at]
|