@1claw/openapi-spec 0.61.8 → 0.61.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 +344 -1
- package/openapi.yaml +219 -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.10",
|
|
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"
|
|
@@ -24669,6 +24669,201 @@
|
|
|
24669
24669
|
}
|
|
24670
24670
|
}
|
|
24671
24671
|
},
|
|
24672
|
+
"/v1/platform/connections/{connection_id}/otel/topology": {
|
|
24673
|
+
"get": {
|
|
24674
|
+
"tags": [
|
|
24675
|
+
"Platform",
|
|
24676
|
+
"Observability"
|
|
24677
|
+
],
|
|
24678
|
+
"summary": "Topology for one connection's agents",
|
|
24679
|
+
"description": "The same graph as `/v1/otel/topology`, restricted to what this connection's agents reach: the agents, the policies they hold, the vaults those grant, the chains they sign on and the systems they call. Restricted before the 500-node cap, so a large org's cap cannot cut the connection's own agents out. Walking is directed (agent → policy → vault), so a vault shared with another tenant's agent does not reveal that agent.\n\nA `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404.",
|
|
24680
|
+
"operationId": "get_platform_connection_otel_topology",
|
|
24681
|
+
"parameters": [
|
|
24682
|
+
{
|
|
24683
|
+
"name": "connection_id",
|
|
24684
|
+
"in": "path",
|
|
24685
|
+
"required": true,
|
|
24686
|
+
"schema": {
|
|
24687
|
+
"type": "string",
|
|
24688
|
+
"format": "uuid"
|
|
24689
|
+
}
|
|
24690
|
+
}
|
|
24691
|
+
],
|
|
24692
|
+
"responses": {
|
|
24693
|
+
"200": {
|
|
24694
|
+
"description": "Nodes and edges reachable from the connection's agents",
|
|
24695
|
+
"content": {
|
|
24696
|
+
"application/json": {
|
|
24697
|
+
"schema": {
|
|
24698
|
+
"$ref": "#/paths/~1v1~1otel~1topology/get/responses/200/content/application~1json/schema"
|
|
24699
|
+
}
|
|
24700
|
+
}
|
|
24701
|
+
}
|
|
24702
|
+
},
|
|
24703
|
+
"401": {
|
|
24704
|
+
"description": "Unauthenticated"
|
|
24705
|
+
},
|
|
24706
|
+
"403": {
|
|
24707
|
+
"description": "Not a plt_ key"
|
|
24708
|
+
},
|
|
24709
|
+
"404": {
|
|
24710
|
+
"description": "Connection not found for this app"
|
|
24711
|
+
}
|
|
24712
|
+
}
|
|
24713
|
+
}
|
|
24714
|
+
},
|
|
24715
|
+
"/v1/platform/connections/{connection_id}/otel/threats": {
|
|
24716
|
+
"get": {
|
|
24717
|
+
"tags": [
|
|
24718
|
+
"Platform",
|
|
24719
|
+
"Observability"
|
|
24720
|
+
],
|
|
24721
|
+
"summary": "Open threats on one connection's agents",
|
|
24722
|
+
"description": "`/v1/otel/threats` filtered to the connection's agents, same ranking (blast radius, then recency).\n\nA `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404.",
|
|
24723
|
+
"operationId": "get_platform_connection_otel_threats",
|
|
24724
|
+
"parameters": [
|
|
24725
|
+
{
|
|
24726
|
+
"name": "connection_id",
|
|
24727
|
+
"in": "path",
|
|
24728
|
+
"required": true,
|
|
24729
|
+
"schema": {
|
|
24730
|
+
"type": "string",
|
|
24731
|
+
"format": "uuid"
|
|
24732
|
+
}
|
|
24733
|
+
},
|
|
24734
|
+
{
|
|
24735
|
+
"name": "state",
|
|
24736
|
+
"in": "query",
|
|
24737
|
+
"required": false,
|
|
24738
|
+
"schema": {
|
|
24739
|
+
"type": "string",
|
|
24740
|
+
"enum": [
|
|
24741
|
+
"open",
|
|
24742
|
+
"all"
|
|
24743
|
+
]
|
|
24744
|
+
}
|
|
24745
|
+
}
|
|
24746
|
+
],
|
|
24747
|
+
"responses": {
|
|
24748
|
+
"200": {
|
|
24749
|
+
"description": "Threats on the connection's agents, highest blast radius first",
|
|
24750
|
+
"content": {
|
|
24751
|
+
"application/json": {
|
|
24752
|
+
"schema": {
|
|
24753
|
+
"$ref": "#/paths/~1v1~1otel~1threats/get/responses/200/content/application~1json/schema"
|
|
24754
|
+
}
|
|
24755
|
+
}
|
|
24756
|
+
}
|
|
24757
|
+
},
|
|
24758
|
+
"401": {
|
|
24759
|
+
"description": "Unauthenticated"
|
|
24760
|
+
},
|
|
24761
|
+
"403": {
|
|
24762
|
+
"description": "Not a plt_ key"
|
|
24763
|
+
},
|
|
24764
|
+
"404": {
|
|
24765
|
+
"description": "Connection not found for this app"
|
|
24766
|
+
}
|
|
24767
|
+
}
|
|
24768
|
+
}
|
|
24769
|
+
},
|
|
24770
|
+
"/v1/platform/connections/{connection_id}/otel/summary": {
|
|
24771
|
+
"get": {
|
|
24772
|
+
"tags": [
|
|
24773
|
+
"Platform",
|
|
24774
|
+
"Observability"
|
|
24775
|
+
],
|
|
24776
|
+
"summary": "Posture score and counts for one connection's agents",
|
|
24777
|
+
"description": "`/v1/otel/summary` over a smaller world: the posture score uses the connection's agents' trust scores and the resources they reach; threat and pending-approval counts are the connection's agents' only.\n\nA `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404.",
|
|
24778
|
+
"operationId": "get_platform_connection_otel_summary",
|
|
24779
|
+
"parameters": [
|
|
24780
|
+
{
|
|
24781
|
+
"name": "connection_id",
|
|
24782
|
+
"in": "path",
|
|
24783
|
+
"required": true,
|
|
24784
|
+
"schema": {
|
|
24785
|
+
"type": "string",
|
|
24786
|
+
"format": "uuid"
|
|
24787
|
+
}
|
|
24788
|
+
}
|
|
24789
|
+
],
|
|
24790
|
+
"responses": {
|
|
24791
|
+
"200": {
|
|
24792
|
+
"description": "Posture and counts for the connection",
|
|
24793
|
+
"content": {
|
|
24794
|
+
"application/json": {
|
|
24795
|
+
"schema": {
|
|
24796
|
+
"$ref": "#/paths/~1v1~1otel~1summary/get/responses/200/content/application~1json/schema"
|
|
24797
|
+
}
|
|
24798
|
+
}
|
|
24799
|
+
}
|
|
24800
|
+
},
|
|
24801
|
+
"401": {
|
|
24802
|
+
"description": "Unauthenticated"
|
|
24803
|
+
},
|
|
24804
|
+
"403": {
|
|
24805
|
+
"description": "Not a plt_ key"
|
|
24806
|
+
},
|
|
24807
|
+
"404": {
|
|
24808
|
+
"description": "Connection not found for this app"
|
|
24809
|
+
}
|
|
24810
|
+
}
|
|
24811
|
+
}
|
|
24812
|
+
},
|
|
24813
|
+
"/v1/platform/connections/{connection_id}/otel/stream": {
|
|
24814
|
+
"get": {
|
|
24815
|
+
"tags": [
|
|
24816
|
+
"Platform",
|
|
24817
|
+
"Observability"
|
|
24818
|
+
],
|
|
24819
|
+
"summary": "Live signal stream for one connection's agents (SSE)",
|
|
24820
|
+
"description": "The same protocol as `/v1/otel/stream` — `Last-Event-ID` resume, `event: gap` on a stale cursor or a lagged subscriber — filtered to signals whose agent is one of the connection's. Signals with no agent (a human's own dashboard actions) are never emitted here. The agent set is fixed at connect time; an agent added later appears on the next connect.\n\nStream slots are counted per platform app (five), not per connection.\n\nA `plt_` key sees one connection's agents, never the end-user's org: that org may hold agents from other platforms or the user's own. The set is agents attributed to the connection plus the ones listed on it, constrained to the connection's org. A connection that does not belong to the calling app is a 404.",
|
|
24821
|
+
"operationId": "get_platform_connection_otel_stream",
|
|
24822
|
+
"parameters": [
|
|
24823
|
+
{
|
|
24824
|
+
"name": "connection_id",
|
|
24825
|
+
"in": "path",
|
|
24826
|
+
"required": true,
|
|
24827
|
+
"schema": {
|
|
24828
|
+
"type": "string",
|
|
24829
|
+
"format": "uuid"
|
|
24830
|
+
}
|
|
24831
|
+
},
|
|
24832
|
+
{
|
|
24833
|
+
"name": "Last-Event-ID",
|
|
24834
|
+
"in": "header",
|
|
24835
|
+
"required": false,
|
|
24836
|
+
"schema": {
|
|
24837
|
+
"type": "string"
|
|
24838
|
+
}
|
|
24839
|
+
}
|
|
24840
|
+
],
|
|
24841
|
+
"responses": {
|
|
24842
|
+
"200": {
|
|
24843
|
+
"description": "text/event-stream",
|
|
24844
|
+
"content": {
|
|
24845
|
+
"text/event-stream": {
|
|
24846
|
+
"schema": {
|
|
24847
|
+
"type": "string"
|
|
24848
|
+
}
|
|
24849
|
+
}
|
|
24850
|
+
}
|
|
24851
|
+
},
|
|
24852
|
+
"401": {
|
|
24853
|
+
"description": "Unauthenticated"
|
|
24854
|
+
},
|
|
24855
|
+
"403": {
|
|
24856
|
+
"description": "Not a plt_ key"
|
|
24857
|
+
},
|
|
24858
|
+
"404": {
|
|
24859
|
+
"description": "Connection not found for this app"
|
|
24860
|
+
},
|
|
24861
|
+
"429": {
|
|
24862
|
+
"description": "Stream slot cap for this app reached"
|
|
24863
|
+
}
|
|
24864
|
+
}
|
|
24865
|
+
}
|
|
24866
|
+
},
|
|
24672
24867
|
"/v1/platform/connections/{connection_id}/resources": {
|
|
24673
24868
|
"parameters": [
|
|
24674
24869
|
{
|
|
@@ -25551,6 +25746,154 @@
|
|
|
25551
25746
|
}
|
|
25552
25747
|
}
|
|
25553
25748
|
},
|
|
25749
|
+
"/v1/otel/agents/{agent_id}/trust": {
|
|
25750
|
+
"get": {
|
|
25751
|
+
"tags": [
|
|
25752
|
+
"Observability"
|
|
25753
|
+
],
|
|
25754
|
+
"summary": "The breakdown behind one agent's trust score",
|
|
25755
|
+
"description": "The topology carries a single 0-100 trust number per agent. This is what it is made of: each weighted component (`null` when this deployment has no source for it — not measured, not zero), a 24-hour history for a sparkline, and the agent's last audit actions. Actions and resource types only; audit `metadata` is where secret paths live and it is not returned.\n\nScores are `shadow` until the engine is promoted out of recommend-only mode; an agent the engine has not yet reached returns `score: null` and `shadow: true`.\n\nHuman users only. An agent id outside the caller's org is a 404, not a 403, so the response does not confirm the id exists.",
|
|
25756
|
+
"operationId": "get_otel_agent_trust",
|
|
25757
|
+
"parameters": [
|
|
25758
|
+
{
|
|
25759
|
+
"name": "agent_id",
|
|
25760
|
+
"in": "path",
|
|
25761
|
+
"required": true,
|
|
25762
|
+
"schema": {
|
|
25763
|
+
"type": "string",
|
|
25764
|
+
"format": "uuid"
|
|
25765
|
+
}
|
|
25766
|
+
}
|
|
25767
|
+
],
|
|
25768
|
+
"responses": {
|
|
25769
|
+
"200": {
|
|
25770
|
+
"description": "Current score, components, history, recent actions",
|
|
25771
|
+
"content": {
|
|
25772
|
+
"application/json": {
|
|
25773
|
+
"schema": {
|
|
25774
|
+
"type": "object",
|
|
25775
|
+
"required": [
|
|
25776
|
+
"agent_id",
|
|
25777
|
+
"shadow",
|
|
25778
|
+
"components",
|
|
25779
|
+
"history",
|
|
25780
|
+
"recent"
|
|
25781
|
+
],
|
|
25782
|
+
"properties": {
|
|
25783
|
+
"agent_id": {
|
|
25784
|
+
"type": "string",
|
|
25785
|
+
"format": "uuid"
|
|
25786
|
+
},
|
|
25787
|
+
"score": {
|
|
25788
|
+
"type": "integer",
|
|
25789
|
+
"minimum": 0,
|
|
25790
|
+
"maximum": 100,
|
|
25791
|
+
"nullable": true
|
|
25792
|
+
},
|
|
25793
|
+
"shadow": {
|
|
25794
|
+
"type": "boolean",
|
|
25795
|
+
"description": "True while the engine is recommend-only or the agent is unscored."
|
|
25796
|
+
},
|
|
25797
|
+
"updated_at": {
|
|
25798
|
+
"type": "string",
|
|
25799
|
+
"format": "date-time",
|
|
25800
|
+
"nullable": true
|
|
25801
|
+
},
|
|
25802
|
+
"components": {
|
|
25803
|
+
"type": "object",
|
|
25804
|
+
"description": "0-100 per component; null means no source in this deployment.",
|
|
25805
|
+
"properties": {
|
|
25806
|
+
"denial_rate": {
|
|
25807
|
+
"type": "integer",
|
|
25808
|
+
"nullable": true
|
|
25809
|
+
},
|
|
25810
|
+
"threat_hits": {
|
|
25811
|
+
"type": "integer",
|
|
25812
|
+
"nullable": true
|
|
25813
|
+
},
|
|
25814
|
+
"egress_blocks": {
|
|
25815
|
+
"type": "integer",
|
|
25816
|
+
"nullable": true
|
|
25817
|
+
},
|
|
25818
|
+
"spend_velocity": {
|
|
25819
|
+
"type": "integer",
|
|
25820
|
+
"nullable": true
|
|
25821
|
+
},
|
|
25822
|
+
"off_hours": {
|
|
25823
|
+
"type": "integer",
|
|
25824
|
+
"nullable": true
|
|
25825
|
+
},
|
|
25826
|
+
"consensus_bypass": {
|
|
25827
|
+
"type": "integer",
|
|
25828
|
+
"nullable": true
|
|
25829
|
+
}
|
|
25830
|
+
}
|
|
25831
|
+
},
|
|
25832
|
+
"history": {
|
|
25833
|
+
"type": "array",
|
|
25834
|
+
"maxItems": 96,
|
|
25835
|
+
"description": "Oldest first, last 24 hours.",
|
|
25836
|
+
"items": {
|
|
25837
|
+
"type": "object",
|
|
25838
|
+
"required": [
|
|
25839
|
+
"at",
|
|
25840
|
+
"score"
|
|
25841
|
+
],
|
|
25842
|
+
"properties": {
|
|
25843
|
+
"at": {
|
|
25844
|
+
"type": "string",
|
|
25845
|
+
"format": "date-time"
|
|
25846
|
+
},
|
|
25847
|
+
"score": {
|
|
25848
|
+
"type": "integer",
|
|
25849
|
+
"minimum": 0,
|
|
25850
|
+
"maximum": 100
|
|
25851
|
+
}
|
|
25852
|
+
}
|
|
25853
|
+
}
|
|
25854
|
+
},
|
|
25855
|
+
"recent": {
|
|
25856
|
+
"type": "array",
|
|
25857
|
+
"maxItems": 12,
|
|
25858
|
+
"description": "Newest first.",
|
|
25859
|
+
"items": {
|
|
25860
|
+
"type": "object",
|
|
25861
|
+
"required": [
|
|
25862
|
+
"at",
|
|
25863
|
+
"action"
|
|
25864
|
+
],
|
|
25865
|
+
"properties": {
|
|
25866
|
+
"at": {
|
|
25867
|
+
"type": "string",
|
|
25868
|
+
"format": "date-time"
|
|
25869
|
+
},
|
|
25870
|
+
"action": {
|
|
25871
|
+
"type": "string"
|
|
25872
|
+
},
|
|
25873
|
+
"resource_type": {
|
|
25874
|
+
"type": "string",
|
|
25875
|
+
"nullable": true
|
|
25876
|
+
}
|
|
25877
|
+
}
|
|
25878
|
+
}
|
|
25879
|
+
}
|
|
25880
|
+
}
|
|
25881
|
+
}
|
|
25882
|
+
}
|
|
25883
|
+
}
|
|
25884
|
+
},
|
|
25885
|
+
"401": {
|
|
25886
|
+
"description": "Unauthenticated"
|
|
25887
|
+
},
|
|
25888
|
+
"403": {
|
|
25889
|
+
"description": "Not a human user"
|
|
25890
|
+
},
|
|
25891
|
+
"404": {
|
|
25892
|
+
"description": "No such agent in the caller's organization"
|
|
25893
|
+
}
|
|
25894
|
+
}
|
|
25895
|
+
}
|
|
25896
|
+
},
|
|
25554
25897
|
"/v1/otel/flows": {
|
|
25555
25898
|
"get": {
|
|
25556
25899
|
"tags": [
|
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.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,
|
|
@@ -15877,6 +15877,151 @@ paths:
|
|
|
15877
15877
|
description: Forbidden, or the plan does not include this
|
|
15878
15878
|
'404':
|
|
15879
15879
|
description: Not found
|
|
15880
|
+
/v1/platform/connections/{connection_id}/otel/topology:
|
|
15881
|
+
get:
|
|
15882
|
+
tags: [Platform, Observability]
|
|
15883
|
+
summary: "Topology for one connection's agents"
|
|
15884
|
+
description: >-
|
|
15885
|
+
The same graph as `/v1/otel/topology`, restricted to what this
|
|
15886
|
+
connection's agents reach: the agents, the policies they hold,
|
|
15887
|
+
the vaults those grant, the chains they sign on and the systems
|
|
15888
|
+
they call. Restricted before the 500-node cap, so a large org's
|
|
15889
|
+
cap cannot cut the connection's own agents out. Walking is
|
|
15890
|
+
directed (agent → policy → vault), so a vault shared with
|
|
15891
|
+
another tenant's agent does not reveal that agent.
|
|
15892
|
+
|
|
15893
|
+
|
|
15894
|
+
A `plt_` key sees one connection's agents, never the end-user's org:
|
|
15895
|
+
that org may hold agents from other platforms or the user's
|
|
15896
|
+
own. The set is agents attributed to the connection plus the
|
|
15897
|
+
ones listed on it, constrained to the connection's org. A
|
|
15898
|
+
connection that does not belong to the calling app is a 404.
|
|
15899
|
+
operationId: get_platform_connection_otel_topology
|
|
15900
|
+
parameters:
|
|
15901
|
+
- name: connection_id
|
|
15902
|
+
in: path
|
|
15903
|
+
required: true
|
|
15904
|
+
schema: { type: string, format: uuid }
|
|
15905
|
+
responses:
|
|
15906
|
+
'200':
|
|
15907
|
+
description: Nodes and edges reachable from the connection's agents
|
|
15908
|
+
content:
|
|
15909
|
+
application/json:
|
|
15910
|
+
schema:
|
|
15911
|
+
$ref: '#/paths/~1v1~1otel~1topology/get/responses/200/content/application~1json/schema'
|
|
15912
|
+
'401': { description: Unauthenticated }
|
|
15913
|
+
'403': { description: Not a plt_ key }
|
|
15914
|
+
'404': { description: Connection not found for this app }
|
|
15915
|
+
/v1/platform/connections/{connection_id}/otel/threats:
|
|
15916
|
+
get:
|
|
15917
|
+
tags: [Platform, Observability]
|
|
15918
|
+
summary: "Open threats on one connection's agents"
|
|
15919
|
+
description: >-
|
|
15920
|
+
`/v1/otel/threats` filtered to the connection's agents, same
|
|
15921
|
+
ranking (blast radius, then recency).
|
|
15922
|
+
|
|
15923
|
+
|
|
15924
|
+
A `plt_` key sees one connection's agents, never the end-user's org:
|
|
15925
|
+
that org may hold agents from other platforms or the user's
|
|
15926
|
+
own. The set is agents attributed to the connection plus the
|
|
15927
|
+
ones listed on it, constrained to the connection's org. A
|
|
15928
|
+
connection that does not belong to the calling app is a 404.
|
|
15929
|
+
operationId: get_platform_connection_otel_threats
|
|
15930
|
+
parameters:
|
|
15931
|
+
- name: connection_id
|
|
15932
|
+
in: path
|
|
15933
|
+
required: true
|
|
15934
|
+
schema: { type: string, format: uuid }
|
|
15935
|
+
- name: state
|
|
15936
|
+
in: query
|
|
15937
|
+
required: false
|
|
15938
|
+
schema:
|
|
15939
|
+
type: string
|
|
15940
|
+
enum: [open, all]
|
|
15941
|
+
responses:
|
|
15942
|
+
'200':
|
|
15943
|
+
description: Threats on the connection's agents, highest blast radius first
|
|
15944
|
+
content:
|
|
15945
|
+
application/json:
|
|
15946
|
+
schema:
|
|
15947
|
+
$ref: '#/paths/~1v1~1otel~1threats/get/responses/200/content/application~1json/schema'
|
|
15948
|
+
'401': { description: Unauthenticated }
|
|
15949
|
+
'403': { description: Not a plt_ key }
|
|
15950
|
+
'404': { description: Connection not found for this app }
|
|
15951
|
+
/v1/platform/connections/{connection_id}/otel/summary:
|
|
15952
|
+
get:
|
|
15953
|
+
tags: [Platform, Observability]
|
|
15954
|
+
summary: "Posture score and counts for one connection's agents"
|
|
15955
|
+
description: >-
|
|
15956
|
+
`/v1/otel/summary` over a smaller world: the posture score uses
|
|
15957
|
+
the connection's agents' trust scores and the resources they
|
|
15958
|
+
reach; threat and pending-approval counts are the connection's
|
|
15959
|
+
agents' only.
|
|
15960
|
+
|
|
15961
|
+
|
|
15962
|
+
A `plt_` key sees one connection's agents, never the end-user's org:
|
|
15963
|
+
that org may hold agents from other platforms or the user's
|
|
15964
|
+
own. The set is agents attributed to the connection plus the
|
|
15965
|
+
ones listed on it, constrained to the connection's org. A
|
|
15966
|
+
connection that does not belong to the calling app is a 404.
|
|
15967
|
+
operationId: get_platform_connection_otel_summary
|
|
15968
|
+
parameters:
|
|
15969
|
+
- name: connection_id
|
|
15970
|
+
in: path
|
|
15971
|
+
required: true
|
|
15972
|
+
schema: { type: string, format: uuid }
|
|
15973
|
+
responses:
|
|
15974
|
+
'200':
|
|
15975
|
+
description: Posture and counts for the connection
|
|
15976
|
+
content:
|
|
15977
|
+
application/json:
|
|
15978
|
+
schema:
|
|
15979
|
+
$ref: '#/paths/~1v1~1otel~1summary/get/responses/200/content/application~1json/schema'
|
|
15980
|
+
'401': { description: Unauthenticated }
|
|
15981
|
+
'403': { description: Not a plt_ key }
|
|
15982
|
+
'404': { description: Connection not found for this app }
|
|
15983
|
+
/v1/platform/connections/{connection_id}/otel/stream:
|
|
15984
|
+
get:
|
|
15985
|
+
tags: [Platform, Observability]
|
|
15986
|
+
summary: "Live signal stream for one connection's agents (SSE)"
|
|
15987
|
+
description: >-
|
|
15988
|
+
The same protocol as `/v1/otel/stream` — `Last-Event-ID` resume,
|
|
15989
|
+
`event: gap` on a stale cursor or a lagged subscriber — filtered
|
|
15990
|
+
to signals whose agent is one of the connection's. Signals with
|
|
15991
|
+
no agent (a human's own dashboard actions) are never emitted
|
|
15992
|
+
here. The agent set is fixed at connect time; an agent added
|
|
15993
|
+
later appears on the next connect.
|
|
15994
|
+
|
|
15995
|
+
|
|
15996
|
+
Stream slots are counted per platform app (five), not per
|
|
15997
|
+
connection.
|
|
15998
|
+
|
|
15999
|
+
|
|
16000
|
+
A `plt_` key sees one connection's agents, never the end-user's org:
|
|
16001
|
+
that org may hold agents from other platforms or the user's
|
|
16002
|
+
own. The set is agents attributed to the connection plus the
|
|
16003
|
+
ones listed on it, constrained to the connection's org. A
|
|
16004
|
+
connection that does not belong to the calling app is a 404.
|
|
16005
|
+
operationId: get_platform_connection_otel_stream
|
|
16006
|
+
parameters:
|
|
16007
|
+
- name: connection_id
|
|
16008
|
+
in: path
|
|
16009
|
+
required: true
|
|
16010
|
+
schema: { type: string, format: uuid }
|
|
16011
|
+
- name: Last-Event-ID
|
|
16012
|
+
in: header
|
|
16013
|
+
required: false
|
|
16014
|
+
schema: { type: string }
|
|
16015
|
+
responses:
|
|
16016
|
+
'200':
|
|
16017
|
+
description: text/event-stream
|
|
16018
|
+
content:
|
|
16019
|
+
text/event-stream:
|
|
16020
|
+
schema: { type: string }
|
|
16021
|
+
'401': { description: Unauthenticated }
|
|
16022
|
+
'403': { description: Not a plt_ key }
|
|
16023
|
+
'404': { description: Connection not found for this app }
|
|
16024
|
+
'429': { description: Stream slot cap for this app reached }
|
|
15880
16025
|
/v1/platform/connections/{connection_id}/resources:
|
|
15881
16026
|
parameters:
|
|
15882
16027
|
- name: connection_id
|
|
@@ -16402,6 +16547,79 @@ paths:
|
|
|
16402
16547
|
description: Unauthenticated
|
|
16403
16548
|
'403':
|
|
16404
16549
|
description: Not a human user
|
|
16550
|
+
/v1/otel/agents/{agent_id}/trust:
|
|
16551
|
+
get:
|
|
16552
|
+
tags: [Observability]
|
|
16553
|
+
summary: "The breakdown behind one agent's trust score"
|
|
16554
|
+
description: >-
|
|
16555
|
+
The topology carries a single 0-100 trust number per agent.
|
|
16556
|
+
This is what it is made of: each weighted component (`null`
|
|
16557
|
+
when this deployment has no source for it — not measured, not
|
|
16558
|
+
zero), a 24-hour history for a sparkline, and the agent's last
|
|
16559
|
+
audit actions. Actions and resource types only; audit
|
|
16560
|
+
`metadata` is where secret paths live and it is not returned.
|
|
16561
|
+
|
|
16562
|
+
|
|
16563
|
+
Scores are `shadow` until the engine is promoted out of
|
|
16564
|
+
recommend-only mode; an agent the engine has not yet reached
|
|
16565
|
+
returns `score: null` and `shadow: true`.
|
|
16566
|
+
|
|
16567
|
+
|
|
16568
|
+
Human users only. An agent id outside the caller's org is a
|
|
16569
|
+
404, not a 403, so the response does not confirm the id exists.
|
|
16570
|
+
operationId: get_otel_agent_trust
|
|
16571
|
+
parameters:
|
|
16572
|
+
- name: agent_id
|
|
16573
|
+
in: path
|
|
16574
|
+
required: true
|
|
16575
|
+
schema: { type: string, format: uuid }
|
|
16576
|
+
responses:
|
|
16577
|
+
'200':
|
|
16578
|
+
description: Current score, components, history, recent actions
|
|
16579
|
+
content:
|
|
16580
|
+
application/json:
|
|
16581
|
+
schema:
|
|
16582
|
+
type: object
|
|
16583
|
+
required: [agent_id, shadow, components, history, recent]
|
|
16584
|
+
properties:
|
|
16585
|
+
agent_id: { type: string, format: uuid }
|
|
16586
|
+
score: { type: integer, minimum: 0, maximum: 100, nullable: true }
|
|
16587
|
+
shadow: { type: boolean, description: "True while the engine is recommend-only or the agent is unscored." }
|
|
16588
|
+
updated_at: { type: string, format: date-time, nullable: true }
|
|
16589
|
+
components:
|
|
16590
|
+
type: object
|
|
16591
|
+
description: "0-100 per component; null means no source in this deployment."
|
|
16592
|
+
properties:
|
|
16593
|
+
denial_rate: { type: integer, nullable: true }
|
|
16594
|
+
threat_hits: { type: integer, nullable: true }
|
|
16595
|
+
egress_blocks: { type: integer, nullable: true }
|
|
16596
|
+
spend_velocity: { type: integer, nullable: true }
|
|
16597
|
+
off_hours: { type: integer, nullable: true }
|
|
16598
|
+
consensus_bypass: { type: integer, nullable: true }
|
|
16599
|
+
history:
|
|
16600
|
+
type: array
|
|
16601
|
+
maxItems: 96
|
|
16602
|
+
description: "Oldest first, last 24 hours."
|
|
16603
|
+
items:
|
|
16604
|
+
type: object
|
|
16605
|
+
required: [at, score]
|
|
16606
|
+
properties:
|
|
16607
|
+
at: { type: string, format: date-time }
|
|
16608
|
+
score: { type: integer, minimum: 0, maximum: 100 }
|
|
16609
|
+
recent:
|
|
16610
|
+
type: array
|
|
16611
|
+
maxItems: 12
|
|
16612
|
+
description: "Newest first."
|
|
16613
|
+
items:
|
|
16614
|
+
type: object
|
|
16615
|
+
required: [at, action]
|
|
16616
|
+
properties:
|
|
16617
|
+
at: { type: string, format: date-time }
|
|
16618
|
+
action: { type: string }
|
|
16619
|
+
resource_type: { type: string, nullable: true }
|
|
16620
|
+
'401': { description: Unauthenticated }
|
|
16621
|
+
'403': { description: Not a human user }
|
|
16622
|
+
'404': { description: No such agent in the caller's organization }
|
|
16405
16623
|
/v1/otel/flows:
|
|
16406
16624
|
get:
|
|
16407
16625
|
tags: [Observability]
|