pgbeam 0.4.10 → 0.4.11
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 +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +1 -1
- package/dist/{operations-map.gen-gco09oqg.cjs → operations-map.gen-iasufy3r.cjs} +94 -0
- package/dist/{operations-map.gen-d7lzb0ad.d.ts → operations-map.gen-j0pyh1mi.d.ts} +3355 -842
- package/dist/{operations-map.gen-dojer3ji.js → operations-map.gen-nws17nv5.js} +94 -0
- package/dist/operations.cjs +587 -13
- package/dist/operations.d.cts +1 -1
- package/dist/operations.d.mts +1 -1
- package/dist/operations.mjs +587 -13
- 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-nws17nv5.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,13 @@ 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": "If-None-Match",
|
|
504
|
+
"in": "header",
|
|
505
|
+
"required": false,
|
|
506
|
+
"type": "string",
|
|
507
|
+
"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
508
|
}
|
|
459
509
|
],
|
|
460
510
|
"requestBodyType": "",
|
|
@@ -558,6 +608,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
558
608
|
"required": false,
|
|
559
609
|
"type": "string",
|
|
560
610
|
"description": "Return entries strictly older than this timestamp (cursor / upper bound)."
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
"name": "If-None-Match",
|
|
614
|
+
"in": "header",
|
|
615
|
+
"required": false,
|
|
616
|
+
"type": "string",
|
|
617
|
+
"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
618
|
}
|
|
562
619
|
],
|
|
563
620
|
"requestBodyType": "",
|
|
@@ -592,6 +649,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
592
649
|
"required": false,
|
|
593
650
|
"type": "string",
|
|
594
651
|
"description": "Return entries strictly older than this timestamp (cursor / upper bound)."
|
|
652
|
+
},
|
|
653
|
+
{
|
|
654
|
+
"name": "If-None-Match",
|
|
655
|
+
"in": "header",
|
|
656
|
+
"required": false,
|
|
657
|
+
"type": "string",
|
|
658
|
+
"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
659
|
}
|
|
596
660
|
],
|
|
597
661
|
"requestBodyType": "",
|
|
@@ -599,13 +663,41 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
599
663
|
"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
664
|
"responseStatus": "200"
|
|
601
665
|
},
|
|
666
|
+
"executeBatch": {
|
|
667
|
+
"operationId": "executeBatch",
|
|
668
|
+
"method": "POST",
|
|
669
|
+
"path": "/v1/projects/{project_id}/batch",
|
|
670
|
+
"summary": "Apply many project operations in one request",
|
|
671
|
+
"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.",
|
|
672
|
+
"parameters": [
|
|
673
|
+
{
|
|
674
|
+
"name": "project_id",
|
|
675
|
+
"in": "path",
|
|
676
|
+
"required": true,
|
|
677
|
+
"type": "string",
|
|
678
|
+
"description": "Unique project identifier (prefixed, e.g. prj_xxx)."
|
|
679
|
+
}
|
|
680
|
+
],
|
|
681
|
+
"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\" })[] }",
|
|
682
|
+
"requestBodyRequired": true,
|
|
683
|
+
"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 } }",
|
|
684
|
+
"responseStatus": "200"
|
|
685
|
+
},
|
|
602
686
|
"listPlans": {
|
|
603
687
|
"operationId": "listPlans",
|
|
604
688
|
"method": "GET",
|
|
605
689
|
"path": "/v1/plans",
|
|
606
690
|
"summary": "List available plans",
|
|
607
691
|
"description": "Returns all available plan tiers with their limits and pricing.",
|
|
608
|
-
"parameters": [
|
|
692
|
+
"parameters": [
|
|
693
|
+
{
|
|
694
|
+
"name": "If-None-Match",
|
|
695
|
+
"in": "header",
|
|
696
|
+
"required": false,
|
|
697
|
+
"type": "string",
|
|
698
|
+
"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."
|
|
699
|
+
}
|
|
700
|
+
],
|
|
609
701
|
"requestBodyType": "",
|
|
610
702
|
"requestBodyRequired": false,
|
|
611
703
|
"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 +716,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
624
716
|
"required": true,
|
|
625
717
|
"type": "string",
|
|
626
718
|
"description": "Unique organization identifier."
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
"name": "If-None-Match",
|
|
722
|
+
"in": "header",
|
|
723
|
+
"required": false,
|
|
724
|
+
"type": "string",
|
|
725
|
+
"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
726
|
}
|
|
628
727
|
],
|
|
629
728
|
"requestBodyType": "",
|
|
@@ -644,6 +743,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
644
743
|
"required": true,
|
|
645
744
|
"type": "string",
|
|
646
745
|
"description": "Unique organization identifier."
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
"name": "If-None-Match",
|
|
749
|
+
"in": "header",
|
|
750
|
+
"required": false,
|
|
751
|
+
"type": "string",
|
|
752
|
+
"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
753
|
}
|
|
648
754
|
],
|
|
649
755
|
"requestBodyType": "",
|
|
@@ -725,6 +831,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
725
831
|
"required": false,
|
|
726
832
|
"type": "string",
|
|
727
833
|
"description": "Opaque token for cursor-based pagination."
|
|
834
|
+
},
|
|
835
|
+
{
|
|
836
|
+
"name": "If-None-Match",
|
|
837
|
+
"in": "header",
|
|
838
|
+
"required": false,
|
|
839
|
+
"type": "string",
|
|
840
|
+
"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
841
|
}
|
|
729
842
|
],
|
|
730
843
|
"requestBodyType": "",
|
|
@@ -793,6 +906,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
793
906
|
"required": false,
|
|
794
907
|
"type": "string",
|
|
795
908
|
"description": "Opaque token for cursor-based pagination."
|
|
909
|
+
},
|
|
910
|
+
{
|
|
911
|
+
"name": "If-None-Match",
|
|
912
|
+
"in": "header",
|
|
913
|
+
"required": false,
|
|
914
|
+
"type": "string",
|
|
915
|
+
"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
916
|
}
|
|
797
917
|
],
|
|
798
918
|
"requestBodyType": "",
|
|
@@ -861,6 +981,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
861
981
|
"required": false,
|
|
862
982
|
"type": "string",
|
|
863
983
|
"description": "Opaque token for cursor-based pagination."
|
|
984
|
+
},
|
|
985
|
+
{
|
|
986
|
+
"name": "If-None-Match",
|
|
987
|
+
"in": "header",
|
|
988
|
+
"required": false,
|
|
989
|
+
"type": "string",
|
|
990
|
+
"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
991
|
}
|
|
865
992
|
],
|
|
866
993
|
"requestBodyType": "",
|
|
@@ -915,6 +1042,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
915
1042
|
"required": true,
|
|
916
1043
|
"type": "string",
|
|
917
1044
|
"description": "Unique database identifier (prefixed, e.g. db_xxx)."
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"name": "If-None-Match",
|
|
1048
|
+
"in": "header",
|
|
1049
|
+
"required": false,
|
|
1050
|
+
"type": "string",
|
|
1051
|
+
"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
1052
|
}
|
|
919
1053
|
],
|
|
920
1054
|
"requestBodyType": "",
|
|
@@ -942,6 +1076,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
942
1076
|
"required": true,
|
|
943
1077
|
"type": "string",
|
|
944
1078
|
"description": "Unique database identifier (prefixed, e.g. db_xxx)."
|
|
1079
|
+
},
|
|
1080
|
+
{
|
|
1081
|
+
"name": "If-Match",
|
|
1082
|
+
"in": "header",
|
|
1083
|
+
"required": false,
|
|
1084
|
+
"type": "string",
|
|
1085
|
+
"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
1086
|
}
|
|
946
1087
|
],
|
|
947
1088
|
"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 +1191,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1050
1191
|
"required": true,
|
|
1051
1192
|
"type": "string",
|
|
1052
1193
|
"description": "Unique database identifier (prefixed, e.g. db_xxx)."
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
"name": "If-None-Match",
|
|
1197
|
+
"in": "header",
|
|
1198
|
+
"required": false,
|
|
1199
|
+
"type": "string",
|
|
1200
|
+
"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
1201
|
}
|
|
1054
1202
|
],
|
|
1055
1203
|
"requestBodyType": "",
|
|
@@ -1057,6 +1205,50 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1057
1205
|
"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
1206
|
"responseStatus": "200"
|
|
1059
1207
|
},
|
|
1208
|
+
"getDemo": {
|
|
1209
|
+
"operationId": "getDemo",
|
|
1210
|
+
"method": "GET",
|
|
1211
|
+
"path": "/v1/demo",
|
|
1212
|
+
"summary": "Describe the demo sandbox",
|
|
1213
|
+
"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.",
|
|
1214
|
+
"parameters": [],
|
|
1215
|
+
"requestBodyType": "",
|
|
1216
|
+
"requestBodyRequired": false,
|
|
1217
|
+
"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 })[] }",
|
|
1218
|
+
"responseStatus": "200"
|
|
1219
|
+
},
|
|
1220
|
+
"createDemoCredential": {
|
|
1221
|
+
"operationId": "createDemoCredential",
|
|
1222
|
+
"method": "POST",
|
|
1223
|
+
"path": "/v1/demo/credentials",
|
|
1224
|
+
"summary": "Issue a demo credential",
|
|
1225
|
+
"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.",
|
|
1226
|
+
"parameters": [],
|
|
1227
|
+
"requestBodyType": "{ label?: string; payment_proof?: string; tier?: \"free\" | \"extended\" }",
|
|
1228
|
+
"requestBodyRequired": false,
|
|
1229
|
+
"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 })[] }",
|
|
1230
|
+
"responseStatus": "201"
|
|
1231
|
+
},
|
|
1232
|
+
"releaseDemoCredential": {
|
|
1233
|
+
"operationId": "releaseDemoCredential",
|
|
1234
|
+
"method": "POST",
|
|
1235
|
+
"path": "/v1/demo/credentials/{session_id}/release",
|
|
1236
|
+
"summary": "Release a demo credential",
|
|
1237
|
+
"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.",
|
|
1238
|
+
"parameters": [
|
|
1239
|
+
{
|
|
1240
|
+
"name": "session_id",
|
|
1241
|
+
"in": "path",
|
|
1242
|
+
"required": true,
|
|
1243
|
+
"type": "string",
|
|
1244
|
+
"description": "The demo session to release, as returned when it was issued."
|
|
1245
|
+
}
|
|
1246
|
+
],
|
|
1247
|
+
"requestBodyType": "{ mcp_token: string }",
|
|
1248
|
+
"requestBodyRequired": true,
|
|
1249
|
+
"responseType": "{ live_sessions: number; released: boolean; session_id: string }",
|
|
1250
|
+
"responseStatus": "200"
|
|
1251
|
+
},
|
|
1060
1252
|
"listCustomDomains": {
|
|
1061
1253
|
"operationId": "listCustomDomains",
|
|
1062
1254
|
"method": "GET",
|
|
@@ -1084,6 +1276,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1084
1276
|
"required": false,
|
|
1085
1277
|
"type": "string",
|
|
1086
1278
|
"description": "Opaque token for cursor-based pagination."
|
|
1279
|
+
},
|
|
1280
|
+
{
|
|
1281
|
+
"name": "If-None-Match",
|
|
1282
|
+
"in": "header",
|
|
1283
|
+
"required": false,
|
|
1284
|
+
"type": "string",
|
|
1285
|
+
"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
1286
|
}
|
|
1088
1287
|
],
|
|
1089
1288
|
"requestBodyType": "",
|
|
@@ -1178,7 +1377,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1178
1377
|
"path": "/v1/health",
|
|
1179
1378
|
"summary": "Health check",
|
|
1180
1379
|
"description": "Returns the health status of the API server.",
|
|
1181
|
-
"parameters": [
|
|
1380
|
+
"parameters": [
|
|
1381
|
+
{
|
|
1382
|
+
"name": "If-None-Match",
|
|
1383
|
+
"in": "header",
|
|
1384
|
+
"required": false,
|
|
1385
|
+
"type": "string",
|
|
1386
|
+
"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."
|
|
1387
|
+
}
|
|
1388
|
+
],
|
|
1182
1389
|
"requestBodyType": "",
|
|
1183
1390
|
"requestBodyRequired": false,
|
|
1184
1391
|
"responseType": "{ image_sha: string; status: \"ok\" | \"degraded\"; timestamp?: string; version: string }",
|
|
@@ -1211,6 +1418,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1211
1418
|
"required": false,
|
|
1212
1419
|
"type": "string",
|
|
1213
1420
|
"description": "Opaque token for cursor-based pagination."
|
|
1421
|
+
},
|
|
1422
|
+
{
|
|
1423
|
+
"name": "If-None-Match",
|
|
1424
|
+
"in": "header",
|
|
1425
|
+
"required": false,
|
|
1426
|
+
"type": "string",
|
|
1427
|
+
"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
1428
|
}
|
|
1215
1429
|
],
|
|
1216
1430
|
"requestBodyType": "",
|
|
@@ -1265,6 +1479,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1265
1479
|
"required": true,
|
|
1266
1480
|
"type": "string",
|
|
1267
1481
|
"description": "Unique honeytoken identifier (prefixed, e.g. hnt_xxx)."
|
|
1482
|
+
},
|
|
1483
|
+
{
|
|
1484
|
+
"name": "If-None-Match",
|
|
1485
|
+
"in": "header",
|
|
1486
|
+
"required": false,
|
|
1487
|
+
"type": "string",
|
|
1488
|
+
"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
1489
|
}
|
|
1269
1490
|
],
|
|
1270
1491
|
"requestBodyType": "",
|
|
@@ -1292,6 +1513,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1292
1513
|
"required": true,
|
|
1293
1514
|
"type": "string",
|
|
1294
1515
|
"description": "Unique honeytoken identifier (prefixed, e.g. hnt_xxx)."
|
|
1516
|
+
},
|
|
1517
|
+
{
|
|
1518
|
+
"name": "If-Match",
|
|
1519
|
+
"in": "header",
|
|
1520
|
+
"required": false,
|
|
1521
|
+
"type": "string",
|
|
1522
|
+
"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
1523
|
}
|
|
1296
1524
|
],
|
|
1297
1525
|
"requestBodyType": "{ action: \"audit_only\" | \"kill\"; relation_name: string; schema_name?: string }",
|
|
@@ -1353,6 +1581,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1353
1581
|
"required": false,
|
|
1354
1582
|
"type": "number",
|
|
1355
1583
|
"description": "Maximum number of top queries to return (1-100)."
|
|
1584
|
+
},
|
|
1585
|
+
{
|
|
1586
|
+
"name": "If-None-Match",
|
|
1587
|
+
"in": "header",
|
|
1588
|
+
"required": false,
|
|
1589
|
+
"type": "string",
|
|
1590
|
+
"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
1591
|
}
|
|
1357
1592
|
],
|
|
1358
1593
|
"requestBodyType": "",
|
|
@@ -1360,6 +1595,196 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1360
1595
|
"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
1596
|
"responseStatus": "200"
|
|
1362
1597
|
},
|
|
1598
|
+
"listOrgMembers": {
|
|
1599
|
+
"operationId": "listOrgMembers",
|
|
1600
|
+
"method": "GET",
|
|
1601
|
+
"path": "/v1/organizations/{org_id}/members",
|
|
1602
|
+
"summary": "List organization members",
|
|
1603
|
+
"description": "Lists the people who belong to the organization, and their roles.",
|
|
1604
|
+
"parameters": [
|
|
1605
|
+
{
|
|
1606
|
+
"name": "org_id",
|
|
1607
|
+
"in": "path",
|
|
1608
|
+
"required": true,
|
|
1609
|
+
"type": "string",
|
|
1610
|
+
"description": "Unique organization identifier."
|
|
1611
|
+
},
|
|
1612
|
+
{
|
|
1613
|
+
"name": "page_size",
|
|
1614
|
+
"in": "query",
|
|
1615
|
+
"required": false,
|
|
1616
|
+
"type": "number",
|
|
1617
|
+
"description": "Maximum number of items to return (1-100, default 20)."
|
|
1618
|
+
},
|
|
1619
|
+
{
|
|
1620
|
+
"name": "page_token",
|
|
1621
|
+
"in": "query",
|
|
1622
|
+
"required": false,
|
|
1623
|
+
"type": "string",
|
|
1624
|
+
"description": "Opaque token for cursor-based pagination."
|
|
1625
|
+
},
|
|
1626
|
+
{
|
|
1627
|
+
"name": "If-None-Match",
|
|
1628
|
+
"in": "header",
|
|
1629
|
+
"required": false,
|
|
1630
|
+
"type": "string",
|
|
1631
|
+
"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."
|
|
1632
|
+
}
|
|
1633
|
+
],
|
|
1634
|
+
"requestBodyType": "",
|
|
1635
|
+
"requestBodyRequired": false,
|
|
1636
|
+
"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 }",
|
|
1637
|
+
"responseStatus": "200"
|
|
1638
|
+
},
|
|
1639
|
+
"updateOrgMemberRole": {
|
|
1640
|
+
"operationId": "updateOrgMemberRole",
|
|
1641
|
+
"method": "PATCH",
|
|
1642
|
+
"path": "/v1/organizations/{org_id}/members/{member_id}",
|
|
1643
|
+
"summary": "Change a member's role",
|
|
1644
|
+
"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.",
|
|
1645
|
+
"parameters": [
|
|
1646
|
+
{
|
|
1647
|
+
"name": "org_id",
|
|
1648
|
+
"in": "path",
|
|
1649
|
+
"required": true,
|
|
1650
|
+
"type": "string",
|
|
1651
|
+
"description": "Unique organization identifier."
|
|
1652
|
+
},
|
|
1653
|
+
{
|
|
1654
|
+
"name": "member_id",
|
|
1655
|
+
"in": "path",
|
|
1656
|
+
"required": true,
|
|
1657
|
+
"type": "string",
|
|
1658
|
+
"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."
|
|
1659
|
+
}
|
|
1660
|
+
],
|
|
1661
|
+
"requestBodyType": "{ role: \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\" }",
|
|
1662
|
+
"requestBodyRequired": true,
|
|
1663
|
+
"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 }",
|
|
1664
|
+
"responseStatus": "200"
|
|
1665
|
+
},
|
|
1666
|
+
"removeOrgMember": {
|
|
1667
|
+
"operationId": "removeOrgMember",
|
|
1668
|
+
"method": "DELETE",
|
|
1669
|
+
"path": "/v1/organizations/{org_id}/members/{member_id}",
|
|
1670
|
+
"summary": "Remove a member",
|
|
1671
|
+
"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.",
|
|
1672
|
+
"parameters": [
|
|
1673
|
+
{
|
|
1674
|
+
"name": "org_id",
|
|
1675
|
+
"in": "path",
|
|
1676
|
+
"required": true,
|
|
1677
|
+
"type": "string",
|
|
1678
|
+
"description": "Unique organization identifier."
|
|
1679
|
+
},
|
|
1680
|
+
{
|
|
1681
|
+
"name": "member_id",
|
|
1682
|
+
"in": "path",
|
|
1683
|
+
"required": true,
|
|
1684
|
+
"type": "string",
|
|
1685
|
+
"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."
|
|
1686
|
+
}
|
|
1687
|
+
],
|
|
1688
|
+
"requestBodyType": "",
|
|
1689
|
+
"requestBodyRequired": false,
|
|
1690
|
+
"responseType": "",
|
|
1691
|
+
"responseStatus": "204"
|
|
1692
|
+
},
|
|
1693
|
+
"listOrgInvitations": {
|
|
1694
|
+
"operationId": "listOrgInvitations",
|
|
1695
|
+
"method": "GET",
|
|
1696
|
+
"path": "/v1/organizations/{org_id}/invitations",
|
|
1697
|
+
"summary": "List invitations",
|
|
1698
|
+
"description": "Lists invitations to join the organization and where each has got to.",
|
|
1699
|
+
"parameters": [
|
|
1700
|
+
{
|
|
1701
|
+
"name": "org_id",
|
|
1702
|
+
"in": "path",
|
|
1703
|
+
"required": true,
|
|
1704
|
+
"type": "string",
|
|
1705
|
+
"description": "Unique organization identifier."
|
|
1706
|
+
},
|
|
1707
|
+
{
|
|
1708
|
+
"name": "status",
|
|
1709
|
+
"in": "query",
|
|
1710
|
+
"required": false,
|
|
1711
|
+
"type": "\"pending\" | \"accepted\" | \"rejected\" | \"canceled\"",
|
|
1712
|
+
"description": "Filter to a single status. Omit to list every invitation."
|
|
1713
|
+
},
|
|
1714
|
+
{
|
|
1715
|
+
"name": "page_size",
|
|
1716
|
+
"in": "query",
|
|
1717
|
+
"required": false,
|
|
1718
|
+
"type": "number",
|
|
1719
|
+
"description": "Maximum number of items to return (1-100, default 20)."
|
|
1720
|
+
},
|
|
1721
|
+
{
|
|
1722
|
+
"name": "page_token",
|
|
1723
|
+
"in": "query",
|
|
1724
|
+
"required": false,
|
|
1725
|
+
"type": "string",
|
|
1726
|
+
"description": "Opaque token for cursor-based pagination."
|
|
1727
|
+
},
|
|
1728
|
+
{
|
|
1729
|
+
"name": "If-None-Match",
|
|
1730
|
+
"in": "header",
|
|
1731
|
+
"required": false,
|
|
1732
|
+
"type": "string",
|
|
1733
|
+
"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."
|
|
1734
|
+
}
|
|
1735
|
+
],
|
|
1736
|
+
"requestBodyType": "",
|
|
1737
|
+
"requestBodyRequired": false,
|
|
1738
|
+
"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 }",
|
|
1739
|
+
"responseStatus": "200"
|
|
1740
|
+
},
|
|
1741
|
+
"createOrgInvitation": {
|
|
1742
|
+
"operationId": "createOrgInvitation",
|
|
1743
|
+
"method": "POST",
|
|
1744
|
+
"path": "/v1/organizations/{org_id}/invitations",
|
|
1745
|
+
"summary": "Invite someone to the organization",
|
|
1746
|
+
"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.",
|
|
1747
|
+
"parameters": [
|
|
1748
|
+
{
|
|
1749
|
+
"name": "org_id",
|
|
1750
|
+
"in": "path",
|
|
1751
|
+
"required": true,
|
|
1752
|
+
"type": "string",
|
|
1753
|
+
"description": "Unique organization identifier."
|
|
1754
|
+
}
|
|
1755
|
+
],
|
|
1756
|
+
"requestBodyType": "{ email: string; role?: \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\" }",
|
|
1757
|
+
"requestBodyRequired": true,
|
|
1758
|
+
"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\" }",
|
|
1759
|
+
"responseStatus": "201"
|
|
1760
|
+
},
|
|
1761
|
+
"revokeOrgInvitation": {
|
|
1762
|
+
"operationId": "revokeOrgInvitation",
|
|
1763
|
+
"method": "DELETE",
|
|
1764
|
+
"path": "/v1/organizations/{org_id}/invitations/{invitation_id}",
|
|
1765
|
+
"summary": "Revoke an invitation",
|
|
1766
|
+
"description": "Cancels a pending invitation so it can no longer be accepted.",
|
|
1767
|
+
"parameters": [
|
|
1768
|
+
{
|
|
1769
|
+
"name": "org_id",
|
|
1770
|
+
"in": "path",
|
|
1771
|
+
"required": true,
|
|
1772
|
+
"type": "string",
|
|
1773
|
+
"description": "Unique organization identifier."
|
|
1774
|
+
},
|
|
1775
|
+
{
|
|
1776
|
+
"name": "invitation_id",
|
|
1777
|
+
"in": "path",
|
|
1778
|
+
"required": true,
|
|
1779
|
+
"type": "string",
|
|
1780
|
+
"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`."
|
|
1781
|
+
}
|
|
1782
|
+
],
|
|
1783
|
+
"requestBodyType": "",
|
|
1784
|
+
"requestBodyRequired": false,
|
|
1785
|
+
"responseType": "",
|
|
1786
|
+
"responseStatus": "204"
|
|
1787
|
+
},
|
|
1363
1788
|
"lintMigration": {
|
|
1364
1789
|
"operationId": "lintMigration",
|
|
1365
1790
|
"method": "POST",
|
|
@@ -1393,6 +1818,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1393
1818
|
"required": true,
|
|
1394
1819
|
"type": "string",
|
|
1395
1820
|
"description": "Unique organization identifier."
|
|
1821
|
+
},
|
|
1822
|
+
{
|
|
1823
|
+
"name": "If-None-Match",
|
|
1824
|
+
"in": "header",
|
|
1825
|
+
"required": false,
|
|
1826
|
+
"type": "string",
|
|
1827
|
+
"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
1828
|
}
|
|
1397
1829
|
],
|
|
1398
1830
|
"requestBodyType": "",
|
|
@@ -1426,7 +1858,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1426
1858
|
"path": "/v1/organizations",
|
|
1427
1859
|
"summary": "List organizations",
|
|
1428
1860
|
"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": [
|
|
1861
|
+
"parameters": [
|
|
1862
|
+
{
|
|
1863
|
+
"name": "If-None-Match",
|
|
1864
|
+
"in": "header",
|
|
1865
|
+
"required": false,
|
|
1866
|
+
"type": "string",
|
|
1867
|
+
"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."
|
|
1868
|
+
}
|
|
1869
|
+
],
|
|
1430
1870
|
"requestBodyType": "",
|
|
1431
1871
|
"requestBodyRequired": false,
|
|
1432
1872
|
"responseType": "{ organizations: ({ id: string; name: string; role?: string; slug: string })[] }",
|
|
@@ -1459,6 +1899,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1459
1899
|
"required": false,
|
|
1460
1900
|
"type": "string",
|
|
1461
1901
|
"description": "Opaque token for cursor-based pagination."
|
|
1902
|
+
},
|
|
1903
|
+
{
|
|
1904
|
+
"name": "If-None-Match",
|
|
1905
|
+
"in": "header",
|
|
1906
|
+
"required": false,
|
|
1907
|
+
"type": "string",
|
|
1908
|
+
"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
1909
|
}
|
|
1463
1910
|
],
|
|
1464
1911
|
"requestBodyType": "",
|
|
@@ -1513,6 +1960,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1513
1960
|
"required": true,
|
|
1514
1961
|
"type": "string",
|
|
1515
1962
|
"description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
|
|
1963
|
+
},
|
|
1964
|
+
{
|
|
1965
|
+
"name": "If-None-Match",
|
|
1966
|
+
"in": "header",
|
|
1967
|
+
"required": false,
|
|
1968
|
+
"type": "string",
|
|
1969
|
+
"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
1970
|
}
|
|
1517
1971
|
],
|
|
1518
1972
|
"requestBodyType": "",
|
|
@@ -1540,6 +1994,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1540
1994
|
"required": true,
|
|
1541
1995
|
"type": "string",
|
|
1542
1996
|
"description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
|
|
1997
|
+
},
|
|
1998
|
+
{
|
|
1999
|
+
"name": "If-Match",
|
|
2000
|
+
"in": "header",
|
|
2001
|
+
"required": false,
|
|
2002
|
+
"type": "string",
|
|
2003
|
+
"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
2004
|
}
|
|
1544
2005
|
],
|
|
1545
2006
|
"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 +2109,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1648
2109
|
"required": false,
|
|
1649
2110
|
"type": "\"name\" | \"created_at\" | \"active_connections\"",
|
|
1650
2111
|
"description": "Sort field for projects list."
|
|
2112
|
+
},
|
|
2113
|
+
{
|
|
2114
|
+
"name": "If-None-Match",
|
|
2115
|
+
"in": "header",
|
|
2116
|
+
"required": false,
|
|
2117
|
+
"type": "string",
|
|
2118
|
+
"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
2119
|
}
|
|
1652
2120
|
],
|
|
1653
2121
|
"requestBodyType": "",
|
|
@@ -1688,6 +2156,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1688
2156
|
"required": true,
|
|
1689
2157
|
"type": "string",
|
|
1690
2158
|
"description": "Unique project identifier (prefixed, e.g. prj_xxx)."
|
|
2159
|
+
},
|
|
2160
|
+
{
|
|
2161
|
+
"name": "If-None-Match",
|
|
2162
|
+
"in": "header",
|
|
2163
|
+
"required": false,
|
|
2164
|
+
"type": "string",
|
|
2165
|
+
"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
2166
|
}
|
|
1692
2167
|
],
|
|
1693
2168
|
"requestBodyType": "",
|
|
@@ -1708,6 +2183,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1708
2183
|
"required": true,
|
|
1709
2184
|
"type": "string",
|
|
1710
2185
|
"description": "Unique project identifier (prefixed, e.g. prj_xxx)."
|
|
2186
|
+
},
|
|
2187
|
+
{
|
|
2188
|
+
"name": "If-Match",
|
|
2189
|
+
"in": "header",
|
|
2190
|
+
"required": false,
|
|
2191
|
+
"type": "string",
|
|
2192
|
+
"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
2193
|
}
|
|
1712
2194
|
],
|
|
1713
2195
|
"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 +2244,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1762
2244
|
"required": false,
|
|
1763
2245
|
"type": "string",
|
|
1764
2246
|
"description": "Filter metrics by region code."
|
|
2247
|
+
},
|
|
2248
|
+
{
|
|
2249
|
+
"name": "If-None-Match",
|
|
2250
|
+
"in": "header",
|
|
2251
|
+
"required": false,
|
|
2252
|
+
"type": "string",
|
|
2253
|
+
"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
2254
|
}
|
|
1766
2255
|
],
|
|
1767
2256
|
"requestBodyType": "",
|
|
@@ -1775,7 +2264,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1775
2264
|
"path": "/v1/regions",
|
|
1776
2265
|
"summary": "List available regions",
|
|
1777
2266
|
"description": "Returns all active data plane regions.",
|
|
1778
|
-
"parameters": [
|
|
2267
|
+
"parameters": [
|
|
2268
|
+
{
|
|
2269
|
+
"name": "If-None-Match",
|
|
2270
|
+
"in": "header",
|
|
2271
|
+
"required": false,
|
|
2272
|
+
"type": "string",
|
|
2273
|
+
"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."
|
|
2274
|
+
}
|
|
2275
|
+
],
|
|
1779
2276
|
"requestBodyType": "",
|
|
1780
2277
|
"requestBodyRequired": false,
|
|
1781
2278
|
"responseType": "{ regions: ({ available: boolean; continent?: string; country?: string; id: string; name: string; provider: \"aws\" | \"azure\" | \"gcp\"; status: \"active\" | \"draining\" | \"inactive\" })[] }",
|
|
@@ -1794,6 +2291,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1794
2291
|
"required": true,
|
|
1795
2292
|
"type": "string",
|
|
1796
2293
|
"description": "Unique database identifier (prefixed, e.g. db_xxx)."
|
|
2294
|
+
},
|
|
2295
|
+
{
|
|
2296
|
+
"name": "If-None-Match",
|
|
2297
|
+
"in": "header",
|
|
2298
|
+
"required": false,
|
|
2299
|
+
"type": "string",
|
|
2300
|
+
"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
2301
|
}
|
|
1798
2302
|
],
|
|
1799
2303
|
"requestBodyType": "",
|
|
@@ -1882,6 +2386,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1882
2386
|
"required": false,
|
|
1883
2387
|
"type": "string",
|
|
1884
2388
|
"description": "Opaque token for cursor-based pagination."
|
|
2389
|
+
},
|
|
2390
|
+
{
|
|
2391
|
+
"name": "If-None-Match",
|
|
2392
|
+
"in": "header",
|
|
2393
|
+
"required": false,
|
|
2394
|
+
"type": "string",
|
|
2395
|
+
"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
2396
|
}
|
|
1886
2397
|
],
|
|
1887
2398
|
"requestBodyType": "",
|
|
@@ -1963,6 +2474,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
1963
2474
|
"required": true,
|
|
1964
2475
|
"type": "string",
|
|
1965
2476
|
"description": "Unique organization identifier."
|
|
2477
|
+
},
|
|
2478
|
+
{
|
|
2479
|
+
"name": "If-None-Match",
|
|
2480
|
+
"in": "header",
|
|
2481
|
+
"required": false,
|
|
2482
|
+
"type": "string",
|
|
2483
|
+
"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
2484
|
}
|
|
1967
2485
|
],
|
|
1968
2486
|
"requestBodyType": "",
|
|
@@ -2099,6 +2617,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2099
2617
|
"required": false,
|
|
2100
2618
|
"type": "number",
|
|
2101
2619
|
"description": "Page number (1-based, default 1)."
|
|
2620
|
+
},
|
|
2621
|
+
{
|
|
2622
|
+
"name": "If-None-Match",
|
|
2623
|
+
"in": "header",
|
|
2624
|
+
"required": false,
|
|
2625
|
+
"type": "string",
|
|
2626
|
+
"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
2627
|
}
|
|
2103
2628
|
],
|
|
2104
2629
|
"requestBodyType": "",
|
|
@@ -2153,6 +2678,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2153
2678
|
"required": true,
|
|
2154
2679
|
"type": "string",
|
|
2155
2680
|
"description": "Unique support case identifier (prefixed, e.g. sc_xxx)."
|
|
2681
|
+
},
|
|
2682
|
+
{
|
|
2683
|
+
"name": "If-None-Match",
|
|
2684
|
+
"in": "header",
|
|
2685
|
+
"required": false,
|
|
2686
|
+
"type": "string",
|
|
2687
|
+
"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
2688
|
}
|
|
2157
2689
|
],
|
|
2158
2690
|
"requestBodyType": "",
|
|
@@ -2260,6 +2792,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2260
2792
|
"required": true,
|
|
2261
2793
|
"type": "string",
|
|
2262
2794
|
"description": "End date (inclusive, YYYY-MM-DD)."
|
|
2795
|
+
},
|
|
2796
|
+
{
|
|
2797
|
+
"name": "If-None-Match",
|
|
2798
|
+
"in": "header",
|
|
2799
|
+
"required": false,
|
|
2800
|
+
"type": "string",
|
|
2801
|
+
"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
2802
|
}
|
|
2264
2803
|
],
|
|
2265
2804
|
"requestBodyType": "",
|
|
@@ -2294,6 +2833,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2294
2833
|
"required": true,
|
|
2295
2834
|
"type": "string",
|
|
2296
2835
|
"description": "End date (inclusive, YYYY-MM-DD)."
|
|
2836
|
+
},
|
|
2837
|
+
{
|
|
2838
|
+
"name": "If-None-Match",
|
|
2839
|
+
"in": "header",
|
|
2840
|
+
"required": false,
|
|
2841
|
+
"type": "string",
|
|
2842
|
+
"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
2843
|
}
|
|
2298
2844
|
],
|
|
2299
2845
|
"requestBodyType": "",
|
|
@@ -2328,6 +2874,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2328
2874
|
"required": false,
|
|
2329
2875
|
"type": "string",
|
|
2330
2876
|
"description": "Return entries strictly older than this timestamp (cursor / upper bound)."
|
|
2877
|
+
},
|
|
2878
|
+
{
|
|
2879
|
+
"name": "If-None-Match",
|
|
2880
|
+
"in": "header",
|
|
2881
|
+
"required": false,
|
|
2882
|
+
"type": "string",
|
|
2883
|
+
"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
2884
|
}
|
|
2332
2885
|
],
|
|
2333
2886
|
"requestBodyType": "",
|
|
@@ -2362,11 +2915,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2362
2915
|
"required": false,
|
|
2363
2916
|
"type": "string",
|
|
2364
2917
|
"description": "Opaque token for cursor-based pagination."
|
|
2918
|
+
},
|
|
2919
|
+
{
|
|
2920
|
+
"name": "If-None-Match",
|
|
2921
|
+
"in": "header",
|
|
2922
|
+
"required": false,
|
|
2923
|
+
"type": "string",
|
|
2924
|
+
"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
2925
|
}
|
|
2366
2926
|
],
|
|
2367
2927
|
"requestBodyType": "",
|
|
2368
2928
|
"requestBodyRequired": false,
|
|
2369
|
-
"responseType": "{ next_page_token?: string; webhooks: ({ created_at: string; description?: string; enabled: boolean; event_types?:
|
|
2929
|
+
"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
2930
|
"responseStatus": "200"
|
|
2371
2931
|
},
|
|
2372
2932
|
"createWebhookEndpoint": {
|
|
@@ -2391,9 +2951,9 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2391
2951
|
"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
2952
|
}
|
|
2393
2953
|
],
|
|
2394
|
-
"requestBodyType": "{ description?: string; enabled?: boolean; event_types?:
|
|
2954
|
+
"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
2955
|
"requestBodyRequired": true,
|
|
2396
|
-
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?:
|
|
2956
|
+
"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
2957
|
"responseStatus": "201"
|
|
2398
2958
|
},
|
|
2399
2959
|
"getWebhookEndpoint": {
|
|
@@ -2416,11 +2976,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2416
2976
|
"required": true,
|
|
2417
2977
|
"type": "string",
|
|
2418
2978
|
"description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
|
|
2979
|
+
},
|
|
2980
|
+
{
|
|
2981
|
+
"name": "If-None-Match",
|
|
2982
|
+
"in": "header",
|
|
2983
|
+
"required": false,
|
|
2984
|
+
"type": "string",
|
|
2985
|
+
"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
2986
|
}
|
|
2420
2987
|
],
|
|
2421
2988
|
"requestBodyType": "",
|
|
2422
2989
|
"requestBodyRequired": false,
|
|
2423
|
-
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?:
|
|
2990
|
+
"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
2991
|
"responseStatus": "200"
|
|
2425
2992
|
},
|
|
2426
2993
|
"updateWebhookEndpoint": {
|
|
@@ -2443,11 +3010,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
|
|
|
2443
3010
|
"required": true,
|
|
2444
3011
|
"type": "string",
|
|
2445
3012
|
"description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
|
|
3013
|
+
},
|
|
3014
|
+
{
|
|
3015
|
+
"name": "If-Match",
|
|
3016
|
+
"in": "header",
|
|
3017
|
+
"required": false,
|
|
3018
|
+
"type": "string",
|
|
3019
|
+
"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
3020
|
}
|
|
2447
3021
|
],
|
|
2448
|
-
"requestBodyType": "{ description?: string; enabled?: boolean; event_types?:
|
|
3022
|
+
"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
3023
|
"requestBodyRequired": true,
|
|
2450
|
-
"responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?:
|
|
3024
|
+
"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
3025
|
"responseStatus": "200"
|
|
2452
3026
|
},
|
|
2453
3027
|
"deleteWebhookEndpoint": {
|