pgbeam 0.4.10 → 0.4.12
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/dist/index.cjs +64 -10
- package/dist/index.d.cts +67 -7
- package/dist/index.d.mts +67 -7
- package/dist/index.mjs +64 -10
- package/dist/{operations-map.gen-dojer3ji.js → operations-map.gen-cr323vpc.js} +123 -0
- package/dist/{operations-map.gen-gco09oqg.cjs → operations-map.gen-mwk22v4l.cjs} +123 -0
- package/dist/{operations-map.gen-d7lzb0ad.d.ts → operations-map.gen-w5n73m9l.d.ts} +5471 -1235
- package/dist/operations.cjs +683 -16
- package/dist/operations.d.cts +1 -1
- package/dist/operations.d.mts +1 -1
- package/dist/operations.mjs +683 -16
- package/package.json +4 -4
package/dist/operations.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { o as operationsByPath, a as operationsByTag } from './operations-map.gen-
|
|
1
|
+
export { o as operationsByPath, a as operationsByTag } from './operations-map.gen-cr323vpc.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Generated by generate-sdk-ts-maps.ts from backend/openapi/bundles/public.yaml — do not edit manually.
|
|
@@ -14,7 +14,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
14
14
|
"path": "/v1/account/export",
|
|
15
15
|
"summary": "Export account data",
|
|
16
16
|
"description": "Returns all personal data associated with the authenticated user in a structured JSON format. Supports GDPR data portability and CCPA right to know. Audit logs are limited to the most recent 1000 entries.",
|
|
17
|
-
"parameters": [
|
|
17
|
+
"parameters": [
|
|
18
|
+
{
|
|
19
|
+
"name": "If-None-Match",
|
|
20
|
+
"in": "header",
|
|
21
|
+
"required": false,
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
24
|
+
}
|
|
25
|
+
],
|
|
18
26
|
"requestBodyType": "",
|
|
19
27
|
"requestBodyRequired": false,
|
|
20
28
|
"responseType": "{ audit_logs: ({ action: string; created_at: string; id: string; ip_address?: string; resource_id?: string; resource_type?: string })[]; consents: ({ accepted_at: string; document_type: string; document_version: string; id: string; ip_address?: string })[]; databases: ({ created_at: string; host: string; id: string; name: string; port: number; project_id: string; role: string; ssl_mode: string })[]; email_preferences: { marketing_emails?: boolean; usage_limit_alerts?: boolean }; exported_at: string; organizations: ({ created_at: string; id: string; name: string; role: string; slug: string })[]; projects: ({ created_at: string; description: string; id: string; name: string; org_id: string; status: string })[]; sessions: ({ created_at: string; expires_at: string; id: string; ip_address?: string; user_agent?: string })[]; user: { created_at: string; email: string; email_verified: boolean; id: string; image?: string; name: string; updated_at: string } }",
|
|
@@ -47,6 +55,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
47
55
|
"required": false,
|
|
48
56
|
"type": "string",
|
|
49
57
|
"description": "Opaque token for cursor-based pagination."
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "If-None-Match",
|
|
61
|
+
"in": "header",
|
|
62
|
+
"required": false,
|
|
63
|
+
"type": "string",
|
|
64
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
50
65
|
}
|
|
51
66
|
],
|
|
52
67
|
"requestBodyType": "",
|
|
@@ -101,6 +116,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
101
116
|
"required": true,
|
|
102
117
|
"type": "string",
|
|
103
118
|
"description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"name": "If-None-Match",
|
|
122
|
+
"in": "header",
|
|
123
|
+
"required": false,
|
|
124
|
+
"type": "string",
|
|
125
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
104
126
|
}
|
|
105
127
|
],
|
|
106
128
|
"requestBodyType": "",
|
|
@@ -113,7 +135,7 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
113
135
|
"method": "PATCH",
|
|
114
136
|
"path": "/v1/projects/{project_id}/agents/{agent_id}",
|
|
115
137
|
"summary": "Enable or disable an agent credential",
|
|
116
|
-
"description": "Toggles the kill-switch. Disabling drops live connections within seconds.",
|
|
138
|
+
"description": "Toggles the kill-switch between active and disabled. Disabling drops live connections within seconds. Revocation is terminal and cannot be undone here: a revoked credential answers 409, because revoking does not change its secrets, so putting it back to active would make the revoked password and MCP token work again. Issue a new credential instead.",
|
|
117
139
|
"parameters": [
|
|
118
140
|
{
|
|
119
141
|
"name": "project_id",
|
|
@@ -128,6 +150,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
128
150
|
"required": true,
|
|
129
151
|
"type": "string",
|
|
130
152
|
"description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "If-Match",
|
|
156
|
+
"in": "header",
|
|
157
|
+
"required": false,
|
|
158
|
+
"type": "string",
|
|
159
|
+
"description": "Entity tag the write is based on, taken from the `ETag` of the read that produced the values being sent. The write proceeds only if it still matches the current representation; otherwise it is refused with `412 Precondition Failed` and nothing is changed.\n\nThis is what makes a read-modify-write safe. Without it the last writer wins and a concurrent edit is silently discarded, which is the failure an agent is most likely to cause and least likely to notice. The `412` response carries the current `ETag`, so a caller can re-read, re-apply its change and retry.\n\nOmitting the header keeps the old unconditional behaviour. `*` matches any current representation, which asserts only that the resource exists."
|
|
131
160
|
}
|
|
132
161
|
],
|
|
133
162
|
"requestBodyType": "{ status: \"active\" | \"disabled\" }",
|
|
@@ -257,6 +286,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
257
286
|
"required": false,
|
|
258
287
|
"type": "string",
|
|
259
288
|
"description": "Opaque token for cursor-based pagination."
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
"name": "If-None-Match",
|
|
292
|
+
"in": "header",
|
|
293
|
+
"required": false,
|
|
294
|
+
"type": "string",
|
|
295
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
260
296
|
}
|
|
261
297
|
],
|
|
262
298
|
"requestBodyType": "",
|
|
@@ -325,6 +361,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
325
361
|
"required": false,
|
|
326
362
|
"type": "string",
|
|
327
363
|
"description": "Opaque token for cursor-based pagination."
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
"name": "If-None-Match",
|
|
367
|
+
"in": "header",
|
|
368
|
+
"required": false,
|
|
369
|
+
"type": "string",
|
|
370
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
328
371
|
}
|
|
329
372
|
],
|
|
330
373
|
"requestBodyType": "",
|
|
@@ -455,6 +498,20 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
455
498
|
"required": false,
|
|
456
499
|
"type": "number",
|
|
457
500
|
"description": "Maximum number of items to return (1-100, default 20)."
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"name": "page_token",
|
|
504
|
+
"in": "query",
|
|
505
|
+
"required": false,
|
|
506
|
+
"type": "string",
|
|
507
|
+
"description": "Opaque token for cursor-based pagination."
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
"name": "If-None-Match",
|
|
511
|
+
"in": "header",
|
|
512
|
+
"required": false,
|
|
513
|
+
"type": "string",
|
|
514
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
458
515
|
}
|
|
459
516
|
],
|
|
460
517
|
"requestBodyType": "",
|
|
@@ -558,6 +615,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
558
615
|
"required": false,
|
|
559
616
|
"type": "string",
|
|
560
617
|
"description": "Return entries strictly older than this timestamp (cursor / upper bound)."
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
"name": "If-None-Match",
|
|
621
|
+
"in": "header",
|
|
622
|
+
"required": false,
|
|
623
|
+
"type": "string",
|
|
624
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
561
625
|
}
|
|
562
626
|
],
|
|
563
627
|
"requestBodyType": "",
|
|
@@ -592,6 +656,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
592
656
|
"required": false,
|
|
593
657
|
"type": "string",
|
|
594
658
|
"description": "Return entries strictly older than this timestamp (cursor / upper bound)."
|
|
659
|
+
},
|
|
660
|
+
{
|
|
661
|
+
"name": "If-None-Match",
|
|
662
|
+
"in": "header",
|
|
663
|
+
"required": false,
|
|
664
|
+
"type": "string",
|
|
665
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
595
666
|
}
|
|
596
667
|
],
|
|
597
668
|
"requestBodyType": "",
|
|
@@ -599,13 +670,41 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
599
670
|
"responseType": "{ anchor_status?: string; anchor_verified_from_seq?: number; anchor_verified_through_seq?: number; chain_end_seq?: number; chain_start_seq?: number; failure_reason?: string; first_broken_seq?: number; keyed_count: number; link_status?: string; link_verified_from_seq?: number; ok: boolean; unchained_count: number; verified_at: string; verified_count: number }",
|
|
600
671
|
"responseStatus": "200"
|
|
601
672
|
},
|
|
673
|
+
"executeBatch": {
|
|
674
|
+
"operationId": "executeBatch",
|
|
675
|
+
"method": "POST",
|
|
676
|
+
"path": "/v1/projects/{project_id}/batch",
|
|
677
|
+
"summary": "Apply many project operations in one request",
|
|
678
|
+
"description": "Applies up to 100 project-scoped operations in a single request, so an agent acting on many resources does not have to loop one call at a time. The loops this exists for are the ones the single-resource endpoints leave an operator running by hand: revoking or disabling every agent credential during an incident, triaging a burst of anomaly alerts, and importing the column descriptions for a whole schema.\n\nThe operation set is closed. A batch is not a tunnel for arbitrary requests; each kind it can perform is named in the contract, carries its own permission, and is authorized independently against the caller's scope before any of them runs, so a batch can never act outside the scope the caller already had. Every operation targets the project in the path, and an id belonging to another project is reported exactly as a nonexistent one is, so this cannot be used to probe for resources the caller cannot see.\n\n`mode` is required and decides what a failure means. `atomic` runs the whole batch in one transaction: the first runtime failure rolls it back, the response is 409, and every operation that did not itself fail is reported `not_applied`. `independent` applies each operation on its own and answers 200 with a per-operation status, so a caller can retry exactly the failures. Structural problems (an unknown operation kind, a missing field, a duplicate target) are all found before any work happens and are answered with a single 400.\n\nA batch costs the rate limiter one unit per operation, not one per HTTP request, so it is exactly as expensive as the loop it replaces and cannot be used to sidestep the quota. When the remaining quota cannot cover the whole batch the response is 429 and nothing runs, which is a better answer than a loop that discovers the same thing halfway through. A batch refused this way still costs the one unit any request costs, so an oversized batch is not a free way to probe the quota.",
|
|
679
|
+
"parameters": [
|
|
680
|
+
{
|
|
681
|
+
"name": "project_id",
|
|
682
|
+
"in": "path",
|
|
683
|
+
"required": true,
|
|
684
|
+
"type": "string",
|
|
685
|
+
"description": "Unique project identifier (prefixed, e.g. prj_xxx)."
|
|
686
|
+
}
|
|
687
|
+
],
|
|
688
|
+
"requestBodyType": "{ mode: \"atomic\" | \"independent\"; operations: ({ agent_id?: string; agent_status?: \"active\" | \"disabled\"; annotation?: { column_name?: string; description: string; schema_name?: string; table_name: string }; anomaly_id?: string; anomaly_status?: \"acknowledged\" | \"resolved\"; id: string; op: \"revoke_agent_credential\" | \"set_agent_credential_status\" | \"update_anomaly_alert\" | \"put_schema_annotation\" })[] }",
|
|
689
|
+
"requestBodyRequired": true,
|
|
690
|
+
"responseType": "{ applied: boolean; mode: \"atomic\" | \"independent\"; results: ({ error?: { code: \"invalid_input\" | \"not_found\" | \"conflict\" | \"internal\"; message: string }; id: string; op: string; status: \"succeeded\" | \"failed\" | \"not_applied\" })[]; summary: { failed: number; not_applied: number; requested: number; succeeded: number } }",
|
|
691
|
+
"responseStatus": "200"
|
|
692
|
+
},
|
|
602
693
|
"listPlans": {
|
|
603
694
|
"operationId": "listPlans",
|
|
604
695
|
"method": "GET",
|
|
605
696
|
"path": "/v1/plans",
|
|
606
697
|
"summary": "List available plans",
|
|
607
698
|
"description": "Returns all available plan tiers with their limits and pricing.",
|
|
608
|
-
"parameters": [
|
|
699
|
+
"parameters": [
|
|
700
|
+
{
|
|
701
|
+
"name": "If-None-Match",
|
|
702
|
+
"in": "header",
|
|
703
|
+
"required": false,
|
|
704
|
+
"type": "string",
|
|
705
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
706
|
+
}
|
|
707
|
+
],
|
|
609
708
|
"requestBodyType": "",
|
|
610
709
|
"requestBodyRequired": false,
|
|
611
710
|
"responseType": "{ plans: ({ annual_price?: number; description?: string; label: string; limits: { audit_retention_days: number; bytes_per_month: number; included_seats: number; max_agent_credentials: number; max_connections: number; max_databases: number; max_projects: number; max_query_shapes: number; queries_per_day: number; queries_per_second: number; sandbox_idle_seconds: number; sandbox_max_branches: number; sandbox_max_upstream_bytes: number; sandbox_ttl_seconds: number }; monthly_price: number; name: string; overage_text?: string; trial_days?: number })[] }",
|
|
@@ -624,6 +723,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
624
723
|
"required": true,
|
|
625
724
|
"type": "string",
|
|
626
725
|
"description": "Unique organization identifier."
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"name": "If-None-Match",
|
|
729
|
+
"in": "header",
|
|
730
|
+
"required": false,
|
|
731
|
+
"type": "string",
|
|
732
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
627
733
|
}
|
|
628
734
|
],
|
|
629
735
|
"requestBodyType": "",
|
|
@@ -644,6 +750,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
644
750
|
"required": true,
|
|
645
751
|
"type": "string",
|
|
646
752
|
"description": "Unique organization identifier."
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
"name": "If-None-Match",
|
|
756
|
+
"in": "header",
|
|
757
|
+
"required": false,
|
|
758
|
+
"type": "string",
|
|
759
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
647
760
|
}
|
|
648
761
|
],
|
|
649
762
|
"requestBodyType": "",
|
|
@@ -725,6 +838,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
725
838
|
"required": false,
|
|
726
839
|
"type": "string",
|
|
727
840
|
"description": "Opaque token for cursor-based pagination."
|
|
841
|
+
},
|
|
842
|
+
{
|
|
843
|
+
"name": "If-None-Match",
|
|
844
|
+
"in": "header",
|
|
845
|
+
"required": false,
|
|
846
|
+
"type": "string",
|
|
847
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
728
848
|
}
|
|
729
849
|
],
|
|
730
850
|
"requestBodyType": "",
|
|
@@ -793,6 +913,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
793
913
|
"required": false,
|
|
794
914
|
"type": "string",
|
|
795
915
|
"description": "Opaque token for cursor-based pagination."
|
|
916
|
+
},
|
|
917
|
+
{
|
|
918
|
+
"name": "If-None-Match",
|
|
919
|
+
"in": "header",
|
|
920
|
+
"required": false,
|
|
921
|
+
"type": "string",
|
|
922
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
796
923
|
}
|
|
797
924
|
],
|
|
798
925
|
"requestBodyType": "",
|
|
@@ -861,6 +988,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
861
988
|
"required": false,
|
|
862
989
|
"type": "string",
|
|
863
990
|
"description": "Opaque token for cursor-based pagination."
|
|
991
|
+
},
|
|
992
|
+
{
|
|
993
|
+
"name": "If-None-Match",
|
|
994
|
+
"in": "header",
|
|
995
|
+
"required": false,
|
|
996
|
+
"type": "string",
|
|
997
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
864
998
|
}
|
|
865
999
|
],
|
|
866
1000
|
"requestBodyType": "",
|
|
@@ -915,6 +1049,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
915
1049
|
"required": true,
|
|
916
1050
|
"type": "string",
|
|
917
1051
|
"description": "Unique database identifier (prefixed, e.g. db_xxx)."
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
"name": "If-None-Match",
|
|
1055
|
+
"in": "header",
|
|
1056
|
+
"required": false,
|
|
1057
|
+
"type": "string",
|
|
1058
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
918
1059
|
}
|
|
919
1060
|
],
|
|
920
1061
|
"requestBodyType": "",
|
|
@@ -942,6 +1083,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
942
1083
|
"required": true,
|
|
943
1084
|
"type": "string",
|
|
944
1085
|
"description": "Unique database identifier (prefixed, e.g. db_xxx)."
|
|
1086
|
+
},
|
|
1087
|
+
{
|
|
1088
|
+
"name": "If-Match",
|
|
1089
|
+
"in": "header",
|
|
1090
|
+
"required": false,
|
|
1091
|
+
"type": "string",
|
|
1092
|
+
"description": "Entity tag the write is based on, taken from the `ETag` of the read that produced the values being sent. The write proceeds only if it still matches the current representation; otherwise it is refused with `412 Precondition Failed` and nothing is changed.\n\nThis is what makes a read-modify-write safe. Without it the last writer wins and a concurrent edit is silently discarded, which is the failure an agent is most likely to cause and least likely to notice. The `412` response carries the current `ETag`, so a caller can re-read, re-apply its change and retry.\n\nOmitting the header keeps the old unconditional behaviour. `*` matches any current representation, which asserts only that the resource exists."
|
|
945
1093
|
}
|
|
946
1094
|
],
|
|
947
1095
|
"requestBodyType": "{ auto_read_routing?: boolean; cache_config?: { enabled: boolean; max_entries: number; swr_seconds: number; ttl_seconds: number }; host?: string; name?: string; password?: string; pool_config?: { max_active?: number; min_pool_size: number; pool_mode: \"session\" | \"transaction\" | \"statement\"; pool_size: number }; pool_region?: string; port?: number; query_timeout_ms?: number; role?: \"primary\" | \"replica\"; ssl_mode?: \"disable\" | \"allow\" | \"prefer\" | \"require\" | \"verify-ca\" | \"verify-full\"; username?: string }",
|
|
@@ -1050,6 +1198,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1050
1198
|
"required": true,
|
|
1051
1199
|
"type": "string",
|
|
1052
1200
|
"description": "Unique database identifier (prefixed, e.g. db_xxx)."
|
|
1201
|
+
},
|
|
1202
|
+
{
|
|
1203
|
+
"name": "If-None-Match",
|
|
1204
|
+
"in": "header",
|
|
1205
|
+
"required": false,
|
|
1206
|
+
"type": "string",
|
|
1207
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1053
1208
|
}
|
|
1054
1209
|
],
|
|
1055
1210
|
"requestBodyType": "",
|
|
@@ -1057,6 +1212,50 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1057
1212
|
"responseType": "{ error?: string; relations: ({ columns: ({ data_type: string; is_binary: boolean; name: string })[]; kind: \"table\" | \"view\" | \"materialized_view\" | \"other\"; name: string; schema: string })[]; scanned_columns: number; scanned_relations: number; truncated?: boolean }",
|
|
1058
1213
|
"responseStatus": "200"
|
|
1059
1214
|
},
|
|
1215
|
+
"getDemo": {
|
|
1216
|
+
"operationId": "getDemo",
|
|
1217
|
+
"method": "GET",
|
|
1218
|
+
"path": "/v1/demo",
|
|
1219
|
+
"summary": "Describe the demo sandbox",
|
|
1220
|
+
"description": "Returns everything an unauthenticated caller needs before asking for a demo credential: whether the demo is up, how much of the global ceiling is left, what each tier costs, the dataset schema with the treatment the demo policy applies to every column, and the walkthrough of statements that demonstrate each guardrail. Requires no account and no key.",
|
|
1221
|
+
"parameters": [],
|
|
1222
|
+
"requestBodyType": "",
|
|
1223
|
+
"requestBodyRequired": false,
|
|
1224
|
+
"responseType": "{ available: boolean; dataset: { schema: string; tables: ({ columns: ({ name: string; treatment: \"visible\" | \"redacted\" | \"hashed\" | \"nulled\"; type: string })[]; description: string; name: string; reachable: boolean })[] }; live_sessions: number; max_live_sessions: number; max_sessions_per_hour_per_client: number; retry_after_seconds?: number; tiers: ({ max_rows: number; name: \"free\" | \"extended\"; price_usd_cents: number; purchasable: boolean; query_budget: number; resource?: string; ttl_seconds: number })[]; unavailable_reason?: string; upgrade: { description: string; docs_url: string; policy_endpoint: string; signup_url: string }; walkthrough: ({ expect: \"allow\" | \"masked\" | \"blocked\"; expect_columns?: ({ name: string; treatment: \"visible\" | \"redacted\" | \"hashed\" | \"nulled\"; type: string })[]; expect_rule?: string; sql: string; step: number; title: string; why: string })[] }",
|
|
1225
|
+
"responseStatus": "200"
|
|
1226
|
+
},
|
|
1227
|
+
"createDemoCredential": {
|
|
1228
|
+
"operationId": "createDemoCredential",
|
|
1229
|
+
"method": "POST",
|
|
1230
|
+
"path": "/v1/demo/credentials",
|
|
1231
|
+
"summary": "Issue a demo credential",
|
|
1232
|
+
"description": "Issues a scoped, read-only, short-lived PostgreSQL credential plus a hosted MCP token against PgBeam's own demo database, with no account and no key. The credential is governed by the same wire-protocol policy engine every customer credential runs through, so a SELECT of a PII column comes back masked, a statement naming the table left off the allowlist is blocked, and a write is refused, all with machine-readable reasons. The connection string and MCP token are shown once. The response also carries the policy document that governed the demo, so a caller who then opens an account can create the same policy on its own database verbatim.\nRefusals are distinct on purpose. 429 means this client has asked for too many credentials in the last hour and should wait. 503 with a Retry-After header means the global ceiling on concurrent demo credentials is full, so backing off individually will not help; the header says when the oldest session expires. 503 also covers a deployment with no demo database configured.",
|
|
1233
|
+
"parameters": [],
|
|
1234
|
+
"requestBodyType": "{ label?: string; payment_proof?: string; tier?: \"free\" | \"extended\" }",
|
|
1235
|
+
"requestBodyRequired": false,
|
|
1236
|
+
"responseType": "{ connection_string: string; dataset: { schema: string; tables: ({ columns: ({ name: string; treatment: \"visible\" | \"redacted\" | \"hashed\" | \"nulled\"; type: string })[]; description: string; name: string; reachable: boolean })[] }; expires_at: string; mcp_token: string; mcp_url: string; policy_template: { access_mode?: \"read_only\" | \"read_write\"; approval_auto_max_rows?: number; approval_mode?: \"off\" | \"writes\" | \"ddl\" | \"all\"; approval_timeout_seconds?: number; budget_queries_per_day?: number; budget_queries_per_hour?: number; egress_bytes_per_day?: number; masking_rules?: ({ column: string; kind: \"redact\" | \"null\" | \"hash\"; table: string })[]; max_affected_rows?: number; max_rows?: number; migration_safety?: \"off\" | \"warn\" | \"block\"; name: string; row_filters?: ({ predicate: string; table: string })[]; statement_rules?: { allow?: string[]; deny?: string[] }; statement_timeout_ms?: number; table_allowlist?: string[]; table_denylist?: string[]; write_mode?: \"normal\" | \"rollback\" | \"sandbox\" }; query_budget: number; session_id: string; tier: string; ttl_seconds: number; upgrade: { description: string; docs_url: string; policy_endpoint: string; signup_url: string }; walkthrough: ({ expect: \"allow\" | \"masked\" | \"blocked\"; expect_columns?: ({ name: string; treatment: \"visible\" | \"redacted\" | \"hashed\" | \"nulled\"; type: string })[]; expect_rule?: string; sql: string; step: number; title: string; why: string })[] }",
|
|
1237
|
+
"responseStatus": "201"
|
|
1238
|
+
},
|
|
1239
|
+
"releaseDemoCredential": {
|
|
1240
|
+
"operationId": "releaseDemoCredential",
|
|
1241
|
+
"method": "POST",
|
|
1242
|
+
"path": "/v1/demo/credentials/{session_id}/release",
|
|
1243
|
+
"summary": "Release a demo credential",
|
|
1244
|
+
"description": "Revokes a demo credential before its TTL runs out and returns its slot to the global ceiling. Callers that finish early should do this so the next evaluating agent is not turned away by a session nobody is using. The MCP token issued with the credential proves the caller holds it. Releasing an already-expired or already-released session succeeds with released=false.",
|
|
1245
|
+
"parameters": [
|
|
1246
|
+
{
|
|
1247
|
+
"name": "session_id",
|
|
1248
|
+
"in": "path",
|
|
1249
|
+
"required": true,
|
|
1250
|
+
"type": "string",
|
|
1251
|
+
"description": "The demo session to release, as returned when it was issued."
|
|
1252
|
+
}
|
|
1253
|
+
],
|
|
1254
|
+
"requestBodyType": "{ mcp_token: string }",
|
|
1255
|
+
"requestBodyRequired": true,
|
|
1256
|
+
"responseType": "{ live_sessions: number; released: boolean; session_id: string }",
|
|
1257
|
+
"responseStatus": "200"
|
|
1258
|
+
},
|
|
1060
1259
|
"listCustomDomains": {
|
|
1061
1260
|
"operationId": "listCustomDomains",
|
|
1062
1261
|
"method": "GET",
|
|
@@ -1084,6 +1283,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1084
1283
|
"required": false,
|
|
1085
1284
|
"type": "string",
|
|
1086
1285
|
"description": "Opaque token for cursor-based pagination."
|
|
1286
|
+
},
|
|
1287
|
+
{
|
|
1288
|
+
"name": "If-None-Match",
|
|
1289
|
+
"in": "header",
|
|
1290
|
+
"required": false,
|
|
1291
|
+
"type": "string",
|
|
1292
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1087
1293
|
}
|
|
1088
1294
|
],
|
|
1089
1295
|
"requestBodyType": "",
|
|
@@ -1178,7 +1384,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1178
1384
|
"path": "/v1/health",
|
|
1179
1385
|
"summary": "Health check",
|
|
1180
1386
|
"description": "Returns the health status of the API server.",
|
|
1181
|
-
"parameters": [
|
|
1387
|
+
"parameters": [
|
|
1388
|
+
{
|
|
1389
|
+
"name": "If-None-Match",
|
|
1390
|
+
"in": "header",
|
|
1391
|
+
"required": false,
|
|
1392
|
+
"type": "string",
|
|
1393
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1394
|
+
}
|
|
1395
|
+
],
|
|
1182
1396
|
"requestBodyType": "",
|
|
1183
1397
|
"requestBodyRequired": false,
|
|
1184
1398
|
"responseType": "{ image_sha: string; status: \"ok\" | \"degraded\"; timestamp?: string; version: string }",
|
|
@@ -1211,6 +1425,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1211
1425
|
"required": false,
|
|
1212
1426
|
"type": "string",
|
|
1213
1427
|
"description": "Opaque token for cursor-based pagination."
|
|
1428
|
+
},
|
|
1429
|
+
{
|
|
1430
|
+
"name": "If-None-Match",
|
|
1431
|
+
"in": "header",
|
|
1432
|
+
"required": false,
|
|
1433
|
+
"type": "string",
|
|
1434
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1214
1435
|
}
|
|
1215
1436
|
],
|
|
1216
1437
|
"requestBodyType": "",
|
|
@@ -1265,6 +1486,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1265
1486
|
"required": true,
|
|
1266
1487
|
"type": "string",
|
|
1267
1488
|
"description": "Unique honeytoken identifier (prefixed, e.g. hnt_xxx)."
|
|
1489
|
+
},
|
|
1490
|
+
{
|
|
1491
|
+
"name": "If-None-Match",
|
|
1492
|
+
"in": "header",
|
|
1493
|
+
"required": false,
|
|
1494
|
+
"type": "string",
|
|
1495
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1268
1496
|
}
|
|
1269
1497
|
],
|
|
1270
1498
|
"requestBodyType": "",
|
|
@@ -1292,6 +1520,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1292
1520
|
"required": true,
|
|
1293
1521
|
"type": "string",
|
|
1294
1522
|
"description": "Unique honeytoken identifier (prefixed, e.g. hnt_xxx)."
|
|
1523
|
+
},
|
|
1524
|
+
{
|
|
1525
|
+
"name": "If-Match",
|
|
1526
|
+
"in": "header",
|
|
1527
|
+
"required": false,
|
|
1528
|
+
"type": "string",
|
|
1529
|
+
"description": "Entity tag the write is based on, taken from the `ETag` of the read that produced the values being sent. The write proceeds only if it still matches the current representation; otherwise it is refused with `412 Precondition Failed` and nothing is changed.\n\nThis is what makes a read-modify-write safe. Without it the last writer wins and a concurrent edit is silently discarded, which is the failure an agent is most likely to cause and least likely to notice. The `412` response carries the current `ETag`, so a caller can re-read, re-apply its change and retry.\n\nOmitting the header keeps the old unconditional behaviour. `*` matches any current representation, which asserts only that the resource exists."
|
|
1295
1530
|
}
|
|
1296
1531
|
],
|
|
1297
1532
|
"requestBodyType": "{ action: \"audit_only\" | \"kill\"; relation_name: string; schema_name?: string }",
|
|
@@ -1353,6 +1588,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1353
1588
|
"required": false,
|
|
1354
1589
|
"type": "number",
|
|
1355
1590
|
"description": "Maximum number of top queries to return (1-100)."
|
|
1591
|
+
},
|
|
1592
|
+
{
|
|
1593
|
+
"name": "If-None-Match",
|
|
1594
|
+
"in": "header",
|
|
1595
|
+
"required": false,
|
|
1596
|
+
"type": "string",
|
|
1597
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1356
1598
|
}
|
|
1357
1599
|
],
|
|
1358
1600
|
"requestBodyType": "",
|
|
@@ -1360,6 +1602,196 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1360
1602
|
"responseType": "{ cache: { hit_rate: number; total_hits: number; total_misses: number }; latency: { avg_ms: number; p99_ms: number }; queries: ({ avg_latency_ms: number; p99_latency_ms: number; query_hash: string; query_pattern: string; total_cache_hits: number; total_cache_misses: number; total_count: number })[] }",
|
|
1361
1603
|
"responseStatus": "200"
|
|
1362
1604
|
},
|
|
1605
|
+
"listOrgMembers": {
|
|
1606
|
+
"operationId": "listOrgMembers",
|
|
1607
|
+
"method": "GET",
|
|
1608
|
+
"path": "/v1/organizations/{org_id}/members",
|
|
1609
|
+
"summary": "List organization members",
|
|
1610
|
+
"description": "Lists the people who belong to the organization, and their roles.",
|
|
1611
|
+
"parameters": [
|
|
1612
|
+
{
|
|
1613
|
+
"name": "org_id",
|
|
1614
|
+
"in": "path",
|
|
1615
|
+
"required": true,
|
|
1616
|
+
"type": "string",
|
|
1617
|
+
"description": "Unique organization identifier."
|
|
1618
|
+
},
|
|
1619
|
+
{
|
|
1620
|
+
"name": "page_size",
|
|
1621
|
+
"in": "query",
|
|
1622
|
+
"required": false,
|
|
1623
|
+
"type": "number",
|
|
1624
|
+
"description": "Maximum number of items to return (1-100, default 20)."
|
|
1625
|
+
},
|
|
1626
|
+
{
|
|
1627
|
+
"name": "page_token",
|
|
1628
|
+
"in": "query",
|
|
1629
|
+
"required": false,
|
|
1630
|
+
"type": "string",
|
|
1631
|
+
"description": "Opaque token for cursor-based pagination."
|
|
1632
|
+
},
|
|
1633
|
+
{
|
|
1634
|
+
"name": "If-None-Match",
|
|
1635
|
+
"in": "header",
|
|
1636
|
+
"required": false,
|
|
1637
|
+
"type": "string",
|
|
1638
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1639
|
+
}
|
|
1640
|
+
],
|
|
1641
|
+
"requestBodyType": "",
|
|
1642
|
+
"requestBodyRequired": false,
|
|
1643
|
+
"responseType": "{ members: ({ created_at: string; email: string; id: string; image?: string; name: string; role: \"owner\" | \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\"; user_id: string })[]; next_page_token?: string }",
|
|
1644
|
+
"responseStatus": "200"
|
|
1645
|
+
},
|
|
1646
|
+
"updateOrgMemberRole": {
|
|
1647
|
+
"operationId": "updateOrgMemberRole",
|
|
1648
|
+
"method": "PATCH",
|
|
1649
|
+
"path": "/v1/organizations/{org_id}/members/{member_id}",
|
|
1650
|
+
"summary": "Change a member's role",
|
|
1651
|
+
"description": "Changes what a member is allowed to do. An organization must keep at least one owner, so the last owner cannot be demoted, and `owner` cannot be assigned here: ownership transfer is a separate, higher-privilege flow.",
|
|
1652
|
+
"parameters": [
|
|
1653
|
+
{
|
|
1654
|
+
"name": "org_id",
|
|
1655
|
+
"in": "path",
|
|
1656
|
+
"required": true,
|
|
1657
|
+
"type": "string",
|
|
1658
|
+
"description": "Unique organization identifier."
|
|
1659
|
+
},
|
|
1660
|
+
{
|
|
1661
|
+
"name": "member_id",
|
|
1662
|
+
"in": "path",
|
|
1663
|
+
"required": true,
|
|
1664
|
+
"type": "string",
|
|
1665
|
+
"description": "Unique organization membership identifier. Unlike the resources PgBeam mints itself, memberships carry no type prefix: the id is opaque and is assigned when the membership row is created. Read it from `listOrgMembers` rather than constructing it."
|
|
1666
|
+
}
|
|
1667
|
+
],
|
|
1668
|
+
"requestBodyType": "{ role: \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\" }",
|
|
1669
|
+
"requestBodyRequired": true,
|
|
1670
|
+
"responseType": "{ created_at: string; email: string; id: string; image?: string; name: string; role: \"owner\" | \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\"; user_id: string }",
|
|
1671
|
+
"responseStatus": "200"
|
|
1672
|
+
},
|
|
1673
|
+
"removeOrgMember": {
|
|
1674
|
+
"operationId": "removeOrgMember",
|
|
1675
|
+
"method": "DELETE",
|
|
1676
|
+
"path": "/v1/organizations/{org_id}/members/{member_id}",
|
|
1677
|
+
"summary": "Remove a member",
|
|
1678
|
+
"description": "Removes someone from the organization. An organization must keep at least one owner, so the last remaining owner cannot be removed and cannot be demoted either: transfer ownership first.",
|
|
1679
|
+
"parameters": [
|
|
1680
|
+
{
|
|
1681
|
+
"name": "org_id",
|
|
1682
|
+
"in": "path",
|
|
1683
|
+
"required": true,
|
|
1684
|
+
"type": "string",
|
|
1685
|
+
"description": "Unique organization identifier."
|
|
1686
|
+
},
|
|
1687
|
+
{
|
|
1688
|
+
"name": "member_id",
|
|
1689
|
+
"in": "path",
|
|
1690
|
+
"required": true,
|
|
1691
|
+
"type": "string",
|
|
1692
|
+
"description": "Unique organization membership identifier. Unlike the resources PgBeam mints itself, memberships carry no type prefix: the id is opaque and is assigned when the membership row is created. Read it from `listOrgMembers` rather than constructing it."
|
|
1693
|
+
}
|
|
1694
|
+
],
|
|
1695
|
+
"requestBodyType": "",
|
|
1696
|
+
"requestBodyRequired": false,
|
|
1697
|
+
"responseType": "",
|
|
1698
|
+
"responseStatus": "204"
|
|
1699
|
+
},
|
|
1700
|
+
"listOrgInvitations": {
|
|
1701
|
+
"operationId": "listOrgInvitations",
|
|
1702
|
+
"method": "GET",
|
|
1703
|
+
"path": "/v1/organizations/{org_id}/invitations",
|
|
1704
|
+
"summary": "List invitations",
|
|
1705
|
+
"description": "Lists invitations to join the organization and where each has got to.",
|
|
1706
|
+
"parameters": [
|
|
1707
|
+
{
|
|
1708
|
+
"name": "org_id",
|
|
1709
|
+
"in": "path",
|
|
1710
|
+
"required": true,
|
|
1711
|
+
"type": "string",
|
|
1712
|
+
"description": "Unique organization identifier."
|
|
1713
|
+
},
|
|
1714
|
+
{
|
|
1715
|
+
"name": "status",
|
|
1716
|
+
"in": "query",
|
|
1717
|
+
"required": false,
|
|
1718
|
+
"type": "\"pending\" | \"accepted\" | \"rejected\" | \"canceled\"",
|
|
1719
|
+
"description": "Filter to a single status. Omit to list every invitation."
|
|
1720
|
+
},
|
|
1721
|
+
{
|
|
1722
|
+
"name": "page_size",
|
|
1723
|
+
"in": "query",
|
|
1724
|
+
"required": false,
|
|
1725
|
+
"type": "number",
|
|
1726
|
+
"description": "Maximum number of items to return (1-100, default 20)."
|
|
1727
|
+
},
|
|
1728
|
+
{
|
|
1729
|
+
"name": "page_token",
|
|
1730
|
+
"in": "query",
|
|
1731
|
+
"required": false,
|
|
1732
|
+
"type": "string",
|
|
1733
|
+
"description": "Opaque token for cursor-based pagination."
|
|
1734
|
+
},
|
|
1735
|
+
{
|
|
1736
|
+
"name": "If-None-Match",
|
|
1737
|
+
"in": "header",
|
|
1738
|
+
"required": false,
|
|
1739
|
+
"type": "string",
|
|
1740
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1741
|
+
}
|
|
1742
|
+
],
|
|
1743
|
+
"requestBodyType": "",
|
|
1744
|
+
"requestBodyRequired": false,
|
|
1745
|
+
"responseType": "{ invitations: ({ created_at: string; email: string; expires_at: string; id: string; role: \"owner\" | \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\"; status: \"pending\" | \"accepted\" | \"rejected\" | \"canceled\" })[]; next_page_token?: string }",
|
|
1746
|
+
"responseStatus": "200"
|
|
1747
|
+
},
|
|
1748
|
+
"createOrgInvitation": {
|
|
1749
|
+
"operationId": "createOrgInvitation",
|
|
1750
|
+
"method": "POST",
|
|
1751
|
+
"path": "/v1/organizations/{org_id}/invitations",
|
|
1752
|
+
"summary": "Invite someone to the organization",
|
|
1753
|
+
"description": "Creates an invitation and emails it. Inviting an address that already has a pending invitation returns a conflict rather than a second invitation. `owner` cannot be invited: ownership transfer is a separate, higher-privilege flow.",
|
|
1754
|
+
"parameters": [
|
|
1755
|
+
{
|
|
1756
|
+
"name": "org_id",
|
|
1757
|
+
"in": "path",
|
|
1758
|
+
"required": true,
|
|
1759
|
+
"type": "string",
|
|
1760
|
+
"description": "Unique organization identifier."
|
|
1761
|
+
}
|
|
1762
|
+
],
|
|
1763
|
+
"requestBodyType": "{ email: string; role?: \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\" }",
|
|
1764
|
+
"requestBodyRequired": true,
|
|
1765
|
+
"responseType": "{ created_at: string; email: string; expires_at: string; id: string; role: \"owner\" | \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\"; status: \"pending\" | \"accepted\" | \"rejected\" | \"canceled\" }",
|
|
1766
|
+
"responseStatus": "201"
|
|
1767
|
+
},
|
|
1768
|
+
"revokeOrgInvitation": {
|
|
1769
|
+
"operationId": "revokeOrgInvitation",
|
|
1770
|
+
"method": "DELETE",
|
|
1771
|
+
"path": "/v1/organizations/{org_id}/invitations/{invitation_id}",
|
|
1772
|
+
"summary": "Revoke an invitation",
|
|
1773
|
+
"description": "Cancels a pending invitation so it can no longer be accepted.",
|
|
1774
|
+
"parameters": [
|
|
1775
|
+
{
|
|
1776
|
+
"name": "org_id",
|
|
1777
|
+
"in": "path",
|
|
1778
|
+
"required": true,
|
|
1779
|
+
"type": "string",
|
|
1780
|
+
"description": "Unique organization identifier."
|
|
1781
|
+
},
|
|
1782
|
+
{
|
|
1783
|
+
"name": "invitation_id",
|
|
1784
|
+
"in": "path",
|
|
1785
|
+
"required": true,
|
|
1786
|
+
"type": "string",
|
|
1787
|
+
"description": "Unique organization invitation identifier. Opaque, with no type prefix. Invitations created through this API are 32 lowercase hex characters; invitations created in the dashboard carry an id of a different shape, so treat it as opaque and read it from `listOrgInvitations`."
|
|
1788
|
+
}
|
|
1789
|
+
],
|
|
1790
|
+
"requestBodyType": "",
|
|
1791
|
+
"requestBodyRequired": false,
|
|
1792
|
+
"responseType": "",
|
|
1793
|
+
"responseStatus": "204"
|
|
1794
|
+
},
|
|
1363
1795
|
"lintMigration": {
|
|
1364
1796
|
"operationId": "lintMigration",
|
|
1365
1797
|
"method": "POST",
|
|
@@ -1393,6 +1825,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1393
1825
|
"required": true,
|
|
1394
1826
|
"type": "string",
|
|
1395
1827
|
"description": "Unique organization identifier."
|
|
1828
|
+
},
|
|
1829
|
+
{
|
|
1830
|
+
"name": "If-None-Match",
|
|
1831
|
+
"in": "header",
|
|
1832
|
+
"required": false,
|
|
1833
|
+
"type": "string",
|
|
1834
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1396
1835
|
}
|
|
1397
1836
|
],
|
|
1398
1837
|
"requestBodyType": "",
|
|
@@ -1426,12 +1865,59 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1426
1865
|
"path": "/v1/organizations",
|
|
1427
1866
|
"summary": "List organizations",
|
|
1428
1867
|
"description": "Lists the organizations visible to the caller's credential. An organization-scoped API key (pbo_) returns exactly the organization it belongs to. A user credential (account-scoped API key or dashboard session token) returns the organizations the user is a member of, including the caller's role in each.",
|
|
1429
|
-
"parameters": [
|
|
1868
|
+
"parameters": [
|
|
1869
|
+
{
|
|
1870
|
+
"name": "If-None-Match",
|
|
1871
|
+
"in": "header",
|
|
1872
|
+
"required": false,
|
|
1873
|
+
"type": "string",
|
|
1874
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1875
|
+
}
|
|
1876
|
+
],
|
|
1430
1877
|
"requestBodyType": "",
|
|
1431
1878
|
"requestBodyRequired": false,
|
|
1432
1879
|
"responseType": "{ organizations: ({ id: string; name: string; role?: string; slug: string })[] }",
|
|
1433
1880
|
"responseStatus": "200"
|
|
1434
1881
|
},
|
|
1882
|
+
"listPaymentResources": {
|
|
1883
|
+
"operationId": "listPaymentResources",
|
|
1884
|
+
"method": "GET",
|
|
1885
|
+
"path": "/v1/payments/resources",
|
|
1886
|
+
"summary": "List priced resources",
|
|
1887
|
+
"description": "Lists what an agent can buy over the Machine Payments Protocol, with the\nunit, the pack size, and the price of one pack. Discovery only: the\n`WWW-Authenticate: Payment` challenge returned by a priced operation is\nalways authoritative.\n\nThis endpoint takes no authentication so an agent can read the price\nbefore it holds a credential.\n",
|
|
1888
|
+
"parameters": [],
|
|
1889
|
+
"requestBodyType": "",
|
|
1890
|
+
"requestBodyRequired": false,
|
|
1891
|
+
"responseType": "{ resources: ({ amount_per_pack: number; currency: string; description?: string; id: string; max_packs: number; min_packs: number; operation_id?: string; title: string; unit: string; units_per_pack: number })[] }",
|
|
1892
|
+
"responseStatus": "200"
|
|
1893
|
+
},
|
|
1894
|
+
"createBudgetTopup": {
|
|
1895
|
+
"operationId": "createBudgetTopup",
|
|
1896
|
+
"method": "POST",
|
|
1897
|
+
"path": "/v1/payments/budget-topups",
|
|
1898
|
+
"summary": "Buy query budget for an agent credential",
|
|
1899
|
+
"description": "Buys additional queries for the agent credential this request is\nauthenticated as, using the Machine Payments Protocol (HTTP 402 with the\n`Payment` authentication scheme).\n\nAuthenticate with the credential's hosted MCP token (`pba_...`) as a\nbearer token. The credential identifies itself, so no human and no\ndashboard session is involved.\n\nWithout a payment credential the response is `402` carrying a complete\n`WWW-Authenticate: Payment` challenge. Fulfil it, then repeat the request\nwith the credential in the `Payment-Authorization` header (the challenge\nselects that field so the bearer token can stay in `Authorization`). On\nsuccess the queries are granted, streamed to the data planes, and the\nresponse carries a `Payment-Receipt` header.\n\nPurchased queries do not raise the credential's policy budget. They are a\nseparate pool the proxy spends only once the policy's hourly and daily\nwindows have refused a statement, and they expire.\n",
|
|
1900
|
+
"parameters": [
|
|
1901
|
+
{
|
|
1902
|
+
"name": "Payment-Authorization",
|
|
1903
|
+
"in": "header",
|
|
1904
|
+
"required": false,
|
|
1905
|
+
"type": "string",
|
|
1906
|
+
"description": "The MPP payment credential, `Payment <base64url>`, echoing the\nchallenge from the `402` and carrying the method-specific proof. For\nthe `stripe` method the payload is `{\"spt\": \"spt_...\"}`, a single-use\nShared Payment Token.\n"
|
|
1907
|
+
},
|
|
1908
|
+
{
|
|
1909
|
+
"name": "Accept-Payment",
|
|
1910
|
+
"in": "header",
|
|
1911
|
+
"required": false,
|
|
1912
|
+
"type": "string",
|
|
1913
|
+
"description": "Payment method and intent preferences, for example `stripe/charge`.\nIgnored when it matches nothing this endpoint offers.\n"
|
|
1914
|
+
}
|
|
1915
|
+
],
|
|
1916
|
+
"requestBodyType": "{ packs?: number }",
|
|
1917
|
+
"requestBodyRequired": false,
|
|
1918
|
+
"responseType": "{ amount: number; credential_id: string; currency: string; expires_at: string; grant_id: string; payment_reference?: string; queries: number; receipt?: string }",
|
|
1919
|
+
"responseStatus": "201"
|
|
1920
|
+
},
|
|
1435
1921
|
"listPolicyProfiles": {
|
|
1436
1922
|
"operationId": "listPolicyProfiles",
|
|
1437
1923
|
"method": "GET",
|
|
@@ -1459,6 +1945,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1459
1945
|
"required": false,
|
|
1460
1946
|
"type": "string",
|
|
1461
1947
|
"description": "Opaque token for cursor-based pagination."
|
|
1948
|
+
},
|
|
1949
|
+
{
|
|
1950
|
+
"name": "If-None-Match",
|
|
1951
|
+
"in": "header",
|
|
1952
|
+
"required": false,
|
|
1953
|
+
"type": "string",
|
|
1954
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1462
1955
|
}
|
|
1463
1956
|
],
|
|
1464
1957
|
"requestBodyType": "",
|
|
@@ -1513,6 +2006,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1513
2006
|
"required": true,
|
|
1514
2007
|
"type": "string",
|
|
1515
2008
|
"description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
|
|
2009
|
+
},
|
|
2010
|
+
{
|
|
2011
|
+
"name": "If-None-Match",
|
|
2012
|
+
"in": "header",
|
|
2013
|
+
"required": false,
|
|
2014
|
+
"type": "string",
|
|
2015
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1516
2016
|
}
|
|
1517
2017
|
],
|
|
1518
2018
|
"requestBodyType": "",
|
|
@@ -1540,6 +2040,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1540
2040
|
"required": true,
|
|
1541
2041
|
"type": "string",
|
|
1542
2042
|
"description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
|
|
2043
|
+
},
|
|
2044
|
+
{
|
|
2045
|
+
"name": "If-Match",
|
|
2046
|
+
"in": "header",
|
|
2047
|
+
"required": false,
|
|
2048
|
+
"type": "string",
|
|
2049
|
+
"description": "Entity tag the write is based on, taken from the `ETag` of the read that produced the values being sent. The write proceeds only if it still matches the current representation; otherwise it is refused with `412 Precondition Failed` and nothing is changed.\n\nThis is what makes a read-modify-write safe. Without it the last writer wins and a concurrent edit is silently discarded, which is the failure an agent is most likely to cause and least likely to notice. The `412` response carries the current `ETag`, so a caller can re-read, re-apply its change and retry.\n\nOmitting the header keeps the old unconditional behaviour. `*` matches any current representation, which asserts only that the resource exists."
|
|
1543
2050
|
}
|
|
1544
2051
|
],
|
|
1545
2052
|
"requestBodyType": "{ access_mode?: \"read_only\" | \"read_write\"; approval_auto_max_rows?: number; approval_mode?: \"off\" | \"writes\" | \"ddl\" | \"all\"; approval_timeout_seconds?: number; budget_queries_per_day?: number; budget_queries_per_hour?: number; egress_bytes_per_day?: number; masking_rules?: ({ column: string; kind: \"redact\" | \"null\" | \"hash\"; table: string })[]; max_affected_rows?: number; max_rows?: number; migration_safety?: \"off\" | \"warn\" | \"block\"; name: string; row_filters?: ({ predicate: string; table: string })[]; statement_rules?: { allow?: string[]; deny?: string[] }; statement_timeout_ms?: number; table_allowlist?: string[]; table_denylist?: string[]; write_mode?: \"normal\" | \"rollback\" | \"sandbox\" }",
|
|
@@ -1648,6 +2155,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1648
2155
|
"required": false,
|
|
1649
2156
|
"type": "\"name\" | \"created_at\" | \"active_connections\"",
|
|
1650
2157
|
"description": "Sort field for projects list."
|
|
2158
|
+
},
|
|
2159
|
+
{
|
|
2160
|
+
"name": "If-None-Match",
|
|
2161
|
+
"in": "header",
|
|
2162
|
+
"required": false,
|
|
2163
|
+
"type": "string",
|
|
2164
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1651
2165
|
}
|
|
1652
2166
|
],
|
|
1653
2167
|
"requestBodyType": "",
|
|
@@ -1688,6 +2202,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1688
2202
|
"required": true,
|
|
1689
2203
|
"type": "string",
|
|
1690
2204
|
"description": "Unique project identifier (prefixed, e.g. prj_xxx)."
|
|
2205
|
+
},
|
|
2206
|
+
{
|
|
2207
|
+
"name": "If-None-Match",
|
|
2208
|
+
"in": "header",
|
|
2209
|
+
"required": false,
|
|
2210
|
+
"type": "string",
|
|
2211
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1691
2212
|
}
|
|
1692
2213
|
],
|
|
1693
2214
|
"requestBodyType": "",
|
|
@@ -1708,6 +2229,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1708
2229
|
"required": true,
|
|
1709
2230
|
"type": "string",
|
|
1710
2231
|
"description": "Unique project identifier (prefixed, e.g. prj_xxx)."
|
|
2232
|
+
},
|
|
2233
|
+
{
|
|
2234
|
+
"name": "If-Match",
|
|
2235
|
+
"in": "header",
|
|
2236
|
+
"required": false,
|
|
2237
|
+
"type": "string",
|
|
2238
|
+
"description": "Entity tag the write is based on, taken from the `ETag` of the read that produced the values being sent. The write proceeds only if it still matches the current representation; otherwise it is refused with `412 Precondition Failed` and nothing is changed.\n\nThis is what makes a read-modify-write safe. Without it the last writer wins and a concurrent edit is silently discarded, which is the failure an agent is most likely to cause and least likely to notice. The `412` response carries the current `ETag`, so a caller can re-read, re-apply its change and retry.\n\nOmitting the header keeps the old unconditional behaviour. `*` matches any current representation, which asserts only that the resource exists."
|
|
1711
2239
|
}
|
|
1712
2240
|
],
|
|
1713
2241
|
"requestBodyType": "{ agents_disabled?: boolean; allowed_cidrs?: ({ cidr: string; label?: string })[]; default_policy_profile_id?: string; description?: string; name?: string; residency?: \"any\" | \"us\" | \"eu\"; status?: \"active\" | \"suspended\" | \"deleted\"; tags?: string[] }",
|
|
@@ -1762,6 +2290,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1762
2290
|
"required": false,
|
|
1763
2291
|
"type": "string",
|
|
1764
2292
|
"description": "Filter metrics by region code."
|
|
2293
|
+
},
|
|
2294
|
+
{
|
|
2295
|
+
"name": "If-None-Match",
|
|
2296
|
+
"in": "header",
|
|
2297
|
+
"required": false,
|
|
2298
|
+
"type": "string",
|
|
2299
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1765
2300
|
}
|
|
1766
2301
|
],
|
|
1767
2302
|
"requestBodyType": "",
|
|
@@ -1775,7 +2310,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1775
2310
|
"path": "/v1/regions",
|
|
1776
2311
|
"summary": "List available regions",
|
|
1777
2312
|
"description": "Returns all active data plane regions.",
|
|
1778
|
-
"parameters": [
|
|
2313
|
+
"parameters": [
|
|
2314
|
+
{
|
|
2315
|
+
"name": "If-None-Match",
|
|
2316
|
+
"in": "header",
|
|
2317
|
+
"required": false,
|
|
2318
|
+
"type": "string",
|
|
2319
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
2320
|
+
}
|
|
2321
|
+
],
|
|
1779
2322
|
"requestBodyType": "",
|
|
1780
2323
|
"requestBodyRequired": false,
|
|
1781
2324
|
"responseType": "{ regions: ({ available: boolean; continent?: string; country?: string; id: string; name: string; provider: \"aws\" | \"azure\" | \"gcp\"; status: \"active\" | \"draining\" | \"inactive\" })[] }",
|
|
@@ -1786,7 +2329,7 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1786
2329
|
"method": "GET",
|
|
1787
2330
|
"path": "/v1/databases/{database_id}/replicas",
|
|
1788
2331
|
"summary": "List replicas",
|
|
1789
|
-
"description": "Lists
|
|
2332
|
+
"description": "Lists a database's read replicas.",
|
|
1790
2333
|
"parameters": [
|
|
1791
2334
|
{
|
|
1792
2335
|
"name": "database_id",
|
|
@@ -1794,6 +2337,27 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1794
2337
|
"required": true,
|
|
1795
2338
|
"type": "string",
|
|
1796
2339
|
"description": "Unique database identifier (prefixed, e.g. db_xxx)."
|
|
2340
|
+
},
|
|
2341
|
+
{
|
|
2342
|
+
"name": "page_size",
|
|
2343
|
+
"in": "query",
|
|
2344
|
+
"required": false,
|
|
2345
|
+
"type": "number",
|
|
2346
|
+
"description": "Maximum number of items to return (1-100, default 20)."
|
|
2347
|
+
},
|
|
2348
|
+
{
|
|
2349
|
+
"name": "page_token",
|
|
2350
|
+
"in": "query",
|
|
2351
|
+
"required": false,
|
|
2352
|
+
"type": "string",
|
|
2353
|
+
"description": "Opaque token for cursor-based pagination."
|
|
2354
|
+
},
|
|
2355
|
+
{
|
|
2356
|
+
"name": "If-None-Match",
|
|
2357
|
+
"in": "header",
|
|
2358
|
+
"required": false,
|
|
2359
|
+
"type": "string",
|
|
2360
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1797
2361
|
}
|
|
1798
2362
|
],
|
|
1799
2363
|
"requestBodyType": "",
|
|
@@ -1882,6 +2446,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1882
2446
|
"required": false,
|
|
1883
2447
|
"type": "string",
|
|
1884
2448
|
"description": "Opaque token for cursor-based pagination."
|
|
2449
|
+
},
|
|
2450
|
+
{
|
|
2451
|
+
"name": "If-None-Match",
|
|
2452
|
+
"in": "header",
|
|
2453
|
+
"required": false,
|
|
2454
|
+
"type": "string",
|
|
2455
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1885
2456
|
}
|
|
1886
2457
|
],
|
|
1887
2458
|
"requestBodyType": "",
|
|
@@ -1963,11 +2534,32 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1963
2534
|
"required": true,
|
|
1964
2535
|
"type": "string",
|
|
1965
2536
|
"description": "Unique organization identifier."
|
|
2537
|
+
},
|
|
2538
|
+
{
|
|
2539
|
+
"name": "page_size",
|
|
2540
|
+
"in": "query",
|
|
2541
|
+
"required": false,
|
|
2542
|
+
"type": "number",
|
|
2543
|
+
"description": "Maximum number of items to return (1-100, default 20)."
|
|
2544
|
+
},
|
|
2545
|
+
{
|
|
2546
|
+
"name": "page_token",
|
|
2547
|
+
"in": "query",
|
|
2548
|
+
"required": false,
|
|
2549
|
+
"type": "string",
|
|
2550
|
+
"description": "Opaque token for cursor-based pagination."
|
|
2551
|
+
},
|
|
2552
|
+
{
|
|
2553
|
+
"name": "If-None-Match",
|
|
2554
|
+
"in": "header",
|
|
2555
|
+
"required": false,
|
|
2556
|
+
"type": "string",
|
|
2557
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
1966
2558
|
}
|
|
1967
2559
|
],
|
|
1968
2560
|
"requestBodyType": "",
|
|
1969
2561
|
"requestBodyRequired": false,
|
|
1970
|
-
"responseType": "{ enrollments: ({ created_at: string; created_by?: string; description?: string; expires_at?: string; id: string; last_seen_at?: string; org_id: string; region_label?: string; revoked_at?: string })[] }",
|
|
2562
|
+
"responseType": "{ enrollments: ({ created_at: string; created_by?: string; description?: string; expires_at?: string; id: string; last_seen_at?: string; org_id: string; region_label?: string; revoked_at?: string })[]; next_page_token?: string }",
|
|
1971
2563
|
"responseStatus": "200"
|
|
1972
2564
|
},
|
|
1973
2565
|
"createSelfHostEnrollment": {
|
|
@@ -2093,17 +2685,31 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2093
2685
|
"type": "number",
|
|
2094
2686
|
"description": "Number of results per page (1-100, default 20)."
|
|
2095
2687
|
},
|
|
2688
|
+
{
|
|
2689
|
+
"name": "page_token",
|
|
2690
|
+
"in": "query",
|
|
2691
|
+
"required": false,
|
|
2692
|
+
"type": "string",
|
|
2693
|
+
"description": "Opaque token for cursor-based pagination."
|
|
2694
|
+
},
|
|
2096
2695
|
{
|
|
2097
2696
|
"name": "page",
|
|
2098
2697
|
"in": "query",
|
|
2099
2698
|
"required": false,
|
|
2100
2699
|
"type": "number",
|
|
2101
2700
|
"description": "Page number (1-based, default 1)."
|
|
2701
|
+
},
|
|
2702
|
+
{
|
|
2703
|
+
"name": "If-None-Match",
|
|
2704
|
+
"in": "header",
|
|
2705
|
+
"required": false,
|
|
2706
|
+
"type": "string",
|
|
2707
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
2102
2708
|
}
|
|
2103
2709
|
],
|
|
2104
2710
|
"requestBodyType": "",
|
|
2105
2711
|
"requestBodyRequired": false,
|
|
2106
|
-
"responseType": "{ cases: ({ case_number: number; closed_at?: string; created_at: string; id: string; message_count?: number; org_id: string; severity: number; slack_channel_id?: string; slack_thread_ts?: string; status: \"open\" | \"closed\"; title: string; updated_at: string; user_id: string })[]; total: number }",
|
|
2712
|
+
"responseType": "{ cases: ({ case_number: number; closed_at?: string; created_at: string; id: string; message_count?: number; org_id: string; severity: number; slack_channel_id?: string; slack_thread_ts?: string; status: \"open\" | \"closed\"; title: string; updated_at: string; user_id: string })[]; next_page_token?: string; total: number }",
|
|
2107
2713
|
"responseStatus": "200"
|
|
2108
2714
|
},
|
|
2109
2715
|
"createSupportCase": {
|
|
@@ -2153,6 +2759,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2153
2759
|
"required": true,
|
|
2154
2760
|
"type": "string",
|
|
2155
2761
|
"description": "Unique support case identifier (prefixed, e.g. sc_xxx)."
|
|
2762
|
+
},
|
|
2763
|
+
{
|
|
2764
|
+
"name": "If-None-Match",
|
|
2765
|
+
"in": "header",
|
|
2766
|
+
"required": false,
|
|
2767
|
+
"type": "string",
|
|
2768
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
2156
2769
|
}
|
|
2157
2770
|
],
|
|
2158
2771
|
"requestBodyType": "",
|
|
@@ -2233,6 +2846,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2233
2846
|
"responseType": "",
|
|
2234
2847
|
"responseStatus": "200"
|
|
2235
2848
|
},
|
|
2849
|
+
"scanText": {
|
|
2850
|
+
"operationId": "scanText",
|
|
2851
|
+
"method": "POST",
|
|
2852
|
+
"path": "/v1/scan/text",
|
|
2853
|
+
"summary": "Scan untrusted text for prompt injection",
|
|
2854
|
+
"description": "Inspects one piece of untrusted text for the techniques used to smuggle instructions into a model's context, and returns a verdict, a recommended action, and the evidence behind it.\n\nTwo detector families run. The structural layer reads codepoints and scripts: invisible-codepoint runs, Unicode Tag smuggling, unterminated bidirectional overrides, and mixed-script words. None of those has a legitimate reason to appear in ordinary text, so a structural finding is a fact worth acting on. The lexical layer is exact-phrase matching with Unicode normalization, which is worth what exact-phrase matching is worth: it is a reason to look, and a support ticket quoting an attack contains the attack. Neither layer is a semantic classifier, and this endpoint does not pretend to catch prose that is hostile only in its meaning. The measured confusion matrix and the list of evasions that are known to work are published at https://pgbeam.com/docs/prompt-scan.\n\nAuthentication is optional. Anonymous callers get a free daily allowance keyed on their source address; an API key moves the allowance onto the organization. Past the allowance the endpoint answers 402 with a payment challenge.\n\nThe submitted text is held in memory for the duration of the request and is never logged, stored, or used to train anything. An `Idempotency-Key` is refused on this operation rather than honoured, because honouring it would persist the response, and the response quotes the submitted text back. The operation has no side effects beyond metering, so a retry is safe without one.",
|
|
2855
|
+
"parameters": [],
|
|
2856
|
+
"requestBodyType": "{ include_evidence?: boolean; layers?: (\"structural\" | \"lexical\")[]; text: string }",
|
|
2857
|
+
"requestBodyRequired": true,
|
|
2858
|
+
"responseType": "{ action: \"allow\" | \"review\" | \"block\"; action_reason: string; advice: string; engine: string; findings: ({ confidence: \"low\" | \"medium\" | \"high\"; detail: string; evidence?: string; layer: \"structural\" | \"lexical\"; offset: number; technique: \"invisible_run\" | \"tag_smuggling\" | \"bidi_override\" | \"mixed_script\" | \"instruction_phrase\" | \"invalid_encoding\" | \"truncated\" })[]; has_structural: boolean; highest_confidence?: \"low\" | \"medium\" | \"high\"; quota: { free_limit: number; free_remaining: number; paid_remaining: number; resets_at: string }; scanned_bytes: number; truncated: boolean; verdict: \"clean\" | \"suspicious\" | \"unscannable\" }",
|
|
2859
|
+
"responseStatus": "200"
|
|
2860
|
+
},
|
|
2236
2861
|
"getOrganizationUsage": {
|
|
2237
2862
|
"operationId": "getOrganizationUsage",
|
|
2238
2863
|
"method": "GET",
|
|
@@ -2260,6 +2885,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2260
2885
|
"required": true,
|
|
2261
2886
|
"type": "string",
|
|
2262
2887
|
"description": "End date (inclusive, YYYY-MM-DD)."
|
|
2888
|
+
},
|
|
2889
|
+
{
|
|
2890
|
+
"name": "If-None-Match",
|
|
2891
|
+
"in": "header",
|
|
2892
|
+
"required": false,
|
|
2893
|
+
"type": "string",
|
|
2894
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
2263
2895
|
}
|
|
2264
2896
|
],
|
|
2265
2897
|
"requestBodyType": "",
|
|
@@ -2294,6 +2926,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2294
2926
|
"required": true,
|
|
2295
2927
|
"type": "string",
|
|
2296
2928
|
"description": "End date (inclusive, YYYY-MM-DD)."
|
|
2929
|
+
},
|
|
2930
|
+
{
|
|
2931
|
+
"name": "If-None-Match",
|
|
2932
|
+
"in": "header",
|
|
2933
|
+
"required": false,
|
|
2934
|
+
"type": "string",
|
|
2935
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
2297
2936
|
}
|
|
2298
2937
|
],
|
|
2299
2938
|
"requestBodyType": "",
|
|
@@ -2328,6 +2967,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2328
2967
|
"required": false,
|
|
2329
2968
|
"type": "string",
|
|
2330
2969
|
"description": "Return entries strictly older than this timestamp (cursor / upper bound)."
|
|
2970
|
+
},
|
|
2971
|
+
{
|
|
2972
|
+
"name": "If-None-Match",
|
|
2973
|
+
"in": "header",
|
|
2974
|
+
"required": false,
|
|
2975
|
+
"type": "string",
|
|
2976
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
2331
2977
|
}
|
|
2332
2978
|
],
|
|
2333
2979
|
"requestBodyType": "",
|
|
@@ -2362,11 +3008,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2362
3008
|
"required": false,
|
|
2363
3009
|
"type": "string",
|
|
2364
3010
|
"description": "Opaque token for cursor-based pagination."
|
|
3011
|
+
},
|
|
3012
|
+
{
|
|
3013
|
+
"name": "If-None-Match",
|
|
3014
|
+
"in": "header",
|
|
3015
|
+
"required": false,
|
|
3016
|
+
"type": "string",
|
|
3017
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
2365
3018
|
}
|
|
2366
3019
|
],
|
|
2367
3020
|
"requestBodyType": "",
|
|
2368
3021
|
"requestBodyRequired": false,
|
|
2369
|
-
"responseType": "{ next_page_token?: string; webhooks: ({ created_at: string; description?: string; enabled: boolean; event_types?:
|
|
3022
|
+
"responseType": "{ next_page_token?: string; webhooks: ({ created_at: string; description?: string; enabled: boolean; event_types?: (\"query_blocked\" | \"budget_exhausted\" | \"kill_switch\" | \"masked\" | \"migration_flagged\" | \"approval_requested\" | \"anomaly_alert\" | \"canary_tripped\" | \"audit_checkpoint\" | \"webhook.test\")[]; format: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; id: string; project_id: string; updated_at: string; url: string })[] }",
|
|
2370
3023
|
"responseStatus": "200"
|
|
2371
3024
|
},
|
|
2372
3025
|
"createWebhookEndpoint": {
|
|
@@ -2391,9 +3044,9 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2391
3044
|
"description": "Client-generated key that makes a retry of this request safe. The first request carrying a given key executes normally and its response (status, content type and body) is stored for 24 hours; a later request with the same key returns that stored response without running the operation again, so a retry after a lost or timed-out response cannot create a second resource.\n\nReusing a key with a different request body returns `409 Conflict`: a key is a promise about one specific request, so a changed body is a client bug rather than a retry. Keys are scoped to the calling organization (or to the user, for account-scoped tokens), so one tenant can never read another's stored response.\n\nA `5xx`, `408` or `429` is never stored, because those describe a request that produced no settled answer and the next attempt with the same key must run for real. A `4xx` is stored: it is the server's settled answer about this exact request.\n\nUse a fresh UUID per logical operation. The PgBeam SDKs generate one per call and reuse it across their own automatic retries."
|
|
2392
3045
|
}
|
|
2393
3046
|
],
|
|
2394
|
-
"requestBodyType": "{ description?: string; enabled?: boolean; event_types?:
|
|
3047
|
+
"requestBodyType": "{ description?: string; enabled?: boolean; event_types?: (\"query_blocked\" | \"budget_exhausted\" | \"kill_switch\" | \"masked\" | \"migration_flagged\" | \"approval_requested\" | \"anomaly_alert\" | \"canary_tripped\" | \"audit_checkpoint\" | \"webhook.test\")[]; format?: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; secret?: string; url: string }",
|
|
2395
3048
|
"requestBodyRequired": true,
|
|
2396
|
-
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?:
|
|
3049
|
+
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?: (\"query_blocked\" | \"budget_exhausted\" | \"kill_switch\" | \"masked\" | \"migration_flagged\" | \"approval_requested\" | \"anomaly_alert\" | \"canary_tripped\" | \"audit_checkpoint\" | \"webhook.test\")[]; format: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; id: string; project_id: string; updated_at: string; url: string }",
|
|
2397
3050
|
"responseStatus": "201"
|
|
2398
3051
|
},
|
|
2399
3052
|
"getWebhookEndpoint": {
|
|
@@ -2416,11 +3069,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2416
3069
|
"required": true,
|
|
2417
3070
|
"type": "string",
|
|
2418
3071
|
"description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
|
|
3072
|
+
},
|
|
3073
|
+
{
|
|
3074
|
+
"name": "If-None-Match",
|
|
3075
|
+
"in": "header",
|
|
3076
|
+
"required": false,
|
|
3077
|
+
"type": "string",
|
|
3078
|
+
"description": "Entity tag the client already holds, taken from the `ETag` of an earlier response. When it still matches the current representation the server answers `304 Not Modified` with no body, so a poll that finds nothing changed costs a round trip rather than a transfer.\n\nA comma-separated list is accepted, and `*` matches any current representation."
|
|
2419
3079
|
}
|
|
2420
3080
|
],
|
|
2421
3081
|
"requestBodyType": "",
|
|
2422
3082
|
"requestBodyRequired": false,
|
|
2423
|
-
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?:
|
|
3083
|
+
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?: (\"query_blocked\" | \"budget_exhausted\" | \"kill_switch\" | \"masked\" | \"migration_flagged\" | \"approval_requested\" | \"anomaly_alert\" | \"canary_tripped\" | \"audit_checkpoint\" | \"webhook.test\")[]; format: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; id: string; project_id: string; updated_at: string; url: string }",
|
|
2424
3084
|
"responseStatus": "200"
|
|
2425
3085
|
},
|
|
2426
3086
|
"updateWebhookEndpoint": {
|
|
@@ -2443,11 +3103,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2443
3103
|
"required": true,
|
|
2444
3104
|
"type": "string",
|
|
2445
3105
|
"description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
|
|
3106
|
+
},
|
|
3107
|
+
{
|
|
3108
|
+
"name": "If-Match",
|
|
3109
|
+
"in": "header",
|
|
3110
|
+
"required": false,
|
|
3111
|
+
"type": "string",
|
|
3112
|
+
"description": "Entity tag the write is based on, taken from the `ETag` of the read that produced the values being sent. The write proceeds only if it still matches the current representation; otherwise it is refused with `412 Precondition Failed` and nothing is changed.\n\nThis is what makes a read-modify-write safe. Without it the last writer wins and a concurrent edit is silently discarded, which is the failure an agent is most likely to cause and least likely to notice. The `412` response carries the current `ETag`, so a caller can re-read, re-apply its change and retry.\n\nOmitting the header keeps the old unconditional behaviour. `*` matches any current representation, which asserts only that the resource exists."
|
|
2446
3113
|
}
|
|
2447
3114
|
],
|
|
2448
|
-
"requestBodyType": "{ description?: string; enabled?: boolean; event_types?:
|
|
3115
|
+
"requestBodyType": "{ description?: string; enabled?: boolean; event_types?: (\"query_blocked\" | \"budget_exhausted\" | \"kill_switch\" | \"masked\" | \"migration_flagged\" | \"approval_requested\" | \"anomaly_alert\" | \"canary_tripped\" | \"audit_checkpoint\" | \"webhook.test\")[]; format?: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; secret?: string; url: string }",
|
|
2449
3116
|
"requestBodyRequired": true,
|
|
2450
|
-
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?:
|
|
3117
|
+
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?: (\"query_blocked\" | \"budget_exhausted\" | \"kill_switch\" | \"masked\" | \"migration_flagged\" | \"approval_requested\" | \"anomaly_alert\" | \"canary_tripped\" | \"audit_checkpoint\" | \"webhook.test\")[]; format: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; id: string; project_id: string; updated_at: string; url: string }",
|
|
2451
3118
|
"responseStatus": "200"
|
|
2452
3119
|
},
|
|
2453
3120
|
"deleteWebhookEndpoint": {
|