@anvailabs/proximadb-client 0.3.0

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.
Files changed (65) hide show
  1. package/README.md +160 -0
  2. package/dist/client.d.ts +319 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +681 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/collection.d.ts +227 -0
  7. package/dist/collection.d.ts.map +1 -0
  8. package/dist/collection.js +436 -0
  9. package/dist/collection.js.map +1 -0
  10. package/dist/esm/client.js +674 -0
  11. package/dist/esm/client.js.map +1 -0
  12. package/dist/esm/collection.js +428 -0
  13. package/dist/esm/collection.js.map +1 -0
  14. package/dist/esm/filter.js +228 -0
  15. package/dist/esm/filter.js.map +1 -0
  16. package/dist/esm/generated/schema.js +6 -0
  17. package/dist/esm/generated/schema.js.map +1 -0
  18. package/dist/esm/graph.js +678 -0
  19. package/dist/esm/graph.js.map +1 -0
  20. package/dist/esm/index.js +86 -0
  21. package/dist/esm/index.js.map +1 -0
  22. package/dist/esm/search.js +317 -0
  23. package/dist/esm/search.js.map +1 -0
  24. package/dist/esm/transport.js +33 -0
  25. package/dist/esm/transport.js.map +1 -0
  26. package/dist/esm/types.js +181 -0
  27. package/dist/esm/types.js.map +1 -0
  28. package/dist/filter.d.ts +51 -0
  29. package/dist/filter.d.ts.map +1 -0
  30. package/dist/filter.js +241 -0
  31. package/dist/filter.js.map +1 -0
  32. package/dist/generated/schema.d.ts +4271 -0
  33. package/dist/generated/schema.d.ts.map +1 -0
  34. package/dist/generated/schema.js +7 -0
  35. package/dist/generated/schema.js.map +1 -0
  36. package/dist/graph.d.ts +350 -0
  37. package/dist/graph.d.ts.map +1 -0
  38. package/dist/graph.js +690 -0
  39. package/dist/graph.js.map +1 -0
  40. package/dist/index.d.ts +58 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +126 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/search.d.ts +160 -0
  45. package/dist/search.d.ts.map +1 -0
  46. package/dist/search.js +322 -0
  47. package/dist/search.js.map +1 -0
  48. package/dist/transport.d.ts +40 -0
  49. package/dist/transport.d.ts.map +1 -0
  50. package/dist/transport.js +39 -0
  51. package/dist/transport.js.map +1 -0
  52. package/dist/types.d.ts +632 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +185 -0
  55. package/dist/types.js.map +1 -0
  56. package/package.json +72 -0
  57. package/src/client.ts +856 -0
  58. package/src/collection.ts +578 -0
  59. package/src/filter.ts +280 -0
  60. package/src/generated/schema.ts +4271 -0
  61. package/src/graph.ts +811 -0
  62. package/src/index.ts +184 -0
  63. package/src/search.ts +401 -0
  64. package/src/transport.ts +52 -0
  65. package/src/types.ts +726 -0
@@ -0,0 +1,4271 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export interface paths {
6
+ "/api/v2/collections": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ /**
14
+ * List collections.
15
+ * @description List all collections with pagination.
16
+ *
17
+ * ## Query Parameters
18
+ *
19
+ * - `limit`: Maximum number of collections to return (default: 100)
20
+ * - `offset`: Offset for pagination (default: 0)
21
+ * - `include_stats`: Whether to include collection statistics
22
+ *
23
+ * ## Response
24
+ *
25
+ * Returns [`ListCollectionsV2Response`] with collection list.
26
+ *
27
+ * ## Errors
28
+ *
29
+ * - `500 Internal Server Error`: List operation failed
30
+ */
31
+ get: operations["listCollections"];
32
+ put?: never;
33
+ /**
34
+ * Create a collection with optional schema.
35
+ * @description Create a new collection with optional schema support.
36
+ *
37
+ * ## Request Body
38
+ *
39
+ * See [`CreateCollectionV2Request`] for the expected JSON format.
40
+ *
41
+ * ## Response
42
+ *
43
+ * Returns [`CreateCollectionV2Response`] with collection details.
44
+ *
45
+ * ## Errors
46
+ *
47
+ * - `400 Bad Request`: Invalid request or schema
48
+ * - `409 Conflict`: Collection already exists
49
+ * - `500 Internal Server Error`: Creation failed
50
+ */
51
+ post: operations["createCollection"];
52
+ delete?: never;
53
+ options?: never;
54
+ head?: never;
55
+ patch?: never;
56
+ trace?: never;
57
+ };
58
+ "/api/v2/collections/{collection_id}": {
59
+ parameters: {
60
+ query?: never;
61
+ header?: never;
62
+ path?: never;
63
+ cookie?: never;
64
+ };
65
+ /**
66
+ * Get collection details.
67
+ * @description Get collection details including schema and statistics.
68
+ *
69
+ * ## Path Parameters
70
+ *
71
+ * - `collection_id`: Collection name/ID
72
+ *
73
+ * ## Response
74
+ *
75
+ * Returns [`CollectionV2Response`] with collection details.
76
+ *
77
+ * ## Errors
78
+ *
79
+ * - `404 Not Found`: Collection does not exist
80
+ * - `500 Internal Server Error`: Retrieval failed
81
+ */
82
+ get: operations["getCollection"];
83
+ put?: never;
84
+ post?: never;
85
+ /**
86
+ * Delete a collection.
87
+ * @description Delete a collection by ID/name. This v2 route keeps SDK lifecycle methods on
88
+ * the ProximaRecord-era API while delegating to the existing collection control
89
+ * plane.
90
+ */
91
+ delete: operations["deleteCollection"];
92
+ options?: never;
93
+ head?: never;
94
+ patch?: never;
95
+ trace?: never;
96
+ };
97
+ "/api/v2/collections/{collection_id}/documents": {
98
+ parameters: {
99
+ query?: never;
100
+ header?: never;
101
+ path?: never;
102
+ cookie?: never;
103
+ };
104
+ get?: never;
105
+ put?: never;
106
+ /**
107
+ * Ingest documents for native server-side embedding.
108
+ * @description Canonical document-ingest surface (ADR-041, spec-driven-primary). Body `{records:[{id,text,metadata}]}`; the server embeds `text` natively under `X-Embed-Source=native` (default) when no per-record `vector` is supplied. `X-Tenant-ID` scopes records to a tenant; `X-Ingest-Mode` carries the billing mode.
109
+ */
110
+ post: operations["ingestDocuments"];
111
+ delete?: never;
112
+ options?: never;
113
+ head?: never;
114
+ patch?: never;
115
+ trace?: never;
116
+ };
117
+ "/api/v2/collections/{collection_id}/entities": {
118
+ parameters: {
119
+ query?: never;
120
+ header?: never;
121
+ path?: never;
122
+ cookie?: never;
123
+ };
124
+ get?: never;
125
+ put?: never;
126
+ post: operations["upsert_entity_v2"];
127
+ delete?: never;
128
+ options?: never;
129
+ head?: never;
130
+ patch?: never;
131
+ trace?: never;
132
+ };
133
+ "/api/v2/collections/{collection_id}/entities/search": {
134
+ parameters: {
135
+ query?: never;
136
+ header?: never;
137
+ path?: never;
138
+ cookie?: never;
139
+ };
140
+ get?: never;
141
+ put?: never;
142
+ post: operations["search_entities_v2"];
143
+ delete?: never;
144
+ options?: never;
145
+ head?: never;
146
+ patch?: never;
147
+ trace?: never;
148
+ };
149
+ "/api/v2/collections/{collection_id}/entities/{entity_id}": {
150
+ parameters: {
151
+ query?: never;
152
+ header?: never;
153
+ path?: never;
154
+ cookie?: never;
155
+ };
156
+ get: operations["get_entity_v2"];
157
+ put?: never;
158
+ post?: never;
159
+ delete: operations["delete_entity_v2"];
160
+ options?: never;
161
+ head?: never;
162
+ patch?: never;
163
+ trace?: never;
164
+ };
165
+ "/api/v2/collections/{collection_id}/records/batch": {
166
+ parameters: {
167
+ query?: never;
168
+ header?: never;
169
+ path?: never;
170
+ cookie?: never;
171
+ };
172
+ get?: never;
173
+ put?: never;
174
+ /**
175
+ * Insert or upsert ProximaRecord batches.
176
+ * @description Insert ProximaRecords into a collection with typed field support.
177
+ *
178
+ * ## Request Body
179
+ *
180
+ * See [`InsertRecordsRequest`] for the expected JSON format.
181
+ *
182
+ * ## Response
183
+ *
184
+ * Returns [`InsertRecordsResponse`] with counts and any errors.
185
+ *
186
+ * ## Errors
187
+ *
188
+ * - `400 Bad Request`: Invalid request format or validation error
189
+ * - `404 Not Found`: Collection does not exist
190
+ * - `500 Internal Server Error`: Storage or processing error
191
+ */
192
+ post: operations["insertRecords"];
193
+ delete?: never;
194
+ options?: never;
195
+ head?: never;
196
+ patch?: never;
197
+ trace?: never;
198
+ };
199
+ "/api/v2/collections/{collection_id}/records/scan": {
200
+ parameters: {
201
+ query?: never;
202
+ header?: never;
203
+ path?: never;
204
+ cookie?: never;
205
+ };
206
+ get?: never;
207
+ put?: never;
208
+ /**
209
+ * Paginated scan of records in a collection.
210
+ * @description Returns the next page of records (TD-099 acceptance 2 + 3, live).
211
+ * Cursor-based pagination: pass the response's `next_cursor` back as
212
+ * `cursor` to fetch the next page; a `null` cursor means the scan is
213
+ * exhausted. Cursors are minted and validated against the caller-facing
214
+ * collection id in the URL path, expire after 24h (HTTP 410), and reject
215
+ * cross-collection reuse (HTTP 400).
216
+ */
217
+ post: operations["scanRecords"];
218
+ delete?: never;
219
+ options?: never;
220
+ head?: never;
221
+ patch?: never;
222
+ trace?: never;
223
+ };
224
+ "/api/v2/collections/{collection_id}/records/{record_id}": {
225
+ parameters: {
226
+ query?: never;
227
+ header?: never;
228
+ path?: never;
229
+ cookie?: never;
230
+ };
231
+ /**
232
+ * Get a record by ID.
233
+ * @description Get a single record by ID.
234
+ *
235
+ * ## Path Parameters
236
+ *
237
+ * - `collection_id`: Collection name/ID
238
+ * - `record_id`: Record ID
239
+ *
240
+ * ## Query Parameters
241
+ *
242
+ * - `include_vector`: Whether to include the vector (default: true)
243
+ * - `include_text`: Whether to include TEXT fields (default: false)
244
+ *
245
+ * ## Response
246
+ *
247
+ * Returns [`RecordV2Response`] with record details.
248
+ *
249
+ * ## Errors
250
+ *
251
+ * - `404 Not Found`: Collection or record does not exist
252
+ * - `500 Internal Server Error`: Retrieval failed
253
+ */
254
+ get: operations["getRecord"];
255
+ put?: never;
256
+ post?: never;
257
+ /**
258
+ * Delete a record by ID.
259
+ * @description Delete a single record by writing a tombstone through the rich record path.
260
+ */
261
+ delete: operations["deleteRecord"];
262
+ options?: never;
263
+ head?: never;
264
+ patch?: never;
265
+ trace?: never;
266
+ };
267
+ "/api/v2/collections/{collection_id}/schema": {
268
+ parameters: {
269
+ query?: never;
270
+ header?: never;
271
+ path?: never;
272
+ cookie?: never;
273
+ };
274
+ /**
275
+ * Get collection schema.
276
+ * @description Retrieve the schema definition for a collection.
277
+ *
278
+ * ## Path Parameters
279
+ *
280
+ * - `collection_id`: Collection name/ID
281
+ *
282
+ * ## Response
283
+ *
284
+ * Returns [`SchemaResponse`] with full schema details.
285
+ *
286
+ * ## Errors
287
+ *
288
+ * - `404 Not Found`: Collection or schema does not exist
289
+ * - `500 Internal Server Error`: Retrieval failed
290
+ */
291
+ get: operations["getCollectionSchema"];
292
+ /**
293
+ * Update collection schema.
294
+ * @description Update the schema for a collection.
295
+ *
296
+ * ## Path Parameters
297
+ *
298
+ * - `collection_id`: Collection name/ID
299
+ *
300
+ * ## Request Body
301
+ *
302
+ * See [`UpdateSchemaRequest`] for the expected JSON format.
303
+ *
304
+ * ## Response
305
+ *
306
+ * Returns [`UpdateSchemaResponse`] with change details.
307
+ *
308
+ * ## Schema Evolution
309
+ *
310
+ * Schema updates must follow evolution rules to maintain data compatibility.
311
+ * See [`UpdateSchemaRequest`] for detailed rules.
312
+ *
313
+ * ## Errors
314
+ *
315
+ * - `400 Bad Request`: Invalid schema or evolution violation
316
+ * - `404 Not Found`: Collection does not exist
317
+ * - `409 Conflict`: Incompatible schema change
318
+ * - `500 Internal Server Error`: Update failed
319
+ */
320
+ put: operations["updateCollectionSchema"];
321
+ post?: never;
322
+ delete?: never;
323
+ options?: never;
324
+ head?: never;
325
+ patch?: never;
326
+ trace?: never;
327
+ };
328
+ "/api/v2/collections/{collection_id}/search": {
329
+ parameters: {
330
+ query?: never;
331
+ header?: never;
332
+ path?: never;
333
+ cookie?: never;
334
+ };
335
+ get?: never;
336
+ put?: never;
337
+ /**
338
+ * Search records with vector similarity and typed filters.
339
+ * @description Search a collection with typed filters.
340
+ *
341
+ * ## Request Body
342
+ *
343
+ * See [`TypedSearchRequest`] for the expected JSON format.
344
+ *
345
+ * ## Response
346
+ *
347
+ * Returns [`TypedSearchResponse`] with ranked results.
348
+ *
349
+ * ## Errors
350
+ *
351
+ * - `400 Bad Request`: Invalid request format or filter error
352
+ * - `404 Not Found`: Collection does not exist
353
+ * - `500 Internal Server Error`: Search execution error
354
+ */
355
+ post: operations["searchRecords"];
356
+ delete?: never;
357
+ options?: never;
358
+ head?: never;
359
+ patch?: never;
360
+ trace?: never;
361
+ };
362
+ "/api/v2/graphs/{graph_id}/fusion-search": {
363
+ parameters: {
364
+ query?: never;
365
+ header?: never;
366
+ path?: never;
367
+ cookie?: never;
368
+ };
369
+ get?: never;
370
+ put?: never;
371
+ /** `POST /api/v2/graphs/{graph_id}/fusion-search` — vector seed → graph expand → calibrated fuse-by-oid. */
372
+ post: operations["fusion_search_v2"];
373
+ delete?: never;
374
+ options?: never;
375
+ head?: never;
376
+ patch?: never;
377
+ trace?: never;
378
+ };
379
+ "/api/v2/graphs/{graph_id}/impact-analysis": {
380
+ parameters: {
381
+ query?: never;
382
+ header?: never;
383
+ path?: never;
384
+ cookie?: never;
385
+ };
386
+ get?: never;
387
+ put?: never;
388
+ /**
389
+ * `POST /api/v2/graphs/{graph_id}/impact-analysis` — forward/backward blast radius (TD-131). The
390
+ * server-side baseline for the embedded-parity gate; mirrors `GraphOperationsService::impact_analysis`.
391
+ */
392
+ post: operations["impact_analysis_v2"];
393
+ delete?: never;
394
+ options?: never;
395
+ head?: never;
396
+ patch?: never;
397
+ trace?: never;
398
+ };
399
+ "/api/v2/model-registries": {
400
+ parameters: {
401
+ query?: never;
402
+ header?: never;
403
+ path?: never;
404
+ cookie?: never;
405
+ };
406
+ get: operations["listModelRegistries"];
407
+ put?: never;
408
+ post: operations["createModelRegistry"];
409
+ delete?: never;
410
+ options?: never;
411
+ head?: never;
412
+ patch?: never;
413
+ trace?: never;
414
+ };
415
+ "/api/v2/model-registries/{name}": {
416
+ parameters: {
417
+ query?: never;
418
+ header?: never;
419
+ path?: never;
420
+ cookie?: never;
421
+ };
422
+ get: operations["getModelRegistry"];
423
+ put?: never;
424
+ post?: never;
425
+ delete?: never;
426
+ options?: never;
427
+ head?: never;
428
+ patch?: never;
429
+ trace?: never;
430
+ };
431
+ "/api/v2/model-registries/{name}/mutations": {
432
+ parameters: {
433
+ query?: never;
434
+ header?: never;
435
+ path?: never;
436
+ cookie?: never;
437
+ };
438
+ get?: never;
439
+ put?: never;
440
+ post: operations["applyModelRegistryMutation"];
441
+ delete?: never;
442
+ options?: never;
443
+ head?: never;
444
+ patch?: never;
445
+ trace?: never;
446
+ };
447
+ "/api/v2/model-registries/{name}/resolve": {
448
+ parameters: {
449
+ query?: never;
450
+ header?: never;
451
+ path?: never;
452
+ cookie?: never;
453
+ };
454
+ get?: never;
455
+ put?: never;
456
+ post: operations["resolveModelAlias"];
457
+ delete?: never;
458
+ options?: never;
459
+ head?: never;
460
+ patch?: never;
461
+ trace?: never;
462
+ };
463
+ "/api/v2/query": {
464
+ parameters: {
465
+ query?: never;
466
+ header?: never;
467
+ path?: never;
468
+ cookie?: never;
469
+ };
470
+ get?: never;
471
+ put?: never;
472
+ /**
473
+ * Execute AQL or UQL through the shared query facade.
474
+ * @description The canonical unified query surface: UQL (unified multi-modal), federated SQL
475
+ * extensions, and AQL. This is NOT plain SQL-over-REST and is NOT deprecated:
476
+ * UQL/AQL are non-SQL languages that pgwire and `/api/v2/sql` cannot serve, so
477
+ * this endpoint remains their canonical home. Authenticated programmatic SQL
478
+ * is available through both gRPC `ExecuteQuery` and `/api/v2/sql`; neither is a
479
+ * replacement for this UQL/federated surface.
480
+ */
481
+ post: operations["executeQuery"];
482
+ delete?: never;
483
+ options?: never;
484
+ head?: never;
485
+ patch?: never;
486
+ trace?: never;
487
+ };
488
+ "/api/v2/query/explain": {
489
+ parameters: {
490
+ query?: never;
491
+ header?: never;
492
+ path?: never;
493
+ cookie?: never;
494
+ };
495
+ get?: never;
496
+ put?: never;
497
+ /** Explain an AQL or UQL query through the shared query facade. */
498
+ post: operations["explainQuery"];
499
+ delete?: never;
500
+ options?: never;
501
+ head?: never;
502
+ patch?: never;
503
+ trace?: never;
504
+ };
505
+ "/api/v2/sql": {
506
+ parameters: {
507
+ query?: never;
508
+ header?: never;
509
+ path?: never;
510
+ cookie?: never;
511
+ };
512
+ get?: never;
513
+ put?: never;
514
+ /**
515
+ * Execute one authenticated SQL statement.
516
+ * @description The required foundation identity is inserted by the root tenant middleware
517
+ * after authentication. A router mounted without that middleware fails closed
518
+ * at extraction instead of constructing an anonymous authorization carrier.
519
+ */
520
+ post: operations["executeSql"];
521
+ delete?: never;
522
+ options?: never;
523
+ head?: never;
524
+ patch?: never;
525
+ trace?: never;
526
+ };
527
+ "/health": {
528
+ parameters: {
529
+ query?: never;
530
+ header?: never;
531
+ path?: never;
532
+ cookie?: never;
533
+ };
534
+ /** Get server health. */
535
+ get: operations["getHealth"];
536
+ put?: never;
537
+ post?: never;
538
+ delete?: never;
539
+ options?: never;
540
+ head?: never;
541
+ patch?: never;
542
+ trace?: never;
543
+ };
544
+ "/health/live": {
545
+ parameters: {
546
+ query?: never;
547
+ header?: never;
548
+ path?: never;
549
+ cookie?: never;
550
+ };
551
+ /** Kubernetes liveness probe. */
552
+ get: operations["getLiveness"];
553
+ put?: never;
554
+ post?: never;
555
+ delete?: never;
556
+ options?: never;
557
+ head?: never;
558
+ patch?: never;
559
+ trace?: never;
560
+ };
561
+ "/health/ready": {
562
+ parameters: {
563
+ query?: never;
564
+ header?: never;
565
+ path?: never;
566
+ cookie?: never;
567
+ };
568
+ /** Kubernetes readiness probe. */
569
+ get: operations["getReadiness"];
570
+ put?: never;
571
+ post?: never;
572
+ delete?: never;
573
+ options?: never;
574
+ head?: never;
575
+ patch?: never;
576
+ trace?: never;
577
+ };
578
+ "/api/v2/_meta/capabilities": {
579
+ parameters: {
580
+ query?: never;
581
+ header?: never;
582
+ path?: never;
583
+ cookie?: never;
584
+ };
585
+ /**
586
+ * Negotiate server capabilities.
587
+ * @description Advertises API version, supported features, limits, and the error- envelope contract so SDKs can adapt instead of hard-coding assumptions.
588
+ */
589
+ get: operations["getCapabilities"];
590
+ put?: never;
591
+ post?: never;
592
+ delete?: never;
593
+ options?: never;
594
+ head?: never;
595
+ patch?: never;
596
+ trace?: never;
597
+ };
598
+ "/api/v2/graphs": {
599
+ parameters: {
600
+ query?: never;
601
+ header?: never;
602
+ path?: never;
603
+ cookie?: never;
604
+ };
605
+ /** List graph collections. */
606
+ get: operations["listGraphs"];
607
+ put?: never;
608
+ /** Create a graph collection. */
609
+ post: operations["createGraph"];
610
+ delete?: never;
611
+ options?: never;
612
+ head?: never;
613
+ patch?: never;
614
+ trace?: never;
615
+ };
616
+ "/api/v2/graphs/{graph_id}": {
617
+ parameters: {
618
+ query?: never;
619
+ header?: never;
620
+ path: {
621
+ graph_id: components["parameters"]["GraphId"];
622
+ };
623
+ cookie?: never;
624
+ };
625
+ /** Get a graph collection by id. */
626
+ get: operations["getGraph"];
627
+ put?: never;
628
+ post?: never;
629
+ /** Delete a graph collection. */
630
+ delete: operations["deleteGraph"];
631
+ options?: never;
632
+ head?: never;
633
+ patch?: never;
634
+ trace?: never;
635
+ };
636
+ "/api/v2/graphs/{graph_id}/nodes": {
637
+ parameters: {
638
+ query?: never;
639
+ header?: never;
640
+ path: {
641
+ graph_id: components["parameters"]["GraphId"];
642
+ };
643
+ cookie?: never;
644
+ };
645
+ get?: never;
646
+ put?: never;
647
+ /** Create a node in a graph. */
648
+ post: operations["createNode"];
649
+ delete?: never;
650
+ options?: never;
651
+ head?: never;
652
+ patch?: never;
653
+ trace?: never;
654
+ };
655
+ "/api/v2/graphs/{graph_id}/nodes/{node_id}": {
656
+ parameters: {
657
+ query?: never;
658
+ header?: never;
659
+ path: {
660
+ graph_id: components["parameters"]["GraphId"];
661
+ node_id: components["parameters"]["NodeId"];
662
+ };
663
+ cookie?: never;
664
+ };
665
+ /** Get a node by id. */
666
+ get: operations["getNode"];
667
+ put?: never;
668
+ post?: never;
669
+ /** Delete a node by id. */
670
+ delete: operations["deleteNode"];
671
+ options?: never;
672
+ head?: never;
673
+ patch?: never;
674
+ trace?: never;
675
+ };
676
+ "/api/v2/graphs/{graph_id}/edges": {
677
+ parameters: {
678
+ query?: never;
679
+ header?: never;
680
+ path: {
681
+ graph_id: components["parameters"]["GraphId"];
682
+ };
683
+ cookie?: never;
684
+ };
685
+ get?: never;
686
+ put?: never;
687
+ /** Create an edge in a graph. */
688
+ post: operations["createEdge"];
689
+ delete?: never;
690
+ options?: never;
691
+ head?: never;
692
+ patch?: never;
693
+ trace?: never;
694
+ };
695
+ "/api/v2/graphs/{graph_id}/nodes/batch": {
696
+ parameters: {
697
+ query?: never;
698
+ header?: never;
699
+ path: {
700
+ graph_id: components["parameters"]["GraphId"];
701
+ };
702
+ cookie?: never;
703
+ };
704
+ get?: never;
705
+ put?: never;
706
+ /**
707
+ * Create multiple nodes in a single call.
708
+ * @description Batch counterpart to `createNode`. Use this on bulk-ingest paths
709
+ * where individual round-trips would dominate latency.
710
+ */
711
+ post: operations["batchCreateNodes"];
712
+ delete?: never;
713
+ options?: never;
714
+ head?: never;
715
+ patch?: never;
716
+ trace?: never;
717
+ };
718
+ "/api/v2/graphs/{graph_id}/edges/batch": {
719
+ parameters: {
720
+ query?: never;
721
+ header?: never;
722
+ path: {
723
+ graph_id: components["parameters"]["GraphId"];
724
+ };
725
+ cookie?: never;
726
+ };
727
+ get?: never;
728
+ put?: never;
729
+ /**
730
+ * Create multiple edges in a single call.
731
+ * @description Batch counterpart to `createEdge`.
732
+ */
733
+ post: operations["batchCreateEdges"];
734
+ delete?: never;
735
+ options?: never;
736
+ head?: never;
737
+ patch?: never;
738
+ trace?: never;
739
+ };
740
+ "/api/v2/graphs/{graph_id}/traverse": {
741
+ parameters: {
742
+ query?: never;
743
+ header?: never;
744
+ path: {
745
+ graph_id: components["parameters"]["GraphId"];
746
+ };
747
+ cookie?: never;
748
+ };
749
+ get?: never;
750
+ put?: never;
751
+ /** Traverse a graph from a start node. */
752
+ post: operations["traverseGraph"];
753
+ delete?: never;
754
+ options?: never;
755
+ head?: never;
756
+ patch?: never;
757
+ trace?: never;
758
+ };
759
+ "/api/v2/graphs/{graph_id}/stats": {
760
+ parameters: {
761
+ query?: never;
762
+ header?: never;
763
+ path: {
764
+ graph_id: components["parameters"]["GraphId"];
765
+ };
766
+ cookie?: never;
767
+ };
768
+ /** Get graph statistics. */
769
+ get: operations["getGraphStats"];
770
+ put?: never;
771
+ post?: never;
772
+ delete?: never;
773
+ options?: never;
774
+ head?: never;
775
+ patch?: never;
776
+ trace?: never;
777
+ };
778
+ "/api/v2/hybrid/search": {
779
+ parameters: {
780
+ query?: never;
781
+ header?: never;
782
+ path?: never;
783
+ cookie?: never;
784
+ };
785
+ get?: never;
786
+ put?: never;
787
+ /** BM25 + vector hybrid (fusion) search. */
788
+ post: operations["hybridSearch"];
789
+ delete?: never;
790
+ options?: never;
791
+ head?: never;
792
+ patch?: never;
793
+ trace?: never;
794
+ };
795
+ "/api/v2/hybrid/index": {
796
+ parameters: {
797
+ query?: never;
798
+ header?: never;
799
+ path?: never;
800
+ cookie?: never;
801
+ };
802
+ get?: never;
803
+ put?: never;
804
+ /** Index documents for BM25 full-text search. */
805
+ post: operations["hybridIndex"];
806
+ delete?: never;
807
+ options?: never;
808
+ head?: never;
809
+ patch?: never;
810
+ trace?: never;
811
+ };
812
+ "/api/v2/document-collections": {
813
+ parameters: {
814
+ query?: never;
815
+ header?: never;
816
+ path?: never;
817
+ cookie?: never;
818
+ };
819
+ /** List document collections. */
820
+ get: operations["listDocumentCollections"];
821
+ put?: never;
822
+ /** Create a document collection. */
823
+ post: operations["createDocumentCollection"];
824
+ delete?: never;
825
+ options?: never;
826
+ head?: never;
827
+ patch?: never;
828
+ trace?: never;
829
+ };
830
+ "/api/v2/document-collections/{collection}/documents": {
831
+ parameters: {
832
+ query?: never;
833
+ header?: never;
834
+ path: {
835
+ collection: string;
836
+ };
837
+ cookie?: never;
838
+ };
839
+ /** Query documents. */
840
+ get: operations["queryDocuments"];
841
+ put?: never;
842
+ /** Insert a document. */
843
+ post: operations["insertDocument"];
844
+ delete?: never;
845
+ options?: never;
846
+ head?: never;
847
+ patch?: never;
848
+ trace?: never;
849
+ };
850
+ "/api/v2/observability/namespaces/{namespace}/logs": {
851
+ parameters: {
852
+ query?: never;
853
+ header?: never;
854
+ path: {
855
+ namespace: string;
856
+ };
857
+ cookie?: never;
858
+ };
859
+ get?: never;
860
+ put?: never;
861
+ /** Ingest a log entry. */
862
+ post: operations["ingestLog"];
863
+ delete?: never;
864
+ options?: never;
865
+ head?: never;
866
+ patch?: never;
867
+ trace?: never;
868
+ };
869
+ "/api/v2/observability/namespaces/{namespace}/logs/search": {
870
+ parameters: {
871
+ query?: never;
872
+ header?: never;
873
+ path: {
874
+ namespace: string;
875
+ };
876
+ cookie?: never;
877
+ };
878
+ get?: never;
879
+ put?: never;
880
+ /** Query logs. */
881
+ post: operations["queryLogs"];
882
+ delete?: never;
883
+ options?: never;
884
+ head?: never;
885
+ patch?: never;
886
+ trace?: never;
887
+ };
888
+ }
889
+ export type webhooks = Record<string, never>;
890
+ export interface components {
891
+ schemas: {
892
+ ApplyModelRegistryMutationRequest: {
893
+ /**
894
+ * Format: int64
895
+ * @description Optimistic concurrency token returned by the previous read or mutation.
896
+ */
897
+ expected_revision: number;
898
+ /** @description Command-shaped mutation; whole-registry replacement is intentionally unsupported. */
899
+ mutation: components["schemas"]["CatalogModelRegistryMutation"];
900
+ };
901
+ /** @description Content-addressed reference to bytes held outside xCatalog. */
902
+ CatalogArtifactDescriptor: {
903
+ uri: string;
904
+ digest: string;
905
+ /** Format: int64 */
906
+ size_bytes: number;
907
+ media_type: string;
908
+ };
909
+ /** @description Mutable serving intent that always resolves to an immutable version/digest. */
910
+ CatalogDeploymentBinding: {
911
+ name: string;
912
+ /** Format: int64 */
913
+ version: number;
914
+ artifact_digest: string;
915
+ runtime: string;
916
+ endpoint: string;
917
+ /** Format: int64 */
918
+ updated_at_ms: number;
919
+ };
920
+ CatalogDimensionPolicy: "fixed" | "discrete" | {
921
+ range: components["schemas"]["CatalogDimensionRange"];
922
+ };
923
+ CatalogDimensionRange: {
924
+ /** Format: int32 */
925
+ minimum: number;
926
+ };
927
+ /** @description Exact rendered-input and tokenizer budget consumed by an embedding runtime. */
928
+ CatalogEmbeddingInputContract: {
929
+ model_revision: string;
930
+ tokenizer_id: string;
931
+ tokenizer_revision: string;
932
+ tokenizer_fingerprint: string;
933
+ /** Format: int32 */
934
+ declared_context_limit: number;
935
+ /** Format: int32 */
936
+ effective_context_limit: number;
937
+ /** Format: int32 */
938
+ special_token_count: number;
939
+ document_template: string;
940
+ query_template: string;
941
+ document_parameters?: {
942
+ [key: string]: string;
943
+ };
944
+ query_parameters?: {
945
+ [key: string]: string;
946
+ };
947
+ };
948
+ /**
949
+ * @description Registered embedding model: immutable versions plus separately mutable or
950
+ * append-only lifecycle records.
951
+ */
952
+ CatalogEmbeddingModelRegistry: {
953
+ /** Format: int32 */
954
+ schema_version: number;
955
+ /**
956
+ * Format: int64
957
+ * @description Optimistic concurrency token for catalog/API mutations. Old rows default
958
+ * to zero; every successful command increments it.
959
+ */
960
+ revision?: number;
961
+ name: string;
962
+ versions?: {
963
+ [key: string]: components["schemas"]["CatalogEmbeddingModelVersion"];
964
+ };
965
+ aliases?: {
966
+ [key: string]: number;
967
+ };
968
+ evidence?: components["schemas"]["CatalogEvaluationEvidence"][];
969
+ decisions?: components["schemas"]["CatalogModelDecision"][];
970
+ deployments?: {
971
+ [key: string]: components["schemas"]["CatalogDeploymentBinding"];
972
+ };
973
+ tags?: {
974
+ [key: string]: string;
975
+ };
976
+ };
977
+ /** @description Immutable executable contract for one registered model version. */
978
+ CatalogEmbeddingModelVersion: {
979
+ /** Format: int64 */
980
+ version: number;
981
+ provider_model_id: string;
982
+ artifact: components["schemas"]["CatalogArtifactDescriptor"];
983
+ input: components["schemas"]["CatalogEmbeddingInputContract"];
984
+ output: components["schemas"]["CatalogEmbeddingOutputContract"];
985
+ governance?: components["schemas"]["CatalogModelGovernance"];
986
+ lineage?: components["schemas"]["CatalogModelLineage"];
987
+ /** Format: int64 */
988
+ created_at_ms: number;
989
+ source_run_id?: string | null;
990
+ };
991
+ CatalogEmbeddingOutputContract: {
992
+ /** Format: int32 */
993
+ native_dimension: number;
994
+ dimension_policy: components["schemas"]["CatalogDimensionPolicy"];
995
+ supported_dimensions: number[];
996
+ normalized: boolean;
997
+ pooling: string;
998
+ };
999
+ /** @description Append-only evaluation summary. Large row-level results remain external. */
1000
+ CatalogEvaluationEvidence: {
1001
+ evidence_id: string;
1002
+ /** Format: int64 */
1003
+ version: number;
1004
+ dataset_name: string;
1005
+ dataset_digest: string;
1006
+ evaluator: string;
1007
+ metrics: {
1008
+ [key: string]: number;
1009
+ };
1010
+ /** Format: int64 */
1011
+ created_at_ms: number;
1012
+ };
1013
+ /** @description Digest-pinned input consumed by the execution that produced a model. */
1014
+ CatalogLineageInput: {
1015
+ kind: components["schemas"]["CatalogLineageInputKind"];
1016
+ name: string;
1017
+ digest: string;
1018
+ };
1019
+ /** @enum {string} */
1020
+ CatalogLineageInputKind: "dataset" | "feature_set" | "model" | "artifact";
1021
+ /** @enum {string} */
1022
+ CatalogModelAccess: "open" | "gated" | "unreviewed";
1023
+ CatalogModelAliasMutation: {
1024
+ alias: string;
1025
+ /** Format: int64 */
1026
+ version: number;
1027
+ };
1028
+ /** @description Append-only policy/audit decision, intentionally separate from evidence. */
1029
+ CatalogModelDecision: {
1030
+ decision_id: string;
1031
+ /** Format: int64 */
1032
+ version: number;
1033
+ decision: components["schemas"]["CatalogModelDecisionKind"];
1034
+ evidence_ids: string[];
1035
+ principal: string;
1036
+ /** Format: int64 */
1037
+ created_at_ms: number;
1038
+ };
1039
+ /** @enum {string} */
1040
+ CatalogModelDecisionKind: "approved" | "rejected" | "deprecated";
1041
+ /**
1042
+ * @description Supply-chain and runtime policy declared for an immutable model version.
1043
+ * Approval decisions remain separate append-only audit records.
1044
+ */
1045
+ CatalogModelGovernance: {
1046
+ license_id?: string;
1047
+ access?: components["schemas"]["CatalogModelAccess"];
1048
+ requires_remote_code?: boolean;
1049
+ approved_runtimes?: string[];
1050
+ };
1051
+ /** @description MLMD/OpenLineage-shaped producer execution and its declared inputs. */
1052
+ CatalogModelLineage: {
1053
+ producer_execution_id?: string | null;
1054
+ code_revision?: string | null;
1055
+ inputs?: components["schemas"]["CatalogLineageInput"][];
1056
+ };
1057
+ /**
1058
+ * @description Command-shaped mutations preserve version/evidence/decision immutability at
1059
+ * the persistence boundary. API adapters lower into these commands instead
1060
+ * of replacing a whole registry document.
1061
+ */
1062
+ CatalogModelRegistryMutation: {
1063
+ payload: components["schemas"]["CatalogEmbeddingModelVersion"];
1064
+ /** @enum {string} */
1065
+ operation: "register_version";
1066
+ } | {
1067
+ payload: components["schemas"]["CatalogModelAliasMutation"];
1068
+ /** @enum {string} */
1069
+ operation: "set_alias";
1070
+ } | {
1071
+ payload: components["schemas"]["CatalogEvaluationEvidence"];
1072
+ /** @enum {string} */
1073
+ operation: "append_evidence";
1074
+ } | {
1075
+ payload: components["schemas"]["CatalogModelDecision"];
1076
+ /** @enum {string} */
1077
+ operation: "record_decision";
1078
+ } | {
1079
+ payload: components["schemas"]["CatalogDeploymentBinding"];
1080
+ /** @enum {string} */
1081
+ operation: "upsert_deployment";
1082
+ };
1083
+ /** @description Collection statistics for v2 API */
1084
+ CollectionStatsV2: {
1085
+ /**
1086
+ * Format: int64
1087
+ * @description Total number of records, or `null` when the server does not know.
1088
+ *
1089
+ * `null` is a real answer here, not a gap. The counter is maintained by
1090
+ * `MetadataStore::update_stats`, which the record write path does not call,
1091
+ * so a collection that has never had stats written carries none. Reporting
1092
+ * `0` in that case is a *confident wrong answer* — indistinguishable from a
1093
+ * genuinely empty collection, and it cost one downstream project a false
1094
+ * durability bug report before the cause was found (#1527).
1095
+ */
1096
+ record_count?: number | null;
1097
+ /**
1098
+ * Format: int64
1099
+ * @description Total storage size in bytes
1100
+ */
1101
+ storage_size_bytes: number;
1102
+ /**
1103
+ * Format: int32
1104
+ * @description Number of indexed fields
1105
+ */
1106
+ indexed_fields: number;
1107
+ /**
1108
+ * Format: int32
1109
+ * @description Number of TEXT fields with dedicated storage
1110
+ */
1111
+ text_field_count: number;
1112
+ };
1113
+ /** @description Collection details response */
1114
+ CollectionV2Response: {
1115
+ /** @description Collection ID */
1116
+ collection_id: string;
1117
+ /** @description Collection name */
1118
+ name: string;
1119
+ /**
1120
+ * Format: int32
1121
+ * @description Vector dimension
1122
+ */
1123
+ dimension: number;
1124
+ /** @description Storage engine */
1125
+ engine: string;
1126
+ /** @description Distance metric */
1127
+ distance_metric: string;
1128
+ /** @description Whether ProximaRecord is enabled */
1129
+ proxima_record_enabled: boolean;
1130
+ /**
1131
+ * @description Canonical embedding precision label for stored vectors.
1132
+ *
1133
+ * Stable string matching the proto `EmbeddingPrecision::as_str_name()`
1134
+ * (e.g. "EMBEDDING_PRECISION_FP16"). `None` when the collection didn't
1135
+ * set a non-default (Unspecified/Fp32) precision.
1136
+ */
1137
+ canonical_embedding_precision?: string | null;
1138
+ schema?: null | components["schemas"]["SchemaDefinition"];
1139
+ /** @description Collection statistics */
1140
+ stats: components["schemas"]["CollectionStatsV2"];
1141
+ /**
1142
+ * Format: int64
1143
+ * @description Monotonic server-owned content revision for cache revalidation.
1144
+ */
1145
+ content_revision: number;
1146
+ /** @description Opaque validator that also fences server restarts. */
1147
+ content_revision_token: string;
1148
+ /**
1149
+ * @description Per-index config (HNSW/IVF params, is_primary) as persisted at create
1150
+ * time. Mirrors the gRPC-v2 `GetCollection` `index_specs` (TD-122 parity).
1151
+ */
1152
+ index_specs: components["schemas"]["IndexSpecOutput"][];
1153
+ quantization?: null | components["schemas"]["QuantizationConfigOutput"];
1154
+ /** @description Creation timestamp */
1155
+ created_at: string;
1156
+ /** @description Last update timestamp */
1157
+ updated_at?: string | null;
1158
+ };
1159
+ /** @description Summary of a collection for list operations */
1160
+ CollectionV2Summary: {
1161
+ /** @description Collection ID */
1162
+ collection_id: string;
1163
+ /** @description Collection name */
1164
+ name: string;
1165
+ /**
1166
+ * Format: int32
1167
+ * @description Vector dimension
1168
+ */
1169
+ dimension: number;
1170
+ /** @description Storage engine */
1171
+ engine: string;
1172
+ /** @description Whether ProximaRecord is enabled */
1173
+ proxima_record_enabled: boolean;
1174
+ /**
1175
+ * Format: int64
1176
+ * @description Record count (if include_stats is true)
1177
+ */
1178
+ record_count?: number | null;
1179
+ };
1180
+ /**
1181
+ * @description Request to create a collection with schema support
1182
+ *
1183
+ * ## Example JSON
1184
+ *
1185
+ * ```json
1186
+ * {
1187
+ * "name": "products",
1188
+ * "dimension": 768,
1189
+ * "engine": "sst",
1190
+ * "schema": {
1191
+ * "columns": [
1192
+ * {"name": "category", "data_type": "text", "indexed": true},
1193
+ * {"name": "price", "data_type": "float", "filterable": true},
1194
+ * {"name": "description", "data_type": "text", "max_length": 10000}
1195
+ * ],
1196
+ * "enforcement": "hybrid",
1197
+ * "allow_additional_fields": true
1198
+ * },
1199
+ * "enable_proxima_record": true
1200
+ * }
1201
+ * ```
1202
+ */
1203
+ CreateCollectionV2Request: {
1204
+ /** @description Collection name (required) */
1205
+ name: string;
1206
+ /**
1207
+ * Format: int32
1208
+ * @description Vector dimension (required)
1209
+ */
1210
+ dimension: number;
1211
+ /**
1212
+ * @description Storage engine selection
1213
+ *
1214
+ * Options: "auto", "sst", "helix", "viper", "swift", "nova", "raptor", "tst"
1215
+ * Default: "auto" (system selects optimal engine)
1216
+ */
1217
+ engine?: string | null;
1218
+ schema?: null | components["schemas"]["SchemaDefinition"];
1219
+ /**
1220
+ * @description Enable ProximaRecord support for this collection
1221
+ *
1222
+ * When enabled:
1223
+ * - Records can use rich props and text_fields
1224
+ * - Schema validation is applied at insert time
1225
+ * - TEXT columns are stored in dedicated columnar format
1226
+ *
1227
+ * Default: false (backward compatible with v1)
1228
+ */
1229
+ enable_proxima_record?: boolean | null;
1230
+ /**
1231
+ * @description Distance metric for vector similarity
1232
+ *
1233
+ * Options: "cosine", "euclidean", "dot_product"
1234
+ * Default: "cosine"
1235
+ */
1236
+ distance_metric?: string | null;
1237
+ /**
1238
+ * Format: int64
1239
+ * @description Initial capacity hint for pre-allocation
1240
+ */
1241
+ initial_capacity?: number | null;
1242
+ /**
1243
+ * @description Canonical embedding precision for stored vectors
1244
+ *
1245
+ * Options: "fp32" (default), "fp16", "bf16", "int8", "uint8".
1246
+ * Accepts the same string forms as the gRPC / Arrow Flight surfaces
1247
+ * (e.g. "half", "float16", "EMBEDDING_PRECISION_FP16"). The DDL
1248
+ * service applies the same normalisation, so SDKs and pgwire
1249
+ * converge on the same enum discriminant.
1250
+ */
1251
+ canonical_embedding_precision?: string | null;
1252
+ /**
1253
+ * @description Index configurations (e.g. an explicit IVF or HNSW index).
1254
+ *
1255
+ * Restores v1 parity: the v1 proto create accepted `index_configs`, which
1256
+ * drive `active_algorithm_for` (e.g. an IVF index → recall-tune dispatches
1257
+ * to the IVF arm). When omitted, the engine selects a default (HNSW).
1258
+ */
1259
+ index_configs?: components["schemas"]["IndexConfigInput"][] | null;
1260
+ /**
1261
+ * @description Operator metadata tags, e.g. `"recall_target:0.95"`,
1262
+ * `"target_vector_count:1000"`, `"modalities:text,image"`. Consumed by the
1263
+ * recall advisor / route-health (`services/collection/recall_target.rs`).
1264
+ */
1265
+ tags?: string[] | null;
1266
+ quantization?: null | components["schemas"]["QuantizationConfigInput"];
1267
+ index_policy?: null | components["schemas"]["IndexPolicyInput"];
1268
+ };
1269
+ /** @description Response for collection creation */
1270
+ CreateCollectionV2Response: {
1271
+ /** @description Collection ID (same as name) */
1272
+ collection_id: string;
1273
+ /** @description Collection name */
1274
+ name: string;
1275
+ /**
1276
+ * Format: int32
1277
+ * @description Vector dimension
1278
+ */
1279
+ dimension: number;
1280
+ /** @description Selected storage engine */
1281
+ engine: string;
1282
+ /** @description Whether ProximaRecord is enabled */
1283
+ proxima_record_enabled: boolean;
1284
+ /** @description Schema ID (if schema was defined) */
1285
+ schema_id?: string | null;
1286
+ /** @description Creation timestamp */
1287
+ created_at: string;
1288
+ };
1289
+ CreateModelRegistryRequest: {
1290
+ /** @description Tenant-local registry name. Must be one traversal-free catalog segment. */
1291
+ name: string;
1292
+ };
1293
+ /** @description Response for deleting a collection through the v2 API. */
1294
+ DeleteCollectionV2Response: {
1295
+ /** @description Whether the delete request was accepted. */
1296
+ success: boolean;
1297
+ /** @description Deleted collection ID. */
1298
+ collection_id: string;
1299
+ };
1300
+ /** @description Response for deleting a single record. */
1301
+ DeleteRecordV2Response: {
1302
+ /** @description Whether the delete tombstone was accepted. */
1303
+ success: boolean;
1304
+ /** @description Deleted record ID. */
1305
+ id: string;
1306
+ /**
1307
+ * Format: int64
1308
+ * @description Processing latency in microseconds.
1309
+ */
1310
+ processing_time_us: number;
1311
+ };
1312
+ EntityDto: {
1313
+ id: string;
1314
+ collection_id: string;
1315
+ flexible_metadata: {
1316
+ [key: string]: unknown;
1317
+ };
1318
+ };
1319
+ EntityEmbeddingInput: {
1320
+ model_id: string;
1321
+ modality?: string | null;
1322
+ vector: number[];
1323
+ /** Format: int32 */
1324
+ dimension?: number;
1325
+ };
1326
+ EntityProvenanceInput: {
1327
+ source_id?: string;
1328
+ chunk_id?: string;
1329
+ /** Format: int32 */
1330
+ chunk_position?: number;
1331
+ extraction_method?: string;
1332
+ metadata?: {
1333
+ [key: string]: string;
1334
+ };
1335
+ };
1336
+ EntityRelationInput: {
1337
+ source_entity_id: string;
1338
+ target_entity_id: string;
1339
+ relation_type: string;
1340
+ /** Format: float */
1341
+ weight?: number;
1342
+ properties?: {
1343
+ [key: string]: string;
1344
+ };
1345
+ };
1346
+ EntitySearchResult: {
1347
+ entity: components["schemas"]["EntityDto"];
1348
+ /** Format: float */
1349
+ score: number;
1350
+ };
1351
+ /** @description Inner body of [`ErrorResponse`]. */
1352
+ ErrorBody: {
1353
+ /**
1354
+ * @description Stable machine-readable error code (snake_case).
1355
+ * @example collection_not_found
1356
+ */
1357
+ type: string;
1358
+ message: string;
1359
+ /**
1360
+ * Format: int32
1361
+ * @description HTTP status code.
1362
+ */
1363
+ code: number;
1364
+ /** @description Correlation id (matches the X-Request-ID header). */
1365
+ request_id?: string | null;
1366
+ /** @description Optional structured context (e.g. migration hints). */
1367
+ details?: Record<string, never> | null;
1368
+ };
1369
+ /**
1370
+ * @description Canonical ProximaDB error envelope (`{ error: { type, message, code } }`).
1371
+ *
1372
+ * `request_id` (also returned in the `X-Request-ID` response header) is present
1373
+ * whenever the request passed through the request-id middleware; quote it in
1374
+ * bug reports.
1375
+ */
1376
+ ErrorResponse: {
1377
+ error: components["schemas"]["ErrorBody"];
1378
+ };
1379
+ ExplainQueryRequest: {
1380
+ language: components["schemas"]["QueryLanguage"];
1381
+ query: string;
1382
+ collection?: string | null;
1383
+ };
1384
+ FusionHit: {
1385
+ oid: string;
1386
+ /** Format: float */
1387
+ score: number;
1388
+ source_count: number;
1389
+ /**
1390
+ * @description Graph node label(s) of the reached node. Exposed so cross-modal-joint
1391
+ * consumers can correlate a fused hit by its graph label without a separate
1392
+ * node lookup (#485). The expansion already reaches the node, so this is
1393
+ * near-free to fill. Additive + back-compat (empty until populated).
1394
+ */
1395
+ labels?: string[];
1396
+ };
1397
+ FusionSearchRequest: {
1398
+ /** @description Vector collection to seed from (its records co-indexed with this graph by `oid`). */
1399
+ vector_collection: string;
1400
+ /** @description Query embedding for the ANN seed. */
1401
+ query_vector: number[];
1402
+ limit?: number;
1403
+ /**
1404
+ * Format: int32
1405
+ * @description k-hop expansion depth (bounded; default 1 — the validated sweet spot).
1406
+ */
1407
+ max_depth?: number;
1408
+ edge_types?: string[];
1409
+ /** @description How many of the top vector seeds to expand from (bounded expansion). */
1410
+ max_seeds?: number;
1411
+ /** Format: float */
1412
+ vector_weight?: number | null;
1413
+ /** Format: float */
1414
+ graph_weight?: number | null;
1415
+ /** @description Use the rank-based RRF fallback instead of PIT-calibrated linear. */
1416
+ rrf?: boolean;
1417
+ /**
1418
+ * Format: float
1419
+ * @description Consensus boost added to any `oid` present in ≥2 sources.
1420
+ */
1421
+ consensus_beta?: number | null;
1422
+ /** @description Graph contribution grain: `"nodes"` (default), `"edges"`, or `"both"`. */
1423
+ grain?: string | null;
1424
+ /**
1425
+ * Format: float
1426
+ * @description Cost-routing policy inputs (TD-141): drop negligible modalities (weight fraction) and budget each.
1427
+ * When absent, fusion is unbounded.
1428
+ */
1429
+ min_weight_fraction?: number | null;
1430
+ total_budget?: number | null;
1431
+ /**
1432
+ * @description Optional BM25/full-text query (TD-138). When present (and non-empty), fusion also searches the
1433
+ * collection's document index and merges BM25 hits into the result by shared `oid` — tri-modal
1434
+ * (vector + graph + document) fusion. Absent ⇒ vector+graph only (unchanged).
1435
+ */
1436
+ text_query?: string | null;
1437
+ /**
1438
+ * @description Collection whose document index to BM25-search. Defaults to `vector_collection` (documents
1439
+ * co-indexed with the vectors share the record `oid`, so they merge by `oid`).
1440
+ */
1441
+ document_collection?: string | null;
1442
+ /**
1443
+ * Format: float
1444
+ * @description Document modality weight (mirrors `vector_weight` / `graph_weight`). Defaults to 1.0.
1445
+ */
1446
+ document_weight?: number | null;
1447
+ };
1448
+ FusionSearchResponse: {
1449
+ results: components["schemas"]["FusionHit"][];
1450
+ stats: components["schemas"]["FusionStatsDto"];
1451
+ };
1452
+ FusionStatsDto: {
1453
+ sources_fused: number;
1454
+ sources_skipped: number;
1455
+ candidates_in: number;
1456
+ items_out: number;
1457
+ };
1458
+ /** @description REST input for HNSW index params (mirrors proto `HnswConfig`). */
1459
+ HnswConfigInput: {
1460
+ /** Format: int32 */
1461
+ m?: number | null;
1462
+ /** Format: int32 */
1463
+ ef_construction?: number | null;
1464
+ /** Format: int32 */
1465
+ ef_search?: number | null;
1466
+ };
1467
+ /** @description REST output for HNSW params (mirrors gRPC `V2HnswConfig`). */
1468
+ HnswConfigOutput: {
1469
+ /** Format: int32 */
1470
+ m?: number | null;
1471
+ /** Format: int32 */
1472
+ ef_construction?: number | null;
1473
+ /** Format: int32 */
1474
+ ef_search?: number | null;
1475
+ };
1476
+ ImpactAnalysisRequest: {
1477
+ /** @description Start symbol node id. */
1478
+ node_id: string;
1479
+ /** @description `"forward"` (default — what X impacts) or `"backward"` (what impacts X). */
1480
+ direction?: string | null;
1481
+ edge_types?: string[];
1482
+ /** Format: int32 */
1483
+ max_depth?: number;
1484
+ limit?: number;
1485
+ };
1486
+ ImpactAnalysisResponse: {
1487
+ /** @description Reached node ids (canonical `oid` = `graph/{graph_id}/node/{id}`). */
1488
+ node_ids: string[];
1489
+ edge_count: number;
1490
+ /** Format: int32 */
1491
+ max_depth_reached: number;
1492
+ };
1493
+ /** @description REST input for a single index config (mirrors proto `IndexConfig`). */
1494
+ IndexConfigInput: {
1495
+ /** @description Optional index name (defaults to `index_<n>`). */
1496
+ index_name?: string | null;
1497
+ /** @description Algorithm: "hnsw", "ivf", "pq", "flat", "annoy", "lsh". */
1498
+ algorithm: string;
1499
+ /** @description Free-form algorithm parameters. */
1500
+ parameters?: {
1501
+ [key: string]: string;
1502
+ };
1503
+ hnsw_config?: null | components["schemas"]["HnswConfigInput"];
1504
+ ivf_config?: null | components["schemas"]["IvfConfigInput"];
1505
+ /** @description Mark this index as the collection's primary ANN index (gRPC-v2 parity). */
1506
+ is_primary?: boolean | null;
1507
+ };
1508
+ /**
1509
+ * @description REST input for the per-collection index routing policy (mirrors proto
1510
+ * `IndexPolicy`; ADR-028).
1511
+ */
1512
+ IndexPolicyInput: {
1513
+ /**
1514
+ * @description Routing mode: "auto" (default) | "exact" | "ivf" | "hnsw" | "helix".
1515
+ * "auto"/omitted ⇒ cost-derived. "exact" ⇒ always brute-force (no index).
1516
+ * The engine modes force the collection onto that engine/route.
1517
+ */
1518
+ mode?: string | null;
1519
+ /**
1520
+ * @description Cold-start index warming: "auto" (default) | "eager" | "lazy" | "never".
1521
+ * Index/auto modes only — rejected when `mode = "exact"`.
1522
+ */
1523
+ rehydrate?: string | null;
1524
+ /**
1525
+ * Format: int64
1526
+ * @description Exact-scan byte budget override (bytes). 0/omitted ⇒ cost-model default
1527
+ * for the storage class.
1528
+ */
1529
+ byte_budget?: number | null;
1530
+ /**
1531
+ * Format: int32
1532
+ * @description nprobe override for index modes. 0/omitted ⇒ cost-derived. Rejected when
1533
+ * `mode = "exact"`.
1534
+ */
1535
+ nprobe?: number | null;
1536
+ };
1537
+ /** @description REST output for a single index config (mirrors gRPC `V2IndexSpec`). */
1538
+ IndexSpecOutput: {
1539
+ /** @description Algorithm: "hnsw" | "ivf" | "pq" | "flat" | "annoy" | "lsh". */
1540
+ algorithm: string;
1541
+ hnsw?: null | components["schemas"]["HnswConfigOutput"];
1542
+ ivf?: null | components["schemas"]["IvfConfigOutput"];
1543
+ /** @description Whether this is the collection's primary ANN index. */
1544
+ is_primary: boolean;
1545
+ };
1546
+ /** @description A single record submitted for native embedding + indexing. */
1547
+ IngestDocument: {
1548
+ id: string;
1549
+ /**
1550
+ * @description Raw text content. Required when `X-Embed-Source: native` (default);
1551
+ * optional when the client also supplied a vector.
1552
+ */
1553
+ text?: string | null;
1554
+ /**
1555
+ * @description Optional client-provided vector. When present, the server skips
1556
+ * embedding for this record. Use case: SDK that already embedded
1557
+ * locally (legacy path).
1558
+ */
1559
+ vector?: number[] | null;
1560
+ /** @description Arbitrary metadata fields. Stored as ProximaRecord props. */
1561
+ metadata?: {
1562
+ [key: string]: unknown;
1563
+ };
1564
+ };
1565
+ IngestDocumentsRequest: {
1566
+ records: components["schemas"]["IngestDocument"][];
1567
+ };
1568
+ IngestDocumentsResponse: {
1569
+ mode: string;
1570
+ records: components["schemas"]["IngestedRecord"][];
1571
+ /** Format: int64 */
1572
+ retry_after_ms?: number | null;
1573
+ };
1574
+ IngestedRecord: {
1575
+ id: string;
1576
+ /** Format: int32 */
1577
+ dim: number;
1578
+ };
1579
+ /** @description Error details for a failed record insertion */
1580
+ InsertError: {
1581
+ /** @description Index of the record in the request */
1582
+ index: number;
1583
+ /** @description Record ID (if provided) */
1584
+ id?: string | null;
1585
+ /** @description Error message */
1586
+ error: string;
1587
+ };
1588
+ /**
1589
+ * @description Request to insert ProximaRecords
1590
+ *
1591
+ * ## Example JSON
1592
+ *
1593
+ * ```json
1594
+ * {
1595
+ * "records": [
1596
+ * {
1597
+ * "id": "doc_1",
1598
+ * "vector": [0.1, 0.2, 0.3],
1599
+ * "props": {
1600
+ * "category": "electronics",
1601
+ * "price": 299.99,
1602
+ * "in_stock": true
1603
+ * },
1604
+ * "text_fields": [
1605
+ * {
1606
+ * "name": "description",
1607
+ * "content": "A detailed product description...",
1608
+ * "storage_hint": "adaptive"
1609
+ * }
1610
+ * ],
1611
+ * "source": "catalog_import"
1612
+ * }
1613
+ * ],
1614
+ * "validate_schema": true
1615
+ * }
1616
+ * ```
1617
+ * Not supported in v0.2: optimistic versioning, conditional-write predicates,
1618
+ * update-by-filter, delete-by-filter, and patch / partial-record update. The
1619
+ * live contract is exposed via `WriteContractHealth` on the route-health
1620
+ * diagnostic endpoint (`GET /api/v2/_diagnostics/collections/{id}/route-health`);
1621
+ * see also `docs/SUPPORTED_SURFACE.adoc` "Not Supported in v0.2".
1622
+ */
1623
+ InsertRecordsRequest: {
1624
+ /** @description Records to insert */
1625
+ records: components["schemas"]["ProximaRecordInput"][];
1626
+ /** @description Whether to validate against collection schema (default: true) */
1627
+ validate_schema?: boolean | null;
1628
+ /**
1629
+ * @description Whether existing records with the same ID should be replaced.
1630
+ *
1631
+ * The current durable record write path is idempotent/upsert-oriented; this
1632
+ * field is accepted so SDKs can expose explicit upsert intent without
1633
+ * leaving the OpenAPI contract.
1634
+ */
1635
+ upsert?: boolean | null;
1636
+ };
1637
+ /** @description Response for insert operation */
1638
+ InsertRecordsResponse: {
1639
+ /** @description Number of successfully inserted records */
1640
+ inserted_count: number;
1641
+ /** @description Number of failed records */
1642
+ failed_count: number;
1643
+ /** @description Detailed errors for failed records */
1644
+ errors: components["schemas"]["InsertError"][];
1645
+ /** @description IDs of successfully inserted records */
1646
+ inserted_ids: string[];
1647
+ };
1648
+ /** @description REST input for IVF index params (mirrors proto `IvfConfig`). */
1649
+ IvfConfigInput: {
1650
+ /** Format: int32 */
1651
+ n_lists?: number | null;
1652
+ /** Format: int32 */
1653
+ n_probe?: number | null;
1654
+ };
1655
+ /** @description REST output for IVF params (mirrors gRPC `V2IvfConfig`). */
1656
+ IvfConfigOutput: {
1657
+ /** Format: int32 */
1658
+ n_lists?: number | null;
1659
+ /** Format: int32 */
1660
+ n_probe?: number | null;
1661
+ };
1662
+ /** @description Response for listing collections */
1663
+ ListCollectionsV2Response: {
1664
+ /** @description List of collections */
1665
+ collections: components["schemas"]["CollectionV2Summary"][];
1666
+ /**
1667
+ * Format: int64
1668
+ * @description Total count of collections
1669
+ */
1670
+ total: number;
1671
+ /**
1672
+ * Format: int32
1673
+ * @description Limit used in this request
1674
+ */
1675
+ limit: number;
1676
+ /**
1677
+ * Format: int32
1678
+ * @description Offset used in this request
1679
+ */
1680
+ offset: number;
1681
+ /** @description Whether there are more results */
1682
+ has_more: boolean;
1683
+ };
1684
+ ListModelRegistriesResponse: {
1685
+ registries: components["schemas"]["ModelRegistryRecordResponse"][];
1686
+ };
1687
+ /**
1688
+ * @description REST uses a decimal string for stable catalog IDs so JavaScript clients do
1689
+ * not lose precision. gRPC exposes the same value as `uint64`.
1690
+ */
1691
+ ModelRegistryRecordResponse: {
1692
+ tenant_id: string;
1693
+ asset_id: string;
1694
+ registry: components["schemas"]["CatalogEmbeddingModelRegistry"];
1695
+ };
1696
+ /**
1697
+ * @description TD-064: predicate-aware recall shortfall (REST wire shape).
1698
+ *
1699
+ * Mirrors `observability::search_plan_trace::PredicateShortfall` as an
1700
+ * explicit REST/OpenAPI schema so the field is typed and documented on the
1701
+ * wire without forcing the observability type (or the slim `IndexQueryResult`
1702
+ * DTO) to derive `ToSchema`.
1703
+ */
1704
+ PredicateShortfallWire: {
1705
+ /**
1706
+ * Format: int32
1707
+ * @description The `top_k` value the caller asked for.
1708
+ */
1709
+ requested_k: number;
1710
+ /**
1711
+ * Format: int32
1712
+ * @description Results actually returned after predicate filtering + merge.
1713
+ */
1714
+ returned_k: number;
1715
+ /**
1716
+ * Format: int32
1717
+ * @description Candidate pool size considered before the predicate (oversample budget).
1718
+ */
1719
+ oversample_pool: number;
1720
+ /**
1721
+ * @description ADR-011 mode that produced the shortfall (`post_filter`, `inline`, or
1722
+ * `pre_filter`).
1723
+ */
1724
+ ann_filtering_mode: string;
1725
+ };
1726
+ /**
1727
+ * @description Input format for ProximaRecord (JSON-friendly)
1728
+ *
1729
+ * This is the JSON-serializable input format for ProximaRecord.
1730
+ * It uses serde_json::Value for typed fields to support dynamic typing
1731
+ * at the API boundary, with validation happening during conversion.
1732
+ */
1733
+ ProximaRecordInput: {
1734
+ /** @description Record ID (optional, will be auto-generated if not provided) */
1735
+ id?: string | null;
1736
+ /** @description Vector embedding (required) */
1737
+ vector: number[];
1738
+ /** @description Canonical rich property map. */
1739
+ props?: {
1740
+ [key: string]: unknown;
1741
+ } | null;
1742
+ /** @description Dedicated TEXT fields with storage hints */
1743
+ text_fields?: components["schemas"]["TextFieldInput"][] | null;
1744
+ };
1745
+ /**
1746
+ * @description REST input for quantization config (mirrors proto `QuantizationConfig`;
1747
+ * gRPC-v2 parity with `V2QuantizationConfig`).
1748
+ */
1749
+ QuantizationConfigInput: {
1750
+ /** @description Enable quantization for this collection. */
1751
+ enabled?: boolean | null;
1752
+ /** @description Strategy: "smart_defaults" (default) | "minimal" | "aggressive" | "custom_levels". */
1753
+ strategy?: string | null;
1754
+ };
1755
+ /** @description REST output for quantization config (mirrors gRPC `V2QuantizationConfig`). */
1756
+ QuantizationConfigOutput: {
1757
+ enabled: boolean;
1758
+ /** @description Strategy label, e.g. "smart_defaults" | "minimal" | "aggressive". */
1759
+ strategy: string;
1760
+ };
1761
+ /** @enum {string} */
1762
+ QueryLanguage: "uql" | "aql" | "federated";
1763
+ QueryRequest: {
1764
+ language: components["schemas"]["QueryLanguage"];
1765
+ query: string;
1766
+ parameters?: Record<string, never>[] | null;
1767
+ collection?: string | null;
1768
+ /** Format: int32 */
1769
+ limit?: number | null;
1770
+ };
1771
+ /**
1772
+ * @description Query facade result. Implementations return records, total_count, metrics,
1773
+ * plan, or diagnostics depending on language and endpoint, so the body is a
1774
+ * free-form JSON object.
1775
+ */
1776
+ QueryResponse: Record<string, never>;
1777
+ /** @description Response for getting a single record */
1778
+ RecordV2Response: {
1779
+ /** @description Record ID */
1780
+ id: string;
1781
+ /** @description Vector embedding (if requested) */
1782
+ vector?: number[] | null;
1783
+ /** @description Rich properties from the record */
1784
+ props: {
1785
+ [key: string]: unknown;
1786
+ };
1787
+ /** @description TEXT fields (if include_text is true) */
1788
+ text_fields?: components["schemas"]["TextFieldOutput"][] | null;
1789
+ /**
1790
+ * Format: int64
1791
+ * @description Record version
1792
+ */
1793
+ version?: number | null;
1794
+ /**
1795
+ * Format: int64
1796
+ * @description Record timestamp
1797
+ */
1798
+ timestamp?: number | null;
1799
+ };
1800
+ ResolveModelAliasRequest: {
1801
+ alias: string;
1802
+ /** Format: int32 */
1803
+ dimension: number;
1804
+ /** @description Runtime implementation that will execute the immutable contract. */
1805
+ runtime?: string | null;
1806
+ /** @description Require the latest append-only decision to approve the selected version. */
1807
+ require_approved?: boolean;
1808
+ };
1809
+ ResolvedEmbeddingModelResponse: {
1810
+ asset_id: string;
1811
+ registry_name: string;
1812
+ /** Format: int64 */
1813
+ registry_revision: number;
1814
+ contract_sha256: string;
1815
+ model: components["schemas"]["CatalogEmbeddingModelVersion"];
1816
+ };
1817
+ ResolvedModelBindingResponse: {
1818
+ model: string;
1819
+ /** Format: int32 */
1820
+ dimension: number;
1821
+ model_asset_id: string;
1822
+ /** Format: int64 */
1823
+ model_version: number;
1824
+ contract_sha256: string;
1825
+ snapshot: components["schemas"]["ResolvedEmbeddingModelResponse"];
1826
+ };
1827
+ /** @description Column definition for schema */
1828
+ RestColumnDefinition: {
1829
+ /** @description Column name */
1830
+ name: string;
1831
+ /**
1832
+ * @description Data type
1833
+ *
1834
+ * Supported types:
1835
+ * - "text": Variable-length UTF-8 text
1836
+ * - "text_large": Large text with sidecar storage
1837
+ * - "integer": 64-bit signed integer
1838
+ * - "float": 64-bit floating point
1839
+ * - "decimal": 128-bit decimal (precision, scale)
1840
+ * - "boolean": True/false
1841
+ * - "timestamp": Microseconds since epoch
1842
+ * - "timestamp_tz": Timestamp with timezone
1843
+ * - "date": Days since epoch
1844
+ * - "time": Microseconds since midnight
1845
+ * - "uuid": RFC 4122 UUID
1846
+ * - "binary": Raw bytes
1847
+ * - "json": Validated JSON
1848
+ * - "array_text", "array_integer", "array_float", "array_boolean"
1849
+ * - "map_string_string", "map_string_any"
1850
+ * - "geo_point": Latitude/longitude point
1851
+ * - "vector": Fixed-dimension vector (specify dimension)
1852
+ */
1853
+ data_type: string;
1854
+ /**
1855
+ * @description Whether null values are allowed
1856
+ *
1857
+ * Default: true
1858
+ */
1859
+ nullable?: boolean | null;
1860
+ /**
1861
+ * @description Create secondary index for this column
1862
+ *
1863
+ * Improves query performance for equality/range filters.
1864
+ * Default: false
1865
+ */
1866
+ indexed?: boolean | null;
1867
+ /**
1868
+ * @description Enable filtering on this column
1869
+ *
1870
+ * When true, the column can be used in WHERE clauses.
1871
+ * Default: true for indexed columns, false otherwise
1872
+ */
1873
+ filterable?: boolean | null;
1874
+ /**
1875
+ * Format: int32
1876
+ * @description Maximum length for TEXT/BINARY columns
1877
+ *
1878
+ * Default: no limit
1879
+ */
1880
+ max_length?: number | null;
1881
+ /**
1882
+ * Format: int32
1883
+ * @description Precision for DECIMAL type (1-38)
1884
+ */
1885
+ precision?: number | null;
1886
+ /**
1887
+ * Format: int32
1888
+ * @description Scale for DECIMAL type (0-precision)
1889
+ */
1890
+ scale?: number | null;
1891
+ /**
1892
+ * Format: int32
1893
+ * @description Dimension for VECTOR type
1894
+ */
1895
+ vector_dimension?: number | null;
1896
+ };
1897
+ /**
1898
+ * @description Body of `POST /records/scan`. Mirrors the OpenAPI `ScanRecordsRequest`
1899
+ * schema; all fields optional so an empty `{}` returns the first page.
1900
+ */
1901
+ ScanRecordsRequest: {
1902
+ /**
1903
+ * @description Opaque continuation token returned as `next_cursor` from a
1904
+ * prior page. Omit / null to start from the beginning.
1905
+ */
1906
+ cursor?: string | null;
1907
+ /**
1908
+ * Format: int32
1909
+ * @description Max records to return in this page. Server enforces upper bound.
1910
+ */
1911
+ limit?: number | null;
1912
+ /**
1913
+ * @description Metadata filter applied (before the limit) to the scanned page.
1914
+ * Accepts either the typed list form `[{field,op,value}]` (mirrors
1915
+ * `searchRecords.filters`) or a simple equality map `{field: value}`.
1916
+ */
1917
+ filter?: unknown;
1918
+ include_vector?: boolean | null;
1919
+ include_text?: boolean | null;
1920
+ };
1921
+ /**
1922
+ * @description Response shape for `scanRecords`. Empty `records` + null
1923
+ * `next_cursor` signals end-of-scan. Each record matches the OpenAPI
1924
+ * `RecordResponse` schema (same shape used by `getRecord`).
1925
+ */
1926
+ ScanRecordsResponse: {
1927
+ records: components["schemas"]["RecordV2Response"][];
1928
+ /** Format: int64 */
1929
+ content_revision: number;
1930
+ content_revision_token: string;
1931
+ next_cursor?: string | null;
1932
+ /** Format: int64 */
1933
+ scanned_count?: number | null;
1934
+ };
1935
+ /** @description Description of a schema change */
1936
+ SchemaChange: {
1937
+ /** @description Type of change */
1938
+ change_type: string;
1939
+ /** @description Affected column (if applicable) */
1940
+ column?: string | null;
1941
+ /** @description Description of the change */
1942
+ description: string;
1943
+ };
1944
+ /**
1945
+ * @description Schema definition for a collection
1946
+ *
1947
+ * Defines the typed columns and enforcement rules for ProximaRecord support.
1948
+ */
1949
+ SchemaDefinition: {
1950
+ /** @description Column definitions */
1951
+ columns: components["schemas"]["RestColumnDefinition"][];
1952
+ /**
1953
+ * @description Schema enforcement mode
1954
+ *
1955
+ * - "strict": All columns must match schema exactly
1956
+ * - "flexible": Schema on read, no validation at insert
1957
+ * - "hybrid": Core columns enforced, additional fields allowed (default)
1958
+ */
1959
+ enforcement?: string | null;
1960
+ /**
1961
+ * @description Allow additional fields not defined in schema
1962
+ *
1963
+ * Only applies in "hybrid" mode.
1964
+ * Default: true
1965
+ */
1966
+ allow_additional_fields?: boolean | null;
1967
+ };
1968
+ /** @description Schema response with metadata */
1969
+ SchemaResponse: {
1970
+ /** @description Schema ID (UUID) */
1971
+ schema_id: string;
1972
+ /** @description Schema version (semantic versioning) */
1973
+ schema_version: string;
1974
+ /** @description Collection this schema belongs to */
1975
+ collection_id: string;
1976
+ /** @description Schema definition */
1977
+ schema: components["schemas"]["SchemaDefinition"];
1978
+ /** @description Creation timestamp */
1979
+ created_at: string;
1980
+ /** @description Last update timestamp */
1981
+ updated_at?: string | null;
1982
+ /** @description Parent schema ID (for evolution tracking) */
1983
+ parent_schema_id?: string | null;
1984
+ };
1985
+ SearchEntitiesRequest: {
1986
+ /** @description Query embedding for vector similarity search. Omit for metadata-only search. */
1987
+ query_vector?: number[];
1988
+ /** @description Equality metadata filters as a `{field: value}` JSON object. */
1989
+ filters?: {
1990
+ [key: string]: unknown;
1991
+ };
1992
+ /** Format: int32 */
1993
+ top_k?: number;
1994
+ };
1995
+ SearchEntitiesResponse: {
1996
+ results: components["schemas"]["EntitySearchResult"][];
1997
+ /** Format: int32 */
1998
+ total: number;
1999
+ };
2000
+ /**
2001
+ * @description One SQL statement executed through the shared SQL authority.
2002
+ *
2003
+ * Parameter binding is intentionally not advertised yet: the relational
2004
+ * execution port currently has no typed binding contract. Callers must not be
2005
+ * offered a field that an adapter would silently ignore or interpolate.
2006
+ */
2007
+ SqlRequest: {
2008
+ query: string;
2009
+ /** @description Optional collection context used by vector/graph SQL extensions. */
2010
+ collection?: string | null;
2011
+ /**
2012
+ * Format: int64
2013
+ * @description Per-request deadline. Defaults to 30 seconds and is capped at 5 minutes.
2014
+ */
2015
+ timeout_ms?: number | null;
2016
+ };
2017
+ /**
2018
+ * @description Stable JSON envelope for SQL reads and writes.
2019
+ *
2020
+ * For reads, `rows_returned` is the row count. For DDL/DML, the shared SQL
2021
+ * authority reports the affected count in `rows_returned` and `rows` is empty.
2022
+ */
2023
+ SqlResponse: {
2024
+ rows: Record<string, never>[];
2025
+ columns: string[];
2026
+ column_types: string[];
2027
+ /** Format: int64 */
2028
+ rows_returned: number;
2029
+ /** Format: int64 */
2030
+ rows_scanned: number;
2031
+ /** Format: int64 */
2032
+ execution_time_ms: number;
2033
+ request_id: string;
2034
+ };
2035
+ /**
2036
+ * @description Input format for TEXT fields
2037
+ *
2038
+ * TEXT fields are stored in dedicated columns with optional chunking
2039
+ * for large content. The storage hint helps optimize storage strategy.
2040
+ */
2041
+ TextFieldInput: {
2042
+ /** @description Field name */
2043
+ name: string;
2044
+ /** @description Text content */
2045
+ content: string;
2046
+ /**
2047
+ * @description Storage strategy hint
2048
+ *
2049
+ * - "inline": Store inline in main column (<4KB)
2050
+ * - "chunked": Split into chunks with embeddings (4KB-1MB)
2051
+ * - "sidecar": Store in separate sidecar file (>1MB)
2052
+ * - "adaptive": Auto-select based on content size (default)
2053
+ */
2054
+ storage_hint?: string | null;
2055
+ };
2056
+ /** @description Output format for TEXT fields */
2057
+ TextFieldOutput: {
2058
+ /** @description Field name */
2059
+ name: string;
2060
+ /** @description Text content (may be truncated for large content) */
2061
+ content: string;
2062
+ /**
2063
+ * Format: int32
2064
+ * @description Number of chunks (for chunked storage)
2065
+ */
2066
+ chunk_count?: number | null;
2067
+ /** @description Whether content was truncated */
2068
+ truncated: boolean;
2069
+ };
2070
+ /**
2071
+ * @description A typed filter for search operations
2072
+ *
2073
+ * Supports various comparison operators with type-safe values.
2074
+ */
2075
+ TypedFilter: {
2076
+ /** @description Field name to filter on */
2077
+ field: string;
2078
+ /**
2079
+ * @description Comparison operator
2080
+ *
2081
+ * Supported operators:
2082
+ * - "eq": Equals
2083
+ * - "neq": Not equals
2084
+ * - "gt": Greater than
2085
+ * - "gte": Greater than or equal
2086
+ * - "lt": Less than
2087
+ * - "lte": Less than or equal
2088
+ * - "contains": String/array contains
2089
+ * - "between": Value is between two bounds (requires value_upper)
2090
+ * - "in": Value is in a list
2091
+ * - "starts_with": String starts with prefix
2092
+ * - "ends_with": String ends with suffix
2093
+ */
2094
+ op: string;
2095
+ /** @description Filter value (type depends on field type) */
2096
+ value: unknown;
2097
+ /** @description Upper bound for "between" operator */
2098
+ value_upper?: unknown;
2099
+ };
2100
+ /**
2101
+ * @description Search request with typed filters
2102
+ *
2103
+ * ## Example JSON
2104
+ *
2105
+ * ```json
2106
+ * {
2107
+ * "vector": [0.1, 0.2, 0.3],
2108
+ * "top_k": 10,
2109
+ * "filters": [
2110
+ * {"field": "category", "op": "eq", "value": "electronics"},
2111
+ * {"field": "price", "op": "lt", "value": 500},
2112
+ * {"field": "in_stock", "op": "eq", "value": true}
2113
+ * ],
2114
+ * "include_text": true
2115
+ * }
2116
+ * ```
2117
+ */
2118
+ TypedSearchRequest: {
2119
+ /** @description Query vector */
2120
+ vector: number[];
2121
+ /** @description Number of results to return */
2122
+ top_k: number;
2123
+ /** @description Typed filters with operator support */
2124
+ filters?: components["schemas"]["TypedFilter"][] | null;
2125
+ /**
2126
+ * @description Whether to include TEXT fields in results (default: false)
2127
+ *
2128
+ * TEXT fields can be large, so they are excluded by default.
2129
+ * Set to true to include them in the response.
2130
+ */
2131
+ include_text?: boolean | null;
2132
+ /**
2133
+ * @description Whether to include the vector in results (default: false)
2134
+ *
2135
+ * Vector data can be large, so it is excluded by default.
2136
+ */
2137
+ include_vector?: boolean | null;
2138
+ /**
2139
+ * @description Return the SearchPlanTrace + a human-readable route explain
2140
+ * in the response (LLD §1 contract). Defaults to `false` so
2141
+ * non-debug requests don't pay the JSON serialization cost of
2142
+ * the ~30-field trace envelope.
2143
+ */
2144
+ debug?: boolean | null;
2145
+ };
2146
+ /** @description Search response with typed results */
2147
+ TypedSearchResponse: {
2148
+ /** @description Search results */
2149
+ results: components["schemas"]["TypedSearchResult"][];
2150
+ /**
2151
+ * Format: int64
2152
+ * @description Total number of matching documents (before top_k limit)
2153
+ */
2154
+ total_matches?: number | null;
2155
+ /**
2156
+ * Format: int64
2157
+ * @description Search latency in milliseconds
2158
+ */
2159
+ latency_ms: number;
2160
+ /** @description Request ID for tracing */
2161
+ request_id: string;
2162
+ predicate_shortfall?: null | components["schemas"]["PredicateShortfallWire"];
2163
+ /**
2164
+ * @description SearchPlanTrace (LLD §10) — the per-query telemetry envelope that
2165
+ * upstream gateways consume for metering and planner-v2 training.
2166
+ * Phase 0 emits a stub trace populated from request_id + latency; later
2167
+ * phases fill in the per-stage counters. Only emitted when the request
2168
+ * sets `debug=true` (LLD §1 contract).
2169
+ */
2170
+ search_plan_trace?: unknown;
2171
+ /**
2172
+ * @description Human-readable explain summary derived from the SearchPlanTrace.
2173
+ * Only emitted when the request sets `debug=true` — gives an on-call
2174
+ * operator a one-glance view of the plan, cache result, and any
2175
+ * actionable hints (high scan fraction, repair triggered, ...).
2176
+ */
2177
+ explain?: unknown;
2178
+ };
2179
+ /** @description Search result with typed fields */
2180
+ TypedSearchResult: {
2181
+ /** @description Record ID */
2182
+ id: string;
2183
+ /**
2184
+ * Format: float
2185
+ * @description Similarity score (0.0 - 1.0 for cosine, distance for L2)
2186
+ */
2187
+ score: number;
2188
+ /** @description Vector embedding (if requested) */
2189
+ vector?: number[] | null;
2190
+ /** @description Rich properties from the record */
2191
+ props: {
2192
+ [key: string]: unknown;
2193
+ };
2194
+ /** @description TEXT fields (if include_text is true) */
2195
+ text_fields?: components["schemas"]["TextFieldOutput"][] | null;
2196
+ };
2197
+ /**
2198
+ * @description Request to update schema
2199
+ *
2200
+ * ## Schema Evolution Rules
2201
+ *
2202
+ * 1. **Adding Columns**: New columns must be nullable or have defaults
2203
+ * 2. **Type Changes**: Not allowed (except compatible widening like int32->int64)
2204
+ * 3. **Removing Columns**: Not allowed (use deprecation instead)
2205
+ * 4. **Enforcement Mode**: Can be changed, but strict->flexible may lose validation
2206
+ *
2207
+ * ## Example JSON
2208
+ *
2209
+ * ```json
2210
+ * {
2211
+ * "columns": [
2212
+ * {"name": "category", "data_type": "text", "indexed": true},
2213
+ * {"name": "price", "data_type": "float", "filterable": true},
2214
+ * {"name": "tags", "data_type": "array_text", "nullable": true}
2215
+ * ],
2216
+ * "enforcement": "hybrid",
2217
+ * "allow_additional_fields": true
2218
+ * }
2219
+ * ```
2220
+ */
2221
+ UpdateSchemaRequest: components["schemas"]["SchemaDefinition"] & {
2222
+ /**
2223
+ * @description Force update even if validation warnings exist
2224
+ *
2225
+ * Use with caution - may cause data compatibility issues.
2226
+ */
2227
+ force?: boolean | null;
2228
+ };
2229
+ /** @description Schema update response */
2230
+ UpdateSchemaResponse: {
2231
+ /** @description Updated schema ID */
2232
+ schema_id: string;
2233
+ /** @description New schema version */
2234
+ schema_version: string;
2235
+ /** @description Previous schema ID (for rollback) */
2236
+ previous_schema_id: string;
2237
+ /** @description List of applied changes */
2238
+ changes: components["schemas"]["SchemaChange"][];
2239
+ /** @description Warnings about the update */
2240
+ warnings: string[];
2241
+ /** @description Update timestamp */
2242
+ updated_at: string;
2243
+ };
2244
+ UpsertEntityRequest: {
2245
+ /** @description Empty ⇒ the server generates a UUID. */
2246
+ id?: string;
2247
+ flexible_metadata?: {
2248
+ [key: string]: unknown;
2249
+ };
2250
+ embeddings?: components["schemas"]["EntityEmbeddingInput"][];
2251
+ provenance?: null | components["schemas"]["EntityProvenanceInput"];
2252
+ relations?: components["schemas"]["EntityRelationInput"][];
2253
+ };
2254
+ UpsertEntityResponse: {
2255
+ success: boolean;
2256
+ entity_id: string;
2257
+ message: string;
2258
+ };
2259
+ HealthResponse: {
2260
+ status?: string;
2261
+ version?: string;
2262
+ uptime_seconds?: number;
2263
+ } & {
2264
+ [key: string]: unknown;
2265
+ };
2266
+ ProbeResponse: {
2267
+ status: string;
2268
+ };
2269
+ CapabilitiesResponse: {
2270
+ api_version?: string;
2271
+ surface?: string;
2272
+ features?: string[];
2273
+ limits?: {
2274
+ [key: string]: unknown;
2275
+ };
2276
+ error_envelope?: {
2277
+ [key: string]: unknown;
2278
+ };
2279
+ } & {
2280
+ [key: string]: unknown;
2281
+ };
2282
+ CreateGraphRequest: {
2283
+ /** @description Unique identifier for the new graph collection. */
2284
+ graph_id: string;
2285
+ /** @description Optional human-readable name (defaults to graph_id). */
2286
+ name?: string | null;
2287
+ description?: string | null;
2288
+ };
2289
+ /**
2290
+ * @description Server returns a `GraphResponse<T>` envelope around graph
2291
+ * collection metadata. The fields below are the common subset
2292
+ * SDKs rely on; extra server-side fields are passed through.
2293
+ */
2294
+ GraphCollectionResponse: {
2295
+ graph_id?: string;
2296
+ name?: string | null;
2297
+ description?: string | null;
2298
+ node_count?: number | null;
2299
+ edge_count?: number | null;
2300
+ } & {
2301
+ [key: string]: unknown;
2302
+ };
2303
+ /**
2304
+ * @description Server returns a `GraphResponse<Vec<...>>` envelope with `data`
2305
+ * containing the graph collections.
2306
+ */
2307
+ ListGraphsResponse: {
2308
+ data?: components["schemas"]["GraphCollectionResponse"][];
2309
+ success?: boolean;
2310
+ } & {
2311
+ [key: string]: unknown;
2312
+ };
2313
+ /**
2314
+ * @description 204 No Content on success with an empty `GraphResponse` envelope;
2315
+ * 404 Not Found with an error envelope when the graph is missing.
2316
+ */
2317
+ DeleteGraphResponse: {
2318
+ success?: boolean;
2319
+ } & {
2320
+ [key: string]: unknown;
2321
+ };
2322
+ /**
2323
+ * @description Node payload nested inside `CreateNodeRequest.node`. Matches
2324
+ * `RestNodeInput` in proximadb-api's graph handler.
2325
+ */
2326
+ NodeInput: {
2327
+ id: string;
2328
+ labels?: string[];
2329
+ properties?: {
2330
+ [key: string]: unknown;
2331
+ };
2332
+ embedding?: components["schemas"]["EmbeddingInput"];
2333
+ };
2334
+ EmbeddingInput: {
2335
+ vector: number[];
2336
+ model_id?: string | null;
2337
+ modality?: string | null;
2338
+ };
2339
+ /** @description Wrapped envelope: server expects `{"node": NodeInput}`. */
2340
+ CreateNodeRequest: {
2341
+ node: components["schemas"]["NodeInput"];
2342
+ };
2343
+ NodeResponse: {
2344
+ id: string;
2345
+ labels?: string[] | null;
2346
+ properties?: {
2347
+ [key: string]: unknown;
2348
+ } | null;
2349
+ } & {
2350
+ [key: string]: unknown;
2351
+ };
2352
+ DeleteNodeResponse: {
2353
+ success?: boolean;
2354
+ id?: string;
2355
+ } & {
2356
+ [key: string]: unknown;
2357
+ };
2358
+ /**
2359
+ * @description Edge payload nested inside `CreateEdgeRequest.edge`. Matches
2360
+ * `RestEdgeInput` in proximadb-api's graph handler.
2361
+ */
2362
+ EdgeInput: {
2363
+ id: string;
2364
+ from_node_id: string;
2365
+ to_node_id: string;
2366
+ edge_type: string;
2367
+ properties?: {
2368
+ [key: string]: unknown;
2369
+ };
2370
+ /** Format: double */
2371
+ weight?: number | null;
2372
+ };
2373
+ /** @description Wrapped envelope: server expects `{"edge": EdgeInput}`. */
2374
+ CreateEdgeRequest: {
2375
+ edge: components["schemas"]["EdgeInput"];
2376
+ };
2377
+ EdgeResponse: {
2378
+ id: string;
2379
+ from_node_id?: string;
2380
+ to_node_id?: string;
2381
+ edge_type?: string | null;
2382
+ properties?: {
2383
+ [key: string]: unknown;
2384
+ } | null;
2385
+ /** Format: double */
2386
+ weight?: number | null;
2387
+ } & {
2388
+ [key: string]: unknown;
2389
+ };
2390
+ /**
2391
+ * @description Flat shape (no wrapper). Matches `RestTraversalRequest` in
2392
+ * proximadb-api.
2393
+ */
2394
+ TraverseRequest: {
2395
+ start_node_id: string;
2396
+ /** @default 3 */
2397
+ max_depth: number;
2398
+ edge_types?: string[];
2399
+ node_labels?: string[];
2400
+ /** @description bfs | dfs | shortest_path */
2401
+ algorithm?: string | null;
2402
+ limit?: number | null;
2403
+ };
2404
+ TraverseResponse: {
2405
+ nodes?: components["schemas"]["NodeResponse"][];
2406
+ edges?: components["schemas"]["EdgeResponse"][];
2407
+ paths?: string[][];
2408
+ } & {
2409
+ [key: string]: unknown;
2410
+ };
2411
+ GraphStatsResponse: {
2412
+ node_count?: number;
2413
+ edge_count?: number;
2414
+ /** Format: double */
2415
+ density?: number | null;
2416
+ } & {
2417
+ [key: string]: unknown;
2418
+ };
2419
+ /** @description Body for `POST /api/v2/graphs/{id}/nodes/batch`. */
2420
+ BatchCreateNodesRequest: {
2421
+ nodes: components["schemas"]["NodeInput"][];
2422
+ };
2423
+ /** @description Server returns a `GraphResponse<BatchResults<Node>>` envelope. */
2424
+ BatchNodesResponse: {
2425
+ success?: boolean;
2426
+ data?: {
2427
+ results?: components["schemas"]["NodeResponse"][];
2428
+ count?: number;
2429
+ } & {
2430
+ [key: string]: unknown;
2431
+ };
2432
+ } & {
2433
+ [key: string]: unknown;
2434
+ };
2435
+ /** @description Body for `POST /api/v2/graphs/{id}/edges/batch`. */
2436
+ BatchCreateEdgesRequest: {
2437
+ edges: components["schemas"]["EdgeInput"][];
2438
+ };
2439
+ /** @description Server returns a `GraphResponse<BatchResults<Edge>>` envelope. */
2440
+ BatchEdgesResponse: {
2441
+ success?: boolean;
2442
+ data?: {
2443
+ results?: components["schemas"]["EdgeResponse"][];
2444
+ count?: number;
2445
+ } & {
2446
+ [key: string]: unknown;
2447
+ };
2448
+ } & {
2449
+ [key: string]: unknown;
2450
+ };
2451
+ };
2452
+ responses: {
2453
+ /** @description Invalid request. */
2454
+ BadRequest: {
2455
+ headers: {
2456
+ [name: string]: unknown;
2457
+ };
2458
+ content: {
2459
+ "application/json": components["schemas"]["ErrorResponse"];
2460
+ };
2461
+ };
2462
+ /** @description Resource not found. */
2463
+ NotFound: {
2464
+ headers: {
2465
+ [name: string]: unknown;
2466
+ };
2467
+ content: {
2468
+ "application/json": components["schemas"]["ErrorResponse"];
2469
+ };
2470
+ };
2471
+ /** @description Authentication required or insufficient permissions. */
2472
+ Unauthorized: {
2473
+ headers: {
2474
+ [name: string]: unknown;
2475
+ };
2476
+ content: {
2477
+ "application/json": components["schemas"]["ErrorResponse"];
2478
+ };
2479
+ };
2480
+ };
2481
+ parameters: {
2482
+ GraphId: string;
2483
+ NodeId: string;
2484
+ };
2485
+ requestBodies: never;
2486
+ headers: never;
2487
+ pathItems: never;
2488
+ }
2489
+ export type $defs = Record<string, never>;
2490
+ export interface operations {
2491
+ listCollections: {
2492
+ parameters: {
2493
+ query?: {
2494
+ /** @description Maximum number of collections to return (default: 100) */
2495
+ limit?: number;
2496
+ /** @description Offset for pagination (default: 0) */
2497
+ offset?: number;
2498
+ /** @description Whether to include statistics */
2499
+ include_stats?: boolean;
2500
+ };
2501
+ header?: {
2502
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2503
+ "X-Tenant-ID"?: string;
2504
+ };
2505
+ path?: never;
2506
+ cookie?: never;
2507
+ };
2508
+ requestBody?: never;
2509
+ responses: {
2510
+ /** @description Collection page. */
2511
+ 200: {
2512
+ headers: {
2513
+ [name: string]: unknown;
2514
+ };
2515
+ content: {
2516
+ "application/json": components["schemas"]["ListCollectionsV2Response"];
2517
+ };
2518
+ };
2519
+ };
2520
+ };
2521
+ createCollection: {
2522
+ parameters: {
2523
+ query?: never;
2524
+ header?: {
2525
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2526
+ "X-Tenant-ID"?: string;
2527
+ };
2528
+ path?: never;
2529
+ cookie?: never;
2530
+ };
2531
+ requestBody: {
2532
+ content: {
2533
+ "application/json": components["schemas"]["CreateCollectionV2Request"];
2534
+ };
2535
+ };
2536
+ responses: {
2537
+ /** @description Collection created. */
2538
+ 200: {
2539
+ headers: {
2540
+ [name: string]: unknown;
2541
+ };
2542
+ content: {
2543
+ "application/json": components["schemas"]["CreateCollectionV2Response"];
2544
+ };
2545
+ };
2546
+ /** @description Invalid request. */
2547
+ 400: {
2548
+ headers: {
2549
+ [name: string]: unknown;
2550
+ };
2551
+ content: {
2552
+ "application/json": components["schemas"]["ErrorResponse"];
2553
+ };
2554
+ };
2555
+ };
2556
+ };
2557
+ getCollection: {
2558
+ parameters: {
2559
+ query?: never;
2560
+ header?: {
2561
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2562
+ "X-Tenant-ID"?: string;
2563
+ };
2564
+ path: {
2565
+ /** @description Collection name/ID. */
2566
+ collection_id: string;
2567
+ };
2568
+ cookie?: never;
2569
+ };
2570
+ requestBody?: never;
2571
+ responses: {
2572
+ /** @description Collection details. */
2573
+ 200: {
2574
+ headers: {
2575
+ [name: string]: unknown;
2576
+ };
2577
+ content: {
2578
+ "application/json": components["schemas"]["CollectionV2Response"];
2579
+ };
2580
+ };
2581
+ /** @description Resource not found. */
2582
+ 404: {
2583
+ headers: {
2584
+ [name: string]: unknown;
2585
+ };
2586
+ content: {
2587
+ "application/json": components["schemas"]["ErrorResponse"];
2588
+ };
2589
+ };
2590
+ };
2591
+ };
2592
+ deleteCollection: {
2593
+ parameters: {
2594
+ query?: never;
2595
+ header?: {
2596
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2597
+ "X-Tenant-ID"?: string;
2598
+ };
2599
+ path: {
2600
+ /** @description Collection name/ID. */
2601
+ collection_id: string;
2602
+ };
2603
+ cookie?: never;
2604
+ };
2605
+ requestBody?: never;
2606
+ responses: {
2607
+ /** @description Collection deleted. */
2608
+ 200: {
2609
+ headers: {
2610
+ [name: string]: unknown;
2611
+ };
2612
+ content: {
2613
+ "application/json": components["schemas"]["DeleteCollectionV2Response"];
2614
+ };
2615
+ };
2616
+ /** @description Resource not found. */
2617
+ 404: {
2618
+ headers: {
2619
+ [name: string]: unknown;
2620
+ };
2621
+ content: {
2622
+ "application/json": components["schemas"]["ErrorResponse"];
2623
+ };
2624
+ };
2625
+ };
2626
+ };
2627
+ ingestDocuments: {
2628
+ parameters: {
2629
+ query?: never;
2630
+ header?: {
2631
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2632
+ "X-Tenant-ID"?: string;
2633
+ };
2634
+ path: {
2635
+ /** @description Target collection name/ID. */
2636
+ collection_id: string;
2637
+ };
2638
+ cookie?: never;
2639
+ };
2640
+ requestBody: {
2641
+ content: {
2642
+ "application/json": components["schemas"]["IngestDocumentsRequest"];
2643
+ };
2644
+ };
2645
+ responses: {
2646
+ /** @description Ingested. */
2647
+ 200: {
2648
+ headers: {
2649
+ [name: string]: unknown;
2650
+ };
2651
+ content: {
2652
+ "application/json": components["schemas"]["IngestDocumentsResponse"];
2653
+ };
2654
+ };
2655
+ /** @description Invalid request. */
2656
+ 400: {
2657
+ headers: {
2658
+ [name: string]: unknown;
2659
+ };
2660
+ content: {
2661
+ "application/json": components["schemas"]["ErrorResponse"];
2662
+ };
2663
+ };
2664
+ /** @description Collection not found. */
2665
+ 404: {
2666
+ headers: {
2667
+ [name: string]: unknown;
2668
+ };
2669
+ content: {
2670
+ "application/json": components["schemas"]["ErrorResponse"];
2671
+ };
2672
+ };
2673
+ };
2674
+ };
2675
+ upsert_entity_v2: {
2676
+ parameters: {
2677
+ query?: never;
2678
+ header?: {
2679
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2680
+ "X-Tenant-ID"?: string;
2681
+ };
2682
+ path: {
2683
+ /** @description Collection backing the entities */
2684
+ collection_id: string;
2685
+ };
2686
+ cookie?: never;
2687
+ };
2688
+ requestBody: {
2689
+ content: {
2690
+ "application/json": components["schemas"]["UpsertEntityRequest"];
2691
+ };
2692
+ };
2693
+ responses: {
2694
+ /** @description Entity upserted */
2695
+ 200: {
2696
+ headers: {
2697
+ [name: string]: unknown;
2698
+ };
2699
+ content: {
2700
+ "application/json": components["schemas"]["UpsertEntityResponse"];
2701
+ };
2702
+ };
2703
+ /** @description Invalid request */
2704
+ 400: {
2705
+ headers: {
2706
+ [name: string]: unknown;
2707
+ };
2708
+ content: {
2709
+ "application/json": components["schemas"]["ErrorResponse"];
2710
+ };
2711
+ };
2712
+ /** @description Upsert failed */
2713
+ 500: {
2714
+ headers: {
2715
+ [name: string]: unknown;
2716
+ };
2717
+ content: {
2718
+ "application/json": components["schemas"]["ErrorResponse"];
2719
+ };
2720
+ };
2721
+ };
2722
+ };
2723
+ search_entities_v2: {
2724
+ parameters: {
2725
+ query?: never;
2726
+ header?: {
2727
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2728
+ "X-Tenant-ID"?: string;
2729
+ };
2730
+ path: {
2731
+ /** @description Collection backing the entities */
2732
+ collection_id: string;
2733
+ };
2734
+ cookie?: never;
2735
+ };
2736
+ requestBody: {
2737
+ content: {
2738
+ "application/json": components["schemas"]["SearchEntitiesRequest"];
2739
+ };
2740
+ };
2741
+ responses: {
2742
+ /** @description Search results */
2743
+ 200: {
2744
+ headers: {
2745
+ [name: string]: unknown;
2746
+ };
2747
+ content: {
2748
+ "application/json": components["schemas"]["SearchEntitiesResponse"];
2749
+ };
2750
+ };
2751
+ /** @description Invalid request */
2752
+ 400: {
2753
+ headers: {
2754
+ [name: string]: unknown;
2755
+ };
2756
+ content: {
2757
+ "application/json": components["schemas"]["ErrorResponse"];
2758
+ };
2759
+ };
2760
+ /** @description Search failed */
2761
+ 500: {
2762
+ headers: {
2763
+ [name: string]: unknown;
2764
+ };
2765
+ content: {
2766
+ "application/json": components["schemas"]["ErrorResponse"];
2767
+ };
2768
+ };
2769
+ };
2770
+ };
2771
+ get_entity_v2: {
2772
+ parameters: {
2773
+ query?: never;
2774
+ header?: {
2775
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2776
+ "X-Tenant-ID"?: string;
2777
+ };
2778
+ path: {
2779
+ /** @description Collection backing the entities */
2780
+ collection_id: string;
2781
+ /** @description Entity ID */
2782
+ entity_id: string;
2783
+ };
2784
+ cookie?: never;
2785
+ };
2786
+ requestBody?: never;
2787
+ responses: {
2788
+ /** @description Entity found */
2789
+ 200: {
2790
+ headers: {
2791
+ [name: string]: unknown;
2792
+ };
2793
+ content: {
2794
+ "application/json": components["schemas"]["EntityDto"];
2795
+ };
2796
+ };
2797
+ /** @description Entity not found */
2798
+ 404: {
2799
+ headers: {
2800
+ [name: string]: unknown;
2801
+ };
2802
+ content: {
2803
+ "application/json": components["schemas"]["ErrorResponse"];
2804
+ };
2805
+ };
2806
+ /** @description Fetch failed */
2807
+ 500: {
2808
+ headers: {
2809
+ [name: string]: unknown;
2810
+ };
2811
+ content: {
2812
+ "application/json": components["schemas"]["ErrorResponse"];
2813
+ };
2814
+ };
2815
+ };
2816
+ };
2817
+ delete_entity_v2: {
2818
+ parameters: {
2819
+ query?: never;
2820
+ header?: {
2821
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2822
+ "X-Tenant-ID"?: string;
2823
+ };
2824
+ path: {
2825
+ /** @description Collection backing the entities */
2826
+ collection_id: string;
2827
+ /** @description Entity ID */
2828
+ entity_id: string;
2829
+ };
2830
+ cookie?: never;
2831
+ };
2832
+ requestBody?: never;
2833
+ responses: {
2834
+ /** @description Entity deleted */
2835
+ 200: {
2836
+ headers: {
2837
+ [name: string]: unknown;
2838
+ };
2839
+ content: {
2840
+ "application/json": components["schemas"]["UpsertEntityResponse"];
2841
+ };
2842
+ };
2843
+ /** @description Entity not found */
2844
+ 404: {
2845
+ headers: {
2846
+ [name: string]: unknown;
2847
+ };
2848
+ content: {
2849
+ "application/json": components["schemas"]["ErrorResponse"];
2850
+ };
2851
+ };
2852
+ /** @description Delete failed */
2853
+ 500: {
2854
+ headers: {
2855
+ [name: string]: unknown;
2856
+ };
2857
+ content: {
2858
+ "application/json": components["schemas"]["ErrorResponse"];
2859
+ };
2860
+ };
2861
+ };
2862
+ };
2863
+ insertRecords: {
2864
+ parameters: {
2865
+ query?: never;
2866
+ header?: {
2867
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2868
+ "X-Tenant-ID"?: string;
2869
+ };
2870
+ path: {
2871
+ /** @description Collection name/ID. */
2872
+ collection_id: string;
2873
+ };
2874
+ cookie?: never;
2875
+ };
2876
+ requestBody: {
2877
+ content: {
2878
+ "application/json": components["schemas"]["InsertRecordsRequest"];
2879
+ };
2880
+ };
2881
+ responses: {
2882
+ /** @description Batch write result. */
2883
+ 200: {
2884
+ headers: {
2885
+ [name: string]: unknown;
2886
+ };
2887
+ content: {
2888
+ "application/json": components["schemas"]["InsertRecordsResponse"];
2889
+ };
2890
+ };
2891
+ /** @description Invalid request. */
2892
+ 400: {
2893
+ headers: {
2894
+ [name: string]: unknown;
2895
+ };
2896
+ content: {
2897
+ "application/json": components["schemas"]["ErrorResponse"];
2898
+ };
2899
+ };
2900
+ };
2901
+ };
2902
+ scanRecords: {
2903
+ parameters: {
2904
+ query?: never;
2905
+ header?: {
2906
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2907
+ "X-Tenant-ID"?: string;
2908
+ };
2909
+ path: {
2910
+ /** @description Collection name/ID. */
2911
+ collection_id: string;
2912
+ };
2913
+ cookie?: never;
2914
+ };
2915
+ requestBody: {
2916
+ content: {
2917
+ "application/json": components["schemas"]["ScanRecordsRequest"];
2918
+ };
2919
+ };
2920
+ responses: {
2921
+ /** @description Page of records + optional next cursor. */
2922
+ 200: {
2923
+ headers: {
2924
+ [name: string]: unknown;
2925
+ };
2926
+ content: {
2927
+ "application/json": components["schemas"]["ScanRecordsResponse"];
2928
+ };
2929
+ };
2930
+ /** @description Invalid request (including a cursor minted for a different collection). */
2931
+ 400: {
2932
+ headers: {
2933
+ [name: string]: unknown;
2934
+ };
2935
+ content: {
2936
+ "application/json": components["schemas"]["ErrorResponse"];
2937
+ };
2938
+ };
2939
+ /** @description Resource not found. */
2940
+ 404: {
2941
+ headers: {
2942
+ [name: string]: unknown;
2943
+ };
2944
+ content: {
2945
+ "application/json": components["schemas"]["ErrorResponse"];
2946
+ };
2947
+ };
2948
+ /** @description Collection changed during the scan; restart pagination. */
2949
+ 409: {
2950
+ headers: {
2951
+ [name: string]: unknown;
2952
+ };
2953
+ content: {
2954
+ "application/json": components["schemas"]["ErrorResponse"];
2955
+ };
2956
+ };
2957
+ /** @description Cursor expired (older than 24h); restart the scan. */
2958
+ 410: {
2959
+ headers: {
2960
+ [name: string]: unknown;
2961
+ };
2962
+ content: {
2963
+ "application/json": components["schemas"]["ErrorResponse"];
2964
+ };
2965
+ };
2966
+ };
2967
+ };
2968
+ getRecord: {
2969
+ parameters: {
2970
+ query?: {
2971
+ /** @description Whether to include the vector in the response */
2972
+ include_vector?: boolean;
2973
+ /** @description Whether to include TEXT fields in the response */
2974
+ include_text?: boolean;
2975
+ };
2976
+ header?: {
2977
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
2978
+ "X-Tenant-ID"?: string;
2979
+ };
2980
+ path: {
2981
+ /** @description Collection name/ID. */
2982
+ collection_id: string;
2983
+ /** @description Record ID. */
2984
+ record_id: string;
2985
+ };
2986
+ cookie?: never;
2987
+ };
2988
+ requestBody?: never;
2989
+ responses: {
2990
+ /** @description Record. */
2991
+ 200: {
2992
+ headers: {
2993
+ [name: string]: unknown;
2994
+ };
2995
+ content: {
2996
+ "application/json": components["schemas"]["RecordV2Response"];
2997
+ };
2998
+ };
2999
+ /** @description Resource not found. */
3000
+ 404: {
3001
+ headers: {
3002
+ [name: string]: unknown;
3003
+ };
3004
+ content: {
3005
+ "application/json": components["schemas"]["ErrorResponse"];
3006
+ };
3007
+ };
3008
+ };
3009
+ };
3010
+ deleteRecord: {
3011
+ parameters: {
3012
+ query?: never;
3013
+ header?: {
3014
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3015
+ "X-Tenant-ID"?: string;
3016
+ };
3017
+ path: {
3018
+ /** @description Collection name/ID. */
3019
+ collection_id: string;
3020
+ /** @description Record ID. */
3021
+ record_id: string;
3022
+ };
3023
+ cookie?: never;
3024
+ };
3025
+ requestBody?: never;
3026
+ responses: {
3027
+ /** @description Delete accepted. */
3028
+ 200: {
3029
+ headers: {
3030
+ [name: string]: unknown;
3031
+ };
3032
+ content: {
3033
+ "application/json": components["schemas"]["DeleteRecordV2Response"];
3034
+ };
3035
+ };
3036
+ };
3037
+ };
3038
+ getCollectionSchema: {
3039
+ parameters: {
3040
+ query?: never;
3041
+ header?: {
3042
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3043
+ "X-Tenant-ID"?: string;
3044
+ };
3045
+ path: {
3046
+ /** @description Collection name/ID. */
3047
+ collection_id: string;
3048
+ };
3049
+ cookie?: never;
3050
+ };
3051
+ requestBody?: never;
3052
+ responses: {
3053
+ /** @description Collection schema. */
3054
+ 200: {
3055
+ headers: {
3056
+ [name: string]: unknown;
3057
+ };
3058
+ content: {
3059
+ "application/json": components["schemas"]["SchemaResponse"];
3060
+ };
3061
+ };
3062
+ /** @description Resource not found. */
3063
+ 404: {
3064
+ headers: {
3065
+ [name: string]: unknown;
3066
+ };
3067
+ content: {
3068
+ "application/json": components["schemas"]["ErrorResponse"];
3069
+ };
3070
+ };
3071
+ };
3072
+ };
3073
+ updateCollectionSchema: {
3074
+ parameters: {
3075
+ query?: never;
3076
+ header?: {
3077
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3078
+ "X-Tenant-ID"?: string;
3079
+ };
3080
+ path: {
3081
+ /** @description Collection name/ID. */
3082
+ collection_id: string;
3083
+ };
3084
+ cookie?: never;
3085
+ };
3086
+ requestBody: {
3087
+ content: {
3088
+ "application/json": components["schemas"]["UpdateSchemaRequest"];
3089
+ };
3090
+ };
3091
+ responses: {
3092
+ /** @description Schema updated. */
3093
+ 200: {
3094
+ headers: {
3095
+ [name: string]: unknown;
3096
+ };
3097
+ content: {
3098
+ "application/json": components["schemas"]["UpdateSchemaResponse"];
3099
+ };
3100
+ };
3101
+ /** @description Invalid request. */
3102
+ 400: {
3103
+ headers: {
3104
+ [name: string]: unknown;
3105
+ };
3106
+ content: {
3107
+ "application/json": components["schemas"]["ErrorResponse"];
3108
+ };
3109
+ };
3110
+ };
3111
+ };
3112
+ searchRecords: {
3113
+ parameters: {
3114
+ query?: never;
3115
+ header?: {
3116
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3117
+ "X-Tenant-ID"?: string;
3118
+ };
3119
+ path: {
3120
+ /** @description Collection name/ID. */
3121
+ collection_id: string;
3122
+ };
3123
+ cookie?: never;
3124
+ };
3125
+ requestBody: {
3126
+ content: {
3127
+ "application/json": components["schemas"]["TypedSearchRequest"];
3128
+ };
3129
+ };
3130
+ responses: {
3131
+ /** @description Search results. */
3132
+ 200: {
3133
+ headers: {
3134
+ [name: string]: unknown;
3135
+ };
3136
+ content: {
3137
+ "application/json": components["schemas"]["TypedSearchResponse"];
3138
+ };
3139
+ };
3140
+ /** @description Invalid request. */
3141
+ 400: {
3142
+ headers: {
3143
+ [name: string]: unknown;
3144
+ };
3145
+ content: {
3146
+ "application/json": components["schemas"]["ErrorResponse"];
3147
+ };
3148
+ };
3149
+ };
3150
+ };
3151
+ fusion_search_v2: {
3152
+ parameters: {
3153
+ query?: never;
3154
+ header?: {
3155
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3156
+ "X-Tenant-ID"?: string;
3157
+ };
3158
+ path: {
3159
+ /** @description Graph ID for traversal expansion */
3160
+ graph_id: string;
3161
+ };
3162
+ cookie?: never;
3163
+ };
3164
+ requestBody: {
3165
+ content: {
3166
+ "application/json": components["schemas"]["FusionSearchRequest"];
3167
+ };
3168
+ };
3169
+ responses: {
3170
+ /** @description Fusion results with calibrated scores */
3171
+ 200: {
3172
+ headers: {
3173
+ [name: string]: unknown;
3174
+ };
3175
+ content: {
3176
+ "application/json": components["schemas"]["FusionSearchResponse"];
3177
+ };
3178
+ };
3179
+ /** @description Invalid request (empty query_vector, etc.) */
3180
+ 400: {
3181
+ headers: {
3182
+ [name: string]: unknown;
3183
+ };
3184
+ content: {
3185
+ "application/json": components["schemas"]["ErrorResponse"];
3186
+ };
3187
+ };
3188
+ /** @description Fusion execution failed */
3189
+ 500: {
3190
+ headers: {
3191
+ [name: string]: unknown;
3192
+ };
3193
+ content: {
3194
+ "application/json": components["schemas"]["ErrorResponse"];
3195
+ };
3196
+ };
3197
+ };
3198
+ };
3199
+ impact_analysis_v2: {
3200
+ parameters: {
3201
+ query?: never;
3202
+ header?: {
3203
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3204
+ "X-Tenant-ID"?: string;
3205
+ };
3206
+ path: {
3207
+ /** @description Graph ID */
3208
+ graph_id: string;
3209
+ };
3210
+ cookie?: never;
3211
+ };
3212
+ requestBody: {
3213
+ content: {
3214
+ "application/json": components["schemas"]["ImpactAnalysisRequest"];
3215
+ };
3216
+ };
3217
+ responses: {
3218
+ /** @description Impacted node ids */
3219
+ 200: {
3220
+ headers: {
3221
+ [name: string]: unknown;
3222
+ };
3223
+ content: {
3224
+ "application/json": components["schemas"]["ImpactAnalysisResponse"];
3225
+ };
3226
+ };
3227
+ /** @description Missing graph_id/node_id */
3228
+ 400: {
3229
+ headers: {
3230
+ [name: string]: unknown;
3231
+ };
3232
+ content: {
3233
+ "application/json": components["schemas"]["ErrorResponse"];
3234
+ };
3235
+ };
3236
+ /** @description Impact analysis failed */
3237
+ 500: {
3238
+ headers: {
3239
+ [name: string]: unknown;
3240
+ };
3241
+ content: {
3242
+ "application/json": components["schemas"]["ErrorResponse"];
3243
+ };
3244
+ };
3245
+ };
3246
+ };
3247
+ listModelRegistries: {
3248
+ parameters: {
3249
+ query?: never;
3250
+ header?: {
3251
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3252
+ "X-Tenant-ID"?: string;
3253
+ };
3254
+ path?: never;
3255
+ cookie?: never;
3256
+ };
3257
+ requestBody?: never;
3258
+ responses: {
3259
+ /** @description Tenant-scoped registries in deterministic name order. */
3260
+ 200: {
3261
+ headers: {
3262
+ [name: string]: unknown;
3263
+ };
3264
+ content: {
3265
+ "application/json": components["schemas"]["ListModelRegistriesResponse"];
3266
+ };
3267
+ };
3268
+ };
3269
+ };
3270
+ createModelRegistry: {
3271
+ parameters: {
3272
+ query?: never;
3273
+ header?: {
3274
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3275
+ "X-Tenant-ID"?: string;
3276
+ };
3277
+ path?: never;
3278
+ cookie?: never;
3279
+ };
3280
+ requestBody: {
3281
+ content: {
3282
+ "application/json": components["schemas"]["CreateModelRegistryRequest"];
3283
+ };
3284
+ };
3285
+ responses: {
3286
+ /** @description Created model registry. */
3287
+ 200: {
3288
+ headers: {
3289
+ [name: string]: unknown;
3290
+ };
3291
+ content: {
3292
+ "application/json": components["schemas"]["ModelRegistryRecordResponse"];
3293
+ };
3294
+ };
3295
+ /** @description Invalid registry name. */
3296
+ 400: {
3297
+ headers: {
3298
+ [name: string]: unknown;
3299
+ };
3300
+ content: {
3301
+ "application/json": components["schemas"]["ErrorResponse"];
3302
+ };
3303
+ };
3304
+ /** @description Registry already exists. */
3305
+ 409: {
3306
+ headers: {
3307
+ [name: string]: unknown;
3308
+ };
3309
+ content: {
3310
+ "application/json": components["schemas"]["ErrorResponse"];
3311
+ };
3312
+ };
3313
+ };
3314
+ };
3315
+ getModelRegistry: {
3316
+ parameters: {
3317
+ query?: never;
3318
+ header?: {
3319
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3320
+ "X-Tenant-ID"?: string;
3321
+ };
3322
+ path: {
3323
+ /** @description Tenant-local registry name. */
3324
+ name: string;
3325
+ };
3326
+ cookie?: never;
3327
+ };
3328
+ requestBody?: never;
3329
+ responses: {
3330
+ /** @description Model registry. */
3331
+ 200: {
3332
+ headers: {
3333
+ [name: string]: unknown;
3334
+ };
3335
+ content: {
3336
+ "application/json": components["schemas"]["ModelRegistryRecordResponse"];
3337
+ };
3338
+ };
3339
+ /** @description Registry not found. */
3340
+ 404: {
3341
+ headers: {
3342
+ [name: string]: unknown;
3343
+ };
3344
+ content: {
3345
+ "application/json": components["schemas"]["ErrorResponse"];
3346
+ };
3347
+ };
3348
+ };
3349
+ };
3350
+ applyModelRegistryMutation: {
3351
+ parameters: {
3352
+ query?: never;
3353
+ header?: {
3354
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3355
+ "X-Tenant-ID"?: string;
3356
+ };
3357
+ path: {
3358
+ /** @description Tenant-local registry name. */
3359
+ name: string;
3360
+ };
3361
+ cookie?: never;
3362
+ };
3363
+ requestBody: {
3364
+ content: {
3365
+ "application/json": components["schemas"]["ApplyModelRegistryMutationRequest"];
3366
+ };
3367
+ };
3368
+ responses: {
3369
+ /** @description Updated registry. */
3370
+ 200: {
3371
+ headers: {
3372
+ [name: string]: unknown;
3373
+ };
3374
+ content: {
3375
+ "application/json": components["schemas"]["ModelRegistryRecordResponse"];
3376
+ };
3377
+ };
3378
+ /** @description Invalid lifecycle command. */
3379
+ 400: {
3380
+ headers: {
3381
+ [name: string]: unknown;
3382
+ };
3383
+ content: {
3384
+ "application/json": components["schemas"]["ErrorResponse"];
3385
+ };
3386
+ };
3387
+ /** @description Registry not found. */
3388
+ 404: {
3389
+ headers: {
3390
+ [name: string]: unknown;
3391
+ };
3392
+ content: {
3393
+ "application/json": components["schemas"]["ErrorResponse"];
3394
+ };
3395
+ };
3396
+ /** @description Revision conflict. */
3397
+ 409: {
3398
+ headers: {
3399
+ [name: string]: unknown;
3400
+ };
3401
+ content: {
3402
+ "application/json": components["schemas"]["ErrorResponse"];
3403
+ };
3404
+ };
3405
+ };
3406
+ };
3407
+ resolveModelAlias: {
3408
+ parameters: {
3409
+ query?: never;
3410
+ header?: {
3411
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3412
+ "X-Tenant-ID"?: string;
3413
+ };
3414
+ path: {
3415
+ /** @description Tenant-local registry name. */
3416
+ name: string;
3417
+ };
3418
+ cookie?: never;
3419
+ };
3420
+ requestBody: {
3421
+ content: {
3422
+ "application/json": components["schemas"]["ResolveModelAliasRequest"];
3423
+ };
3424
+ };
3425
+ responses: {
3426
+ /** @description Immutable version and digest binding. */
3427
+ 200: {
3428
+ headers: {
3429
+ [name: string]: unknown;
3430
+ };
3431
+ content: {
3432
+ "application/json": components["schemas"]["ResolvedModelBindingResponse"];
3433
+ };
3434
+ };
3435
+ /** @description Alias, dimension, runtime, or approval policy rejected. */
3436
+ 400: {
3437
+ headers: {
3438
+ [name: string]: unknown;
3439
+ };
3440
+ content: {
3441
+ "application/json": components["schemas"]["ErrorResponse"];
3442
+ };
3443
+ };
3444
+ /** @description Registry not found. */
3445
+ 404: {
3446
+ headers: {
3447
+ [name: string]: unknown;
3448
+ };
3449
+ content: {
3450
+ "application/json": components["schemas"]["ErrorResponse"];
3451
+ };
3452
+ };
3453
+ };
3454
+ };
3455
+ executeQuery: {
3456
+ parameters: {
3457
+ query?: never;
3458
+ header?: {
3459
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3460
+ "X-Tenant-ID"?: string;
3461
+ };
3462
+ path?: never;
3463
+ cookie?: never;
3464
+ };
3465
+ requestBody: {
3466
+ content: {
3467
+ "application/json": components["schemas"]["QueryRequest"];
3468
+ };
3469
+ };
3470
+ responses: {
3471
+ /** @description Query result. */
3472
+ 200: {
3473
+ headers: {
3474
+ [name: string]: unknown;
3475
+ };
3476
+ content: {
3477
+ "application/json": components["schemas"]["QueryResponse"];
3478
+ };
3479
+ };
3480
+ /** @description Invalid request. */
3481
+ 400: {
3482
+ headers: {
3483
+ [name: string]: unknown;
3484
+ };
3485
+ content: {
3486
+ "application/json": components["schemas"]["ErrorResponse"];
3487
+ };
3488
+ };
3489
+ };
3490
+ };
3491
+ explainQuery: {
3492
+ parameters: {
3493
+ query?: never;
3494
+ header?: {
3495
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3496
+ "X-Tenant-ID"?: string;
3497
+ };
3498
+ path?: never;
3499
+ cookie?: never;
3500
+ };
3501
+ requestBody: {
3502
+ content: {
3503
+ "application/json": components["schemas"]["ExplainQueryRequest"];
3504
+ };
3505
+ };
3506
+ responses: {
3507
+ /** @description Query plan and lowering details. */
3508
+ 200: {
3509
+ headers: {
3510
+ [name: string]: unknown;
3511
+ };
3512
+ content: {
3513
+ "application/json": components["schemas"]["QueryResponse"];
3514
+ };
3515
+ };
3516
+ /** @description Invalid request. */
3517
+ 400: {
3518
+ headers: {
3519
+ [name: string]: unknown;
3520
+ };
3521
+ content: {
3522
+ "application/json": components["schemas"]["ErrorResponse"];
3523
+ };
3524
+ };
3525
+ };
3526
+ };
3527
+ executeSql: {
3528
+ parameters: {
3529
+ query?: never;
3530
+ header?: {
3531
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3532
+ "X-Tenant-ID"?: string;
3533
+ };
3534
+ path?: never;
3535
+ cookie?: never;
3536
+ };
3537
+ requestBody: {
3538
+ content: {
3539
+ "application/json": components["schemas"]["SqlRequest"];
3540
+ };
3541
+ };
3542
+ responses: {
3543
+ /** @description SQL result or write count. */
3544
+ 200: {
3545
+ headers: {
3546
+ [name: string]: unknown;
3547
+ };
3548
+ content: {
3549
+ "application/json": components["schemas"]["SqlResponse"];
3550
+ };
3551
+ };
3552
+ /** @description Invalid SQL request. */
3553
+ 400: {
3554
+ headers: {
3555
+ [name: string]: unknown;
3556
+ };
3557
+ content: {
3558
+ "application/json": components["schemas"]["ErrorResponse"];
3559
+ };
3560
+ };
3561
+ /** @description Query deadline exceeded. */
3562
+ 408: {
3563
+ headers: {
3564
+ [name: string]: unknown;
3565
+ };
3566
+ content: {
3567
+ "application/json": components["schemas"]["ErrorResponse"];
3568
+ };
3569
+ };
3570
+ /** @description Write lock conflict. */
3571
+ 409: {
3572
+ headers: {
3573
+ [name: string]: unknown;
3574
+ };
3575
+ content: {
3576
+ "application/json": components["schemas"]["ErrorResponse"];
3577
+ };
3578
+ };
3579
+ /** @description SQL execution failure. */
3580
+ 500: {
3581
+ headers: {
3582
+ [name: string]: unknown;
3583
+ };
3584
+ content: {
3585
+ "application/json": components["schemas"]["ErrorResponse"];
3586
+ };
3587
+ };
3588
+ };
3589
+ };
3590
+ getHealth: {
3591
+ parameters: {
3592
+ query?: never;
3593
+ header?: {
3594
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3595
+ "X-Tenant-ID"?: string;
3596
+ };
3597
+ path?: never;
3598
+ cookie?: never;
3599
+ };
3600
+ requestBody?: never;
3601
+ responses: {
3602
+ /** @description Health status. */
3603
+ 200: {
3604
+ headers: {
3605
+ [name: string]: unknown;
3606
+ };
3607
+ content: {
3608
+ "application/json": components["schemas"]["HealthResponse"];
3609
+ };
3610
+ };
3611
+ };
3612
+ };
3613
+ getLiveness: {
3614
+ parameters: {
3615
+ query?: never;
3616
+ header?: {
3617
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3618
+ "X-Tenant-ID"?: string;
3619
+ };
3620
+ path?: never;
3621
+ cookie?: never;
3622
+ };
3623
+ requestBody?: never;
3624
+ responses: {
3625
+ /** @description Process is alive. */
3626
+ 200: {
3627
+ headers: {
3628
+ [name: string]: unknown;
3629
+ };
3630
+ content: {
3631
+ "application/json": components["schemas"]["ProbeResponse"];
3632
+ };
3633
+ };
3634
+ };
3635
+ };
3636
+ getReadiness: {
3637
+ parameters: {
3638
+ query?: never;
3639
+ header?: {
3640
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3641
+ "X-Tenant-ID"?: string;
3642
+ };
3643
+ path?: never;
3644
+ cookie?: never;
3645
+ };
3646
+ requestBody?: never;
3647
+ responses: {
3648
+ /** @description Server is ready. */
3649
+ 200: {
3650
+ headers: {
3651
+ [name: string]: unknown;
3652
+ };
3653
+ content: {
3654
+ "application/json": components["schemas"]["ProbeResponse"];
3655
+ };
3656
+ };
3657
+ };
3658
+ };
3659
+ getCapabilities: {
3660
+ parameters: {
3661
+ query?: never;
3662
+ header?: {
3663
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3664
+ "X-Tenant-ID"?: string;
3665
+ };
3666
+ path?: never;
3667
+ cookie?: never;
3668
+ };
3669
+ requestBody?: never;
3670
+ responses: {
3671
+ /** @description Capability document. */
3672
+ 200: {
3673
+ headers: {
3674
+ [name: string]: unknown;
3675
+ };
3676
+ content: {
3677
+ "application/json": components["schemas"]["CapabilitiesResponse"];
3678
+ };
3679
+ };
3680
+ };
3681
+ };
3682
+ listGraphs: {
3683
+ parameters: {
3684
+ query?: never;
3685
+ header?: {
3686
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3687
+ "X-Tenant-ID"?: string;
3688
+ };
3689
+ path?: never;
3690
+ cookie?: never;
3691
+ };
3692
+ requestBody?: never;
3693
+ responses: {
3694
+ /** @description Graph collection listing. */
3695
+ 200: {
3696
+ headers: {
3697
+ [name: string]: unknown;
3698
+ };
3699
+ content: {
3700
+ "application/json": components["schemas"]["ListGraphsResponse"];
3701
+ };
3702
+ };
3703
+ };
3704
+ };
3705
+ createGraph: {
3706
+ parameters: {
3707
+ query?: never;
3708
+ header?: {
3709
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3710
+ "X-Tenant-ID"?: string;
3711
+ };
3712
+ path?: never;
3713
+ cookie?: never;
3714
+ };
3715
+ requestBody: {
3716
+ content: {
3717
+ "application/json": components["schemas"]["CreateGraphRequest"];
3718
+ };
3719
+ };
3720
+ responses: {
3721
+ /** @description Graph collection metadata. */
3722
+ 200: {
3723
+ headers: {
3724
+ [name: string]: unknown;
3725
+ };
3726
+ content: {
3727
+ "application/json": components["schemas"]["GraphCollectionResponse"];
3728
+ };
3729
+ };
3730
+ 400: components["responses"]["BadRequest"];
3731
+ };
3732
+ };
3733
+ getGraph: {
3734
+ parameters: {
3735
+ query?: never;
3736
+ header?: {
3737
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3738
+ "X-Tenant-ID"?: string;
3739
+ };
3740
+ path: {
3741
+ graph_id: components["parameters"]["GraphId"];
3742
+ };
3743
+ cookie?: never;
3744
+ };
3745
+ requestBody?: never;
3746
+ responses: {
3747
+ /** @description Graph collection metadata. */
3748
+ 200: {
3749
+ headers: {
3750
+ [name: string]: unknown;
3751
+ };
3752
+ content: {
3753
+ "application/json": components["schemas"]["GraphCollectionResponse"];
3754
+ };
3755
+ };
3756
+ 404: components["responses"]["NotFound"];
3757
+ };
3758
+ };
3759
+ deleteGraph: {
3760
+ parameters: {
3761
+ query?: never;
3762
+ header?: {
3763
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3764
+ "X-Tenant-ID"?: string;
3765
+ };
3766
+ path: {
3767
+ graph_id: components["parameters"]["GraphId"];
3768
+ };
3769
+ cookie?: never;
3770
+ };
3771
+ requestBody?: never;
3772
+ responses: {
3773
+ /** @description Deletion acknowledged. */
3774
+ 200: {
3775
+ headers: {
3776
+ [name: string]: unknown;
3777
+ };
3778
+ content: {
3779
+ "application/json": components["schemas"]["DeleteGraphResponse"];
3780
+ };
3781
+ };
3782
+ 404: components["responses"]["NotFound"];
3783
+ };
3784
+ };
3785
+ createNode: {
3786
+ parameters: {
3787
+ query?: never;
3788
+ header?: {
3789
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3790
+ "X-Tenant-ID"?: string;
3791
+ };
3792
+ path: {
3793
+ graph_id: components["parameters"]["GraphId"];
3794
+ };
3795
+ cookie?: never;
3796
+ };
3797
+ requestBody: {
3798
+ content: {
3799
+ "application/json": components["schemas"]["CreateNodeRequest"];
3800
+ };
3801
+ };
3802
+ responses: {
3803
+ /** @description Created node. */
3804
+ 200: {
3805
+ headers: {
3806
+ [name: string]: unknown;
3807
+ };
3808
+ content: {
3809
+ "application/json": components["schemas"]["NodeResponse"];
3810
+ };
3811
+ };
3812
+ 400: components["responses"]["BadRequest"];
3813
+ 404: components["responses"]["NotFound"];
3814
+ };
3815
+ };
3816
+ getNode: {
3817
+ parameters: {
3818
+ query?: never;
3819
+ header?: {
3820
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3821
+ "X-Tenant-ID"?: string;
3822
+ };
3823
+ path: {
3824
+ graph_id: components["parameters"]["GraphId"];
3825
+ node_id: components["parameters"]["NodeId"];
3826
+ };
3827
+ cookie?: never;
3828
+ };
3829
+ requestBody?: never;
3830
+ responses: {
3831
+ /** @description Node payload. */
3832
+ 200: {
3833
+ headers: {
3834
+ [name: string]: unknown;
3835
+ };
3836
+ content: {
3837
+ "application/json": components["schemas"]["NodeResponse"];
3838
+ };
3839
+ };
3840
+ 404: components["responses"]["NotFound"];
3841
+ };
3842
+ };
3843
+ deleteNode: {
3844
+ parameters: {
3845
+ query?: never;
3846
+ header?: {
3847
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3848
+ "X-Tenant-ID"?: string;
3849
+ };
3850
+ path: {
3851
+ graph_id: components["parameters"]["GraphId"];
3852
+ node_id: components["parameters"]["NodeId"];
3853
+ };
3854
+ cookie?: never;
3855
+ };
3856
+ requestBody?: never;
3857
+ responses: {
3858
+ /** @description Deletion acknowledged. */
3859
+ 200: {
3860
+ headers: {
3861
+ [name: string]: unknown;
3862
+ };
3863
+ content: {
3864
+ "application/json": components["schemas"]["DeleteNodeResponse"];
3865
+ };
3866
+ };
3867
+ 404: components["responses"]["NotFound"];
3868
+ };
3869
+ };
3870
+ createEdge: {
3871
+ parameters: {
3872
+ query?: never;
3873
+ header?: {
3874
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3875
+ "X-Tenant-ID"?: string;
3876
+ };
3877
+ path: {
3878
+ graph_id: components["parameters"]["GraphId"];
3879
+ };
3880
+ cookie?: never;
3881
+ };
3882
+ requestBody: {
3883
+ content: {
3884
+ "application/json": components["schemas"]["CreateEdgeRequest"];
3885
+ };
3886
+ };
3887
+ responses: {
3888
+ /** @description Created edge. */
3889
+ 200: {
3890
+ headers: {
3891
+ [name: string]: unknown;
3892
+ };
3893
+ content: {
3894
+ "application/json": components["schemas"]["EdgeResponse"];
3895
+ };
3896
+ };
3897
+ 400: components["responses"]["BadRequest"];
3898
+ 404: components["responses"]["NotFound"];
3899
+ };
3900
+ };
3901
+ batchCreateNodes: {
3902
+ parameters: {
3903
+ query?: never;
3904
+ header?: {
3905
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3906
+ "X-Tenant-ID"?: string;
3907
+ };
3908
+ path: {
3909
+ graph_id: components["parameters"]["GraphId"];
3910
+ };
3911
+ cookie?: never;
3912
+ };
3913
+ requestBody: {
3914
+ content: {
3915
+ "application/json": components["schemas"]["BatchCreateNodesRequest"];
3916
+ };
3917
+ };
3918
+ responses: {
3919
+ /** @description Batch result. */
3920
+ 200: {
3921
+ headers: {
3922
+ [name: string]: unknown;
3923
+ };
3924
+ content: {
3925
+ "application/json": components["schemas"]["BatchNodesResponse"];
3926
+ };
3927
+ };
3928
+ 400: components["responses"]["BadRequest"];
3929
+ 404: components["responses"]["NotFound"];
3930
+ };
3931
+ };
3932
+ batchCreateEdges: {
3933
+ parameters: {
3934
+ query?: never;
3935
+ header?: {
3936
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3937
+ "X-Tenant-ID"?: string;
3938
+ };
3939
+ path: {
3940
+ graph_id: components["parameters"]["GraphId"];
3941
+ };
3942
+ cookie?: never;
3943
+ };
3944
+ requestBody: {
3945
+ content: {
3946
+ "application/json": components["schemas"]["BatchCreateEdgesRequest"];
3947
+ };
3948
+ };
3949
+ responses: {
3950
+ /** @description Batch result. */
3951
+ 200: {
3952
+ headers: {
3953
+ [name: string]: unknown;
3954
+ };
3955
+ content: {
3956
+ "application/json": components["schemas"]["BatchEdgesResponse"];
3957
+ };
3958
+ };
3959
+ 400: components["responses"]["BadRequest"];
3960
+ 404: components["responses"]["NotFound"];
3961
+ };
3962
+ };
3963
+ traverseGraph: {
3964
+ parameters: {
3965
+ query?: never;
3966
+ header?: {
3967
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3968
+ "X-Tenant-ID"?: string;
3969
+ };
3970
+ path: {
3971
+ graph_id: components["parameters"]["GraphId"];
3972
+ };
3973
+ cookie?: never;
3974
+ };
3975
+ requestBody: {
3976
+ content: {
3977
+ "application/json": components["schemas"]["TraverseRequest"];
3978
+ };
3979
+ };
3980
+ responses: {
3981
+ /** @description Traversal result. */
3982
+ 200: {
3983
+ headers: {
3984
+ [name: string]: unknown;
3985
+ };
3986
+ content: {
3987
+ "application/json": components["schemas"]["TraverseResponse"];
3988
+ };
3989
+ };
3990
+ 400: components["responses"]["BadRequest"];
3991
+ };
3992
+ };
3993
+ getGraphStats: {
3994
+ parameters: {
3995
+ query?: never;
3996
+ header?: {
3997
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
3998
+ "X-Tenant-ID"?: string;
3999
+ };
4000
+ path: {
4001
+ graph_id: components["parameters"]["GraphId"];
4002
+ };
4003
+ cookie?: never;
4004
+ };
4005
+ requestBody?: never;
4006
+ responses: {
4007
+ /** @description Graph statistics. */
4008
+ 200: {
4009
+ headers: {
4010
+ [name: string]: unknown;
4011
+ };
4012
+ content: {
4013
+ "application/json": components["schemas"]["GraphStatsResponse"];
4014
+ };
4015
+ };
4016
+ };
4017
+ };
4018
+ hybridSearch: {
4019
+ parameters: {
4020
+ query?: never;
4021
+ header?: {
4022
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
4023
+ "X-Tenant-ID"?: string;
4024
+ };
4025
+ path?: never;
4026
+ cookie?: never;
4027
+ };
4028
+ requestBody: {
4029
+ content: {
4030
+ "application/json": {
4031
+ collection: string;
4032
+ vector?: number[];
4033
+ text_query?: string;
4034
+ top_k?: number;
4035
+ fusion_strategy?: string;
4036
+ } & {
4037
+ [key: string]: unknown;
4038
+ };
4039
+ };
4040
+ };
4041
+ responses: {
4042
+ /** @description Fused results. */
4043
+ 200: {
4044
+ headers: {
4045
+ [name: string]: unknown;
4046
+ };
4047
+ content: {
4048
+ "application/json": {
4049
+ [key: string]: unknown;
4050
+ };
4051
+ };
4052
+ };
4053
+ 400: components["responses"]["BadRequest"];
4054
+ };
4055
+ };
4056
+ hybridIndex: {
4057
+ parameters: {
4058
+ query?: never;
4059
+ header?: {
4060
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
4061
+ "X-Tenant-ID"?: string;
4062
+ };
4063
+ path?: never;
4064
+ cookie?: never;
4065
+ };
4066
+ requestBody: {
4067
+ content: {
4068
+ "application/json": {
4069
+ [key: string]: unknown;
4070
+ };
4071
+ };
4072
+ };
4073
+ responses: {
4074
+ /** @description Index result. */
4075
+ 200: {
4076
+ headers: {
4077
+ [name: string]: unknown;
4078
+ };
4079
+ content: {
4080
+ "application/json": {
4081
+ [key: string]: unknown;
4082
+ };
4083
+ };
4084
+ };
4085
+ };
4086
+ };
4087
+ listDocumentCollections: {
4088
+ parameters: {
4089
+ query?: never;
4090
+ header?: {
4091
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
4092
+ "X-Tenant-ID"?: string;
4093
+ };
4094
+ path?: never;
4095
+ cookie?: never;
4096
+ };
4097
+ requestBody?: never;
4098
+ responses: {
4099
+ /** @description Collections. */
4100
+ 200: {
4101
+ headers: {
4102
+ [name: string]: unknown;
4103
+ };
4104
+ content: {
4105
+ "application/json": {
4106
+ [key: string]: unknown;
4107
+ };
4108
+ };
4109
+ };
4110
+ };
4111
+ };
4112
+ createDocumentCollection: {
4113
+ parameters: {
4114
+ query?: never;
4115
+ header?: {
4116
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
4117
+ "X-Tenant-ID"?: string;
4118
+ };
4119
+ path?: never;
4120
+ cookie?: never;
4121
+ };
4122
+ requestBody: {
4123
+ content: {
4124
+ "application/json": {
4125
+ [key: string]: unknown;
4126
+ };
4127
+ };
4128
+ };
4129
+ responses: {
4130
+ /** @description Created. */
4131
+ 200: {
4132
+ headers: {
4133
+ [name: string]: unknown;
4134
+ };
4135
+ content: {
4136
+ "application/json": {
4137
+ [key: string]: unknown;
4138
+ };
4139
+ };
4140
+ };
4141
+ };
4142
+ };
4143
+ queryDocuments: {
4144
+ parameters: {
4145
+ query?: never;
4146
+ header?: {
4147
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
4148
+ "X-Tenant-ID"?: string;
4149
+ };
4150
+ path: {
4151
+ collection: string;
4152
+ };
4153
+ cookie?: never;
4154
+ };
4155
+ requestBody?: never;
4156
+ responses: {
4157
+ /** @description Documents. */
4158
+ 200: {
4159
+ headers: {
4160
+ [name: string]: unknown;
4161
+ };
4162
+ content: {
4163
+ "application/json": {
4164
+ [key: string]: unknown;
4165
+ };
4166
+ };
4167
+ };
4168
+ };
4169
+ };
4170
+ insertDocument: {
4171
+ parameters: {
4172
+ query?: never;
4173
+ header?: {
4174
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
4175
+ "X-Tenant-ID"?: string;
4176
+ };
4177
+ path: {
4178
+ collection: string;
4179
+ };
4180
+ cookie?: never;
4181
+ };
4182
+ requestBody: {
4183
+ content: {
4184
+ "application/json": {
4185
+ [key: string]: unknown;
4186
+ };
4187
+ };
4188
+ };
4189
+ responses: {
4190
+ /** @description Inserted. */
4191
+ 200: {
4192
+ headers: {
4193
+ [name: string]: unknown;
4194
+ };
4195
+ content: {
4196
+ "application/json": {
4197
+ [key: string]: unknown;
4198
+ };
4199
+ };
4200
+ };
4201
+ 404: components["responses"]["NotFound"];
4202
+ };
4203
+ };
4204
+ ingestLog: {
4205
+ parameters: {
4206
+ query?: never;
4207
+ header?: {
4208
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
4209
+ "X-Tenant-ID"?: string;
4210
+ };
4211
+ path: {
4212
+ namespace: string;
4213
+ };
4214
+ cookie?: never;
4215
+ };
4216
+ requestBody: {
4217
+ content: {
4218
+ "application/json": {
4219
+ [key: string]: unknown;
4220
+ };
4221
+ };
4222
+ };
4223
+ responses: {
4224
+ /** @description Ingested. */
4225
+ 200: {
4226
+ headers: {
4227
+ [name: string]: unknown;
4228
+ };
4229
+ content: {
4230
+ "application/json": {
4231
+ [key: string]: unknown;
4232
+ };
4233
+ };
4234
+ };
4235
+ };
4236
+ };
4237
+ queryLogs: {
4238
+ parameters: {
4239
+ query?: never;
4240
+ header?: {
4241
+ /** @description Optional explicit tenant selector. Applied only when there is no authenticated tenant context — a JWT tenant claim takes precedence, and a header that disagrees with the authenticated tenant is rejected. Absent ⇒ the default tenant. Tenant isolation is structural on the server; this header only selects the tenant. */
4242
+ "X-Tenant-ID"?: string;
4243
+ };
4244
+ path: {
4245
+ namespace: string;
4246
+ };
4247
+ cookie?: never;
4248
+ };
4249
+ requestBody: {
4250
+ content: {
4251
+ "application/json": {
4252
+ [key: string]: unknown;
4253
+ };
4254
+ };
4255
+ };
4256
+ responses: {
4257
+ /** @description Matching logs. */
4258
+ 200: {
4259
+ headers: {
4260
+ [name: string]: unknown;
4261
+ };
4262
+ content: {
4263
+ "application/json": {
4264
+ [key: string]: unknown;
4265
+ };
4266
+ };
4267
+ };
4268
+ };
4269
+ };
4270
+ }
4271
+ //# sourceMappingURL=schema.d.ts.map