pgbeam 0.4.9 → 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.
@@ -1,4 +1,4 @@
1
- export { o as operationsByPath, a as operationsByTag } from './operations-map.gen-dojer3ji.js';
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": "",
@@ -67,6 +82,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
67
82
  "required": true,
68
83
  "type": "string",
69
84
  "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
85
+ },
86
+ {
87
+ "name": "Idempotency-Key",
88
+ "in": "header",
89
+ "required": false,
90
+ "type": "string",
91
+ "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."
70
92
  }
71
93
  ],
72
94
  "requestBodyType": "{ expires_at?: string; name: string; policy_profile_id: string; principal_type?: \"agent\" | \"human\" }",
@@ -94,6 +116,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
94
116
  "required": true,
95
117
  "type": "string",
96
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."
97
126
  }
98
127
  ],
99
128
  "requestBodyType": "",
@@ -106,7 +135,7 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
106
135
  "method": "PATCH",
107
136
  "path": "/v1/projects/{project_id}/agents/{agent_id}",
108
137
  "summary": "Enable or disable an agent credential",
109
- "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.",
110
139
  "parameters": [
111
140
  {
112
141
  "name": "project_id",
@@ -121,6 +150,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
121
150
  "required": true,
122
151
  "type": "string",
123
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."
124
160
  }
125
161
  ],
126
162
  "requestBodyType": "{ status: \"active\" | \"disabled\" }",
@@ -175,6 +211,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
175
211
  "required": true,
176
212
  "type": "string",
177
213
  "description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
214
+ },
215
+ {
216
+ "name": "Idempotency-Key",
217
+ "in": "header",
218
+ "required": false,
219
+ "type": "string",
220
+ "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."
178
221
  }
179
222
  ],
180
223
  "requestBodyType": "",
@@ -243,6 +286,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
243
286
  "required": false,
244
287
  "type": "string",
245
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."
246
296
  }
247
297
  ],
248
298
  "requestBodyType": "",
@@ -311,6 +361,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
311
361
  "required": false,
312
362
  "type": "string",
313
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."
314
371
  }
315
372
  ],
316
373
  "requestBodyType": "",
@@ -441,6 +498,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
441
498
  "required": false,
442
499
  "type": "number",
443
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."
444
508
  }
445
509
  ],
446
510
  "requestBodyType": "",
@@ -544,6 +608,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
544
608
  "required": false,
545
609
  "type": "string",
546
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."
547
618
  }
548
619
  ],
549
620
  "requestBodyType": "",
@@ -578,6 +649,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
578
649
  "required": false,
579
650
  "type": "string",
580
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."
581
659
  }
582
660
  ],
583
661
  "requestBodyType": "",
@@ -585,13 +663,41 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
585
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 }",
586
664
  "responseStatus": "200"
587
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
+ },
588
686
  "listPlans": {
589
687
  "operationId": "listPlans",
590
688
  "method": "GET",
591
689
  "path": "/v1/plans",
592
690
  "summary": "List available plans",
593
691
  "description": "Returns all available plan tiers with their limits and pricing.",
594
- "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
+ ],
595
701
  "requestBodyType": "",
596
702
  "requestBodyRequired": false,
597
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 })[] }",
@@ -610,6 +716,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
610
716
  "required": true,
611
717
  "type": "string",
612
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."
613
726
  }
614
727
  ],
615
728
  "requestBodyType": "",
@@ -630,6 +743,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
630
743
  "required": true,
631
744
  "type": "string",
632
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."
633
753
  }
634
754
  ],
635
755
  "requestBodyType": "",
@@ -711,6 +831,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
711
831
  "required": false,
712
832
  "type": "string",
713
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."
714
841
  }
715
842
  ],
716
843
  "requestBodyType": "",
@@ -779,6 +906,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
779
906
  "required": false,
780
907
  "type": "string",
781
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."
782
916
  }
783
917
  ],
784
918
  "requestBodyType": "",
@@ -847,6 +981,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
847
981
  "required": false,
848
982
  "type": "string",
849
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."
850
991
  }
851
992
  ],
852
993
  "requestBodyType": "",
@@ -867,6 +1008,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
867
1008
  "required": true,
868
1009
  "type": "string",
869
1010
  "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1011
+ },
1012
+ {
1013
+ "name": "Idempotency-Key",
1014
+ "in": "header",
1015
+ "required": false,
1016
+ "type": "string",
1017
+ "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."
870
1018
  }
871
1019
  ],
872
1020
  "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 }",
@@ -894,6 +1042,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
894
1042
  "required": true,
895
1043
  "type": "string",
896
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."
897
1052
  }
898
1053
  ],
899
1054
  "requestBodyType": "",
@@ -921,6 +1076,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
921
1076
  "required": true,
922
1077
  "type": "string",
923
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."
924
1086
  }
925
1087
  ],
926
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 }",
@@ -1029,6 +1191,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1029
1191
  "required": true,
1030
1192
  "type": "string",
1031
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."
1032
1201
  }
1033
1202
  ],
1034
1203
  "requestBodyType": "",
@@ -1036,6 +1205,50 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1036
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 }",
1037
1206
  "responseStatus": "200"
1038
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
+ },
1039
1252
  "listCustomDomains": {
1040
1253
  "operationId": "listCustomDomains",
1041
1254
  "method": "GET",
@@ -1063,6 +1276,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1063
1276
  "required": false,
1064
1277
  "type": "string",
1065
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."
1066
1286
  }
1067
1287
  ],
1068
1288
  "requestBodyType": "",
@@ -1083,6 +1303,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1083
1303
  "required": true,
1084
1304
  "type": "string",
1085
1305
  "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1306
+ },
1307
+ {
1308
+ "name": "Idempotency-Key",
1309
+ "in": "header",
1310
+ "required": false,
1311
+ "type": "string",
1312
+ "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."
1086
1313
  }
1087
1314
  ],
1088
1315
  "requestBodyType": "{ domain: string }",
@@ -1150,7 +1377,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1150
1377
  "path": "/v1/health",
1151
1378
  "summary": "Health check",
1152
1379
  "description": "Returns the health status of the API server.",
1153
- "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
+ ],
1154
1389
  "requestBodyType": "",
1155
1390
  "requestBodyRequired": false,
1156
1391
  "responseType": "{ image_sha: string; status: \"ok\" | \"degraded\"; timestamp?: string; version: string }",
@@ -1183,6 +1418,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1183
1418
  "required": false,
1184
1419
  "type": "string",
1185
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."
1186
1428
  }
1187
1429
  ],
1188
1430
  "requestBodyType": "",
@@ -1203,6 +1445,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1203
1445
  "required": true,
1204
1446
  "type": "string",
1205
1447
  "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1448
+ },
1449
+ {
1450
+ "name": "Idempotency-Key",
1451
+ "in": "header",
1452
+ "required": false,
1453
+ "type": "string",
1454
+ "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."
1206
1455
  }
1207
1456
  ],
1208
1457
  "requestBodyType": "{ action: \"audit_only\" | \"kill\"; relation_name: string; schema_name?: string }",
@@ -1230,6 +1479,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1230
1479
  "required": true,
1231
1480
  "type": "string",
1232
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."
1233
1489
  }
1234
1490
  ],
1235
1491
  "requestBodyType": "",
@@ -1257,6 +1513,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1257
1513
  "required": true,
1258
1514
  "type": "string",
1259
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."
1260
1523
  }
1261
1524
  ],
1262
1525
  "requestBodyType": "{ action: \"audit_only\" | \"kill\"; relation_name: string; schema_name?: string }",
@@ -1318,6 +1581,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1318
1581
  "required": false,
1319
1582
  "type": "number",
1320
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."
1321
1591
  }
1322
1592
  ],
1323
1593
  "requestBodyType": "",
@@ -1325,6 +1595,196 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1325
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 })[] }",
1326
1596
  "responseStatus": "200"
1327
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
+ },
1328
1788
  "lintMigration": {
1329
1789
  "operationId": "lintMigration",
1330
1790
  "method": "POST",
@@ -1358,6 +1818,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1358
1818
  "required": true,
1359
1819
  "type": "string",
1360
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."
1361
1828
  }
1362
1829
  ],
1363
1830
  "requestBodyType": "",
@@ -1391,7 +1858,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1391
1858
  "path": "/v1/organizations",
1392
1859
  "summary": "List organizations",
1393
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.",
1394
- "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
+ ],
1395
1870
  "requestBodyType": "",
1396
1871
  "requestBodyRequired": false,
1397
1872
  "responseType": "{ organizations: ({ id: string; name: string; role?: string; slug: string })[] }",
@@ -1424,6 +1899,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1424
1899
  "required": false,
1425
1900
  "type": "string",
1426
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."
1427
1909
  }
1428
1910
  ],
1429
1911
  "requestBodyType": "",
@@ -1444,6 +1926,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1444
1926
  "required": true,
1445
1927
  "type": "string",
1446
1928
  "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1929
+ },
1930
+ {
1931
+ "name": "Idempotency-Key",
1932
+ "in": "header",
1933
+ "required": false,
1934
+ "type": "string",
1935
+ "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."
1447
1936
  }
1448
1937
  ],
1449
1938
  "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\" }",
@@ -1471,6 +1960,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1471
1960
  "required": true,
1472
1961
  "type": "string",
1473
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."
1474
1970
  }
1475
1971
  ],
1476
1972
  "requestBodyType": "",
@@ -1498,6 +1994,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1498
1994
  "required": true,
1499
1995
  "type": "string",
1500
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."
1501
2004
  }
1502
2005
  ],
1503
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\" }",
@@ -1606,6 +2109,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1606
2109
  "required": false,
1607
2110
  "type": "\"name\" | \"created_at\" | \"active_connections\"",
1608
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."
1609
2119
  }
1610
2120
  ],
1611
2121
  "requestBodyType": "",
@@ -1619,7 +2129,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1619
2129
  "path": "/v1/projects",
1620
2130
  "summary": "Create a project",
1621
2131
  "description": "Creates a new project within the specified organization.",
1622
- "parameters": [],
2132
+ "parameters": [
2133
+ {
2134
+ "name": "Idempotency-Key",
2135
+ "in": "header",
2136
+ "required": false,
2137
+ "type": "string",
2138
+ "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."
2139
+ }
2140
+ ],
1623
2141
  "requestBodyType": "{ cloud?: \"aws\" | \"azure\" | \"gcp\"; database: { 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 }; description?: string; name: string; org_id: string; self_hosted?: boolean; tags?: string[] }",
1624
2142
  "requestBodyRequired": true,
1625
2143
  "responseType": "{ database?: { auto_read_routing?: boolean; cache_config: { enabled: boolean; max_entries: number; swr_seconds: number; ttl_seconds: number }; connection_string?: string; created_at: string; host: string; id: string; name: string; pool_config: { max_active?: number; min_pool_size: number; pool_mode: \"session\" | \"transaction\" | \"statement\"; pool_size: number }; pool_region?: string; port: number; project_id: string; query_timeout_ms?: number; role?: \"primary\" | \"replica\"; ssl_mode: \"disable\" | \"allow\" | \"prefer\" | \"require\" | \"verify-ca\" | \"verify-full\"; updated_at: string; username: string }; project: { active_connections?: number; agents_disabled?: boolean; allowed_cidrs?: ({ cidr: string; label?: string })[]; burst_size?: number; cloud?: \"aws\" | \"azure\" | \"gcp\"; created_at: string; database_count?: number; default_policy_profile_id?: string; description?: string; id: string; max_connections?: number; name: string; org_id: string; proxy_host?: string; queries_per_second?: number; residency?: \"any\" | \"us\" | \"eu\"; self_hosted?: boolean; status: \"active\" | \"suspended\" | \"deleted\"; tags?: string[]; updated_at: string } }",
@@ -1638,6 +2156,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1638
2156
  "required": true,
1639
2157
  "type": "string",
1640
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."
1641
2166
  }
1642
2167
  ],
1643
2168
  "requestBodyType": "",
@@ -1658,6 +2183,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1658
2183
  "required": true,
1659
2184
  "type": "string",
1660
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."
1661
2193
  }
1662
2194
  ],
1663
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[] }",
@@ -1712,6 +2244,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1712
2244
  "required": false,
1713
2245
  "type": "string",
1714
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."
1715
2254
  }
1716
2255
  ],
1717
2256
  "requestBodyType": "",
@@ -1725,7 +2264,15 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1725
2264
  "path": "/v1/regions",
1726
2265
  "summary": "List available regions",
1727
2266
  "description": "Returns all active data plane regions.",
1728
- "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
+ ],
1729
2276
  "requestBodyType": "",
1730
2277
  "requestBodyRequired": false,
1731
2278
  "responseType": "{ regions: ({ available: boolean; continent?: string; country?: string; id: string; name: string; provider: \"aws\" | \"azure\" | \"gcp\"; status: \"active\" | \"draining\" | \"inactive\" })[] }",
@@ -1744,6 +2291,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1744
2291
  "required": true,
1745
2292
  "type": "string",
1746
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."
1747
2301
  }
1748
2302
  ],
1749
2303
  "requestBodyType": "",
@@ -1764,6 +2318,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1764
2318
  "required": true,
1765
2319
  "type": "string",
1766
2320
  "description": "Unique database identifier (prefixed, e.g. db_xxx)."
2321
+ },
2322
+ {
2323
+ "name": "Idempotency-Key",
2324
+ "in": "header",
2325
+ "required": false,
2326
+ "type": "string",
2327
+ "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."
1767
2328
  }
1768
2329
  ],
1769
2330
  "requestBodyType": "{ host: string; port: number; ssl_mode?: \"disable\" | \"allow\" | \"prefer\" | \"require\" | \"verify-ca\" | \"verify-full\" }",
@@ -1825,6 +2386,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1825
2386
  "required": false,
1826
2387
  "type": "string",
1827
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."
1828
2396
  }
1829
2397
  ],
1830
2398
  "requestBodyType": "",
@@ -1906,6 +2474,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1906
2474
  "required": true,
1907
2475
  "type": "string",
1908
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."
1909
2484
  }
1910
2485
  ],
1911
2486
  "requestBodyType": "",
@@ -1926,6 +2501,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1926
2501
  "required": true,
1927
2502
  "type": "string",
1928
2503
  "description": "Unique organization identifier."
2504
+ },
2505
+ {
2506
+ "name": "Idempotency-Key",
2507
+ "in": "header",
2508
+ "required": false,
2509
+ "type": "string",
2510
+ "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."
1929
2511
  }
1930
2512
  ],
1931
2513
  "requestBodyType": "{ description?: string; expires_at?: string; region_label?: string }",
@@ -1980,6 +2562,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
1980
2562
  "required": true,
1981
2563
  "type": "string",
1982
2564
  "description": "Unique enrollment identifier."
2565
+ },
2566
+ {
2567
+ "name": "Idempotency-Key",
2568
+ "in": "header",
2569
+ "required": false,
2570
+ "type": "string",
2571
+ "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."
1983
2572
  }
1984
2573
  ],
1985
2574
  "requestBodyType": "",
@@ -2028,6 +2617,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2028
2617
  "required": false,
2029
2618
  "type": "number",
2030
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."
2031
2627
  }
2032
2628
  ],
2033
2629
  "requestBodyType": "",
@@ -2048,6 +2644,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2048
2644
  "required": true,
2049
2645
  "type": "string",
2050
2646
  "description": "Unique organization identifier."
2647
+ },
2648
+ {
2649
+ "name": "Idempotency-Key",
2650
+ "in": "header",
2651
+ "required": false,
2652
+ "type": "string",
2653
+ "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."
2051
2654
  }
2052
2655
  ],
2053
2656
  "requestBodyType": "{ body: string; org_id: string; severity?: number; title: string }",
@@ -2075,6 +2678,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2075
2678
  "required": true,
2076
2679
  "type": "string",
2077
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."
2078
2688
  }
2079
2689
  ],
2080
2690
  "requestBodyType": "",
@@ -2129,6 +2739,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2129
2739
  "required": true,
2130
2740
  "type": "string",
2131
2741
  "description": "Unique support case identifier (prefixed, e.g. sc_xxx)."
2742
+ },
2743
+ {
2744
+ "name": "Idempotency-Key",
2745
+ "in": "header",
2746
+ "required": false,
2747
+ "type": "string",
2748
+ "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."
2132
2749
  }
2133
2750
  ],
2134
2751
  "requestBodyType": "{ body: string }",
@@ -2175,6 +2792,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2175
2792
  "required": true,
2176
2793
  "type": "string",
2177
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."
2178
2802
  }
2179
2803
  ],
2180
2804
  "requestBodyType": "",
@@ -2209,6 +2833,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2209
2833
  "required": true,
2210
2834
  "type": "string",
2211
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."
2212
2843
  }
2213
2844
  ],
2214
2845
  "requestBodyType": "",
@@ -2243,6 +2874,13 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2243
2874
  "required": false,
2244
2875
  "type": "string",
2245
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."
2246
2884
  }
2247
2885
  ],
2248
2886
  "requestBodyType": "",
@@ -2277,11 +2915,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2277
2915
  "required": false,
2278
2916
  "type": "string",
2279
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."
2280
2925
  }
2281
2926
  ],
2282
2927
  "requestBodyType": "",
2283
2928
  "requestBodyRequired": false,
2284
- "responseType": "{ next_page_token?: string; webhooks: ({ created_at: string; description?: string; enabled: boolean; event_types?: string[]; format: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; id: string; project_id: string; updated_at: string; url: string })[] }",
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 })[] }",
2285
2930
  "responseStatus": "200"
2286
2931
  },
2287
2932
  "createWebhookEndpoint": {
@@ -2297,11 +2942,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2297
2942
  "required": true,
2298
2943
  "type": "string",
2299
2944
  "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
2945
+ },
2946
+ {
2947
+ "name": "Idempotency-Key",
2948
+ "in": "header",
2949
+ "required": false,
2950
+ "type": "string",
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."
2300
2952
  }
2301
2953
  ],
2302
- "requestBodyType": "{ description?: string; enabled?: boolean; event_types?: string[]; format?: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; secret?: string; url: string }",
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 }",
2303
2955
  "requestBodyRequired": true,
2304
- "responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?: string[]; format: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; id: string; project_id: string; updated_at: string; url: string }",
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 }",
2305
2957
  "responseStatus": "201"
2306
2958
  },
2307
2959
  "getWebhookEndpoint": {
@@ -2324,11 +2976,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2324
2976
  "required": true,
2325
2977
  "type": "string",
2326
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."
2327
2986
  }
2328
2987
  ],
2329
2988
  "requestBodyType": "",
2330
2989
  "requestBodyRequired": false,
2331
- "responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?: string[]; format: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; id: string; project_id: string; updated_at: string; url: string }",
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 }",
2332
2991
  "responseStatus": "200"
2333
2992
  },
2334
2993
  "updateWebhookEndpoint": {
@@ -2351,11 +3010,18 @@ export { o as operationsByPath, a as operationsByTag } from './operations-map.ge
2351
3010
  "required": true,
2352
3011
  "type": "string",
2353
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."
2354
3020
  }
2355
3021
  ],
2356
- "requestBodyType": "{ description?: string; enabled?: boolean; event_types?: string[]; format?: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; secret?: string; url: string }",
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 }",
2357
3023
  "requestBodyRequired": true,
2358
- "responseType": "{ created_at: string; description?: string; enabled: boolean; event_types?: string[]; format: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; id: string; project_id: string; updated_at: string; url: string }",
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 }",
2359
3025
  "responseStatus": "200"
2360
3026
  },
2361
3027
  "deleteWebhookEndpoint": {