pgbeam 0.4.10 → 0.4.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, '__esModule', { value: true });
2
2
 
3
- var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
3
+ var operationsMap_gen = require('./operations-map.gen-mwk22v4l.cjs');
4
4
 
5
5
  /**
6
6
  * Generated by generate-sdk-ts-maps.ts from backend/openapi/bundles/public.yaml — do not edit manually.
@@ -16,7 +16,15 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
16
16
  "path": "/v1/account/export",
17
17
  "summary": "Export account data",
18
18
  "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.",
19
- "parameters": [],
19
+ "parameters": [
20
+ {
21
+ "name": "If-None-Match",
22
+ "in": "header",
23
+ "required": false,
24
+ "type": "string",
25
+ "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."
26
+ }
27
+ ],
20
28
  "requestBodyType": "",
21
29
  "requestBodyRequired": false,
22
30
  "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 } }",
@@ -49,6 +57,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
49
57
  "required": false,
50
58
  "type": "string",
51
59
  "description": "Opaque token for cursor-based pagination."
60
+ },
61
+ {
62
+ "name": "If-None-Match",
63
+ "in": "header",
64
+ "required": false,
65
+ "type": "string",
66
+ "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."
52
67
  }
53
68
  ],
54
69
  "requestBodyType": "",
@@ -103,6 +118,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
103
118
  "required": true,
104
119
  "type": "string",
105
120
  "description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
121
+ },
122
+ {
123
+ "name": "If-None-Match",
124
+ "in": "header",
125
+ "required": false,
126
+ "type": "string",
127
+ "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."
106
128
  }
107
129
  ],
108
130
  "requestBodyType": "",
@@ -115,7 +137,7 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
115
137
  "method": "PATCH",
116
138
  "path": "/v1/projects/{project_id}/agents/{agent_id}",
117
139
  "summary": "Enable or disable an agent credential",
118
- "description": "Toggles the kill-switch. Disabling drops live connections within seconds.",
140
+ "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.",
119
141
  "parameters": [
120
142
  {
121
143
  "name": "project_id",
@@ -130,6 +152,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
130
152
  "required": true,
131
153
  "type": "string",
132
154
  "description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
155
+ },
156
+ {
157
+ "name": "If-Match",
158
+ "in": "header",
159
+ "required": false,
160
+ "type": "string",
161
+ "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."
133
162
  }
134
163
  ],
135
164
  "requestBodyType": "{ status: \"active\" | \"disabled\" }",
@@ -259,6 +288,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
259
288
  "required": false,
260
289
  "type": "string",
261
290
  "description": "Opaque token for cursor-based pagination."
291
+ },
292
+ {
293
+ "name": "If-None-Match",
294
+ "in": "header",
295
+ "required": false,
296
+ "type": "string",
297
+ "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."
262
298
  }
263
299
  ],
264
300
  "requestBodyType": "",
@@ -327,6 +363,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
327
363
  "required": false,
328
364
  "type": "string",
329
365
  "description": "Opaque token for cursor-based pagination."
366
+ },
367
+ {
368
+ "name": "If-None-Match",
369
+ "in": "header",
370
+ "required": false,
371
+ "type": "string",
372
+ "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."
330
373
  }
331
374
  ],
332
375
  "requestBodyType": "",
@@ -457,6 +500,20 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
457
500
  "required": false,
458
501
  "type": "number",
459
502
  "description": "Maximum number of items to return (1-100, default 20)."
503
+ },
504
+ {
505
+ "name": "page_token",
506
+ "in": "query",
507
+ "required": false,
508
+ "type": "string",
509
+ "description": "Opaque token for cursor-based pagination."
510
+ },
511
+ {
512
+ "name": "If-None-Match",
513
+ "in": "header",
514
+ "required": false,
515
+ "type": "string",
516
+ "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."
460
517
  }
461
518
  ],
462
519
  "requestBodyType": "",
@@ -560,6 +617,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
560
617
  "required": false,
561
618
  "type": "string",
562
619
  "description": "Return entries strictly older than this timestamp (cursor / upper bound)."
620
+ },
621
+ {
622
+ "name": "If-None-Match",
623
+ "in": "header",
624
+ "required": false,
625
+ "type": "string",
626
+ "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."
563
627
  }
564
628
  ],
565
629
  "requestBodyType": "",
@@ -594,6 +658,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
594
658
  "required": false,
595
659
  "type": "string",
596
660
  "description": "Return entries strictly older than this timestamp (cursor / upper bound)."
661
+ },
662
+ {
663
+ "name": "If-None-Match",
664
+ "in": "header",
665
+ "required": false,
666
+ "type": "string",
667
+ "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."
597
668
  }
598
669
  ],
599
670
  "requestBodyType": "",
@@ -601,13 +672,41 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
601
672
  "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 }",
602
673
  "responseStatus": "200"
603
674
  },
675
+ "executeBatch": {
676
+ "operationId": "executeBatch",
677
+ "method": "POST",
678
+ "path": "/v1/projects/{project_id}/batch",
679
+ "summary": "Apply many project operations in one request",
680
+ "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.",
681
+ "parameters": [
682
+ {
683
+ "name": "project_id",
684
+ "in": "path",
685
+ "required": true,
686
+ "type": "string",
687
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
688
+ }
689
+ ],
690
+ "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\" })[] }",
691
+ "requestBodyRequired": true,
692
+ "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 } }",
693
+ "responseStatus": "200"
694
+ },
604
695
  "listPlans": {
605
696
  "operationId": "listPlans",
606
697
  "method": "GET",
607
698
  "path": "/v1/plans",
608
699
  "summary": "List available plans",
609
700
  "description": "Returns all available plan tiers with their limits and pricing.",
610
- "parameters": [],
701
+ "parameters": [
702
+ {
703
+ "name": "If-None-Match",
704
+ "in": "header",
705
+ "required": false,
706
+ "type": "string",
707
+ "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."
708
+ }
709
+ ],
611
710
  "requestBodyType": "",
612
711
  "requestBodyRequired": false,
613
712
  "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 })[] }",
@@ -626,6 +725,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
626
725
  "required": true,
627
726
  "type": "string",
628
727
  "description": "Unique organization identifier."
728
+ },
729
+ {
730
+ "name": "If-None-Match",
731
+ "in": "header",
732
+ "required": false,
733
+ "type": "string",
734
+ "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."
629
735
  }
630
736
  ],
631
737
  "requestBodyType": "",
@@ -646,6 +752,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
646
752
  "required": true,
647
753
  "type": "string",
648
754
  "description": "Unique organization identifier."
755
+ },
756
+ {
757
+ "name": "If-None-Match",
758
+ "in": "header",
759
+ "required": false,
760
+ "type": "string",
761
+ "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."
649
762
  }
650
763
  ],
651
764
  "requestBodyType": "",
@@ -727,6 +840,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
727
840
  "required": false,
728
841
  "type": "string",
729
842
  "description": "Opaque token for cursor-based pagination."
843
+ },
844
+ {
845
+ "name": "If-None-Match",
846
+ "in": "header",
847
+ "required": false,
848
+ "type": "string",
849
+ "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."
730
850
  }
731
851
  ],
732
852
  "requestBodyType": "",
@@ -795,6 +915,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
795
915
  "required": false,
796
916
  "type": "string",
797
917
  "description": "Opaque token for cursor-based pagination."
918
+ },
919
+ {
920
+ "name": "If-None-Match",
921
+ "in": "header",
922
+ "required": false,
923
+ "type": "string",
924
+ "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."
798
925
  }
799
926
  ],
800
927
  "requestBodyType": "",
@@ -863,6 +990,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
863
990
  "required": false,
864
991
  "type": "string",
865
992
  "description": "Opaque token for cursor-based pagination."
993
+ },
994
+ {
995
+ "name": "If-None-Match",
996
+ "in": "header",
997
+ "required": false,
998
+ "type": "string",
999
+ "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."
866
1000
  }
867
1001
  ],
868
1002
  "requestBodyType": "",
@@ -917,6 +1051,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
917
1051
  "required": true,
918
1052
  "type": "string",
919
1053
  "description": "Unique database identifier (prefixed, e.g. db_xxx)."
1054
+ },
1055
+ {
1056
+ "name": "If-None-Match",
1057
+ "in": "header",
1058
+ "required": false,
1059
+ "type": "string",
1060
+ "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."
920
1061
  }
921
1062
  ],
922
1063
  "requestBodyType": "",
@@ -944,6 +1085,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
944
1085
  "required": true,
945
1086
  "type": "string",
946
1087
  "description": "Unique database identifier (prefixed, e.g. db_xxx)."
1088
+ },
1089
+ {
1090
+ "name": "If-Match",
1091
+ "in": "header",
1092
+ "required": false,
1093
+ "type": "string",
1094
+ "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."
947
1095
  }
948
1096
  ],
949
1097
  "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 }",
@@ -1052,6 +1200,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1052
1200
  "required": true,
1053
1201
  "type": "string",
1054
1202
  "description": "Unique database identifier (prefixed, e.g. db_xxx)."
1203
+ },
1204
+ {
1205
+ "name": "If-None-Match",
1206
+ "in": "header",
1207
+ "required": false,
1208
+ "type": "string",
1209
+ "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."
1055
1210
  }
1056
1211
  ],
1057
1212
  "requestBodyType": "",
@@ -1059,6 +1214,50 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1059
1214
  "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 }",
1060
1215
  "responseStatus": "200"
1061
1216
  },
1217
+ "getDemo": {
1218
+ "operationId": "getDemo",
1219
+ "method": "GET",
1220
+ "path": "/v1/demo",
1221
+ "summary": "Describe the demo sandbox",
1222
+ "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.",
1223
+ "parameters": [],
1224
+ "requestBodyType": "",
1225
+ "requestBodyRequired": false,
1226
+ "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 })[] }",
1227
+ "responseStatus": "200"
1228
+ },
1229
+ "createDemoCredential": {
1230
+ "operationId": "createDemoCredential",
1231
+ "method": "POST",
1232
+ "path": "/v1/demo/credentials",
1233
+ "summary": "Issue a demo credential",
1234
+ "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.",
1235
+ "parameters": [],
1236
+ "requestBodyType": "{ label?: string; payment_proof?: string; tier?: \"free\" | \"extended\" }",
1237
+ "requestBodyRequired": false,
1238
+ "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 })[] }",
1239
+ "responseStatus": "201"
1240
+ },
1241
+ "releaseDemoCredential": {
1242
+ "operationId": "releaseDemoCredential",
1243
+ "method": "POST",
1244
+ "path": "/v1/demo/credentials/{session_id}/release",
1245
+ "summary": "Release a demo credential",
1246
+ "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.",
1247
+ "parameters": [
1248
+ {
1249
+ "name": "session_id",
1250
+ "in": "path",
1251
+ "required": true,
1252
+ "type": "string",
1253
+ "description": "The demo session to release, as returned when it was issued."
1254
+ }
1255
+ ],
1256
+ "requestBodyType": "{ mcp_token: string }",
1257
+ "requestBodyRequired": true,
1258
+ "responseType": "{ live_sessions: number; released: boolean; session_id: string }",
1259
+ "responseStatus": "200"
1260
+ },
1062
1261
  "listCustomDomains": {
1063
1262
  "operationId": "listCustomDomains",
1064
1263
  "method": "GET",
@@ -1086,6 +1285,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1086
1285
  "required": false,
1087
1286
  "type": "string",
1088
1287
  "description": "Opaque token for cursor-based pagination."
1288
+ },
1289
+ {
1290
+ "name": "If-None-Match",
1291
+ "in": "header",
1292
+ "required": false,
1293
+ "type": "string",
1294
+ "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."
1089
1295
  }
1090
1296
  ],
1091
1297
  "requestBodyType": "",
@@ -1180,7 +1386,15 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1180
1386
  "path": "/v1/health",
1181
1387
  "summary": "Health check",
1182
1388
  "description": "Returns the health status of the API server.",
1183
- "parameters": [],
1389
+ "parameters": [
1390
+ {
1391
+ "name": "If-None-Match",
1392
+ "in": "header",
1393
+ "required": false,
1394
+ "type": "string",
1395
+ "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
+ }
1397
+ ],
1184
1398
  "requestBodyType": "",
1185
1399
  "requestBodyRequired": false,
1186
1400
  "responseType": "{ image_sha: string; status: \"ok\" | \"degraded\"; timestamp?: string; version: string }",
@@ -1213,6 +1427,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1213
1427
  "required": false,
1214
1428
  "type": "string",
1215
1429
  "description": "Opaque token for cursor-based pagination."
1430
+ },
1431
+ {
1432
+ "name": "If-None-Match",
1433
+ "in": "header",
1434
+ "required": false,
1435
+ "type": "string",
1436
+ "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."
1216
1437
  }
1217
1438
  ],
1218
1439
  "requestBodyType": "",
@@ -1267,6 +1488,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1267
1488
  "required": true,
1268
1489
  "type": "string",
1269
1490
  "description": "Unique honeytoken identifier (prefixed, e.g. hnt_xxx)."
1491
+ },
1492
+ {
1493
+ "name": "If-None-Match",
1494
+ "in": "header",
1495
+ "required": false,
1496
+ "type": "string",
1497
+ "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."
1270
1498
  }
1271
1499
  ],
1272
1500
  "requestBodyType": "",
@@ -1294,6 +1522,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1294
1522
  "required": true,
1295
1523
  "type": "string",
1296
1524
  "description": "Unique honeytoken identifier (prefixed, e.g. hnt_xxx)."
1525
+ },
1526
+ {
1527
+ "name": "If-Match",
1528
+ "in": "header",
1529
+ "required": false,
1530
+ "type": "string",
1531
+ "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."
1297
1532
  }
1298
1533
  ],
1299
1534
  "requestBodyType": "{ action: \"audit_only\" | \"kill\"; relation_name: string; schema_name?: string }",
@@ -1355,6 +1590,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1355
1590
  "required": false,
1356
1591
  "type": "number",
1357
1592
  "description": "Maximum number of top queries to return (1-100)."
1593
+ },
1594
+ {
1595
+ "name": "If-None-Match",
1596
+ "in": "header",
1597
+ "required": false,
1598
+ "type": "string",
1599
+ "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."
1358
1600
  }
1359
1601
  ],
1360
1602
  "requestBodyType": "",
@@ -1362,6 +1604,196 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1362
1604
  "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 })[] }",
1363
1605
  "responseStatus": "200"
1364
1606
  },
1607
+ "listOrgMembers": {
1608
+ "operationId": "listOrgMembers",
1609
+ "method": "GET",
1610
+ "path": "/v1/organizations/{org_id}/members",
1611
+ "summary": "List organization members",
1612
+ "description": "Lists the people who belong to the organization, and their roles.",
1613
+ "parameters": [
1614
+ {
1615
+ "name": "org_id",
1616
+ "in": "path",
1617
+ "required": true,
1618
+ "type": "string",
1619
+ "description": "Unique organization identifier."
1620
+ },
1621
+ {
1622
+ "name": "page_size",
1623
+ "in": "query",
1624
+ "required": false,
1625
+ "type": "number",
1626
+ "description": "Maximum number of items to return (1-100, default 20)."
1627
+ },
1628
+ {
1629
+ "name": "page_token",
1630
+ "in": "query",
1631
+ "required": false,
1632
+ "type": "string",
1633
+ "description": "Opaque token for cursor-based pagination."
1634
+ },
1635
+ {
1636
+ "name": "If-None-Match",
1637
+ "in": "header",
1638
+ "required": false,
1639
+ "type": "string",
1640
+ "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
+ }
1642
+ ],
1643
+ "requestBodyType": "",
1644
+ "requestBodyRequired": false,
1645
+ "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 }",
1646
+ "responseStatus": "200"
1647
+ },
1648
+ "updateOrgMemberRole": {
1649
+ "operationId": "updateOrgMemberRole",
1650
+ "method": "PATCH",
1651
+ "path": "/v1/organizations/{org_id}/members/{member_id}",
1652
+ "summary": "Change a member's role",
1653
+ "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.",
1654
+ "parameters": [
1655
+ {
1656
+ "name": "org_id",
1657
+ "in": "path",
1658
+ "required": true,
1659
+ "type": "string",
1660
+ "description": "Unique organization identifier."
1661
+ },
1662
+ {
1663
+ "name": "member_id",
1664
+ "in": "path",
1665
+ "required": true,
1666
+ "type": "string",
1667
+ "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."
1668
+ }
1669
+ ],
1670
+ "requestBodyType": "{ role: \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\" }",
1671
+ "requestBodyRequired": true,
1672
+ "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 }",
1673
+ "responseStatus": "200"
1674
+ },
1675
+ "removeOrgMember": {
1676
+ "operationId": "removeOrgMember",
1677
+ "method": "DELETE",
1678
+ "path": "/v1/organizations/{org_id}/members/{member_id}",
1679
+ "summary": "Remove a member",
1680
+ "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.",
1681
+ "parameters": [
1682
+ {
1683
+ "name": "org_id",
1684
+ "in": "path",
1685
+ "required": true,
1686
+ "type": "string",
1687
+ "description": "Unique organization identifier."
1688
+ },
1689
+ {
1690
+ "name": "member_id",
1691
+ "in": "path",
1692
+ "required": true,
1693
+ "type": "string",
1694
+ "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."
1695
+ }
1696
+ ],
1697
+ "requestBodyType": "",
1698
+ "requestBodyRequired": false,
1699
+ "responseType": "",
1700
+ "responseStatus": "204"
1701
+ },
1702
+ "listOrgInvitations": {
1703
+ "operationId": "listOrgInvitations",
1704
+ "method": "GET",
1705
+ "path": "/v1/organizations/{org_id}/invitations",
1706
+ "summary": "List invitations",
1707
+ "description": "Lists invitations to join the organization and where each has got to.",
1708
+ "parameters": [
1709
+ {
1710
+ "name": "org_id",
1711
+ "in": "path",
1712
+ "required": true,
1713
+ "type": "string",
1714
+ "description": "Unique organization identifier."
1715
+ },
1716
+ {
1717
+ "name": "status",
1718
+ "in": "query",
1719
+ "required": false,
1720
+ "type": "\"pending\" | \"accepted\" | \"rejected\" | \"canceled\"",
1721
+ "description": "Filter to a single status. Omit to list every invitation."
1722
+ },
1723
+ {
1724
+ "name": "page_size",
1725
+ "in": "query",
1726
+ "required": false,
1727
+ "type": "number",
1728
+ "description": "Maximum number of items to return (1-100, default 20)."
1729
+ },
1730
+ {
1731
+ "name": "page_token",
1732
+ "in": "query",
1733
+ "required": false,
1734
+ "type": "string",
1735
+ "description": "Opaque token for cursor-based pagination."
1736
+ },
1737
+ {
1738
+ "name": "If-None-Match",
1739
+ "in": "header",
1740
+ "required": false,
1741
+ "type": "string",
1742
+ "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."
1743
+ }
1744
+ ],
1745
+ "requestBodyType": "",
1746
+ "requestBodyRequired": false,
1747
+ "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 }",
1748
+ "responseStatus": "200"
1749
+ },
1750
+ "createOrgInvitation": {
1751
+ "operationId": "createOrgInvitation",
1752
+ "method": "POST",
1753
+ "path": "/v1/organizations/{org_id}/invitations",
1754
+ "summary": "Invite someone to the organization",
1755
+ "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.",
1756
+ "parameters": [
1757
+ {
1758
+ "name": "org_id",
1759
+ "in": "path",
1760
+ "required": true,
1761
+ "type": "string",
1762
+ "description": "Unique organization identifier."
1763
+ }
1764
+ ],
1765
+ "requestBodyType": "{ email: string; role?: \"admin\" | \"member\" | \"security_admin\" | \"billing_admin\" | \"auditor\" | \"policy-author\" | \"approver\" }",
1766
+ "requestBodyRequired": true,
1767
+ "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\" }",
1768
+ "responseStatus": "201"
1769
+ },
1770
+ "revokeOrgInvitation": {
1771
+ "operationId": "revokeOrgInvitation",
1772
+ "method": "DELETE",
1773
+ "path": "/v1/organizations/{org_id}/invitations/{invitation_id}",
1774
+ "summary": "Revoke an invitation",
1775
+ "description": "Cancels a pending invitation so it can no longer be accepted.",
1776
+ "parameters": [
1777
+ {
1778
+ "name": "org_id",
1779
+ "in": "path",
1780
+ "required": true,
1781
+ "type": "string",
1782
+ "description": "Unique organization identifier."
1783
+ },
1784
+ {
1785
+ "name": "invitation_id",
1786
+ "in": "path",
1787
+ "required": true,
1788
+ "type": "string",
1789
+ "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`."
1790
+ }
1791
+ ],
1792
+ "requestBodyType": "",
1793
+ "requestBodyRequired": false,
1794
+ "responseType": "",
1795
+ "responseStatus": "204"
1796
+ },
1365
1797
  "lintMigration": {
1366
1798
  "operationId": "lintMigration",
1367
1799
  "method": "POST",
@@ -1395,6 +1827,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1395
1827
  "required": true,
1396
1828
  "type": "string",
1397
1829
  "description": "Unique organization identifier."
1830
+ },
1831
+ {
1832
+ "name": "If-None-Match",
1833
+ "in": "header",
1834
+ "required": false,
1835
+ "type": "string",
1836
+ "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."
1398
1837
  }
1399
1838
  ],
1400
1839
  "requestBodyType": "",
@@ -1428,12 +1867,59 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1428
1867
  "path": "/v1/organizations",
1429
1868
  "summary": "List organizations",
1430
1869
  "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.",
1431
- "parameters": [],
1870
+ "parameters": [
1871
+ {
1872
+ "name": "If-None-Match",
1873
+ "in": "header",
1874
+ "required": false,
1875
+ "type": "string",
1876
+ "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."
1877
+ }
1878
+ ],
1432
1879
  "requestBodyType": "",
1433
1880
  "requestBodyRequired": false,
1434
1881
  "responseType": "{ organizations: ({ id: string; name: string; role?: string; slug: string })[] }",
1435
1882
  "responseStatus": "200"
1436
1883
  },
1884
+ "listPaymentResources": {
1885
+ "operationId": "listPaymentResources",
1886
+ "method": "GET",
1887
+ "path": "/v1/payments/resources",
1888
+ "summary": "List priced resources",
1889
+ "description": "Lists what an agent can buy over the Machine Payments Protocol, with the\nunit, the pack size, and the price of one pack. Discovery only: the\n`WWW-Authenticate: Payment` challenge returned by a priced operation is\nalways authoritative.\n\nThis endpoint takes no authentication so an agent can read the price\nbefore it holds a credential.\n",
1890
+ "parameters": [],
1891
+ "requestBodyType": "",
1892
+ "requestBodyRequired": false,
1893
+ "responseType": "{ resources: ({ amount_per_pack: number; currency: string; description?: string; id: string; max_packs: number; min_packs: number; operation_id?: string; title: string; unit: string; units_per_pack: number })[] }",
1894
+ "responseStatus": "200"
1895
+ },
1896
+ "createBudgetTopup": {
1897
+ "operationId": "createBudgetTopup",
1898
+ "method": "POST",
1899
+ "path": "/v1/payments/budget-topups",
1900
+ "summary": "Buy query budget for an agent credential",
1901
+ "description": "Buys additional queries for the agent credential this request is\nauthenticated as, using the Machine Payments Protocol (HTTP 402 with the\n`Payment` authentication scheme).\n\nAuthenticate with the credential's hosted MCP token (`pba_...`) as a\nbearer token. The credential identifies itself, so no human and no\ndashboard session is involved.\n\nWithout a payment credential the response is `402` carrying a complete\n`WWW-Authenticate: Payment` challenge. Fulfil it, then repeat the request\nwith the credential in the `Payment-Authorization` header (the challenge\nselects that field so the bearer token can stay in `Authorization`). On\nsuccess the queries are granted, streamed to the data planes, and the\nresponse carries a `Payment-Receipt` header.\n\nPurchased queries do not raise the credential's policy budget. They are a\nseparate pool the proxy spends only once the policy's hourly and daily\nwindows have refused a statement, and they expire.\n",
1902
+ "parameters": [
1903
+ {
1904
+ "name": "Payment-Authorization",
1905
+ "in": "header",
1906
+ "required": false,
1907
+ "type": "string",
1908
+ "description": "The MPP payment credential, `Payment <base64url>`, echoing the\nchallenge from the `402` and carrying the method-specific proof. For\nthe `stripe` method the payload is `{\"spt\": \"spt_...\"}`, a single-use\nShared Payment Token.\n"
1909
+ },
1910
+ {
1911
+ "name": "Accept-Payment",
1912
+ "in": "header",
1913
+ "required": false,
1914
+ "type": "string",
1915
+ "description": "Payment method and intent preferences, for example `stripe/charge`.\nIgnored when it matches nothing this endpoint offers.\n"
1916
+ }
1917
+ ],
1918
+ "requestBodyType": "{ packs?: number }",
1919
+ "requestBodyRequired": false,
1920
+ "responseType": "{ amount: number; credential_id: string; currency: string; expires_at: string; grant_id: string; payment_reference?: string; queries: number; receipt?: string }",
1921
+ "responseStatus": "201"
1922
+ },
1437
1923
  "listPolicyProfiles": {
1438
1924
  "operationId": "listPolicyProfiles",
1439
1925
  "method": "GET",
@@ -1461,6 +1947,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1461
1947
  "required": false,
1462
1948
  "type": "string",
1463
1949
  "description": "Opaque token for cursor-based pagination."
1950
+ },
1951
+ {
1952
+ "name": "If-None-Match",
1953
+ "in": "header",
1954
+ "required": false,
1955
+ "type": "string",
1956
+ "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."
1464
1957
  }
1465
1958
  ],
1466
1959
  "requestBodyType": "",
@@ -1515,6 +2008,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1515
2008
  "required": true,
1516
2009
  "type": "string",
1517
2010
  "description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
2011
+ },
2012
+ {
2013
+ "name": "If-None-Match",
2014
+ "in": "header",
2015
+ "required": false,
2016
+ "type": "string",
2017
+ "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."
1518
2018
  }
1519
2019
  ],
1520
2020
  "requestBodyType": "",
@@ -1542,6 +2042,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1542
2042
  "required": true,
1543
2043
  "type": "string",
1544
2044
  "description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
2045
+ },
2046
+ {
2047
+ "name": "If-Match",
2048
+ "in": "header",
2049
+ "required": false,
2050
+ "type": "string",
2051
+ "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."
1545
2052
  }
1546
2053
  ],
1547
2054
  "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\" }",
@@ -1650,6 +2157,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1650
2157
  "required": false,
1651
2158
  "type": "\"name\" | \"created_at\" | \"active_connections\"",
1652
2159
  "description": "Sort field for projects list."
2160
+ },
2161
+ {
2162
+ "name": "If-None-Match",
2163
+ "in": "header",
2164
+ "required": false,
2165
+ "type": "string",
2166
+ "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."
1653
2167
  }
1654
2168
  ],
1655
2169
  "requestBodyType": "",
@@ -1690,6 +2204,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1690
2204
  "required": true,
1691
2205
  "type": "string",
1692
2206
  "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
2207
+ },
2208
+ {
2209
+ "name": "If-None-Match",
2210
+ "in": "header",
2211
+ "required": false,
2212
+ "type": "string",
2213
+ "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."
1693
2214
  }
1694
2215
  ],
1695
2216
  "requestBodyType": "",
@@ -1710,6 +2231,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1710
2231
  "required": true,
1711
2232
  "type": "string",
1712
2233
  "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
2234
+ },
2235
+ {
2236
+ "name": "If-Match",
2237
+ "in": "header",
2238
+ "required": false,
2239
+ "type": "string",
2240
+ "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."
1713
2241
  }
1714
2242
  ],
1715
2243
  "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[] }",
@@ -1764,6 +2292,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1764
2292
  "required": false,
1765
2293
  "type": "string",
1766
2294
  "description": "Filter metrics by region code."
2295
+ },
2296
+ {
2297
+ "name": "If-None-Match",
2298
+ "in": "header",
2299
+ "required": false,
2300
+ "type": "string",
2301
+ "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."
1767
2302
  }
1768
2303
  ],
1769
2304
  "requestBodyType": "",
@@ -1777,7 +2312,15 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1777
2312
  "path": "/v1/regions",
1778
2313
  "summary": "List available regions",
1779
2314
  "description": "Returns all active data plane regions.",
1780
- "parameters": [],
2315
+ "parameters": [
2316
+ {
2317
+ "name": "If-None-Match",
2318
+ "in": "header",
2319
+ "required": false,
2320
+ "type": "string",
2321
+ "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."
2322
+ }
2323
+ ],
1781
2324
  "requestBodyType": "",
1782
2325
  "requestBodyRequired": false,
1783
2326
  "responseType": "{ regions: ({ available: boolean; continent?: string; country?: string; id: string; name: string; provider: \"aws\" | \"azure\" | \"gcp\"; status: \"active\" | \"draining\" | \"inactive\" })[] }",
@@ -1788,7 +2331,7 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1788
2331
  "method": "GET",
1789
2332
  "path": "/v1/databases/{database_id}/replicas",
1790
2333
  "summary": "List replicas",
1791
- "description": "Lists all read replicas for a database.",
2334
+ "description": "Lists a database's read replicas.",
1792
2335
  "parameters": [
1793
2336
  {
1794
2337
  "name": "database_id",
@@ -1796,6 +2339,27 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1796
2339
  "required": true,
1797
2340
  "type": "string",
1798
2341
  "description": "Unique database identifier (prefixed, e.g. db_xxx)."
2342
+ },
2343
+ {
2344
+ "name": "page_size",
2345
+ "in": "query",
2346
+ "required": false,
2347
+ "type": "number",
2348
+ "description": "Maximum number of items to return (1-100, default 20)."
2349
+ },
2350
+ {
2351
+ "name": "page_token",
2352
+ "in": "query",
2353
+ "required": false,
2354
+ "type": "string",
2355
+ "description": "Opaque token for cursor-based pagination."
2356
+ },
2357
+ {
2358
+ "name": "If-None-Match",
2359
+ "in": "header",
2360
+ "required": false,
2361
+ "type": "string",
2362
+ "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."
1799
2363
  }
1800
2364
  ],
1801
2365
  "requestBodyType": "",
@@ -1884,6 +2448,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1884
2448
  "required": false,
1885
2449
  "type": "string",
1886
2450
  "description": "Opaque token for cursor-based pagination."
2451
+ },
2452
+ {
2453
+ "name": "If-None-Match",
2454
+ "in": "header",
2455
+ "required": false,
2456
+ "type": "string",
2457
+ "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."
1887
2458
  }
1888
2459
  ],
1889
2460
  "requestBodyType": "",
@@ -1965,11 +2536,32 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
1965
2536
  "required": true,
1966
2537
  "type": "string",
1967
2538
  "description": "Unique organization identifier."
2539
+ },
2540
+ {
2541
+ "name": "page_size",
2542
+ "in": "query",
2543
+ "required": false,
2544
+ "type": "number",
2545
+ "description": "Maximum number of items to return (1-100, default 20)."
2546
+ },
2547
+ {
2548
+ "name": "page_token",
2549
+ "in": "query",
2550
+ "required": false,
2551
+ "type": "string",
2552
+ "description": "Opaque token for cursor-based pagination."
2553
+ },
2554
+ {
2555
+ "name": "If-None-Match",
2556
+ "in": "header",
2557
+ "required": false,
2558
+ "type": "string",
2559
+ "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."
1968
2560
  }
1969
2561
  ],
1970
2562
  "requestBodyType": "",
1971
2563
  "requestBodyRequired": false,
1972
- "responseType": "{ enrollments: ({ created_at: string; created_by?: string; description?: string; expires_at?: string; id: string; last_seen_at?: string; org_id: string; region_label?: string; revoked_at?: string })[] }",
2564
+ "responseType": "{ enrollments: ({ created_at: string; created_by?: string; description?: string; expires_at?: string; id: string; last_seen_at?: string; org_id: string; region_label?: string; revoked_at?: string })[]; next_page_token?: string }",
1973
2565
  "responseStatus": "200"
1974
2566
  },
1975
2567
  "createSelfHostEnrollment": {
@@ -2095,17 +2687,31 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2095
2687
  "type": "number",
2096
2688
  "description": "Number of results per page (1-100, default 20)."
2097
2689
  },
2690
+ {
2691
+ "name": "page_token",
2692
+ "in": "query",
2693
+ "required": false,
2694
+ "type": "string",
2695
+ "description": "Opaque token for cursor-based pagination."
2696
+ },
2098
2697
  {
2099
2698
  "name": "page",
2100
2699
  "in": "query",
2101
2700
  "required": false,
2102
2701
  "type": "number",
2103
2702
  "description": "Page number (1-based, default 1)."
2703
+ },
2704
+ {
2705
+ "name": "If-None-Match",
2706
+ "in": "header",
2707
+ "required": false,
2708
+ "type": "string",
2709
+ "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."
2104
2710
  }
2105
2711
  ],
2106
2712
  "requestBodyType": "",
2107
2713
  "requestBodyRequired": false,
2108
- "responseType": "{ cases: ({ case_number: number; closed_at?: string; created_at: string; id: string; message_count?: number; org_id: string; severity: number; slack_channel_id?: string; slack_thread_ts?: string; status: \"open\" | \"closed\"; title: string; updated_at: string; user_id: string })[]; total: number }",
2714
+ "responseType": "{ cases: ({ case_number: number; closed_at?: string; created_at: string; id: string; message_count?: number; org_id: string; severity: number; slack_channel_id?: string; slack_thread_ts?: string; status: \"open\" | \"closed\"; title: string; updated_at: string; user_id: string })[]; next_page_token?: string; total: number }",
2109
2715
  "responseStatus": "200"
2110
2716
  },
2111
2717
  "createSupportCase": {
@@ -2155,6 +2761,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2155
2761
  "required": true,
2156
2762
  "type": "string",
2157
2763
  "description": "Unique support case identifier (prefixed, e.g. sc_xxx)."
2764
+ },
2765
+ {
2766
+ "name": "If-None-Match",
2767
+ "in": "header",
2768
+ "required": false,
2769
+ "type": "string",
2770
+ "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."
2158
2771
  }
2159
2772
  ],
2160
2773
  "requestBodyType": "",
@@ -2235,6 +2848,18 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2235
2848
  "responseType": "",
2236
2849
  "responseStatus": "200"
2237
2850
  },
2851
+ "scanText": {
2852
+ "operationId": "scanText",
2853
+ "method": "POST",
2854
+ "path": "/v1/scan/text",
2855
+ "summary": "Scan untrusted text for prompt injection",
2856
+ "description": "Inspects one piece of untrusted text for the techniques used to smuggle instructions into a model's context, and returns a verdict, a recommended action, and the evidence behind it.\n\nTwo detector families run. The structural layer reads codepoints and scripts: invisible-codepoint runs, Unicode Tag smuggling, unterminated bidirectional overrides, and mixed-script words. None of those has a legitimate reason to appear in ordinary text, so a structural finding is a fact worth acting on. The lexical layer is exact-phrase matching with Unicode normalization, which is worth what exact-phrase matching is worth: it is a reason to look, and a support ticket quoting an attack contains the attack. Neither layer is a semantic classifier, and this endpoint does not pretend to catch prose that is hostile only in its meaning. The measured confusion matrix and the list of evasions that are known to work are published at https://pgbeam.com/docs/prompt-scan.\n\nAuthentication is optional. Anonymous callers get a free daily allowance keyed on their source address; an API key moves the allowance onto the organization. Past the allowance the endpoint answers 402 with a payment challenge.\n\nThe submitted text is held in memory for the duration of the request and is never logged, stored, or used to train anything. An `Idempotency-Key` is refused on this operation rather than honoured, because honouring it would persist the response, and the response quotes the submitted text back. The operation has no side effects beyond metering, so a retry is safe without one.",
2857
+ "parameters": [],
2858
+ "requestBodyType": "{ include_evidence?: boolean; layers?: (\"structural\" | \"lexical\")[]; text: string }",
2859
+ "requestBodyRequired": true,
2860
+ "responseType": "{ action: \"allow\" | \"review\" | \"block\"; action_reason: string; advice: string; engine: string; findings: ({ confidence: \"low\" | \"medium\" | \"high\"; detail: string; evidence?: string; layer: \"structural\" | \"lexical\"; offset: number; technique: \"invisible_run\" | \"tag_smuggling\" | \"bidi_override\" | \"mixed_script\" | \"instruction_phrase\" | \"invalid_encoding\" | \"truncated\" })[]; has_structural: boolean; highest_confidence?: \"low\" | \"medium\" | \"high\"; quota: { free_limit: number; free_remaining: number; paid_remaining: number; resets_at: string }; scanned_bytes: number; truncated: boolean; verdict: \"clean\" | \"suspicious\" | \"unscannable\" }",
2861
+ "responseStatus": "200"
2862
+ },
2238
2863
  "getOrganizationUsage": {
2239
2864
  "operationId": "getOrganizationUsage",
2240
2865
  "method": "GET",
@@ -2262,6 +2887,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2262
2887
  "required": true,
2263
2888
  "type": "string",
2264
2889
  "description": "End date (inclusive, YYYY-MM-DD)."
2890
+ },
2891
+ {
2892
+ "name": "If-None-Match",
2893
+ "in": "header",
2894
+ "required": false,
2895
+ "type": "string",
2896
+ "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."
2265
2897
  }
2266
2898
  ],
2267
2899
  "requestBodyType": "",
@@ -2296,6 +2928,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2296
2928
  "required": true,
2297
2929
  "type": "string",
2298
2930
  "description": "End date (inclusive, YYYY-MM-DD)."
2931
+ },
2932
+ {
2933
+ "name": "If-None-Match",
2934
+ "in": "header",
2935
+ "required": false,
2936
+ "type": "string",
2937
+ "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."
2299
2938
  }
2300
2939
  ],
2301
2940
  "requestBodyType": "",
@@ -2330,6 +2969,13 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2330
2969
  "required": false,
2331
2970
  "type": "string",
2332
2971
  "description": "Return entries strictly older than this timestamp (cursor / upper bound)."
2972
+ },
2973
+ {
2974
+ "name": "If-None-Match",
2975
+ "in": "header",
2976
+ "required": false,
2977
+ "type": "string",
2978
+ "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."
2333
2979
  }
2334
2980
  ],
2335
2981
  "requestBodyType": "",
@@ -2364,11 +3010,18 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2364
3010
  "required": false,
2365
3011
  "type": "string",
2366
3012
  "description": "Opaque token for cursor-based pagination."
3013
+ },
3014
+ {
3015
+ "name": "If-None-Match",
3016
+ "in": "header",
3017
+ "required": false,
3018
+ "type": "string",
3019
+ "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."
2367
3020
  }
2368
3021
  ],
2369
3022
  "requestBodyType": "",
2370
3023
  "requestBodyRequired": false,
2371
- "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 })[] }",
3024
+ "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 })[] }",
2372
3025
  "responseStatus": "200"
2373
3026
  },
2374
3027
  "createWebhookEndpoint": {
@@ -2393,9 +3046,9 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2393
3046
  "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."
2394
3047
  }
2395
3048
  ],
2396
- "requestBodyType": "{ description?: string; enabled?: boolean; event_types?: string[]; format?: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; secret?: string; url: string }",
3049
+ "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 }",
2397
3050
  "requestBodyRequired": true,
2398
- "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 }",
3051
+ "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 }",
2399
3052
  "responseStatus": "201"
2400
3053
  },
2401
3054
  "getWebhookEndpoint": {
@@ -2418,11 +3071,18 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2418
3071
  "required": true,
2419
3072
  "type": "string",
2420
3073
  "description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
3074
+ },
3075
+ {
3076
+ "name": "If-None-Match",
3077
+ "in": "header",
3078
+ "required": false,
3079
+ "type": "string",
3080
+ "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."
2421
3081
  }
2422
3082
  ],
2423
3083
  "requestBodyType": "",
2424
3084
  "requestBodyRequired": false,
2425
- "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 }",
3085
+ "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 }",
2426
3086
  "responseStatus": "200"
2427
3087
  },
2428
3088
  "updateWebhookEndpoint": {
@@ -2445,11 +3105,18 @@ var operationsMap_gen = require('./operations-map.gen-gco09oqg.cjs');
2445
3105
  "required": true,
2446
3106
  "type": "string",
2447
3107
  "description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
3108
+ },
3109
+ {
3110
+ "name": "If-Match",
3111
+ "in": "header",
3112
+ "required": false,
3113
+ "type": "string",
3114
+ "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."
2448
3115
  }
2449
3116
  ],
2450
- "requestBodyType": "{ description?: string; enabled?: boolean; event_types?: string[]; format?: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; secret?: string; url: string }",
3117
+ "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 }",
2451
3118
  "requestBodyRequired": true,
2452
- "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 }",
3119
+ "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 }",
2453
3120
  "responseStatus": "200"
2454
3121
  },
2455
3122
  "deleteWebhookEndpoint": {