@malloydata/db-publisher 0.0.381 → 0.0.382

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.
@@ -38,11 +38,14 @@ tags:
38
38
  - name: publisher
39
39
  description: Publisher status and health check operations
40
40
  - name: projects
41
- description: Project lifecycle management including creation, configuration, and deletion of data modeling projects
41
+ description: Project lifecycle management including creation, configuration, and
42
+ deletion of data modeling projects
42
43
  - name: connections
43
- description: Database connection management for secure data source configuration and access
44
+ description: Database connection management for secure data source configuration
45
+ and access
44
46
  - name: packages
45
- description: Package management for Malloy data models, including versioning and distribution
47
+ description: Package management for Malloy data models, including versioning and
48
+ distribution
46
49
  - name: models
47
50
  description: Malloy model access and compilation operations
48
51
  - name: notebooks
@@ -51,6 +54,10 @@ tags:
51
54
  description: Embedded database management and access
52
55
  - name: watch-mode
53
56
  description: Real-time file watching for development workflows
57
+ - name: materializations
58
+ description: Package-level materializations for persisting Malloy sources
59
+ - name: manifests
60
+ description: Build manifest management for tracking materialized source tables
54
61
 
55
62
  paths:
56
63
  /status:
@@ -70,6 +77,8 @@ paths:
70
77
  application/json:
71
78
  schema:
72
79
  $ref: "#/components/schemas/ServerStatus"
80
+ "503":
81
+ $ref: "#/components/responses/ServiceUnavailable"
73
82
 
74
83
  /projects:
75
84
  get:
@@ -94,6 +103,8 @@ paths:
94
103
  $ref: "#/components/responses/Unauthorized"
95
104
  "500":
96
105
  $ref: "#/components/responses/InternalServerError"
106
+ "503":
107
+ $ref: "#/components/responses/ServiceUnavailable"
97
108
  post:
98
109
  tags:
99
110
  - projects
@@ -120,6 +131,8 @@ paths:
120
131
  $ref: "#/components/responses/Unauthorized"
121
132
  "500":
122
133
  $ref: "#/components/responses/InternalServerError"
134
+ "503":
135
+ $ref: "#/components/responses/ServiceUnavailable"
123
136
 
124
137
  /projects/{projectName}:
125
138
  get:
@@ -157,6 +170,8 @@ paths:
157
170
  $ref: "#/components/responses/NotFound"
158
171
  "500":
159
172
  $ref: "#/components/responses/InternalServerError"
173
+ "503":
174
+ $ref: "#/components/responses/ServiceUnavailable"
160
175
  patch:
161
176
  tags:
162
177
  - projects
@@ -190,6 +205,8 @@ paths:
190
205
  $ref: "#/components/responses/Unauthorized"
191
206
  "500":
192
207
  $ref: "#/components/responses/InternalServerError"
208
+ "503":
209
+ $ref: "#/components/responses/ServiceUnavailable"
193
210
  delete:
194
211
  tags:
195
212
  - projects
@@ -219,6 +236,8 @@ paths:
219
236
  $ref: "#/components/responses/NotFound"
220
237
  "500":
221
238
  $ref: "#/components/responses/InternalServerError"
239
+ "503":
240
+ $ref: "#/components/responses/ServiceUnavailable"
222
241
 
223
242
  /projects/{projectName}/connections:
224
243
  get:
@@ -250,6 +269,8 @@ paths:
250
269
  $ref: "#/components/responses/Unauthorized"
251
270
  "500":
252
271
  $ref: "#/components/responses/InternalServerError"
272
+ "503":
273
+ $ref: "#/components/responses/ServiceUnavailable"
253
274
 
254
275
  /projects/{projectName}/connections/{connectionName}:
255
276
  get:
@@ -287,6 +308,164 @@ paths:
287
308
  $ref: "#/components/responses/NotFound"
288
309
  "500":
289
310
  $ref: "#/components/responses/InternalServerError"
311
+ "503":
312
+ $ref: "#/components/responses/ServiceUnavailable"
313
+ post:
314
+ tags:
315
+ - connections
316
+ operationId: create-connection
317
+ summary: Create a new database connection
318
+ description: |
319
+ Creates a new database connection in the specified project.
320
+ parameters:
321
+ - name: projectName
322
+ in: path
323
+ description: Name of the project
324
+ required: true
325
+ schema:
326
+ $ref: "#/components/schemas/IdentifierPattern"
327
+ - name: connectionName
328
+ in: path
329
+ description: Name of the connection
330
+ required: true
331
+ schema:
332
+ $ref: "#/components/schemas/IdentifierPattern"
333
+ requestBody:
334
+ required: true
335
+ content:
336
+ application/json:
337
+ schema:
338
+ $ref: "#/components/schemas/Connection"
339
+ responses:
340
+ "201":
341
+ description: Connection created successfully
342
+ content:
343
+ application/json:
344
+ schema:
345
+ type: object
346
+ properties:
347
+ message:
348
+ type: string
349
+ "400":
350
+ $ref: "#/components/responses/BadRequest"
351
+ "404":
352
+ $ref: "#/components/responses/NotFound"
353
+ "409":
354
+ description: Connection already exists
355
+ content:
356
+ application/json:
357
+ schema:
358
+ type: object
359
+ properties:
360
+ error:
361
+ type: string
362
+ "401":
363
+ $ref: "#/components/responses/Unauthorized"
364
+ "500":
365
+ $ref: "#/components/responses/InternalServerError"
366
+ "503":
367
+ $ref: "#/components/responses/ServiceUnavailable"
368
+ patch:
369
+ tags:
370
+ - connections
371
+ operationId: update-connection
372
+ summary: Update an existing database connection
373
+ description: |
374
+ Updates the configuration of an existing database connection.
375
+ parameters:
376
+ - name: projectName
377
+ in: path
378
+ description: Name of the project
379
+ required: true
380
+ schema:
381
+ $ref: "#/components/schemas/IdentifierPattern"
382
+ - name: connectionName
383
+ in: path
384
+ description: Name of the connection to update
385
+ required: true
386
+ schema:
387
+ $ref: "#/components/schemas/IdentifierPattern"
388
+ requestBody:
389
+ required: true
390
+ content:
391
+ application/json:
392
+ schema:
393
+ type: object
394
+ properties:
395
+ postgresConnection:
396
+ $ref: "#/components/schemas/PostgresConnection"
397
+ mysqlConnection:
398
+ $ref: "#/components/schemas/MysqlConnection"
399
+ bigqueryConnection:
400
+ $ref: "#/components/schemas/BigqueryConnection"
401
+ snowflakeConnection:
402
+ $ref: "#/components/schemas/SnowflakeConnection"
403
+ duckdbConnection:
404
+ $ref: "#/components/schemas/DuckdbConnection"
405
+ motherduckConnection:
406
+ $ref: "#/components/schemas/MotherDuckConnection"
407
+ trinoConnection:
408
+ $ref: "#/components/schemas/TrinoConnection"
409
+ ducklakeConnection:
410
+ $ref: "#/components/schemas/DucklakeConnection"
411
+ responses:
412
+ "200":
413
+ description: Connection updated successfully
414
+ content:
415
+ application/json:
416
+ schema:
417
+ type: object
418
+ properties:
419
+ message:
420
+ type: string
421
+ "400":
422
+ $ref: "#/components/responses/BadRequest"
423
+ "404":
424
+ $ref: "#/components/responses/NotFound"
425
+ "401":
426
+ $ref: "#/components/responses/Unauthorized"
427
+ "500":
428
+ $ref: "#/components/responses/InternalServerError"
429
+ "503":
430
+ $ref: "#/components/responses/ServiceUnavailable"
431
+ delete:
432
+ tags:
433
+ - connections
434
+ operationId: delete-connection
435
+ summary: Delete a database connection
436
+ description: |
437
+ Permanently deletes a database connection from the project.
438
+ parameters:
439
+ - name: projectName
440
+ in: path
441
+ description: Name of the project
442
+ required: true
443
+ schema:
444
+ $ref: "#/components/schemas/IdentifierPattern"
445
+ - name: connectionName
446
+ in: path
447
+ description: Name of the connection to delete
448
+ required: true
449
+ schema:
450
+ $ref: "#/components/schemas/IdentifierPattern"
451
+ responses:
452
+ "200":
453
+ description: Connection deleted successfully
454
+ content:
455
+ application/json:
456
+ schema:
457
+ type: object
458
+ properties:
459
+ message:
460
+ type: string
461
+ "404":
462
+ $ref: "#/components/responses/NotFound"
463
+ "401":
464
+ $ref: "#/components/responses/Unauthorized"
465
+ "500":
466
+ $ref: "#/components/responses/InternalServerError"
467
+ "503":
468
+ $ref: "#/components/responses/ServiceUnavailable"
290
469
 
291
470
  /projects/{projectName}/connections/{connectionName}/schemas:
292
471
  get:
@@ -326,6 +505,8 @@ paths:
326
505
  $ref: "#/components/responses/NotFound"
327
506
  "500":
328
507
  $ref: "#/components/responses/InternalServerError"
508
+ "503":
509
+ $ref: "#/components/responses/ServiceUnavailable"
329
510
 
330
511
  /projects/{projectName}/connections/{connectionName}/schemas/{schemaName}/tables:
331
512
  get:
@@ -356,6 +537,16 @@ paths:
356
537
  required: true
357
538
  schema:
358
539
  $ref: "#/components/schemas/IdentifierPattern"
540
+ - name: tableNames
541
+ in: query
542
+ description: |
543
+ List of table names to filter results. When provided, only returns metadata
544
+ for the specified tables. When omitted, returns all tables in the schema.
545
+ required: false
546
+ schema:
547
+ type: array
548
+ items:
549
+ type: string
359
550
  responses:
360
551
  "200":
361
552
  description: A list of table names available in the specified schema
@@ -371,6 +562,8 @@ paths:
371
562
  $ref: "#/components/responses/NotFound"
372
563
  "500":
373
564
  $ref: "#/components/responses/InternalServerError"
565
+ "503":
566
+ $ref: "#/components/responses/ServiceUnavailable"
374
567
 
375
568
  /projects/{projectName}/connections/{connectionName}/schemas/{schemaName}/tables/{tablePath}:
376
569
  get:
@@ -421,6 +614,8 @@ paths:
421
614
  $ref: "#/components/responses/NotFound"
422
615
  "500":
423
616
  $ref: "#/components/responses/InternalServerError"
617
+ "503":
618
+ $ref: "#/components/responses/ServiceUnavailable"
424
619
 
425
620
  # TODO: Remove this endpoint.
426
621
  /projects/{projectName}/connections/{connectionName}/sqlSource:
@@ -468,6 +663,8 @@ paths:
468
663
  $ref: "#/components/responses/NotFound"
469
664
  "500":
470
665
  $ref: "#/components/responses/InternalServerError"
666
+ "503":
667
+ $ref: "#/components/responses/ServiceUnavailable"
471
668
 
472
669
  post:
473
670
  tags:
@@ -513,6 +710,8 @@ paths:
513
710
  $ref: "#/components/responses/NotFound"
514
711
  "500":
515
712
  $ref: "#/components/responses/InternalServerError"
713
+ "503":
714
+ $ref: "#/components/responses/ServiceUnavailable"
516
715
 
517
716
  /projects/{projectName}/connections/{connectionName}/sqlQuery:
518
717
  post:
@@ -536,12 +735,6 @@ paths:
536
735
  required: true
537
736
  schema:
538
737
  $ref: "#/components/schemas/IdentifierPattern"
539
- - name: options
540
- in: query
541
- description: Options
542
- required: false
543
- schema:
544
- type: string
545
738
  requestBody:
546
739
  description: SQL statement to execute
547
740
  required: true
@@ -552,6 +745,9 @@ paths:
552
745
  properties:
553
746
  sqlStatement:
554
747
  type: string
748
+ options:
749
+ type: string
750
+ description: Options
555
751
  responses:
556
752
  "200":
557
753
  description: Query execution results
@@ -565,6 +761,9 @@ paths:
565
761
  $ref: "#/components/responses/NotFound"
566
762
  "500":
567
763
  $ref: "#/components/responses/InternalServerError"
764
+ "503":
765
+ $ref: "#/components/responses/ServiceUnavailable"
766
+
568
767
  /projects/{projectName}/connections/{connectionName}/sqlTemporaryTable:
569
768
  post:
570
769
  tags:
@@ -610,6 +809,8 @@ paths:
610
809
  $ref: "#/components/responses/NotFound"
611
810
  "500":
612
811
  $ref: "#/components/responses/InternalServerError"
812
+ "503":
813
+ $ref: "#/components/responses/ServiceUnavailable"
613
814
 
614
815
  # TODO: Remove this endpoint.
615
816
  /projects/{projectName}/connections/{connectionName}/temporaryTable:
@@ -657,57 +858,8 @@ paths:
657
858
  $ref: "#/components/responses/NotFound"
658
859
  "500":
659
860
  $ref: "#/components/responses/InternalServerError"
660
-
661
- # TODO: Remove this endpoint. This is deprecated and replaced by /projects/{projectName}/connections/{connectionName}/table resource.
662
- /projects/{projectName}/connections/{connectionName}/tableSource:
663
- get:
664
- tags:
665
- - connections
666
- operationId: get-tablesource
667
- summary: Get table source information
668
- deprecated: true
669
- description: |
670
- Retrieves information about a specific table or view from the database connection.
671
- This includes table schema, column definitions, and metadata. The table can be specified
672
- by either tableKey or tablePath parameters, depending on the database type.
673
- parameters:
674
- - name: projectName
675
- in: path
676
- description: Name of the project
677
- required: true
678
- schema:
679
- $ref: "#/components/schemas/IdentifierPattern"
680
- - name: connectionName
681
- in: path
682
- description: Name of the connection
683
- required: true
684
- schema:
685
- $ref: "#/components/schemas/IdentifierPattern"
686
- - name: tableKey
687
- in: query
688
- description: Table key
689
- required: false
690
- schema:
691
- type: string
692
- - name: tablePath
693
- in: query
694
- description: Table path
695
- required: false
696
- schema:
697
- type: string
698
- responses:
699
- "200":
700
- description: Table source information
701
- content:
702
- application/json:
703
- schema:
704
- $ref: "#/components/schemas/TableSource"
705
- "401":
706
- $ref: "#/components/responses/Unauthorized"
707
- "404":
708
- $ref: "#/components/responses/NotFound"
709
- "500":
710
- $ref: "#/components/responses/InternalServerError"
861
+ "503":
862
+ $ref: "#/components/responses/ServiceUnavailable"
711
863
 
712
864
  # TODO: Remove this endpoint.
713
865
  /projects/{projectName}/connections/{connectionName}/queryData:
@@ -794,6 +946,8 @@ paths:
794
946
  $ref: "#/components/responses/InternalServerError"
795
947
  "501":
796
948
  $ref: "#/components/responses/NotImplemented"
949
+ "503":
950
+ $ref: "#/components/responses/ServiceUnavailable"
797
951
  post:
798
952
  tags:
799
953
  - packages
@@ -810,6 +964,16 @@ paths:
810
964
  required: true
811
965
  schema:
812
966
  $ref: "#/components/schemas/IdentifierPattern"
967
+ - name: autoLoadManifest
968
+ in: query
969
+ description: |
970
+ When true, automatically loads any existing build manifest
971
+ for the package so materialized table references resolve immediately.
972
+ Defaults to false.
973
+ required: false
974
+ schema:
975
+ type: boolean
976
+ default: false
813
977
  requestBody:
814
978
  required: true
815
979
  content:
@@ -829,6 +993,8 @@ paths:
829
993
  $ref: "#/components/responses/InternalServerError"
830
994
  "501":
831
995
  $ref: "#/components/responses/NotImplemented"
996
+ "503":
997
+ $ref: "#/components/responses/ServiceUnavailable"
832
998
 
833
999
  /projects/{projectName}/packages/{packageName}:
834
1000
  get:
@@ -881,6 +1047,8 @@ paths:
881
1047
  $ref: "#/components/responses/InternalServerError"
882
1048
  "501":
883
1049
  $ref: "#/components/responses/NotImplemented"
1050
+ "503":
1051
+ $ref: "#/components/responses/ServiceUnavailable"
884
1052
  patch:
885
1053
  tags:
886
1054
  - packages
@@ -924,6 +1092,8 @@ paths:
924
1092
  $ref: "#/components/responses/InternalServerError"
925
1093
  "501":
926
1094
  $ref: "#/components/responses/NotImplemented"
1095
+ "503":
1096
+ $ref: "#/components/responses/ServiceUnavailable"
927
1097
  delete:
928
1098
  tags:
929
1099
  - packages
@@ -961,6 +1131,8 @@ paths:
961
1131
  $ref: "#/components/responses/InternalServerError"
962
1132
  "501":
963
1133
  $ref: "#/components/responses/NotImplemented"
1134
+ "503":
1135
+ $ref: "#/components/responses/ServiceUnavailable"
964
1136
 
965
1137
  /projects/{projectName}/packages/{packageName}/models:
966
1138
  get:
@@ -1008,6 +1180,8 @@ paths:
1008
1180
  $ref: "#/components/responses/InternalServerError"
1009
1181
  "501":
1010
1182
  $ref: "#/components/responses/NotImplemented"
1183
+ "503":
1184
+ $ref: "#/components/responses/ServiceUnavailable"
1011
1185
 
1012
1186
  /projects/{projectName}/packages/{packageName}/models/{path}:
1013
1187
  get:
@@ -1115,6 +1289,62 @@ paths:
1115
1289
  $ref: "#/components/responses/InternalServerError"
1116
1290
  "501":
1117
1291
  $ref: "#/components/responses/NotImplemented"
1292
+ "503":
1293
+ $ref: "#/components/responses/ServiceUnavailable"
1294
+
1295
+ /projects/{projectName}/packages/{packageName}/models/{path}/compile:
1296
+ post:
1297
+ tags:
1298
+ - models
1299
+ operationId: compile-model-source
1300
+ summary: Compile Malloy source code
1301
+ description: |
1302
+ Compiles Malloy source code in the context of a specific model file.
1303
+ The submitted source is appended to the full model content, giving it
1304
+ access to all sources, imports, and queries defined in the model.
1305
+ Relative imports resolve correctly against sibling model files.
1306
+ Returns compilation status and any problems (errors or warnings) found.
1307
+ parameters:
1308
+ - name: projectName
1309
+ in: path
1310
+ description: Name of the project
1311
+ required: true
1312
+ schema:
1313
+ $ref: "#/components/schemas/IdentifierPattern"
1314
+ - name: packageName
1315
+ in: path
1316
+ description: Name of the package
1317
+ required: true
1318
+ schema:
1319
+ type: string
1320
+ - name: path
1321
+ in: path
1322
+ description: Path to the model within the package (used to resolve relative
1323
+ imports)
1324
+ required: true
1325
+ schema:
1326
+ $ref: "#/components/schemas/PathPattern"
1327
+ requestBody:
1328
+ required: true
1329
+ content:
1330
+ application/json:
1331
+ schema:
1332
+ $ref: "#/components/schemas/CompileRequest"
1333
+ responses:
1334
+ "200":
1335
+ description: Compilation result with status and any problems
1336
+ content:
1337
+ application/json:
1338
+ schema:
1339
+ $ref: "#/components/schemas/CompileResult"
1340
+ "400":
1341
+ $ref: "#/components/responses/BadRequest"
1342
+ "404":
1343
+ $ref: "#/components/responses/NotFound"
1344
+ "500":
1345
+ $ref: "#/components/responses/InternalServerError"
1346
+ "503":
1347
+ $ref: "#/components/responses/ServiceUnavailable"
1118
1348
 
1119
1349
  /projects/{projectName}/packages/{packageName}/notebooks:
1120
1350
  get:
@@ -1162,19 +1392,18 @@ paths:
1162
1392
  $ref: "#/components/responses/InternalServerError"
1163
1393
  "501":
1164
1394
  $ref: "#/components/responses/NotImplemented"
1395
+ "503":
1396
+ $ref: "#/components/responses/ServiceUnavailable"
1165
1397
 
1166
- # TODO: Notebooks should return the notebook file content, not the compiled notebook. The front end shoould
1167
- # run the individual notebook cells against the backend.
1168
1398
  /projects/{projectName}/packages/{packageName}/notebooks/{path}:
1169
1399
  get:
1170
1400
  tags:
1171
1401
  - notebooks
1172
1402
  operationId: get-notebook
1173
- summary: Get compiled Malloy notebook
1403
+ summary: Get Malloy notebook cells
1174
1404
  description: |
1175
- Retrieves a compiled Malloy notebook with its cells, results, and metadata. The notebook
1176
- is compiled using the specified version of the Malloy compiler. This endpoint provides
1177
- access to the notebook's structure, cells, and execution results for use in applications.
1405
+ Retrieves a Malloy notebook with its raw cell contents (markdown and code).
1406
+ Cell execution should be done separately via the execute-notebook-cell endpoint.
1178
1407
  parameters:
1179
1408
  - name: projectName
1180
1409
  in: path
@@ -1202,11 +1431,11 @@ paths:
1202
1431
  $ref: "#/components/schemas/VersionIdPattern"
1203
1432
  responses:
1204
1433
  "200":
1205
- description: A Malloy notebook.
1434
+ description: A Malloy notebook with raw cell contents.
1206
1435
  content:
1207
1436
  "application/json":
1208
1437
  schema:
1209
- $ref: "#/components/schemas/CompiledNotebook"
1438
+ $ref: "#/components/schemas/RawNotebook"
1210
1439
  "401":
1211
1440
  $ref: "#/components/responses/Unauthorized"
1212
1441
  "404":
@@ -1216,6 +1445,82 @@ paths:
1216
1445
  "501":
1217
1446
  $ref: "#/components/responses/NotImplemented"
1218
1447
 
1448
+ /projects/{projectName}/packages/{packageName}/notebooks/{path}/cells/{cellIndex}:
1449
+ get:
1450
+ tags:
1451
+ - notebooks
1452
+ operationId: execute-notebook-cell
1453
+ summary: Execute a specific notebook cell
1454
+ description: |
1455
+ Executes a specific cell in a Malloy notebook by index. For code cells, this compiles
1456
+ and runs the Malloy code, returning query results and any new sources defined.
1457
+ For markdown cells, this simply returns the cell content.
1458
+ parameters:
1459
+ - name: projectName
1460
+ in: path
1461
+ description: Name of the project
1462
+ required: true
1463
+ schema:
1464
+ $ref: "#/components/schemas/IdentifierPattern"
1465
+ - name: packageName
1466
+ in: path
1467
+ description: Name of the package
1468
+ required: true
1469
+ schema:
1470
+ type: string
1471
+ - name: path
1472
+ in: path
1473
+ description: Path to notebook within the package
1474
+ required: true
1475
+ schema:
1476
+ type: string
1477
+ - name: cellIndex
1478
+ in: path
1479
+ description: Index of the cell to execute (0-based)
1480
+ required: true
1481
+ schema:
1482
+ type: integer
1483
+ - name: versionId
1484
+ in: query
1485
+ description: Version identifier for the package
1486
+ required: false
1487
+ schema:
1488
+ $ref: "#/components/schemas/VersionIdPattern"
1489
+ - name: filter_params
1490
+ in: query
1491
+ description: JSON-encoded filter parameter values keyed by filter name
1492
+ required: false
1493
+ schema:
1494
+ type: string
1495
+ - name: bypass_filters
1496
+ in: query
1497
+ description: When true, skip filter injection entirely
1498
+ required: false
1499
+ schema:
1500
+ type: string
1501
+ enum:
1502
+ - "true"
1503
+ - "false"
1504
+ responses:
1505
+ "200":
1506
+ description: Cell execution result
1507
+ content:
1508
+ "application/json":
1509
+ schema:
1510
+ $ref: "#/components/schemas/NotebookCellResult"
1511
+ "400":
1512
+ $ref: "#/components/responses/BadRequest"
1513
+ "401":
1514
+ $ref: "#/components/responses/Unauthorized"
1515
+ "404":
1516
+ $ref: "#/components/responses/NotFound"
1517
+ "500":
1518
+ $ref: "#/components/responses/InternalServerError"
1519
+ "501":
1520
+ $ref: "#/components/responses/NotImplemented"
1521
+ "503":
1522
+ $ref: "#/components/responses/ServiceUnavailable"
1523
+
1219
1524
  /projects/{projectName}/packages/{packageName}/databases:
1220
1525
  get:
1221
1526
  tags:
@@ -1262,6 +1567,8 @@ paths:
1262
1567
  $ref: "#/components/responses/InternalServerError"
1263
1568
  "501":
1264
1569
  $ref: "#/components/responses/NotImplemented"
1570
+ "503":
1571
+ $ref: "#/components/responses/ServiceUnavailable"
1265
1572
 
1266
1573
  /connections/test:
1267
1574
  post:
@@ -1295,6 +1602,8 @@ paths:
1295
1602
  $ref: "#/components/responses/NotFound"
1296
1603
  "500":
1297
1604
  $ref: "#/components/responses/InternalServerError"
1605
+ "503":
1606
+ $ref: "#/components/responses/ServiceUnavailable"
1298
1607
 
1299
1608
  /watch-mode/status:
1300
1609
  get:
@@ -1317,6 +1626,8 @@ paths:
1317
1626
  $ref: "#/components/responses/Unauthorized"
1318
1627
  "500":
1319
1628
  $ref: "#/components/responses/InternalServerError"
1629
+ "503":
1630
+ $ref: "#/components/responses/ServiceUnavailable"
1320
1631
 
1321
1632
  /watch-mode/start:
1322
1633
  post:
@@ -1341,6 +1652,8 @@ paths:
1341
1652
  $ref: "#/components/responses/Unauthorized"
1342
1653
  "500":
1343
1654
  $ref: "#/components/responses/InternalServerError"
1655
+ "503":
1656
+ $ref: "#/components/responses/ServiceUnavailable"
1344
1657
 
1345
1658
  /watch-mode/stop:
1346
1659
  post:
@@ -1359,11 +1672,228 @@ paths:
1359
1672
  $ref: "#/components/responses/Unauthorized"
1360
1673
  "500":
1361
1674
  $ref: "#/components/responses/InternalServerError"
1675
+ "503":
1676
+ $ref: "#/components/responses/ServiceUnavailable"
1677
+
1678
+ /projects/{projectName}/packages/{packageName}/materializations:
1679
+ post:
1680
+ tags:
1681
+ - materializations
1682
+ operationId: create-materialization
1683
+ summary: Create a materialization
1684
+ description: |
1685
+ Creates a new materialization in PENDING state for all persist sources across all
1686
+ models in the package. Use POST .../materializations/{materializationId}?action=start to begin execution.
1687
+ parameters:
1688
+ - $ref: "#/components/parameters/projectName"
1689
+ - $ref: "#/components/parameters/packageName"
1690
+ requestBody:
1691
+ content:
1692
+ application/json:
1693
+ schema:
1694
+ $ref: "#/components/schemas/CreateMaterializationRequest"
1695
+ responses:
1696
+ "201":
1697
+ description: Materialization created
1698
+ content:
1699
+ application/json:
1700
+ schema:
1701
+ $ref: "#/components/schemas/Materialization"
1702
+ "404":
1703
+ $ref: "#/components/responses/NotFound"
1704
+ "409":
1705
+ description: Package already has an active materialization
1706
+ content:
1707
+ application/json:
1708
+ schema:
1709
+ $ref: "#/components/schemas/Error"
1710
+ get:
1711
+ tags:
1712
+ - materializations
1713
+ operationId: list-materializations
1714
+ summary: List materializations for a package
1715
+ description: Returns the materialization history for the package, ordered by
1716
+ most recent first.
1717
+ parameters:
1718
+ - $ref: "#/components/parameters/projectName"
1719
+ - $ref: "#/components/parameters/packageName"
1720
+ - name: limit
1721
+ in: query
1722
+ required: false
1723
+ schema:
1724
+ type: integer
1725
+ minimum: 1
1726
+ description: Maximum number of materializations to return
1727
+ - name: offset
1728
+ in: query
1729
+ required: false
1730
+ schema:
1731
+ type: integer
1732
+ minimum: 0
1733
+ description: Number of materializations to skip
1734
+ responses:
1735
+ "200":
1736
+ description: List of materializations
1737
+ content:
1738
+ application/json:
1739
+ schema:
1740
+ type: array
1741
+ items:
1742
+ $ref: "#/components/schemas/Materialization"
1743
+ "404":
1744
+ $ref: "#/components/responses/NotFound"
1745
+
1746
+ /projects/{projectName}/packages/{packageName}/materializations/{materializationId}:
1747
+ get:
1748
+ tags:
1749
+ - materializations
1750
+ operationId: get-materialization
1751
+ summary: Get a specific materialization
1752
+ parameters:
1753
+ - $ref: "#/components/parameters/projectName"
1754
+ - $ref: "#/components/parameters/packageName"
1755
+ - $ref: "#/components/parameters/materializationId"
1756
+ responses:
1757
+ "200":
1758
+ description: Materialization details
1759
+ content:
1760
+ application/json:
1761
+ schema:
1762
+ $ref: "#/components/schemas/Materialization"
1763
+ "404":
1764
+ $ref: "#/components/responses/NotFound"
1765
+ post:
1766
+ tags:
1767
+ - materializations
1768
+ operationId: materialization-action
1769
+ summary: Perform an action on a materialization
1770
+ description: |
1771
+ Performs an action on a materialization. The action is specified via
1772
+ the `action` query parameter:
1773
+ * `start` - Transitions a PENDING materialization to RUNNING and begins execution in the background. Returns 202.
1774
+ * `stop` - Cancels a PENDING or RUNNING materialization. Returns 200.
1775
+ parameters:
1776
+ - $ref: "#/components/parameters/projectName"
1777
+ - $ref: "#/components/parameters/packageName"
1778
+ - $ref: "#/components/parameters/materializationId"
1779
+ - name: action
1780
+ in: query
1781
+ required: true
1782
+ schema:
1783
+ type: string
1784
+ enum:
1785
+ - start
1786
+ - stop
1787
+ description: Action to perform on the materialization
1788
+ responses:
1789
+ "200":
1790
+ description: Materialization cancelled (action=stop)
1791
+ content:
1792
+ application/json:
1793
+ schema:
1794
+ $ref: "#/components/schemas/Materialization"
1795
+ "202":
1796
+ description: Materialization started (action=start)
1797
+ content:
1798
+ application/json:
1799
+ schema:
1800
+ $ref: "#/components/schemas/Materialization"
1801
+ "400":
1802
+ $ref: "#/components/responses/BadRequest"
1803
+ "404":
1804
+ $ref: "#/components/responses/NotFound"
1805
+ "409":
1806
+ description: Materialization cannot transition to the requested state
1807
+ content:
1808
+ application/json:
1809
+ schema:
1810
+ $ref: "#/components/schemas/Error"
1811
+ delete:
1812
+ tags:
1813
+ - materializations
1814
+ operationId: delete-materialization
1815
+ summary: Delete a materialization
1816
+ description: Deletes a terminal (SUCCESS, FAILED, or CANCELLED) materialization
1817
+ record.
1818
+ parameters:
1819
+ - $ref: "#/components/parameters/projectName"
1820
+ - $ref: "#/components/parameters/packageName"
1821
+ - $ref: "#/components/parameters/materializationId"
1822
+ responses:
1823
+ "204":
1824
+ description: Materialization deleted
1825
+ "404":
1826
+ $ref: "#/components/responses/NotFound"
1827
+ "409":
1828
+ description: Materialization cannot be deleted (PENDING or RUNNING)
1829
+ content:
1830
+ application/json:
1831
+ schema:
1832
+ $ref: "#/components/schemas/Error"
1833
+
1834
+ /projects/{projectName}/packages/{packageName}/manifest:
1835
+ get:
1836
+ tags:
1837
+ - manifests
1838
+ operationId: get-manifest
1839
+ summary: Get the build manifest for a package
1840
+ description: |
1841
+ Returns the current build manifest containing buildId-to-tableName mappings
1842
+ for all materialized sources in the package.
1843
+ parameters:
1844
+ - $ref: "#/components/parameters/projectName"
1845
+ - $ref: "#/components/parameters/packageName"
1846
+ responses:
1847
+ "200":
1848
+ description: Build manifest
1849
+ content:
1850
+ application/json:
1851
+ schema:
1852
+ $ref: "#/components/schemas/BuildManifest"
1853
+ "404":
1854
+ $ref: "#/components/responses/NotFound"
1855
+ post:
1856
+ tags:
1857
+ - manifests
1858
+ operationId: manifest-action
1859
+ summary: Perform an action on the package manifest
1860
+ description: |
1861
+ Performs an action on the package manifest. The action is specified via
1862
+ the `action` query parameter:
1863
+ * `reload` - Reads the build manifest from the shared store (DuckLake
1864
+ in orchestrated mode, local DuckDB in standalone mode) and recompiles
1865
+ every model in the package so subsequent queries resolve persisted
1866
+ sources to their materialized tables. Intended for orchestrated
1867
+ workers that did not themselves run the build; the endpoint does
1868
+ not write anything *into* storage.
1869
+ parameters:
1870
+ - $ref: "#/components/parameters/projectName"
1871
+ - $ref: "#/components/parameters/packageName"
1872
+ - name: action
1873
+ in: query
1874
+ required: true
1875
+ schema:
1876
+ type: string
1877
+ enum:
1878
+ - reload
1879
+ description: Action to perform on the manifest
1880
+ responses:
1881
+ "200":
1882
+ description: Manifest loaded
1883
+ content:
1884
+ application/json:
1885
+ schema:
1886
+ $ref: "#/components/schemas/BuildManifest"
1887
+ "400":
1888
+ $ref: "#/components/responses/BadRequest"
1889
+ "404":
1890
+ $ref: "#/components/responses/NotFound"
1362
1891
 
1363
1892
  components:
1364
1893
  responses:
1365
1894
  BadRequest:
1366
- description: The request was malformed or cannot be performed given the current state of the system
1895
+ description: The request was malformed or cannot be performed given the current
1896
+ state of the system
1367
1897
  content:
1368
1898
  application/json:
1369
1899
  schema:
@@ -1404,6 +1934,13 @@ components:
1404
1934
  application/json:
1405
1935
  schema:
1406
1936
  $ref: "#/components/schemas/Error"
1937
+ ServiceUnavailable:
1938
+ description: The service is temporarily unavailable, typically due to
1939
+ initialization, or draining state (Rolling updates, etc.)
1940
+ content:
1941
+ application/json:
1942
+ schema:
1943
+ $ref: "#/components/schemas/Error"
1407
1944
 
1408
1945
  schemas:
1409
1946
  IdentifierPattern:
@@ -1436,10 +1973,22 @@ components:
1436
1973
  initialized:
1437
1974
  type: boolean
1438
1975
  description: Whether the server is fully initialized and ready to serve requests
1976
+ operationalState:
1977
+ type: string
1978
+ enum: [ "initializing", "serving", "draining" ]
1979
+ description: Status of the server; initializing when the server is loading
1980
+ projects, packages and connections, serving when the server is
1981
+ initialized and ready to serve requests, and draining when the
1982
+ server is going to shut down
1983
+ frozenConfig:
1984
+ type: boolean
1985
+ description: Whether the server configuration is frozen (read-only mode). When
1986
+ true, all mutation operations are disabled.
1439
1987
 
1440
1988
  Project:
1441
1989
  type: object
1442
- description: Represents a Malloy project containing packages, connections, and other resources
1990
+ description: Represents a Malloy project containing packages, connections, and
1991
+ other resources
1443
1992
  properties:
1444
1993
  resource:
1445
1994
  type: string
@@ -1452,7 +2001,8 @@ components:
1452
2001
  description: Project README content
1453
2002
  location:
1454
2003
  type: string
1455
- description: Project location, can be an absolute path or URI (e.g. github, s3, gcs, etc.)
2004
+ description: Project location, can be an absolute path or URI (e.g. github, s3,
2005
+ gcs, etc.)
1456
2006
  connections:
1457
2007
  type: array
1458
2008
  description: List of database connections configured for this project
@@ -1463,10 +2013,24 @@ components:
1463
2013
  description: List of Malloy packages in this project
1464
2014
  items:
1465
2015
  $ref: "#/components/schemas/Package"
2016
+ materializationStorage:
2017
+ type: object
2018
+ nullable: true
2019
+ description: Optional DuckLake-backed storage for materialization manifests
2020
+ (orchestrated mode). When set, manifests are stored in a shared
2021
+ DuckLake catalog instead of the local DuckDB database.
2022
+ properties:
2023
+ catalogUrl:
2024
+ type: string
2025
+ description: PostgreSQL connection URL for the DuckLake catalog metadata store
2026
+ dataPath:
2027
+ type: string
2028
+ description: Cloud storage path (s3:// or gs://) for DuckLake data files
1466
2029
 
1467
2030
  Package:
1468
2031
  type: object
1469
- description: Represents a Malloy package containing models, notebooks, and embedded databases
2032
+ description: Represents a Malloy package containing models, notebooks, and
2033
+ embedded databases
1470
2034
  properties:
1471
2035
  resource:
1472
2036
  type: string
@@ -1479,7 +2043,8 @@ components:
1479
2043
  description: Package description
1480
2044
  location:
1481
2045
  type: string
1482
- description: Package location, can be an absolute path or URI (e.g. github, s3, gcs, etc.)
2046
+ description: Package location, can be an absolute path or URI (e.g. github, s3,
2047
+ gcs, etc.)
1483
2048
 
1484
2049
  Model:
1485
2050
  type: object
@@ -1515,9 +2080,9 @@ components:
1515
2080
  type: string
1516
2081
  description: Error message if the notebook failed to compile or load
1517
2082
 
1518
- CompiledNotebook:
2083
+ RawNotebook:
1519
2084
  type: object
1520
- description: Compiled Malloy notebook with cells, results, and execution data
2085
+ description: Raw Malloy notebook with unexecuted cell contents
1521
2086
  properties:
1522
2087
  resource:
1523
2088
  type: string
@@ -1533,9 +2098,19 @@ components:
1533
2098
  description: Version of the Malloy compiler used to generate the notebook data
1534
2099
  notebookCells:
1535
2100
  type: array
1536
- description: Array of notebook cells containing code, markdown, and execution results
2101
+ description: Array of notebook cells containing raw markdown and code content
1537
2102
  items:
1538
2103
  $ref: "#/components/schemas/NotebookCell"
2104
+ annotations:
2105
+ type: array
2106
+ description: Array of file-level (##) annotations attached to the notebook
2107
+ items:
2108
+ type: string
2109
+ sources:
2110
+ type: array
2111
+ description: Sources defined in the notebook's model
2112
+ items:
2113
+ $ref: "#/components/schemas/Source"
1539
2114
 
1540
2115
  CompiledModel:
1541
2116
  type: object
@@ -1558,7 +2133,8 @@ components:
1558
2133
  description: JSON string containing model metadata and structure information
1559
2134
  sourceInfos:
1560
2135
  type: array
1561
- description: Array of JSON strings containing source information for each data source
2136
+ description: Array of JSON strings containing source information for each data
2137
+ source
1562
2138
  items:
1563
2139
  type: string
1564
2140
  queries:
@@ -1566,6 +2142,11 @@ components:
1566
2142
  description: Array of named queries defined in the model
1567
2143
  items:
1568
2144
  $ref: "#/components/schemas/Query"
2145
+ sources:
2146
+ type: array
2147
+ description: Sources defined in this model
2148
+ items:
2149
+ $ref: "#/components/schemas/Source"
1569
2150
 
1570
2151
  View:
1571
2152
  type: object
@@ -1596,22 +2177,99 @@ components:
1596
2177
  items:
1597
2178
  type: string
1598
2179
 
2180
+ Filter:
2181
+ type: object
2182
+ description: A filter declared via #(filter) annotation on a Malloy source
2183
+ properties:
2184
+ name:
2185
+ type: string
2186
+ description: Display name of the filter
2187
+ dimension:
2188
+ type: string
2189
+ description: Dimension this filter targets
2190
+ type:
2191
+ type: string
2192
+ description: Comparator type
2193
+ enum:
2194
+ - equal
2195
+ - in
2196
+ - like
2197
+ - greater_than
2198
+ - less_than
2199
+ implicit:
2200
+ type: boolean
2201
+ description: Whether this filter is hidden from users
2202
+ required:
2203
+ type: boolean
2204
+ description: Whether a value must be provided
2205
+ dimensionType:
2206
+ type: string
2207
+ description: Malloy data type of the dimension (e.g. string, number, boolean,
2208
+ date, timestamp)
2209
+
2210
+ Source:
2211
+ type: object
2212
+ description: A Malloy source defined in a model
2213
+ properties:
2214
+ name:
2215
+ type: string
2216
+ description: Name of the source
2217
+ annotations:
2218
+ type: array
2219
+ description: Annotations attached to the source
2220
+ items:
2221
+ type: string
2222
+ views:
2223
+ type: array
2224
+ description: Views defined in this source
2225
+ items:
2226
+ $ref: "#/components/schemas/View"
2227
+ filters:
2228
+ type: array
2229
+ description: Filters declared on this source via #(filter) annotations
2230
+ items:
2231
+ $ref: "#/components/schemas/Filter"
2232
+
1599
2233
  QueryRequest:
1600
2234
  type: object
1601
2235
  description: Request body for executing a Malloy query
1602
2236
  properties:
1603
2237
  query:
1604
2238
  type: string
1605
- description: Query string to execute on the model. If the query parameter is set, the queryName parameter must be empty.
2239
+ description: Query string to execute on the model. If the query parameter is
2240
+ set, the queryName parameter must be empty.
1606
2241
  sourceName:
1607
2242
  type: string
1608
- description: Name of the source in the model to use for queryName, search, and topValue requests.
2243
+ description: Name of the source in the model to use for queryName, search, and
2244
+ topValue requests.
1609
2245
  queryName:
1610
2246
  type: string
1611
- description: Name of a query to execute on a source in the model. Requires the sourceName parameter is set. If the queryName parameter is set, the query parameter must be empty.
2247
+ description: Name of a query to execute on a source in the model. Requires the
2248
+ sourceName parameter is set. If the queryName parameter is set, the
2249
+ query parameter must be empty.
2250
+ compactJson:
2251
+ type: boolean
2252
+ default: false
2253
+ description: "If true, returns a simple JSON array of row objects in the form
2254
+ {\"columnName\": value}. If false (default), returns the full Malloy
2255
+ result with type metadata for rendering."
1612
2256
  versionId:
1613
2257
  type: string
1614
2258
  description: Version ID
2259
+ filterParams:
2260
+ type: object
2261
+ description: Filter parameter values keyed by filter name. Used with sources
2262
+ that declare #(filter) annotations.
2263
+ additionalProperties:
2264
+ oneOf:
2265
+ - type: string
2266
+ - type: array
2267
+ items:
2268
+ type: string
2269
+ bypassFilters:
2270
+ type: boolean
2271
+ default: false
2272
+ description: When true, skip server-side #(filter) injection entirely.
1615
2273
 
1616
2274
  NotebookCell:
1617
2275
  type: object
@@ -1619,7 +2277,29 @@ components:
1619
2277
  properties:
1620
2278
  type:
1621
2279
  type: string
1622
- enum: ["markdown", "code"]
2280
+ enum: [ "markdown", "code" ]
2281
+ description: Type of notebook cell
2282
+ text:
2283
+ type: string
2284
+ description: Text contents of the notebook cell (either markdown or Malloy code)
2285
+ newSources:
2286
+ type: array
2287
+ description: Array of JSON strings containing SourceInfo objects made available
2288
+ in this cell
2289
+ items:
2290
+ type: string
2291
+ queryInfo:
2292
+ type: string
2293
+ description: JSON string containing QueryInfo object for the query in this cell
2294
+ (if the cell contains a query)
2295
+
2296
+ NotebookCellResult:
2297
+ type: object
2298
+ description: Result of executing a notebook cell
2299
+ properties:
2300
+ type:
2301
+ type: string
2302
+ enum: [ "markdown", "code" ]
1623
2303
  description: Type of notebook cell
1624
2304
  text:
1625
2305
  type: string
@@ -1629,7 +2309,8 @@ components:
1629
2309
  description: JSON string containing the execution result for this cell
1630
2310
  newSources:
1631
2311
  type: array
1632
- description: Array of JSON strings containing SourceInfo objects made available in this cell
2312
+ description: Array of JSON strings containing SourceInfo objects made available
2313
+ in this cell
1633
2314
  items:
1634
2315
  type: string
1635
2316
 
@@ -1639,10 +2320,50 @@ components:
1639
2320
  properties:
1640
2321
  result:
1641
2322
  type: string
1642
- description: JSON string containing the query results, metadata, and execution information
2323
+ description: JSON string containing the query results, metadata, and execution
2324
+ information
1643
2325
  resource:
1644
2326
  type: string
1645
2327
  description: Resource path to the query result
2328
+ renderLogs:
2329
+ type: array
2330
+ description: Render tag validation messages (errors, warnings) detected during
2331
+ query preparation
2332
+ items:
2333
+ $ref: "#/components/schemas/LogMessage"
2334
+
2335
+ LogMessage:
2336
+ type: object
2337
+ description: A log message from render tag validation
2338
+ properties:
2339
+ url:
2340
+ type: string
2341
+ description: URL of the source file related to this message
2342
+ range:
2343
+ type: object
2344
+ description: Source location range for this message
2345
+ properties:
2346
+ start:
2347
+ type: object
2348
+ properties:
2349
+ line:
2350
+ type: integer
2351
+ character:
2352
+ type: integer
2353
+ end:
2354
+ type: object
2355
+ properties:
2356
+ line:
2357
+ type: integer
2358
+ character:
2359
+ type: integer
2360
+ severity:
2361
+ type: string
2362
+ description: Severity level of the log message
2363
+ enum: [ "debug", "info", "warn", "error" ]
2364
+ message:
2365
+ type: string
2366
+ description: Human-readable log message
1646
2367
 
1647
2368
  Database:
1648
2369
  type: object
@@ -1659,7 +2380,7 @@ components:
1659
2380
  type:
1660
2381
  type: string
1661
2382
  description: Type of embedded database
1662
- enum: ["embedded", "materialized"]
2383
+ enum: [ "embedded", "materialized" ]
1663
2384
 
1664
2385
  Schema:
1665
2386
  description: A schema name in a Connection.
@@ -1692,7 +2413,16 @@ components:
1692
2413
  type: string
1693
2414
  description: Type of database connection
1694
2415
  enum:
1695
- [postgres, bigquery, snowflake, trino, mysql, duckdb, motherduck]
2416
+ [
2417
+ postgres,
2418
+ bigquery,
2419
+ snowflake,
2420
+ trino,
2421
+ mysql,
2422
+ duckdb,
2423
+ motherduck,
2424
+ ducklake,
2425
+ ]
1696
2426
  attributes:
1697
2427
  $ref: "#/components/schemas/ConnectionAttributes"
1698
2428
  postgresConnection:
@@ -1709,6 +2439,8 @@ components:
1709
2439
  $ref: "#/components/schemas/DuckdbConnection"
1710
2440
  motherduckConnection:
1711
2441
  $ref: "#/components/schemas/MotherDuckConnection"
2442
+ ducklakeConnection:
2443
+ $ref: "#/components/schemas/DucklakeConnection"
1712
2444
 
1713
2445
  ConnectionAttributes:
1714
2446
  type: object
@@ -1748,7 +2480,8 @@ components:
1748
2480
  description: PostgreSQL password for authentication
1749
2481
  connectionString:
1750
2482
  type: string
1751
- description: Complete PostgreSQL connection string (alternative to individual parameters)
2483
+ description: Complete PostgreSQL connection string (alternative to individual
2484
+ parameters)
1752
2485
 
1753
2486
  MysqlConnection:
1754
2487
  type: object
@@ -1770,6 +2503,116 @@ components:
1770
2503
  type: string
1771
2504
  description: MySQL password for authentication
1772
2505
 
2506
+ GCSConnection:
2507
+ type: object
2508
+ description: Google Cloud Storage connection configuration for DuckDB
2509
+ properties:
2510
+ keyId:
2511
+ type: string
2512
+ description: GCS HMAC access key ID
2513
+ secret:
2514
+ type: string
2515
+ description: GCS HMAC secret key
2516
+ required:
2517
+ - keyId
2518
+ - secret
2519
+
2520
+ S3Connection:
2521
+ type: object
2522
+ description: AWS S3 connection configuration for DuckDB
2523
+ properties:
2524
+ accessKeyId:
2525
+ type: string
2526
+ description: AWS access key ID
2527
+ secretAccessKey:
2528
+ type: string
2529
+ description: AWS secret access key
2530
+ region:
2531
+ type: string
2532
+ description: AWS region (e.g., us-east-1)
2533
+ default: us-east-1
2534
+ endpoint:
2535
+ type: string
2536
+ description: Custom S3-compatible endpoint URL (optional, for MinIO, etc.)
2537
+ sessionToken:
2538
+ type: string
2539
+ description: AWS session token for temporary credentials (optional)
2540
+ required:
2541
+ - accessKeyId
2542
+ - secretAccessKey
2543
+
2544
+ AzureConnection:
2545
+ type: object
2546
+ description: >
2547
+ Azure Data Lake Storage (ADLS Gen2) / Blob Storage connection
2548
+ configuration Supports https://, http://, abfss://, and az:// URL
2549
+ schemes.
2550
+ properties:
2551
+ authType:
2552
+ type: string
2553
+ enum: [ service_principal, sas_token ]
2554
+ description: Authentication method for Azure Storage
2555
+ sasUrl:
2556
+ type: string
2557
+ description: >
2558
+ Full SAS URL including token; required for sas_token auth. Supports
2559
+ single file, directory glob (*.ext), or recursive (**) patterns.
2560
+ Example:
2561
+ https://account.blob.core.windows.net/container/path/*.parquet?sp=rl&st=...
2562
+ tenantId:
2563
+ type: string
2564
+ description: Azure AD tenant ID (required for service_principal)
2565
+ clientId:
2566
+ type: string
2567
+ description: Azure AD application (client) ID (required for service_principal)
2568
+ clientSecret:
2569
+ type: string
2570
+ description: Azure AD client secret (required for service_principal)
2571
+ accountName:
2572
+ type: string
2573
+ description: Azure Storage account name (required for service_principal)
2574
+ fileUrl:
2575
+ type: string
2576
+ description: >
2577
+ Azure file URL to query; required for service_principal auth.
2578
+ Supports single file, directory glob (*.ext), or recursive (**)
2579
+ patterns. Example:
2580
+ https://account.blob.core.windows.net/container/path/**
2581
+ required:
2582
+ - authType
2583
+
2584
+ DucklakeConnection:
2585
+ type: object
2586
+ description: DuckLake lakehouse connection configuration
2587
+ properties:
2588
+ storage:
2589
+ type: object
2590
+ description: Data storage connection configuration (S3 or GCS)
2591
+ properties:
2592
+ bucketUrl:
2593
+ type: string
2594
+ description: URL of the storage bucket (e.g. s3://my-bucket/path or
2595
+ gs://my-bucket/path)
2596
+ s3Connection:
2597
+ $ref: "#/components/schemas/S3Connection"
2598
+ description: AWS S3 connection configuration for data storage
2599
+ gcsConnection:
2600
+ $ref: "#/components/schemas/GCSConnection"
2601
+ description: Google Cloud Storage connection configuration for data storage
2602
+ required:
2603
+ - bucketUrl
2604
+ catalog:
2605
+ type: object
2606
+ description: Catalog metadata connection configuration
2607
+ properties:
2608
+ postgresConnection:
2609
+ $ref: "#/components/schemas/PostgresConnection"
2610
+ description: PostgreSQL connection for DuckLake metadata catalog
2611
+ required:
2612
+ - postgresConnection
2613
+ required:
2614
+ - storage
2615
+ - catalog
1773
2616
  BigqueryConnection:
1774
2617
  type: object
1775
2618
  description: Google BigQuery database connection configuration
@@ -1885,7 +2728,7 @@ components:
1885
2728
  type:
1886
2729
  type: string
1887
2730
  description: Type of database connection
1888
- enum: [bigquery, snowflake, postgres]
2731
+ enum: [ bigquery, snowflake, postgres, gcs, s3, azure ]
1889
2732
  attributes:
1890
2733
  $ref: "#/components/schemas/ConnectionAttributes"
1891
2734
  bigqueryConnection:
@@ -1894,7 +2737,12 @@ components:
1894
2737
  $ref: "#/components/schemas/SnowflakeConnection"
1895
2738
  postgresConnection:
1896
2739
  $ref: "#/components/schemas/PostgresConnection"
1897
-
2740
+ gcsConnection:
2741
+ $ref: "#/components/schemas/GCSConnection"
2742
+ s3Connection:
2743
+ $ref: "#/components/schemas/S3Connection"
2744
+ azureConnection:
2745
+ $ref: "#/components/schemas/AzureConnection"
1898
2746
  # TODO: What is this? Can we remove it?
1899
2747
  SqlSource:
1900
2748
  type: object
@@ -2011,8 +2859,12 @@ components:
2011
2859
  description: Name of the project being watched for file changes
2012
2860
  watchingPath:
2013
2861
  type: string
2014
- nullable: true
2015
- description: The file system path being monitored for changes, null if not watching
2862
+ description: The file system path being monitored for changes, null if not
2863
+ watching
2864
+ required:
2865
+ - enabled
2866
+ - projectName
2867
+ - watchingPath
2016
2868
 
2017
2869
  StartWatchRequest:
2018
2870
  type: object
@@ -2031,7 +2883,159 @@ components:
2031
2883
  status:
2032
2884
  type: string
2033
2885
  description: Connection test result status
2034
- enum: ["ok", "failed"]
2886
+ enum: [ "ok", "failed" ]
2035
2887
  errorMessage:
2036
2888
  type: string
2037
2889
  description: Error message if the connection test failed, null if successful
2890
+
2891
+ CompileRequest:
2892
+ type: object
2893
+ description: Request body for compiling Malloy source code
2894
+ properties:
2895
+ source:
2896
+ type: string
2897
+ description: Malloy source code to compile
2898
+ includeSql:
2899
+ type: boolean
2900
+ default: false
2901
+ description: If true, returns the generated SQL alongside compilation results
2902
+ (only available when compilation succeeds and the source contains a
2903
+ runnable query).
2904
+ required:
2905
+ - source
2906
+
2907
+ CompileResult:
2908
+ type: object
2909
+ description: Result of a Malloy source compilation check
2910
+ properties:
2911
+ status:
2912
+ type: string
2913
+ description: Overall compilation status — "error" if any problems have error
2914
+ severity
2915
+ enum: [ "success", "error" ]
2916
+ problems:
2917
+ type: array
2918
+ description: List of compilation problems (errors and warnings)
2919
+ items:
2920
+ $ref: "#/components/schemas/CompileProblem"
2921
+ sql:
2922
+ type: string
2923
+ description: Generated SQL for the compiled query. Only present when includeSql
2924
+ is true and compilation succeeds with a runnable query.
2925
+
2926
+ CompileProblem:
2927
+ type: object
2928
+ description: A compilation problem reported by the Malloy compiler
2929
+ properties:
2930
+ message:
2931
+ type: string
2932
+ description: Human-readable problem description
2933
+ severity:
2934
+ type: string
2935
+ description: Severity level of the problem
2936
+ enum: [ "error", "warn", "debug" ]
2937
+ code:
2938
+ type: string
2939
+ description: Machine-readable error code
2940
+ at:
2941
+ type: object
2942
+ description: Source location of the problem
2943
+ properties:
2944
+ url:
2945
+ type: string
2946
+ description: URL of the source file
2947
+ range:
2948
+ type: object
2949
+ description: Character range within the source file
2950
+
2951
+ CreateMaterializationRequest:
2952
+ type: object
2953
+ description: Options for creating a materialization
2954
+ properties:
2955
+ forceRefresh:
2956
+ type: boolean
2957
+ default: false
2958
+ description: If true, forces rebuild of all sources even if their BuildID is
2959
+ unchanged
2960
+ autoLoadManifest:
2961
+ type: boolean
2962
+ default: false
2963
+ description: If true, automatically reloads the manifest into the Malloy Runtime
2964
+ after a successful materialization
2965
+
2966
+ Materialization:
2967
+ type: object
2968
+ description: A record of a package materialization
2969
+ properties:
2970
+ id:
2971
+ type: string
2972
+ projectId:
2973
+ type: string
2974
+ packageName:
2975
+ type: string
2976
+ status:
2977
+ type: string
2978
+ enum: [ "PENDING", "RUNNING", "SUCCESS", "FAILED", "CANCELLED" ]
2979
+ startedAt:
2980
+ type: [ "string", "null" ]
2981
+ format: date-time
2982
+ completedAt:
2983
+ type: [ "string", "null" ]
2984
+ format: date-time
2985
+ error:
2986
+ type: [ "string", "null" ]
2987
+ description: Error message if the materialization failed
2988
+ metadata:
2989
+ type: [ "object", "null" ]
2990
+ description: Materialization metadata including build options, source counts,
2991
+ and durations
2992
+ createdAt:
2993
+ type: string
2994
+ format: date-time
2995
+ updatedAt:
2996
+ type: string
2997
+ format: date-time
2998
+
2999
+ BuildManifest:
3000
+ type: object
3001
+ description: Manifest mapping BuildIDs to materialized table names
3002
+ properties:
3003
+ entries:
3004
+ type: object
3005
+ additionalProperties:
3006
+ $ref: "#/components/schemas/ManifestEntry"
3007
+ description: Map of BuildID to manifest entry
3008
+ strict:
3009
+ type: boolean
3010
+ description: Whether the manifest is in strict mode
3011
+
3012
+ ManifestEntry:
3013
+ type: object
3014
+ description: A single entry in the build manifest
3015
+ properties:
3016
+ tableName:
3017
+ type: string
3018
+ description: Name of the materialized table
3019
+
3020
+ parameters:
3021
+ projectName:
3022
+ name: projectName
3023
+ in: path
3024
+ required: true
3025
+ description: Name of the project
3026
+ schema:
3027
+ type: string
3028
+ packageName:
3029
+ name: packageName
3030
+ in: path
3031
+ required: true
3032
+ description: Name of the package
3033
+ schema:
3034
+ type: string
3035
+ materializationId:
3036
+ name: materializationId
3037
+ in: path
3038
+ required: true
3039
+ description: ID of the materialization
3040
+ schema:
3041
+ type: string