pgbeam 0.3.4 → 0.3.6

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,3 +1,1925 @@
1
+ /**
2
+ * Generated by generate-sdk-ts-maps.ts — do not edit manually.
3
+ * Run: pnpm --filter pgbeam generate
4
+ *
5
+ * Per-operation inputs and success response rendered as compact TypeScript
6
+ * types. Powers the CLI management MCP's describe_endpoint; mirrors the hosted
7
+ * Go management MCP (backend/services/api/mcp).
8
+ */ const describeByOperationId = {
9
+ "exportAccountData": {
10
+ "operationId": "exportAccountData",
11
+ "method": "GET",
12
+ "path": "/v1/account/export",
13
+ "summary": "Export account data",
14
+ "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.",
15
+ "parameters": [],
16
+ "requestBodyType": "",
17
+ "requestBodyRequired": false,
18
+ "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 } }",
19
+ "responseStatus": "200"
20
+ },
21
+ "listAgentCredentials": {
22
+ "operationId": "listAgentCredentials",
23
+ "method": "GET",
24
+ "path": "/v1/projects/{project_id}/agents",
25
+ "summary": "List agent credentials",
26
+ "description": "Lists agent credentials for the project. Secrets are never returned.",
27
+ "parameters": [
28
+ {
29
+ "name": "project_id",
30
+ "in": "path",
31
+ "required": true,
32
+ "type": "string",
33
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
34
+ },
35
+ {
36
+ "name": "page_size",
37
+ "in": "query",
38
+ "required": false,
39
+ "type": "number",
40
+ "description": "Maximum number of items to return (1-100, default 20)."
41
+ },
42
+ {
43
+ "name": "page_token",
44
+ "in": "query",
45
+ "required": false,
46
+ "type": "string",
47
+ "description": "Opaque token for cursor-based pagination."
48
+ }
49
+ ],
50
+ "requestBodyType": "",
51
+ "requestBodyRequired": false,
52
+ "responseType": "{ agents: ({ auth_method?: \"cleartext\" | \"scram-sha-256\"; created_at: string; expires_at?: string; id: string; last_used_at?: string; name: string; pg_username: string; policy_profile_id: string; principal_type?: \"agent\" | \"human\"; project_id: string; status: \"active\" | \"disabled\" | \"revoked\"; updated_at: string })[]; next_page_token?: string }",
53
+ "responseStatus": "200"
54
+ },
55
+ "createAgentCredential": {
56
+ "operationId": "createAgentCredential",
57
+ "method": "POST",
58
+ "path": "/v1/projects/{project_id}/agents",
59
+ "summary": "Create an agent credential",
60
+ "description": "Issues a scoped Postgres login and hosted MCP token for an AI agent. The connection string and MCP token are returned once and cannot be retrieved again.",
61
+ "parameters": [
62
+ {
63
+ "name": "project_id",
64
+ "in": "path",
65
+ "required": true,
66
+ "type": "string",
67
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
68
+ }
69
+ ],
70
+ "requestBodyType": "{ expires_at?: string; name: string; policy_profile_id: string; principal_type?: \"agent\" | \"human\" }",
71
+ "requestBodyRequired": true,
72
+ "responseType": "{ connection_string: string; credential: { auth_method?: \"cleartext\" | \"scram-sha-256\"; created_at: string; expires_at?: string; id: string; last_used_at?: string; name: string; pg_username: string; policy_profile_id: string; principal_type?: \"agent\" | \"human\"; project_id: string; status: \"active\" | \"disabled\" | \"revoked\"; updated_at: string }; mcp_token: string; mcp_url: string }",
73
+ "responseStatus": "201"
74
+ },
75
+ "getAgentCredential": {
76
+ "operationId": "getAgentCredential",
77
+ "method": "GET",
78
+ "path": "/v1/projects/{project_id}/agents/{agent_id}",
79
+ "summary": "Get an agent credential",
80
+ "description": "Returns a single agent credential. Secrets are never included.",
81
+ "parameters": [
82
+ {
83
+ "name": "project_id",
84
+ "in": "path",
85
+ "required": true,
86
+ "type": "string",
87
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
88
+ },
89
+ {
90
+ "name": "agent_id",
91
+ "in": "path",
92
+ "required": true,
93
+ "type": "string",
94
+ "description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
95
+ }
96
+ ],
97
+ "requestBodyType": "",
98
+ "requestBodyRequired": false,
99
+ "responseType": "{ auth_method?: \"cleartext\" | \"scram-sha-256\"; created_at: string; expires_at?: string; id: string; last_used_at?: string; name: string; pg_username: string; policy_profile_id: string; principal_type?: \"agent\" | \"human\"; project_id: string; status: \"active\" | \"disabled\" | \"revoked\"; updated_at: string }",
100
+ "responseStatus": "200"
101
+ },
102
+ "updateAgentCredentialStatus": {
103
+ "operationId": "updateAgentCredentialStatus",
104
+ "method": "PATCH",
105
+ "path": "/v1/projects/{project_id}/agents/{agent_id}",
106
+ "summary": "Enable or disable an agent credential",
107
+ "description": "Toggles the kill-switch. Disabling drops live connections within seconds.",
108
+ "parameters": [
109
+ {
110
+ "name": "project_id",
111
+ "in": "path",
112
+ "required": true,
113
+ "type": "string",
114
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
115
+ },
116
+ {
117
+ "name": "agent_id",
118
+ "in": "path",
119
+ "required": true,
120
+ "type": "string",
121
+ "description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
122
+ }
123
+ ],
124
+ "requestBodyType": "{ status: \"active\" | \"disabled\" }",
125
+ "requestBodyRequired": true,
126
+ "responseType": "{ auth_method?: \"cleartext\" | \"scram-sha-256\"; created_at: string; expires_at?: string; id: string; last_used_at?: string; name: string; pg_username: string; policy_profile_id: string; principal_type?: \"agent\" | \"human\"; project_id: string; status: \"active\" | \"disabled\" | \"revoked\"; updated_at: string }",
127
+ "responseStatus": "200"
128
+ },
129
+ "revokeAgentCredential": {
130
+ "operationId": "revokeAgentCredential",
131
+ "method": "DELETE",
132
+ "path": "/v1/projects/{project_id}/agents/{agent_id}",
133
+ "summary": "Revoke an agent credential",
134
+ "description": "Permanently revokes the credential and drops any live connections.",
135
+ "parameters": [
136
+ {
137
+ "name": "project_id",
138
+ "in": "path",
139
+ "required": true,
140
+ "type": "string",
141
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
142
+ },
143
+ {
144
+ "name": "agent_id",
145
+ "in": "path",
146
+ "required": true,
147
+ "type": "string",
148
+ "description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
149
+ }
150
+ ],
151
+ "requestBodyType": "",
152
+ "requestBodyRequired": false,
153
+ "responseType": "",
154
+ "responseStatus": "204"
155
+ },
156
+ "rotateAgentCredential": {
157
+ "operationId": "rotateAgentCredential",
158
+ "method": "POST",
159
+ "path": "/v1/projects/{project_id}/agents/{agent_id}/rotate",
160
+ "summary": "Rotate an agent credential's secrets",
161
+ "description": "Generates a new Postgres password and MCP token for the credential in place, keeping the same id, username, name, and policy. Live connections using the old password are dropped within seconds. The new secrets are returned once and cannot be retrieved again.",
162
+ "parameters": [
163
+ {
164
+ "name": "project_id",
165
+ "in": "path",
166
+ "required": true,
167
+ "type": "string",
168
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
169
+ },
170
+ {
171
+ "name": "agent_id",
172
+ "in": "path",
173
+ "required": true,
174
+ "type": "string",
175
+ "description": "Unique agent credential identifier (prefixed, e.g. agt_xxx)."
176
+ }
177
+ ],
178
+ "requestBodyType": "",
179
+ "requestBodyRequired": false,
180
+ "responseType": "{ connection_string: string; credential: { auth_method?: \"cleartext\" | \"scram-sha-256\"; created_at: string; expires_at?: string; id: string; last_used_at?: string; name: string; pg_username: string; policy_profile_id: string; principal_type?: \"agent\" | \"human\"; project_id: string; status: \"active\" | \"disabled\" | \"revoked\"; updated_at: string }; mcp_token: string; mcp_url: string }",
181
+ "responseStatus": "200"
182
+ },
183
+ "listAnomalyAlerts": {
184
+ "operationId": "listAnomalyAlerts",
185
+ "method": "GET",
186
+ "path": "/v1/projects/{project_id}/anomalies",
187
+ "summary": "List anomaly alerts",
188
+ "description": "Lists anomaly alerts for the project, newest first, optionally filtered by status.",
189
+ "parameters": [
190
+ {
191
+ "name": "project_id",
192
+ "in": "path",
193
+ "required": true,
194
+ "type": "string",
195
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
196
+ },
197
+ {
198
+ "name": "status",
199
+ "in": "query",
200
+ "required": false,
201
+ "type": "\"open\" | \"acknowledged\" | \"resolved\"",
202
+ "description": "Filter to a single status."
203
+ },
204
+ {
205
+ "name": "page_size",
206
+ "in": "query",
207
+ "required": false,
208
+ "type": "number",
209
+ "description": "Maximum number of items to return (1-100, default 20)."
210
+ },
211
+ {
212
+ "name": "page_token",
213
+ "in": "query",
214
+ "required": false,
215
+ "type": "string",
216
+ "description": "Opaque token for cursor-based pagination."
217
+ }
218
+ ],
219
+ "requestBodyType": "",
220
+ "requestBodyRequired": false,
221
+ "responseType": "{ anomalies: ({ acknowledged_at?: string; acknowledged_by?: string; created_at: string; credential_id?: string; details?: Record<string, unknown>; id: string; kind: string; project_id: string; severity: \"info\" | \"warning\" | \"critical\"; status: \"open\" | \"acknowledged\" | \"resolved\"; title: string; window_end?: string; window_start?: string })[]; next_page_token?: string }",
222
+ "responseStatus": "200"
223
+ },
224
+ "updateAnomalyAlert": {
225
+ "operationId": "updateAnomalyAlert",
226
+ "method": "PATCH",
227
+ "path": "/v1/projects/{project_id}/anomalies/{anomaly_id}",
228
+ "summary": "Triage an anomaly alert",
229
+ "description": "Updates the triage status of an anomaly alert (acknowledge or resolve).",
230
+ "parameters": [
231
+ {
232
+ "name": "project_id",
233
+ "in": "path",
234
+ "required": true,
235
+ "type": "string",
236
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
237
+ },
238
+ {
239
+ "name": "anomaly_id",
240
+ "in": "path",
241
+ "required": true,
242
+ "type": "string",
243
+ "description": "Unique anomaly alert identifier (prefixed, e.g. ano_xxx)."
244
+ }
245
+ ],
246
+ "requestBodyType": "{ status: \"acknowledged\" | \"resolved\" }",
247
+ "requestBodyRequired": true,
248
+ "responseType": "{ acknowledged_at?: string; acknowledged_by?: string; created_at: string; credential_id?: string; details?: Record<string, unknown>; id: string; kind: string; project_id: string; severity: \"info\" | \"warning\" | \"critical\"; status: \"open\" | \"acknowledged\" | \"resolved\"; title: string; window_end?: string; window_start?: string }",
249
+ "responseStatus": "200"
250
+ },
251
+ "listApprovalRequests": {
252
+ "operationId": "listApprovalRequests",
253
+ "method": "GET",
254
+ "path": "/v1/projects/{project_id}/approvals",
255
+ "summary": "List approval requests",
256
+ "description": "Lists approval requests for the project, newest first, optionally filtered by status.",
257
+ "parameters": [
258
+ {
259
+ "name": "project_id",
260
+ "in": "path",
261
+ "required": true,
262
+ "type": "string",
263
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
264
+ },
265
+ {
266
+ "name": "status",
267
+ "in": "query",
268
+ "required": false,
269
+ "type": "\"pending\" | \"approved\" | \"rejected\" | \"expired\" | \"executed\" | \"failed\"",
270
+ "description": "Filter to a single status."
271
+ },
272
+ {
273
+ "name": "page_size",
274
+ "in": "query",
275
+ "required": false,
276
+ "type": "number",
277
+ "description": "Maximum number of items to return (1-100, default 20)."
278
+ },
279
+ {
280
+ "name": "page_token",
281
+ "in": "query",
282
+ "required": false,
283
+ "type": "string",
284
+ "description": "Opaque token for cursor-based pagination."
285
+ }
286
+ ],
287
+ "requestBodyType": "",
288
+ "requestBodyRequired": false,
289
+ "responseType": "{ approvals: ({ credential_id?: string; decided_at?: string; decided_by?: string; expires_at: string; id: string; normalized_sql?: string; policy_profile_id: string; project_id: string; reason?: string; region?: string; requested_at: string; session_id?: string; sql: string; statement_kind?: string; status: \"pending\" | \"approved\" | \"rejected\" | \"expired\" | \"executed\" | \"failed\" })[]; next_page_token?: string }",
290
+ "responseStatus": "200"
291
+ },
292
+ "approveApprovalRequest": {
293
+ "operationId": "approveApprovalRequest",
294
+ "method": "POST",
295
+ "path": "/v1/projects/{project_id}/approvals/{approval_id}/approve",
296
+ "summary": "Approve a held statement",
297
+ "description": "Approves a pending approval request, releasing the held statement.",
298
+ "parameters": [
299
+ {
300
+ "name": "project_id",
301
+ "in": "path",
302
+ "required": true,
303
+ "type": "string",
304
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
305
+ },
306
+ {
307
+ "name": "approval_id",
308
+ "in": "path",
309
+ "required": true,
310
+ "type": "string",
311
+ "description": "Unique approval request identifier (prefixed, e.g. apr_xxx)."
312
+ }
313
+ ],
314
+ "requestBodyType": "{ reason?: string }",
315
+ "requestBodyRequired": false,
316
+ "responseType": "{ credential_id?: string; decided_at?: string; decided_by?: string; expires_at: string; id: string; normalized_sql?: string; policy_profile_id: string; project_id: string; reason?: string; region?: string; requested_at: string; session_id?: string; sql: string; statement_kind?: string; status: \"pending\" | \"approved\" | \"rejected\" | \"expired\" | \"executed\" | \"failed\" }",
317
+ "responseStatus": "200"
318
+ },
319
+ "rejectApprovalRequest": {
320
+ "operationId": "rejectApprovalRequest",
321
+ "method": "POST",
322
+ "path": "/v1/projects/{project_id}/approvals/{approval_id}/reject",
323
+ "summary": "Reject a held statement",
324
+ "description": "Rejects a pending approval request, denying the held statement.",
325
+ "parameters": [
326
+ {
327
+ "name": "project_id",
328
+ "in": "path",
329
+ "required": true,
330
+ "type": "string",
331
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
332
+ },
333
+ {
334
+ "name": "approval_id",
335
+ "in": "path",
336
+ "required": true,
337
+ "type": "string",
338
+ "description": "Unique approval request identifier (prefixed, e.g. apr_xxx)."
339
+ }
340
+ ],
341
+ "requestBodyType": "{ reason?: string }",
342
+ "requestBodyRequired": false,
343
+ "responseType": "{ credential_id?: string; decided_at?: string; decided_by?: string; expires_at: string; id: string; normalized_sql?: string; policy_profile_id: string; project_id: string; reason?: string; region?: string; requested_at: string; session_id?: string; sql: string; statement_kind?: string; status: \"pending\" | \"approved\" | \"rejected\" | \"expired\" | \"executed\" | \"failed\" }",
344
+ "responseStatus": "200"
345
+ },
346
+ "listAuditLogs": {
347
+ "operationId": "listAuditLogs",
348
+ "method": "GET",
349
+ "path": "/v1/projects/{project_id}/audit-logs",
350
+ "summary": "List agent audit logs",
351
+ "description": "Returns agent statement audit entries for the project, newest first, with optional credential, event, decision, source and date-range filters.",
352
+ "parameters": [
353
+ {
354
+ "name": "project_id",
355
+ "in": "path",
356
+ "required": true,
357
+ "type": "string",
358
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
359
+ },
360
+ {
361
+ "name": "credential_id",
362
+ "in": "query",
363
+ "required": false,
364
+ "type": "string",
365
+ "description": "Filter to a single agent credential."
366
+ },
367
+ {
368
+ "name": "event",
369
+ "in": "query",
370
+ "required": false,
371
+ "type": "string",
372
+ "description": "Filter to a single event type (e.g. blocked, masked, query)."
373
+ },
374
+ {
375
+ "name": "decision",
376
+ "in": "query",
377
+ "required": false,
378
+ "type": "\"allow\" | \"block\" | \"mask\" | \"truncate\"",
379
+ "description": "Coarse outcome filter that groups events. `allow` = query; `block` = blocked, budget_exhausted, auth_failed, credential_expired; `mask` = masked; `truncate` = truncated."
380
+ },
381
+ {
382
+ "name": "source",
383
+ "in": "query",
384
+ "required": false,
385
+ "type": "\"wire\" | \"mcp\" | \"control\"",
386
+ "description": "Filter by statement origin (wire, mcp, or control)."
387
+ },
388
+ {
389
+ "name": "start",
390
+ "in": "query",
391
+ "required": false,
392
+ "type": "string",
393
+ "description": "Return entries at or after this timestamp (inclusive lower bound)."
394
+ },
395
+ {
396
+ "name": "end",
397
+ "in": "query",
398
+ "required": false,
399
+ "type": "string",
400
+ "description": "Return entries strictly older than this timestamp (cursor / upper bound)."
401
+ },
402
+ {
403
+ "name": "before",
404
+ "in": "query",
405
+ "required": false,
406
+ "type": "string",
407
+ "description": "Return entries strictly older than this timestamp (keyset pagination cursor)."
408
+ },
409
+ {
410
+ "name": "page_size",
411
+ "in": "query",
412
+ "required": false,
413
+ "type": "number",
414
+ "description": "Maximum number of items to return (1-100, default 20)."
415
+ }
416
+ ],
417
+ "requestBodyType": "",
418
+ "requestBodyRequired": false,
419
+ "responseType": "{ entries: ({ bytes_out?: number; cache_status?: string; client_ip?: string; credential_id?: string; decision_rule?: string; event: string; id: string; latency_ms?: number; normalized_sql?: string; project_id: string; query_hash?: string; reason?: string; region?: string; rows_returned?: number; session_id?: string; source?: string; sql?: string; statement_kind?: string; ts: string })[]; next_page_token?: string }",
420
+ "responseStatus": "200"
421
+ },
422
+ "exportAuditLogs": {
423
+ "operationId": "exportAuditLogs",
424
+ "method": "GET",
425
+ "path": "/v1/projects/{project_id}/audit-logs/export",
426
+ "summary": "Export agent audit logs as CSV",
427
+ "description": "Streams the project's agent audit entries as a CSV file, newest first, honoring the same credential, event, decision, source and date-range filters as the list endpoint. The full filtered set is streamed (no pagination); the result is suitable for spreadsheets, SIEM ingestion, and compliance archives.",
428
+ "parameters": [
429
+ {
430
+ "name": "project_id",
431
+ "in": "path",
432
+ "required": true,
433
+ "type": "string",
434
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
435
+ },
436
+ {
437
+ "name": "credential_id",
438
+ "in": "query",
439
+ "required": false,
440
+ "type": "string",
441
+ "description": "Filter to a single agent credential."
442
+ },
443
+ {
444
+ "name": "event",
445
+ "in": "query",
446
+ "required": false,
447
+ "type": "string",
448
+ "description": "Filter to a single event type (e.g. blocked, masked, query)."
449
+ },
450
+ {
451
+ "name": "decision",
452
+ "in": "query",
453
+ "required": false,
454
+ "type": "\"allow\" | \"block\" | \"mask\" | \"truncate\"",
455
+ "description": "Coarse outcome filter that groups events. `allow` = query; `block` = blocked, budget_exhausted, auth_failed, credential_expired; `mask` = masked; `truncate` = truncated."
456
+ },
457
+ {
458
+ "name": "source",
459
+ "in": "query",
460
+ "required": false,
461
+ "type": "\"wire\" | \"mcp\" | \"control\"",
462
+ "description": "Filter by statement origin (wire, mcp, or control)."
463
+ },
464
+ {
465
+ "name": "start",
466
+ "in": "query",
467
+ "required": false,
468
+ "type": "string",
469
+ "description": "Return entries at or after this timestamp (inclusive lower bound)."
470
+ },
471
+ {
472
+ "name": "end",
473
+ "in": "query",
474
+ "required": false,
475
+ "type": "string",
476
+ "description": "Return entries strictly older than this timestamp (cursor / upper bound)."
477
+ }
478
+ ],
479
+ "requestBodyType": "",
480
+ "requestBodyRequired": false,
481
+ "responseType": "",
482
+ "responseStatus": "200"
483
+ },
484
+ "listPlans": {
485
+ "operationId": "listPlans",
486
+ "method": "GET",
487
+ "path": "/v1/plans",
488
+ "summary": "List available plans",
489
+ "description": "Returns all available plan tiers with their limits and pricing.",
490
+ "parameters": [],
491
+ "requestBodyType": "",
492
+ "requestBodyRequired": false,
493
+ "responseType": "{ plans: ({ annual_price?: number; description?: string; label: string; limits: { bytes_per_month: number; included_seats: number; max_connections: number; max_databases: number; max_projects: number; max_query_shapes: number; queries_per_day: number; queries_per_second: number }; monthly_price: number; name: string; overage_text?: string; trial_days?: number })[] }",
494
+ "responseStatus": "200"
495
+ },
496
+ "getOrganizationPlan": {
497
+ "operationId": "getOrganizationPlan",
498
+ "method": "GET",
499
+ "path": "/v1/organizations/{org_id}/plan",
500
+ "summary": "Get organization plan",
501
+ "description": "Returns the current plan and limits for the organization.",
502
+ "parameters": [
503
+ {
504
+ "name": "org_id",
505
+ "in": "path",
506
+ "required": true,
507
+ "type": "string",
508
+ "description": "Unique organization identifier."
509
+ }
510
+ ],
511
+ "requestBodyType": "",
512
+ "requestBodyRequired": false,
513
+ "responseType": "{ billing_provider?: \"stripe\" | \"vercel\" | \"aws\" | \"manual\"; created_at?: string; current_period_end?: string; custom_pricing?: boolean; enabled?: boolean; limits: { bytes_per_month: number; included_seats: number; max_connections: number; max_databases: number; max_projects: number; max_query_shapes: number; queries_per_day: number; queries_per_second: number }; org_id: string; plan: \"starter\" | \"pro\" | \"scale\" | \"enterprise\"; spend_limit?: number; subscription_status?: \"none\" | \"active\" | \"trialing\" | \"past_due\" | \"canceled\" | \"unpaid\" | \"incomplete\" | \"incomplete_expired\" | \"paused\"; updated_at?: string }",
514
+ "responseStatus": "200"
515
+ },
516
+ "getVercelInstallation": {
517
+ "operationId": "getVercelInstallation",
518
+ "method": "GET",
519
+ "path": "/v1/organizations/{org_id}/vercel-installation",
520
+ "summary": "Get Vercel Marketplace installation status",
521
+ "description": "Returns the Vercel Marketplace installation for the organization,\nincluding its provisioned resources and their current-period usage.\nReturns 404 when the organization was not provisioned through the\nVercel Marketplace. Powers the dashboard's Vercel integration page.\n",
522
+ "parameters": [
523
+ {
524
+ "name": "org_id",
525
+ "in": "path",
526
+ "required": true,
527
+ "type": "string",
528
+ "description": "Unique organization identifier."
529
+ }
530
+ ],
531
+ "requestBodyType": "",
532
+ "requestBodyRequired": false,
533
+ "responseType": "{ created_at?: string; installation_id: string; plan: string; resources: ({ billing_plan_id: string; name: string; period_bytes: number; period_queries: number; project_id: string; resource_id: string; status: \"ready\" | \"suspended\" | \"deleted\" })[]; status: string; vercel_account_id: string }",
534
+ "responseStatus": "200"
535
+ },
536
+ "updateSpendLimit": {
537
+ "operationId": "updateSpendLimit",
538
+ "method": "PUT",
539
+ "path": "/v1/organizations/{org_id}/spend-limit",
540
+ "summary": "Update spend limit",
541
+ "description": "Sets the monthly spend limit for an organization. Null removes the limit.",
542
+ "parameters": [
543
+ {
544
+ "name": "org_id",
545
+ "in": "path",
546
+ "required": true,
547
+ "type": "string",
548
+ "description": "Unique organization identifier."
549
+ }
550
+ ],
551
+ "requestBodyType": "{ spend_limit?: number }",
552
+ "requestBodyRequired": true,
553
+ "responseType": "{ billing_provider?: \"stripe\" | \"vercel\" | \"aws\" | \"manual\"; created_at?: string; current_period_end?: string; custom_pricing?: boolean; enabled?: boolean; limits: { bytes_per_month: number; included_seats: number; max_connections: number; max_databases: number; max_projects: number; max_query_shapes: number; queries_per_day: number; queries_per_second: number }; org_id: string; plan: \"starter\" | \"pro\" | \"scale\" | \"enterprise\"; spend_limit?: number; subscription_status?: \"none\" | \"active\" | \"trialing\" | \"past_due\" | \"canceled\" | \"unpaid\" | \"incomplete\" | \"incomplete_expired\" | \"paused\"; updated_at?: string }",
554
+ "responseStatus": "200"
555
+ },
556
+ "submitCancellationFeedback": {
557
+ "operationId": "submitCancellationFeedback",
558
+ "method": "POST",
559
+ "path": "/v1/organizations/{org_id}/cancellation-feedback",
560
+ "summary": "Submit cancellation feedback",
561
+ "description": "Records optional feedback when a user cancels their subscription.",
562
+ "parameters": [
563
+ {
564
+ "name": "org_id",
565
+ "in": "path",
566
+ "required": true,
567
+ "type": "string",
568
+ "description": "Unique organization identifier."
569
+ }
570
+ ],
571
+ "requestBodyType": "{ feedback?: string; reason?: string }",
572
+ "requestBodyRequired": true,
573
+ "responseType": "",
574
+ "responseStatus": "204"
575
+ },
576
+ "listDatabaseBranches": {
577
+ "operationId": "listDatabaseBranches",
578
+ "method": "GET",
579
+ "path": "/v1/projects/{project_id}/branches",
580
+ "summary": "List sandbox branches",
581
+ "description": "Lists ephemeral sandbox branches for the project's databases.",
582
+ "parameters": [
583
+ {
584
+ "name": "project_id",
585
+ "in": "path",
586
+ "required": true,
587
+ "type": "string",
588
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
589
+ },
590
+ {
591
+ "name": "status",
592
+ "in": "query",
593
+ "required": false,
594
+ "type": "\"pending\" | \"ready\" | \"error\" | \"discarded\"",
595
+ "description": "Filter to a single status."
596
+ },
597
+ {
598
+ "name": "page_size",
599
+ "in": "query",
600
+ "required": false,
601
+ "type": "number",
602
+ "description": "Maximum number of items to return (1-100, default 20)."
603
+ },
604
+ {
605
+ "name": "page_token",
606
+ "in": "query",
607
+ "required": false,
608
+ "type": "string",
609
+ "description": "Opaque token for cursor-based pagination."
610
+ }
611
+ ],
612
+ "requestBodyType": "",
613
+ "requestBodyRequired": false,
614
+ "responseType": "{ branches: ({ branch_name: string; created_at: string; credential_id?: string; database_id: string; discarded_at?: string; error?: string; expires_at?: string; id: string; session_id?: string; status: \"pending\" | \"ready\" | \"error\" | \"discarded\" })[]; next_page_token?: string }",
615
+ "responseStatus": "200"
616
+ },
617
+ "discardDatabaseBranch": {
618
+ "operationId": "discardDatabaseBranch",
619
+ "method": "DELETE",
620
+ "path": "/v1/projects/{project_id}/branches/{branch_id}",
621
+ "summary": "Discard a sandbox branch",
622
+ "description": "Marks an ephemeral sandbox branch as discarded for teardown.",
623
+ "parameters": [
624
+ {
625
+ "name": "project_id",
626
+ "in": "path",
627
+ "required": true,
628
+ "type": "string",
629
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
630
+ },
631
+ {
632
+ "name": "branch_id",
633
+ "in": "path",
634
+ "required": true,
635
+ "type": "string",
636
+ "description": "Unique sandbox branch identifier (prefixed, e.g. brn_xxx)."
637
+ }
638
+ ],
639
+ "requestBodyType": "",
640
+ "requestBodyRequired": false,
641
+ "responseType": "",
642
+ "responseStatus": "204"
643
+ },
644
+ "listCacheRules": {
645
+ "operationId": "listCacheRules",
646
+ "method": "GET",
647
+ "path": "/v1/projects/{project_id}/databases/{database_id}/cache-rules",
648
+ "summary": "List cache rules",
649
+ "description": "Returns the cache rules for a database, showing all observed query\nshapes with their stats and cache recommendations.\n",
650
+ "parameters": [
651
+ {
652
+ "name": "project_id",
653
+ "in": "path",
654
+ "required": true,
655
+ "type": "string",
656
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
657
+ },
658
+ {
659
+ "name": "database_id",
660
+ "in": "path",
661
+ "required": true,
662
+ "type": "string",
663
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
664
+ },
665
+ {
666
+ "name": "page_size",
667
+ "in": "query",
668
+ "required": false,
669
+ "type": "number",
670
+ "description": "Maximum number of items to return (1-100, default 20)."
671
+ },
672
+ {
673
+ "name": "page_token",
674
+ "in": "query",
675
+ "required": false,
676
+ "type": "string",
677
+ "description": "Opaque token for cursor-based pagination."
678
+ }
679
+ ],
680
+ "requestBodyType": "",
681
+ "requestBodyRequired": false,
682
+ "responseType": "{ entries: ({ avg_latency_ms: number; avg_response_bytes: number; cache_enabled: boolean; cache_swr_seconds?: number; cache_ttl_seconds?: number; call_count: number; first_seen_at: string; last_seen_at: string; normalized_sql: string; p95_latency_ms: number; query_hash: string; query_type: \"read\" | \"write\" | \"other\"; recommendation: \"great\" | \"good\" | \"fair\" | \"poor\"; stability_rate: number })[]; next_page_token?: string }",
683
+ "responseStatus": "200"
684
+ },
685
+ "updateCacheRule": {
686
+ "operationId": "updateCacheRule",
687
+ "method": "PUT",
688
+ "path": "/v1/projects/{project_id}/databases/{database_id}/cache-rules/{query_hash}",
689
+ "summary": "Update cache rule",
690
+ "description": "Enable or disable caching for a specific query shape, with optional\nTTL and SWR overrides. Requires the query to exist in the cache rules.\n",
691
+ "parameters": [
692
+ {
693
+ "name": "project_id",
694
+ "in": "path",
695
+ "required": true,
696
+ "type": "string",
697
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
698
+ },
699
+ {
700
+ "name": "database_id",
701
+ "in": "path",
702
+ "required": true,
703
+ "type": "string",
704
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
705
+ },
706
+ {
707
+ "name": "query_hash",
708
+ "in": "path",
709
+ "required": true,
710
+ "type": "string",
711
+ "description": "xxhash64 hex of the normalized SQL."
712
+ }
713
+ ],
714
+ "requestBodyType": "{ cache_enabled: boolean; cache_swr_seconds?: number; cache_ttl_seconds?: number }",
715
+ "requestBodyRequired": true,
716
+ "responseType": "{ entry: { avg_latency_ms: number; avg_response_bytes: number; cache_enabled: boolean; cache_swr_seconds?: number; cache_ttl_seconds?: number; call_count: number; first_seen_at: string; last_seen_at: string; normalized_sql: string; p95_latency_ms: number; query_hash: string; query_type: \"read\" | \"write\" | \"other\"; recommendation: \"great\" | \"good\" | \"fair\" | \"poor\"; stability_rate: number } }",
717
+ "responseStatus": "200"
718
+ },
719
+ "listDatabases": {
720
+ "operationId": "listDatabases",
721
+ "method": "GET",
722
+ "path": "/v1/projects/{project_id}/databases",
723
+ "summary": "List databases",
724
+ "description": "Lists all databases registered for the project.",
725
+ "parameters": [
726
+ {
727
+ "name": "project_id",
728
+ "in": "path",
729
+ "required": true,
730
+ "type": "string",
731
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
732
+ },
733
+ {
734
+ "name": "page_size",
735
+ "in": "query",
736
+ "required": false,
737
+ "type": "number",
738
+ "description": "Maximum number of items to return (1-100, default 20)."
739
+ },
740
+ {
741
+ "name": "page_token",
742
+ "in": "query",
743
+ "required": false,
744
+ "type": "string",
745
+ "description": "Opaque token for cursor-based pagination."
746
+ }
747
+ ],
748
+ "requestBodyType": "",
749
+ "requestBodyRequired": false,
750
+ "responseType": "{ databases: ({ 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 })[]; next_page_token?: string }",
751
+ "responseStatus": "200"
752
+ },
753
+ "createDatabase": {
754
+ "operationId": "createDatabase",
755
+ "method": "POST",
756
+ "path": "/v1/projects/{project_id}/databases",
757
+ "summary": "Add a database",
758
+ "description": "Registers a new upstream PostgreSQL database for the project.",
759
+ "parameters": [
760
+ {
761
+ "name": "project_id",
762
+ "in": "path",
763
+ "required": true,
764
+ "type": "string",
765
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
766
+ }
767
+ ],
768
+ "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 }",
769
+ "requestBodyRequired": true,
770
+ "responseType": "{ 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 }",
771
+ "responseStatus": "201"
772
+ },
773
+ "getDatabase": {
774
+ "operationId": "getDatabase",
775
+ "method": "GET",
776
+ "path": "/v1/projects/{project_id}/databases/{database_id}",
777
+ "summary": "Get a database",
778
+ "description": "Returns a single database by ID.",
779
+ "parameters": [
780
+ {
781
+ "name": "project_id",
782
+ "in": "path",
783
+ "required": true,
784
+ "type": "string",
785
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
786
+ },
787
+ {
788
+ "name": "database_id",
789
+ "in": "path",
790
+ "required": true,
791
+ "type": "string",
792
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
793
+ }
794
+ ],
795
+ "requestBodyType": "",
796
+ "requestBodyRequired": false,
797
+ "responseType": "{ 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 }",
798
+ "responseStatus": "200"
799
+ },
800
+ "updateDatabase": {
801
+ "operationId": "updateDatabase",
802
+ "method": "PATCH",
803
+ "path": "/v1/projects/{project_id}/databases/{database_id}",
804
+ "summary": "Update a database",
805
+ "description": "Partially updates a database connection. Only provided fields are modified.",
806
+ "parameters": [
807
+ {
808
+ "name": "project_id",
809
+ "in": "path",
810
+ "required": true,
811
+ "type": "string",
812
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
813
+ },
814
+ {
815
+ "name": "database_id",
816
+ "in": "path",
817
+ "required": true,
818
+ "type": "string",
819
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
820
+ }
821
+ ],
822
+ "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 }",
823
+ "requestBodyRequired": true,
824
+ "responseType": "{ 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 }",
825
+ "responseStatus": "200"
826
+ },
827
+ "deleteDatabase": {
828
+ "operationId": "deleteDatabase",
829
+ "method": "DELETE",
830
+ "path": "/v1/projects/{project_id}/databases/{database_id}",
831
+ "summary": "Delete a database",
832
+ "description": "Removes a database registration from the project.",
833
+ "parameters": [
834
+ {
835
+ "name": "project_id",
836
+ "in": "path",
837
+ "required": true,
838
+ "type": "string",
839
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
840
+ },
841
+ {
842
+ "name": "database_id",
843
+ "in": "path",
844
+ "required": true,
845
+ "type": "string",
846
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
847
+ }
848
+ ],
849
+ "requestBodyType": "",
850
+ "requestBodyRequired": false,
851
+ "responseType": "",
852
+ "responseStatus": "204"
853
+ },
854
+ "testDatabaseConnection": {
855
+ "operationId": "testDatabaseConnection",
856
+ "method": "POST",
857
+ "path": "/v1/projects/{project_id}/databases/{database_id}/test-connection",
858
+ "summary": "Test database connection",
859
+ "description": "Attempts to connect to the upstream database using the stored credentials and returns the result.",
860
+ "parameters": [
861
+ {
862
+ "name": "project_id",
863
+ "in": "path",
864
+ "required": true,
865
+ "type": "string",
866
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
867
+ },
868
+ {
869
+ "name": "database_id",
870
+ "in": "path",
871
+ "required": true,
872
+ "type": "string",
873
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
874
+ }
875
+ ],
876
+ "requestBodyType": "",
877
+ "requestBodyRequired": false,
878
+ "responseType": "{ error?: string; latency_ms?: number; ok: boolean; server_version?: string }",
879
+ "responseStatus": "200"
880
+ },
881
+ "scanDatabaseForPii": {
882
+ "operationId": "scanDatabaseForPii",
883
+ "method": "POST",
884
+ "path": "/v1/projects/{project_id}/databases/{database_id}/scan-pii",
885
+ "summary": "Scan a database for likely-PII columns",
886
+ "description": "Connects to the upstream database read-only, inspects information_schema and samples column values against PII heuristics, and returns ranked masking suggestions. Suggestions are advisory — the operator reviews them and applies the ones they want into a policy profile's masking rules. Nothing is auto-applied.",
887
+ "parameters": [
888
+ {
889
+ "name": "project_id",
890
+ "in": "path",
891
+ "required": true,
892
+ "type": "string",
893
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
894
+ },
895
+ {
896
+ "name": "database_id",
897
+ "in": "path",
898
+ "required": true,
899
+ "type": "string",
900
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
901
+ }
902
+ ],
903
+ "requestBodyType": "",
904
+ "requestBodyRequired": false,
905
+ "responseType": "{ error?: string; scanned_columns: number; scanned_tables: number; suggestions: ({ column: string; confidence: number; data_type: string; mask_kind: \"redact\" | \"null\" | \"hash\"; pii_type: \"email\" | \"phone\" | \"ssn\" | \"credit_card\" | \"ip_address\" | \"full_name\" | \"street_address\" | \"date_of_birth\" | \"national_id\" | \"passport\" | \"bank_account\" | \"api_secret\" | \"other\"; reasons: string[]; sample_match_count?: number; sample_size?: number; schema: string; table: string })[]; truncated?: boolean }",
906
+ "responseStatus": "200"
907
+ },
908
+ "getSchemaCatalog": {
909
+ "operationId": "getSchemaCatalog",
910
+ "method": "GET",
911
+ "path": "/v1/projects/{project_id}/databases/{database_id}/schema-catalog",
912
+ "summary": "Read a database's schema catalog",
913
+ "description": "Connects to the upstream database read-only and returns its user relations (tables and views) and columns. Powers table/column autocomplete and view-aware warnings in the policy editor — relation kind distinguishes a view (whose masking/row-filters apply to the view itself, not its base tables) from a base table, and a per-column is_binary flag flags columns that mask to NULL. System schemas are excluded; nothing is persisted.",
914
+ "parameters": [
915
+ {
916
+ "name": "project_id",
917
+ "in": "path",
918
+ "required": true,
919
+ "type": "string",
920
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
921
+ },
922
+ {
923
+ "name": "database_id",
924
+ "in": "path",
925
+ "required": true,
926
+ "type": "string",
927
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
928
+ }
929
+ ],
930
+ "requestBodyType": "",
931
+ "requestBodyRequired": false,
932
+ "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 }",
933
+ "responseStatus": "200"
934
+ },
935
+ "listCustomDomains": {
936
+ "operationId": "listCustomDomains",
937
+ "method": "GET",
938
+ "path": "/v1/projects/{project_id}/domains",
939
+ "summary": "List custom domains",
940
+ "description": "Lists all custom domains registered for the project.",
941
+ "parameters": [
942
+ {
943
+ "name": "project_id",
944
+ "in": "path",
945
+ "required": true,
946
+ "type": "string",
947
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
948
+ },
949
+ {
950
+ "name": "page_size",
951
+ "in": "query",
952
+ "required": false,
953
+ "type": "number",
954
+ "description": "Maximum number of items to return (1-100, default 20)."
955
+ },
956
+ {
957
+ "name": "page_token",
958
+ "in": "query",
959
+ "required": false,
960
+ "type": "string",
961
+ "description": "Opaque token for cursor-based pagination."
962
+ }
963
+ ],
964
+ "requestBodyType": "",
965
+ "requestBodyRequired": false,
966
+ "responseType": "{ domains: ({ created_at: string; dns_instructions?: { acme_cname_host?: string; acme_cname_target?: string; cname_host?: string; cname_target?: string; txt_host?: string; txt_value?: string }; dns_verification_token: string; domain: string; id: string; project_id: string; tls_cert_expiry?: string; updated_at: string; verified: boolean; verified_at?: string })[]; next_page_token?: string }",
967
+ "responseStatus": "200"
968
+ },
969
+ "createCustomDomain": {
970
+ "operationId": "createCustomDomain",
971
+ "method": "POST",
972
+ "path": "/v1/projects/{project_id}/domains",
973
+ "summary": "Add a custom domain",
974
+ "description": "Registers a new custom domain for the project. Returns DNS verification instructions. Requires a Scale or Enterprise plan.",
975
+ "parameters": [
976
+ {
977
+ "name": "project_id",
978
+ "in": "path",
979
+ "required": true,
980
+ "type": "string",
981
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
982
+ }
983
+ ],
984
+ "requestBodyType": "{ domain: string }",
985
+ "requestBodyRequired": true,
986
+ "responseType": "{ created_at: string; dns_instructions?: { acme_cname_host?: string; acme_cname_target?: string; cname_host?: string; cname_target?: string; txt_host?: string; txt_value?: string }; dns_verification_token: string; domain: string; id: string; project_id: string; tls_cert_expiry?: string; updated_at: string; verified: boolean; verified_at?: string }",
987
+ "responseStatus": "201"
988
+ },
989
+ "deleteCustomDomain": {
990
+ "operationId": "deleteCustomDomain",
991
+ "method": "DELETE",
992
+ "path": "/v1/projects/{project_id}/domains/{domain_id}",
993
+ "summary": "Delete a custom domain",
994
+ "description": "Removes a custom domain from the project and revokes its TLS certificate.",
995
+ "parameters": [
996
+ {
997
+ "name": "project_id",
998
+ "in": "path",
999
+ "required": true,
1000
+ "type": "string",
1001
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1002
+ },
1003
+ {
1004
+ "name": "domain_id",
1005
+ "in": "path",
1006
+ "required": true,
1007
+ "type": "string",
1008
+ "description": "Unique custom domain identifier (prefixed, e.g. dom_xxx)."
1009
+ }
1010
+ ],
1011
+ "requestBodyType": "",
1012
+ "requestBodyRequired": false,
1013
+ "responseType": "",
1014
+ "responseStatus": "204"
1015
+ },
1016
+ "verifyCustomDomain": {
1017
+ "operationId": "verifyCustomDomain",
1018
+ "method": "POST",
1019
+ "path": "/v1/projects/{project_id}/domains/{domain_id}/verify",
1020
+ "summary": "Verify custom domain DNS",
1021
+ "description": "Checks DNS TXT record to verify domain ownership. Updates domain status on success. Requires a Scale or Enterprise plan.",
1022
+ "parameters": [
1023
+ {
1024
+ "name": "project_id",
1025
+ "in": "path",
1026
+ "required": true,
1027
+ "type": "string",
1028
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1029
+ },
1030
+ {
1031
+ "name": "domain_id",
1032
+ "in": "path",
1033
+ "required": true,
1034
+ "type": "string",
1035
+ "description": "Unique custom domain identifier (prefixed, e.g. dom_xxx)."
1036
+ }
1037
+ ],
1038
+ "requestBodyType": "",
1039
+ "requestBodyRequired": false,
1040
+ "responseType": "{ domain?: { created_at: string; dns_instructions?: { acme_cname_host?: string; acme_cname_target?: string; cname_host?: string; cname_target?: string; txt_host?: string; txt_value?: string }; dns_verification_token: string; domain: string; id: string; project_id: string; tls_cert_expiry?: string; updated_at: string; verified: boolean; verified_at?: string }; error?: string; verified: boolean }",
1041
+ "responseStatus": "200"
1042
+ },
1043
+ "getHealth": {
1044
+ "operationId": "getHealth",
1045
+ "method": "GET",
1046
+ "path": "/v1/health",
1047
+ "summary": "Health check",
1048
+ "description": "Returns the health status of the API server.",
1049
+ "parameters": [],
1050
+ "requestBodyType": "",
1051
+ "requestBodyRequired": false,
1052
+ "responseType": "{ image_sha: string; status: \"ok\" | \"degraded\"; timestamp?: string; version: string }",
1053
+ "responseStatus": "200"
1054
+ },
1055
+ "getProjectInsights": {
1056
+ "operationId": "getProjectInsights",
1057
+ "method": "GET",
1058
+ "path": "/v1/projects/{project_id}/insights",
1059
+ "summary": "Get query insights for a project",
1060
+ "description": "Returns aggregated query-level analytics for a project including top queries\nby count, cache hit/miss summary, and latency statistics.\n",
1061
+ "parameters": [
1062
+ {
1063
+ "name": "project_id",
1064
+ "in": "path",
1065
+ "required": true,
1066
+ "type": "string",
1067
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1068
+ },
1069
+ {
1070
+ "name": "range",
1071
+ "in": "query",
1072
+ "required": false,
1073
+ "type": "\"1h\" | \"6h\" | \"24h\" | \"7d\"",
1074
+ "description": "Time range to query. Defaults to 24h."
1075
+ },
1076
+ {
1077
+ "name": "limit",
1078
+ "in": "query",
1079
+ "required": false,
1080
+ "type": "number",
1081
+ "description": "Maximum number of top queries to return (1-100)."
1082
+ }
1083
+ ],
1084
+ "requestBodyType": "",
1085
+ "requestBodyRequired": false,
1086
+ "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 })[] }",
1087
+ "responseStatus": "200"
1088
+ },
1089
+ "lintMigration": {
1090
+ "operationId": "lintMigration",
1091
+ "method": "POST",
1092
+ "path": "/v1/projects/{project_id}/migrations:lint",
1093
+ "summary": "Lint a migration",
1094
+ "description": "Analyzes a migration script for unsafe schema changes and returns findings.",
1095
+ "parameters": [
1096
+ {
1097
+ "name": "project_id",
1098
+ "in": "path",
1099
+ "required": true,
1100
+ "type": "string",
1101
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1102
+ }
1103
+ ],
1104
+ "requestBodyType": "{ database_id?: string; sql: string }",
1105
+ "requestBodyRequired": true,
1106
+ "responseType": "{ findings: ({ hint?: string; message: string; rule: string; severity: \"info\" | \"warning\" | \"error\"; statement?: string })[]; safe: boolean }",
1107
+ "responseStatus": "200"
1108
+ },
1109
+ "getOnboardingProgress": {
1110
+ "operationId": "getOnboardingProgress",
1111
+ "method": "GET",
1112
+ "path": "/v1/organizations/{org_id}/onboarding",
1113
+ "summary": "Get onboarding progress",
1114
+ "description": "Returns the onboarding checklist progress for an organization.",
1115
+ "parameters": [
1116
+ {
1117
+ "name": "org_id",
1118
+ "in": "path",
1119
+ "required": true,
1120
+ "type": "string",
1121
+ "description": "Unique organization identifier."
1122
+ }
1123
+ ],
1124
+ "requestBodyType": "",
1125
+ "requestBodyRequired": false,
1126
+ "responseType": "{ agent_credential_created: boolean; completed: boolean; completed_at?: string; connection_string_copied: boolean; connection_tested: boolean; database_added: boolean; dismissed: boolean; first_query_run: boolean; org_created: boolean; organization_id: string; project_created: boolean; steps_completed: number; steps_total: number }",
1127
+ "responseStatus": "200"
1128
+ },
1129
+ "updateOnboardingProgress": {
1130
+ "operationId": "updateOnboardingProgress",
1131
+ "method": "PATCH",
1132
+ "path": "/v1/organizations/{org_id}/onboarding",
1133
+ "summary": "Update onboarding progress",
1134
+ "description": "Mark an onboarding step as complete or dismiss the checklist.",
1135
+ "parameters": [
1136
+ {
1137
+ "name": "org_id",
1138
+ "in": "path",
1139
+ "required": true,
1140
+ "type": "string",
1141
+ "description": "Unique organization identifier."
1142
+ }
1143
+ ],
1144
+ "requestBodyType": "{ dismiss?: boolean; step?: \"project_created\" | \"database_added\" | \"connection_tested\" | \"connection_string_copied\" | \"first_query_run\" | \"agent_credential_created\" }",
1145
+ "requestBodyRequired": true,
1146
+ "responseType": "{ agent_credential_created: boolean; completed: boolean; completed_at?: string; connection_string_copied: boolean; connection_tested: boolean; database_added: boolean; dismissed: boolean; first_query_run: boolean; org_created: boolean; organization_id: string; project_created: boolean; steps_completed: number; steps_total: number }",
1147
+ "responseStatus": "200"
1148
+ },
1149
+ "listPolicyProfiles": {
1150
+ "operationId": "listPolicyProfiles",
1151
+ "method": "GET",
1152
+ "path": "/v1/projects/{project_id}/policies",
1153
+ "summary": "List policy profiles",
1154
+ "description": "Lists all policy profiles for the project.",
1155
+ "parameters": [
1156
+ {
1157
+ "name": "project_id",
1158
+ "in": "path",
1159
+ "required": true,
1160
+ "type": "string",
1161
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1162
+ },
1163
+ {
1164
+ "name": "page_size",
1165
+ "in": "query",
1166
+ "required": false,
1167
+ "type": "number",
1168
+ "description": "Maximum number of items to return (1-100, default 20)."
1169
+ },
1170
+ {
1171
+ "name": "page_token",
1172
+ "in": "query",
1173
+ "required": false,
1174
+ "type": "string",
1175
+ "description": "Opaque token for cursor-based pagination."
1176
+ }
1177
+ ],
1178
+ "requestBodyType": "",
1179
+ "requestBodyRequired": false,
1180
+ "responseType": "{ next_page_token?: string; policies: ({ 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; created_at: string; egress_bytes_per_day?: number; id: string; masking_rules: ({ column: string; kind: \"redact\" | \"null\" | \"hash\"; table: string })[]; max_rows?: number; migration_safety?: \"off\" | \"warn\" | \"block\"; name: string; project_id: string; row_filters?: ({ predicate: string; table: string })[]; statement_rules?: { allow?: string[]; deny?: string[] }; statement_timeout_ms?: number; table_allowlist: string[]; table_denylist: string[]; updated_at: string; write_mode?: \"normal\" | \"rollback\" | \"sandbox\" })[] }",
1181
+ "responseStatus": "200"
1182
+ },
1183
+ "createPolicyProfile": {
1184
+ "operationId": "createPolicyProfile",
1185
+ "method": "POST",
1186
+ "path": "/v1/projects/{project_id}/policies",
1187
+ "summary": "Create a policy profile",
1188
+ "description": "Creates a policy profile that can be attached to agent credentials.",
1189
+ "parameters": [
1190
+ {
1191
+ "name": "project_id",
1192
+ "in": "path",
1193
+ "required": true,
1194
+ "type": "string",
1195
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1196
+ }
1197
+ ],
1198
+ "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_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\" }",
1199
+ "requestBodyRequired": true,
1200
+ "responseType": "{ 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; created_at: string; egress_bytes_per_day?: number; id: string; masking_rules: ({ column: string; kind: \"redact\" | \"null\" | \"hash\"; table: string })[]; max_rows?: number; migration_safety?: \"off\" | \"warn\" | \"block\"; name: string; project_id: string; row_filters?: ({ predicate: string; table: string })[]; statement_rules?: { allow?: string[]; deny?: string[] }; statement_timeout_ms?: number; table_allowlist: string[]; table_denylist: string[]; updated_at: string; write_mode?: \"normal\" | \"rollback\" | \"sandbox\" }",
1201
+ "responseStatus": "201"
1202
+ },
1203
+ "getPolicyProfile": {
1204
+ "operationId": "getPolicyProfile",
1205
+ "method": "GET",
1206
+ "path": "/v1/projects/{project_id}/policies/{policy_id}",
1207
+ "summary": "Get a policy profile",
1208
+ "description": "Returns a single policy profile by ID.",
1209
+ "parameters": [
1210
+ {
1211
+ "name": "project_id",
1212
+ "in": "path",
1213
+ "required": true,
1214
+ "type": "string",
1215
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1216
+ },
1217
+ {
1218
+ "name": "policy_id",
1219
+ "in": "path",
1220
+ "required": true,
1221
+ "type": "string",
1222
+ "description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
1223
+ }
1224
+ ],
1225
+ "requestBodyType": "",
1226
+ "requestBodyRequired": false,
1227
+ "responseType": "{ 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; created_at: string; egress_bytes_per_day?: number; id: string; masking_rules: ({ column: string; kind: \"redact\" | \"null\" | \"hash\"; table: string })[]; max_rows?: number; migration_safety?: \"off\" | \"warn\" | \"block\"; name: string; project_id: string; row_filters?: ({ predicate: string; table: string })[]; statement_rules?: { allow?: string[]; deny?: string[] }; statement_timeout_ms?: number; table_allowlist: string[]; table_denylist: string[]; updated_at: string; write_mode?: \"normal\" | \"rollback\" | \"sandbox\" }",
1228
+ "responseStatus": "200"
1229
+ },
1230
+ "updatePolicyProfile": {
1231
+ "operationId": "updatePolicyProfile",
1232
+ "method": "PUT",
1233
+ "path": "/v1/projects/{project_id}/policies/{policy_id}",
1234
+ "summary": "Update a policy profile",
1235
+ "description": "Updates a policy profile. Changes hot-reload to active agent sessions.",
1236
+ "parameters": [
1237
+ {
1238
+ "name": "project_id",
1239
+ "in": "path",
1240
+ "required": true,
1241
+ "type": "string",
1242
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1243
+ },
1244
+ {
1245
+ "name": "policy_id",
1246
+ "in": "path",
1247
+ "required": true,
1248
+ "type": "string",
1249
+ "description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
1250
+ }
1251
+ ],
1252
+ "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_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\" }",
1253
+ "requestBodyRequired": true,
1254
+ "responseType": "{ 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; created_at: string; egress_bytes_per_day?: number; id: string; masking_rules: ({ column: string; kind: \"redact\" | \"null\" | \"hash\"; table: string })[]; max_rows?: number; migration_safety?: \"off\" | \"warn\" | \"block\"; name: string; project_id: string; row_filters?: ({ predicate: string; table: string })[]; statement_rules?: { allow?: string[]; deny?: string[] }; statement_timeout_ms?: number; table_allowlist: string[]; table_denylist: string[]; updated_at: string; write_mode?: \"normal\" | \"rollback\" | \"sandbox\" }",
1255
+ "responseStatus": "200"
1256
+ },
1257
+ "deletePolicyProfile": {
1258
+ "operationId": "deletePolicyProfile",
1259
+ "method": "DELETE",
1260
+ "path": "/v1/projects/{project_id}/policies/{policy_id}",
1261
+ "summary": "Delete a policy profile",
1262
+ "description": "Deletes a policy profile. Fails if agent credentials still reference it.",
1263
+ "parameters": [
1264
+ {
1265
+ "name": "project_id",
1266
+ "in": "path",
1267
+ "required": true,
1268
+ "type": "string",
1269
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1270
+ },
1271
+ {
1272
+ "name": "policy_id",
1273
+ "in": "path",
1274
+ "required": true,
1275
+ "type": "string",
1276
+ "description": "Unique policy profile identifier (prefixed, e.g. pol_xxx)."
1277
+ }
1278
+ ],
1279
+ "requestBodyType": "",
1280
+ "requestBodyRequired": false,
1281
+ "responseType": "",
1282
+ "responseStatus": "204"
1283
+ },
1284
+ "dryEvalPolicy": {
1285
+ "operationId": "dryEvalPolicy",
1286
+ "method": "POST",
1287
+ "path": "/v1/projects/{project_id}/policy-evaluations",
1288
+ "summary": "Dry-eval a policy against a SQL statement",
1289
+ "description": "Evaluates a single SQL statement against a policy — either a draft policy supplied inline or an existing policy referenced by id — and returns the decision the proxy would make: allow, block, mask, or row-filter. The evaluation reuses the data plane's own policy engine (the same parser, allow/block rules, row-filter rewriter, and masking analysis enforced on live agent sessions), so a what-if verdict matches real enforcement. Stateful checks a single-statement preview cannot model — per-region query and egress budgets, human approvals, and rollback/sandbox write routing — are reported as informational notes, not verdicts. This is a pure compute endpoint; it does not connect to the upstream database and persists nothing.",
1290
+ "parameters": [
1291
+ {
1292
+ "name": "project_id",
1293
+ "in": "path",
1294
+ "required": true,
1295
+ "type": "string",
1296
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1297
+ }
1298
+ ],
1299
+ "requestBodyType": "{ policy?: { 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_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\" }; policy_id?: string; sql: string }",
1300
+ "requestBodyRequired": true,
1301
+ "responseType": "{ hint?: string; masked_columns?: ({ column: string; kind: \"redact\" | \"null\" | \"hash\" })[]; notes?: string[]; reason: string; rewritten_sql?: string; row_filter_predicate?: string; rule: string; verdict: \"allow\" | \"block\" | \"mask\" | \"row-filter\" }",
1302
+ "responseStatus": "200"
1303
+ },
1304
+ "listProjects": {
1305
+ "operationId": "listProjects",
1306
+ "method": "GET",
1307
+ "path": "/v1/projects",
1308
+ "summary": "List projects",
1309
+ "description": "Lists projects filtered by organization. Requires org_id query parameter.",
1310
+ "parameters": [
1311
+ {
1312
+ "name": "org_id",
1313
+ "in": "query",
1314
+ "required": true,
1315
+ "type": "string",
1316
+ "description": "Organization ID to filter projects."
1317
+ },
1318
+ {
1319
+ "name": "page_size",
1320
+ "in": "query",
1321
+ "required": false,
1322
+ "type": "number",
1323
+ "description": "Maximum number of items to return (1-100, default 20)."
1324
+ },
1325
+ {
1326
+ "name": "page_token",
1327
+ "in": "query",
1328
+ "required": false,
1329
+ "type": "string",
1330
+ "description": "Opaque token for cursor-based pagination."
1331
+ },
1332
+ {
1333
+ "name": "sort_by",
1334
+ "in": "query",
1335
+ "required": false,
1336
+ "type": "\"name\" | \"created_at\" | \"active_connections\"",
1337
+ "description": "Sort field for projects list."
1338
+ }
1339
+ ],
1340
+ "requestBodyType": "",
1341
+ "requestBodyRequired": false,
1342
+ "responseType": "{ next_page_token?: string; projects: ({ 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; status: \"active\" | \"suspended\" | \"deleted\"; tags?: string[]; updated_at: string })[]; total: number }",
1343
+ "responseStatus": "200"
1344
+ },
1345
+ "createProject": {
1346
+ "operationId": "createProject",
1347
+ "method": "POST",
1348
+ "path": "/v1/projects",
1349
+ "summary": "Create a project",
1350
+ "description": "Creates a new project within the specified organization.",
1351
+ "parameters": [],
1352
+ "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; tags?: string[] }",
1353
+ "requestBodyRequired": true,
1354
+ "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; status: \"active\" | \"suspended\" | \"deleted\"; tags?: string[]; updated_at: string } }",
1355
+ "responseStatus": "201"
1356
+ },
1357
+ "getProject": {
1358
+ "operationId": "getProject",
1359
+ "method": "GET",
1360
+ "path": "/v1/projects/{project_id}",
1361
+ "summary": "Get a project",
1362
+ "description": "Returns a single project by ID.",
1363
+ "parameters": [
1364
+ {
1365
+ "name": "project_id",
1366
+ "in": "path",
1367
+ "required": true,
1368
+ "type": "string",
1369
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1370
+ }
1371
+ ],
1372
+ "requestBodyType": "",
1373
+ "requestBodyRequired": false,
1374
+ "responseType": "{ 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; status: \"active\" | \"suspended\" | \"deleted\"; tags?: string[]; updated_at: string }",
1375
+ "responseStatus": "200"
1376
+ },
1377
+ "updateProject": {
1378
+ "operationId": "updateProject",
1379
+ "method": "PATCH",
1380
+ "path": "/v1/projects/{project_id}",
1381
+ "summary": "Update a project",
1382
+ "description": "Partially updates a project. Only provided fields are modified.",
1383
+ "parameters": [
1384
+ {
1385
+ "name": "project_id",
1386
+ "in": "path",
1387
+ "required": true,
1388
+ "type": "string",
1389
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1390
+ }
1391
+ ],
1392
+ "requestBodyType": "{ agents_disabled?: boolean; allowed_cidrs?: ({ cidr: string; label?: string })[]; default_policy_profile_id?: string; description?: string; name?: string; status?: \"active\" | \"suspended\" | \"deleted\"; tags?: string[] }",
1393
+ "requestBodyRequired": true,
1394
+ "responseType": "{ 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; status: \"active\" | \"suspended\" | \"deleted\"; tags?: string[]; updated_at: string }",
1395
+ "responseStatus": "200"
1396
+ },
1397
+ "deleteProject": {
1398
+ "operationId": "deleteProject",
1399
+ "method": "DELETE",
1400
+ "path": "/v1/projects/{project_id}",
1401
+ "summary": "Delete a project",
1402
+ "description": "Soft-deletes a project and all associated databases.",
1403
+ "parameters": [
1404
+ {
1405
+ "name": "project_id",
1406
+ "in": "path",
1407
+ "required": true,
1408
+ "type": "string",
1409
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1410
+ }
1411
+ ],
1412
+ "requestBodyType": "",
1413
+ "requestBodyRequired": false,
1414
+ "responseType": "",
1415
+ "responseStatus": "204"
1416
+ },
1417
+ "getProjectMetrics": {
1418
+ "operationId": "getProjectMetrics",
1419
+ "method": "GET",
1420
+ "path": "/v1/projects/{project_id}/metrics",
1421
+ "summary": "Get project metrics",
1422
+ "description": "Returns recent project metrics snapshots, optionally filtered by region.",
1423
+ "parameters": [
1424
+ {
1425
+ "name": "project_id",
1426
+ "in": "path",
1427
+ "required": true,
1428
+ "type": "string",
1429
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1430
+ },
1431
+ {
1432
+ "name": "limit",
1433
+ "in": "query",
1434
+ "required": false,
1435
+ "type": "number",
1436
+ "description": "Maximum number of recent snapshots to return."
1437
+ },
1438
+ {
1439
+ "name": "region",
1440
+ "in": "query",
1441
+ "required": false,
1442
+ "type": "string",
1443
+ "description": "Filter metrics by region code."
1444
+ }
1445
+ ],
1446
+ "requestBodyType": "",
1447
+ "requestBodyRequired": false,
1448
+ "responseType": "{ snapshots: ({ active_connections: number; avg_connect_ms?: number; avg_latency_ms: number; avg_query_ms?: number; cache_hits: number; cache_misses: number; created_at: string; id: string; p99_latency_ms: number; project_id: string; queries_total: number; region: string })[] }",
1449
+ "responseStatus": "200"
1450
+ },
1451
+ "listRegions": {
1452
+ "operationId": "listRegions",
1453
+ "method": "GET",
1454
+ "path": "/v1/regions",
1455
+ "summary": "List available regions",
1456
+ "description": "Returns all active data plane regions.",
1457
+ "parameters": [],
1458
+ "requestBodyType": "",
1459
+ "requestBodyRequired": false,
1460
+ "responseType": "{ regions: ({ available: boolean; continent?: string; country?: string; id: string; name: string; provider: \"aws\" | \"azure\" | \"gcp\"; status: \"active\" | \"draining\" | \"inactive\" })[] }",
1461
+ "responseStatus": "200"
1462
+ },
1463
+ "listReplicas": {
1464
+ "operationId": "listReplicas",
1465
+ "method": "GET",
1466
+ "path": "/v1/databases/{database_id}/replicas",
1467
+ "summary": "List replicas",
1468
+ "description": "Lists all read replicas for a database.",
1469
+ "parameters": [
1470
+ {
1471
+ "name": "database_id",
1472
+ "in": "path",
1473
+ "required": true,
1474
+ "type": "string",
1475
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
1476
+ }
1477
+ ],
1478
+ "requestBodyType": "",
1479
+ "requestBodyRequired": false,
1480
+ "responseType": "{ next_page_token?: string; replicas: ({ created_at: string; database_id: string; host: string; id: string; port: number; ssl_mode: \"disable\" | \"allow\" | \"prefer\" | \"require\" | \"verify-ca\" | \"verify-full\"; updated_at: string })[] }",
1481
+ "responseStatus": "200"
1482
+ },
1483
+ "createReplica": {
1484
+ "operationId": "createReplica",
1485
+ "method": "POST",
1486
+ "path": "/v1/databases/{database_id}/replicas",
1487
+ "summary": "Add a replica",
1488
+ "description": "Adds a read replica to a database.",
1489
+ "parameters": [
1490
+ {
1491
+ "name": "database_id",
1492
+ "in": "path",
1493
+ "required": true,
1494
+ "type": "string",
1495
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
1496
+ }
1497
+ ],
1498
+ "requestBodyType": "{ host: string; port: number; ssl_mode?: \"disable\" | \"allow\" | \"prefer\" | \"require\" | \"verify-ca\" | \"verify-full\" }",
1499
+ "requestBodyRequired": true,
1500
+ "responseType": "{ created_at: string; database_id: string; host: string; id: string; port: number; ssl_mode: \"disable\" | \"allow\" | \"prefer\" | \"require\" | \"verify-ca\" | \"verify-full\"; updated_at: string }",
1501
+ "responseStatus": "201"
1502
+ },
1503
+ "deleteReplica": {
1504
+ "operationId": "deleteReplica",
1505
+ "method": "DELETE",
1506
+ "path": "/v1/databases/{database_id}/replicas/{replica_id}",
1507
+ "summary": "Delete a replica",
1508
+ "description": "Removes a read replica from a database.",
1509
+ "parameters": [
1510
+ {
1511
+ "name": "database_id",
1512
+ "in": "path",
1513
+ "required": true,
1514
+ "type": "string",
1515
+ "description": "Unique database identifier (prefixed, e.g. db_xxx)."
1516
+ },
1517
+ {
1518
+ "name": "replica_id",
1519
+ "in": "path",
1520
+ "required": true,
1521
+ "type": "string",
1522
+ "description": "Unique replica identifier (prefixed, e.g. rep_xxx)."
1523
+ }
1524
+ ],
1525
+ "requestBodyType": "",
1526
+ "requestBodyRequired": false,
1527
+ "responseType": "",
1528
+ "responseStatus": "204"
1529
+ },
1530
+ "listSupportCases": {
1531
+ "operationId": "listSupportCases",
1532
+ "method": "GET",
1533
+ "path": "/v1/organizations/{org_id}/support/cases",
1534
+ "summary": "List support cases",
1535
+ "description": "Lists support cases for the organization with optional status and search filters.",
1536
+ "parameters": [
1537
+ {
1538
+ "name": "org_id",
1539
+ "in": "path",
1540
+ "required": true,
1541
+ "type": "string",
1542
+ "description": "Unique organization identifier."
1543
+ },
1544
+ {
1545
+ "name": "status",
1546
+ "in": "query",
1547
+ "required": false,
1548
+ "type": "\"open\" | \"closed\"",
1549
+ "description": "Filter by case status."
1550
+ },
1551
+ {
1552
+ "name": "search",
1553
+ "in": "query",
1554
+ "required": false,
1555
+ "type": "string",
1556
+ "description": "Search cases by title."
1557
+ },
1558
+ {
1559
+ "name": "page_size",
1560
+ "in": "query",
1561
+ "required": false,
1562
+ "type": "number",
1563
+ "description": "Number of results per page (1-100, default 20)."
1564
+ },
1565
+ {
1566
+ "name": "page",
1567
+ "in": "query",
1568
+ "required": false,
1569
+ "type": "number",
1570
+ "description": "Page number (1-based, default 1)."
1571
+ }
1572
+ ],
1573
+ "requestBodyType": "",
1574
+ "requestBodyRequired": false,
1575
+ "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 }",
1576
+ "responseStatus": "200"
1577
+ },
1578
+ "createSupportCase": {
1579
+ "operationId": "createSupportCase",
1580
+ "method": "POST",
1581
+ "path": "/v1/organizations/{org_id}/support/cases",
1582
+ "summary": "Create a support case",
1583
+ "description": "Creates a new support case with an initial message.",
1584
+ "parameters": [
1585
+ {
1586
+ "name": "org_id",
1587
+ "in": "path",
1588
+ "required": true,
1589
+ "type": "string",
1590
+ "description": "Unique organization identifier."
1591
+ }
1592
+ ],
1593
+ "requestBodyType": "{ body: string; org_id: string; severity?: number; title: string }",
1594
+ "requestBodyRequired": true,
1595
+ "responseType": "{ 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 }",
1596
+ "responseStatus": "201"
1597
+ },
1598
+ "getSupportCase": {
1599
+ "operationId": "getSupportCase",
1600
+ "method": "GET",
1601
+ "path": "/v1/organizations/{org_id}/support/cases/{case_id}",
1602
+ "summary": "Get a support case",
1603
+ "description": "Returns a support case with all its messages.",
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": "case_id",
1614
+ "in": "path",
1615
+ "required": true,
1616
+ "type": "string",
1617
+ "description": "Unique support case identifier (prefixed, e.g. sc_xxx)."
1618
+ }
1619
+ ],
1620
+ "requestBodyType": "",
1621
+ "requestBodyRequired": false,
1622
+ "responseType": "{ case: { 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 }; messages: ({ author_image?: string; author_name: string; body: string; case_id: string; created_at: string; id: string; slack_user_id?: string; source: \"user\" | \"slack\" })[] }",
1623
+ "responseStatus": "200"
1624
+ },
1625
+ "updateSupportCase": {
1626
+ "operationId": "updateSupportCase",
1627
+ "method": "PATCH",
1628
+ "path": "/v1/organizations/{org_id}/support/cases/{case_id}",
1629
+ "summary": "Update a support case",
1630
+ "description": "Updates the status of a support case (close or reopen).",
1631
+ "parameters": [
1632
+ {
1633
+ "name": "org_id",
1634
+ "in": "path",
1635
+ "required": true,
1636
+ "type": "string",
1637
+ "description": "Unique organization identifier."
1638
+ },
1639
+ {
1640
+ "name": "case_id",
1641
+ "in": "path",
1642
+ "required": true,
1643
+ "type": "string",
1644
+ "description": "Unique support case identifier (prefixed, e.g. sc_xxx)."
1645
+ }
1646
+ ],
1647
+ "requestBodyType": "{ status?: \"open\" | \"closed\" }",
1648
+ "requestBodyRequired": true,
1649
+ "responseType": "{ 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 }",
1650
+ "responseStatus": "200"
1651
+ },
1652
+ "createSupportMessage": {
1653
+ "operationId": "createSupportMessage",
1654
+ "method": "POST",
1655
+ "path": "/v1/organizations/{org_id}/support/cases/{case_id}/messages",
1656
+ "summary": "Add a message to a support case",
1657
+ "description": "Adds a new message to an existing support case thread.",
1658
+ "parameters": [
1659
+ {
1660
+ "name": "org_id",
1661
+ "in": "path",
1662
+ "required": true,
1663
+ "type": "string",
1664
+ "description": "Unique organization identifier."
1665
+ },
1666
+ {
1667
+ "name": "case_id",
1668
+ "in": "path",
1669
+ "required": true,
1670
+ "type": "string",
1671
+ "description": "Unique support case identifier (prefixed, e.g. sc_xxx)."
1672
+ }
1673
+ ],
1674
+ "requestBodyType": "{ body: string }",
1675
+ "requestBodyRequired": true,
1676
+ "responseType": "{ author_image?: string; author_name: string; body: string; case_id: string; created_at: string; id: string; slack_user_id?: string; source: \"user\" | \"slack\" }",
1677
+ "responseStatus": "201"
1678
+ },
1679
+ "handleSlackSupportEvent": {
1680
+ "operationId": "handleSlackSupportEvent",
1681
+ "method": "POST",
1682
+ "path": "/v1/internal/support/slack-event",
1683
+ "summary": "Handle a Slack support event",
1684
+ "description": "Receives a forwarded Slack event from the dashboard webhook handler and creates a support message.",
1685
+ "parameters": [],
1686
+ "requestBodyType": "{ channel_id: string; text: string; thread_ts: string; user_id: string }",
1687
+ "requestBodyRequired": true,
1688
+ "responseType": "",
1689
+ "responseStatus": "200"
1690
+ },
1691
+ "getOrganizationUsage": {
1692
+ "operationId": "getOrganizationUsage",
1693
+ "method": "GET",
1694
+ "path": "/v1/organizations/{org_id}/usage",
1695
+ "summary": "Get organization usage",
1696
+ "description": "Returns daily usage data aggregated across all projects in the organization.",
1697
+ "parameters": [
1698
+ {
1699
+ "name": "org_id",
1700
+ "in": "path",
1701
+ "required": true,
1702
+ "type": "string",
1703
+ "description": "Unique organization identifier."
1704
+ },
1705
+ {
1706
+ "name": "start_date",
1707
+ "in": "query",
1708
+ "required": true,
1709
+ "type": "string",
1710
+ "description": "Start date (inclusive, YYYY-MM-DD)."
1711
+ },
1712
+ {
1713
+ "name": "end_date",
1714
+ "in": "query",
1715
+ "required": true,
1716
+ "type": "string",
1717
+ "description": "End date (inclusive, YYYY-MM-DD)."
1718
+ }
1719
+ ],
1720
+ "requestBodyType": "",
1721
+ "requestBodyRequired": false,
1722
+ "responseType": "{ usage: ({ bytes_transferred: number; cache_hits: number; cache_misses: number; connection_seconds: number; day: string; queries_total: number })[] }",
1723
+ "responseStatus": "200"
1724
+ },
1725
+ "getProjectUsage": {
1726
+ "operationId": "getProjectUsage",
1727
+ "method": "GET",
1728
+ "path": "/v1/projects/{project_id}/usage",
1729
+ "summary": "Get project usage",
1730
+ "description": "Returns daily usage data for a specific project, broken down by region.",
1731
+ "parameters": [
1732
+ {
1733
+ "name": "project_id",
1734
+ "in": "path",
1735
+ "required": true,
1736
+ "type": "string",
1737
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1738
+ },
1739
+ {
1740
+ "name": "start_date",
1741
+ "in": "query",
1742
+ "required": true,
1743
+ "type": "string",
1744
+ "description": "Start date (inclusive, YYYY-MM-DD)."
1745
+ },
1746
+ {
1747
+ "name": "end_date",
1748
+ "in": "query",
1749
+ "required": true,
1750
+ "type": "string",
1751
+ "description": "End date (inclusive, YYYY-MM-DD)."
1752
+ }
1753
+ ],
1754
+ "requestBodyType": "",
1755
+ "requestBodyRequired": false,
1756
+ "responseType": "{ usage: ({ bytes_transferred: number; cache_hits: number; cache_misses: number; connection_seconds: number; day: string; queries_total: number; region: string })[] }",
1757
+ "responseStatus": "200"
1758
+ },
1759
+ "listWebhookEndpoints": {
1760
+ "operationId": "listWebhookEndpoints",
1761
+ "method": "GET",
1762
+ "path": "/v1/projects/{project_id}/webhooks",
1763
+ "summary": "List webhook endpoints",
1764
+ "description": "Lists webhook endpoints for the project.",
1765
+ "parameters": [
1766
+ {
1767
+ "name": "project_id",
1768
+ "in": "path",
1769
+ "required": true,
1770
+ "type": "string",
1771
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1772
+ },
1773
+ {
1774
+ "name": "page_size",
1775
+ "in": "query",
1776
+ "required": false,
1777
+ "type": "number",
1778
+ "description": "Maximum number of items to return (1-100, default 20)."
1779
+ },
1780
+ {
1781
+ "name": "page_token",
1782
+ "in": "query",
1783
+ "required": false,
1784
+ "type": "string",
1785
+ "description": "Opaque token for cursor-based pagination."
1786
+ }
1787
+ ],
1788
+ "requestBodyType": "",
1789
+ "requestBodyRequired": false,
1790
+ "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 })[] }",
1791
+ "responseStatus": "200"
1792
+ },
1793
+ "createWebhookEndpoint": {
1794
+ "operationId": "createWebhookEndpoint",
1795
+ "method": "POST",
1796
+ "path": "/v1/projects/{project_id}/webhooks",
1797
+ "summary": "Create a webhook endpoint",
1798
+ "description": "Creates a webhook endpoint that receives project event deliveries.",
1799
+ "parameters": [
1800
+ {
1801
+ "name": "project_id",
1802
+ "in": "path",
1803
+ "required": true,
1804
+ "type": "string",
1805
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1806
+ }
1807
+ ],
1808
+ "requestBodyType": "{ description?: string; enabled?: boolean; event_types?: string[]; format?: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; secret?: string; url: string }",
1809
+ "requestBodyRequired": true,
1810
+ "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 }",
1811
+ "responseStatus": "201"
1812
+ },
1813
+ "getWebhookEndpoint": {
1814
+ "operationId": "getWebhookEndpoint",
1815
+ "method": "GET",
1816
+ "path": "/v1/projects/{project_id}/webhooks/{webhook_id}",
1817
+ "summary": "Get a webhook endpoint",
1818
+ "description": "Returns a single webhook endpoint by ID.",
1819
+ "parameters": [
1820
+ {
1821
+ "name": "project_id",
1822
+ "in": "path",
1823
+ "required": true,
1824
+ "type": "string",
1825
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1826
+ },
1827
+ {
1828
+ "name": "webhook_id",
1829
+ "in": "path",
1830
+ "required": true,
1831
+ "type": "string",
1832
+ "description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
1833
+ }
1834
+ ],
1835
+ "requestBodyType": "",
1836
+ "requestBodyRequired": false,
1837
+ "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 }",
1838
+ "responseStatus": "200"
1839
+ },
1840
+ "updateWebhookEndpoint": {
1841
+ "operationId": "updateWebhookEndpoint",
1842
+ "method": "PUT",
1843
+ "path": "/v1/projects/{project_id}/webhooks/{webhook_id}",
1844
+ "summary": "Update a webhook endpoint",
1845
+ "description": "Updates a webhook endpoint.",
1846
+ "parameters": [
1847
+ {
1848
+ "name": "project_id",
1849
+ "in": "path",
1850
+ "required": true,
1851
+ "type": "string",
1852
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1853
+ },
1854
+ {
1855
+ "name": "webhook_id",
1856
+ "in": "path",
1857
+ "required": true,
1858
+ "type": "string",
1859
+ "description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
1860
+ }
1861
+ ],
1862
+ "requestBodyType": "{ description?: string; enabled?: boolean; event_types?: string[]; format?: \"json\" | \"splunk_hec\" | \"datadog\" | \"elastic\"; secret?: string; url: string }",
1863
+ "requestBodyRequired": true,
1864
+ "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 }",
1865
+ "responseStatus": "200"
1866
+ },
1867
+ "deleteWebhookEndpoint": {
1868
+ "operationId": "deleteWebhookEndpoint",
1869
+ "method": "DELETE",
1870
+ "path": "/v1/projects/{project_id}/webhooks/{webhook_id}",
1871
+ "summary": "Delete a webhook endpoint",
1872
+ "description": "Deletes a webhook endpoint and its pending deliveries.",
1873
+ "parameters": [
1874
+ {
1875
+ "name": "project_id",
1876
+ "in": "path",
1877
+ "required": true,
1878
+ "type": "string",
1879
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1880
+ },
1881
+ {
1882
+ "name": "webhook_id",
1883
+ "in": "path",
1884
+ "required": true,
1885
+ "type": "string",
1886
+ "description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
1887
+ }
1888
+ ],
1889
+ "requestBodyType": "",
1890
+ "requestBodyRequired": false,
1891
+ "responseType": "",
1892
+ "responseStatus": "204"
1893
+ },
1894
+ "testWebhookEndpoint": {
1895
+ "operationId": "testWebhookEndpoint",
1896
+ "method": "POST",
1897
+ "path": "/v1/projects/{project_id}/webhooks/{webhook_id}/test",
1898
+ "summary": "Send a test event",
1899
+ "description": "Enqueues a test event delivery to the webhook endpoint.",
1900
+ "parameters": [
1901
+ {
1902
+ "name": "project_id",
1903
+ "in": "path",
1904
+ "required": true,
1905
+ "type": "string",
1906
+ "description": "Unique project identifier (prefixed, e.g. prj_xxx)."
1907
+ },
1908
+ {
1909
+ "name": "webhook_id",
1910
+ "in": "path",
1911
+ "required": true,
1912
+ "type": "string",
1913
+ "description": "Unique webhook endpoint identifier (prefixed, e.g. whk_xxx)."
1914
+ }
1915
+ ],
1916
+ "requestBodyType": "",
1917
+ "requestBodyRequired": false,
1918
+ "responseType": "{ delivery_id: string; error?: string; status: string; status_code?: number }",
1919
+ "responseStatus": "202"
1920
+ }
1921
+ };
1922
+
1
1923
  /**
2
1924
  * Generated by generate-sdk-ts-maps.ts — do not edit manually.
3
1925
  * Run: pnpm --filter pgbeam generate
@@ -83,6 +2005,10 @@
83
2005
  method: "GET",
84
2006
  path: "/v1/organizations/{org_id}/plan"
85
2007
  },
2008
+ getVercelInstallation: {
2009
+ method: "GET",
2010
+ path: "/v1/organizations/{org_id}/vercel-installation"
2011
+ },
86
2012
  updateSpendLimit: {
87
2013
  method: "PUT",
88
2014
  path: "/v1/organizations/{org_id}/spend-limit"
@@ -388,6 +2314,11 @@ const operationsByPath = {
388
2314
  path: "/v1/organizations/{org_id}/plan",
389
2315
  operationId: "getOrganizationPlan"
390
2316
  },
2317
+ "GET /v1/organizations/{org_id}/vercel-installation": {
2318
+ method: "GET",
2319
+ path: "/v1/organizations/{org_id}/vercel-installation",
2320
+ operationId: "getVercelInstallation"
2321
+ },
391
2322
  "PUT /v1/organizations/{org_id}/spend-limit": {
392
2323
  method: "PUT",
393
2324
  path: "/v1/organizations/{org_id}/spend-limit",
@@ -655,4 +2586,4 @@ const operationsByPath = {
655
2586
  }
656
2587
  };
657
2588
 
658
- export { operationsByPath, operationsByTag };
2589
+ export { describeByOperationId, operationsByPath, operationsByTag };