{"openapi":"3.1.0","info":{"title":"lqt-mailbox","version":"0.1.0","description":"Read + discovery + realtime + MCP surface. Declarative read endpoints, catalog/lineage, SSE/WebSocket streams, and POST /mcp. App-compiled reads and the optional /v1 LLM proxy are at /reference. Write/ingest/admin routes are operator-only and intentionally not listed here."},"servers":[{"url":"/"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"}}},"security":[{"bearer":[]}],"paths":{"/catalog/schemas":{"get":{"summary":"List schemas","operationId":"get_catalog_schemas","description":"User schemas in the warehouse.","parameters":[],"responses":{"200":{"description":"OK"}}}},"/catalog/schemas/{schema}/tables":{"get":{"summary":"List tables in a schema","operationId":"get_catalog_schemas__schema__tables","description":"","parameters":[{"name":"schema","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/catalog/tables/{schema}/{table}":{"get":{"summary":"Table profile","operationId":"get_catalog_tables__schema___table","description":"Columns, row estimate, provenance.","parameters":[{"name":"schema","in":"path","required":true,"schema":{"type":"string"}},{"name":"table","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/catalog/tables/{schema}/{table}/schema.json":{"get":{"summary":"Table JSON Schema","operationId":"get_catalog_tables__schema___table__schema.json","description":"","parameters":[{"name":"schema","in":"path","required":true,"schema":{"type":"string"}},{"name":"table","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/catalog/sources":{"get":{"summary":"Ingest sources","operationId":"get_catalog_sources","description":"","parameters":[],"responses":{"200":{"description":"OK"}}}},"/catalog/submitters":{"get":{"summary":"Ingest submitters","operationId":"get_catalog_submitters","description":"","parameters":[],"responses":{"200":{"description":"OK"}}}},"/catalog/lineage/runs":{"get":{"summary":"Recent ingest runs","operationId":"get_catalog_lineage_runs","description":"","parameters":[],"responses":{"200":{"description":"OK"}}}},"/catalog/lineage/run/{run_id}":{"get":{"summary":"Lineage for a run","operationId":"get_catalog_lineage_run__run_id","description":"","parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/catalog/lineage/row":{"get":{"summary":"Lineage for a row","operationId":"get_catalog_lineage_row","description":"Trace a row back to its ingest run.","parameters":[{"name":"schema","in":"query","required":true,"schema":{"type":"string"}},{"name":"table","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/profile":{"post":{"summary":"Query cost profile","operationId":"post_profile","description":"EXPLAIN-based query cost estimates for one or more planner-variant plans. Returns raw_cost, estimated_rows, and relation/index footprints per variant. The query is never executed (no ANALYZE). Same safety boundary as POST /retrieve.","parameters":[],"responses":{"200":{"description":"OK"}}}},"/blobs/{key}":{"put":{"summary":"Write blob at key","operationId":"put_blobs__key","description":"Write (overwrite) the request body bytes to the object store at the caller-supplied key (path-style, may contain '/', e.g. jobs/<id>/record.json). Body capped at blob_max_bytes. Requires the `lumilake:write` scope (or an admin scope / local API key). Returns {\"key\", \"size\"}.","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}},"delete":{"summary":"Delete blob at key","operationId":"delete_blobs__key","description":"Delete the object at the caller-supplied key (path-style, may contain '/'). Idempotent: already-absent keys succeed. Returns 204 No Content. Requires the `lumilake:write` scope (or an admin scope / local API key).","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"}}}},"/mcp":{"post":{"summary":"MCP JSON-RPC","operationId":"post_mcp","description":"Model Context Protocol (JSON-RPC 2.0, Streamable-HTTP). One tool per read endpoint; tools/list + tools/call.","parameters":[],"responses":{"200":{"description":"OK"}}}},"/usage/me":{"get":{"summary":"Your usage","operationId":"get_usage_me","description":"Calling identity's totals: total_calls, bytes_out, calls_last_24h, hourly_last_24h.","parameters":[],"responses":{"200":{"description":"OK"}}}},"/health":{"get":{"summary":"Liveness","operationId":"get_health","description":"Liveness probe.","parameters":[],"responses":{"200":{"description":"OK"}}}},"/status":{"get":{"summary":"Status board","operationId":"get_status","description":"HTML health board: DB/Redis/pool + realtime feed health + endpoint-freshness SLA.","parameters":[],"responses":{"200":{"description":"OK"}}}},"/freshness":{"get":{"summary":"Freshness (JSON)","operationId":"get_freshness","description":"Per-endpoint freshness SLA counts + per-source realtime lag.","parameters":[],"responses":{"200":{"description":"OK"}}}},"/usage":{"get":{"summary":"Usage dashboard","operationId":"get_usage","description":"Global request dashboard (all callers, aggregate).","parameters":[],"responses":{"200":{"description":"OK"}}}},"/openapi.json":{"get":{"summary":"OpenAPI document","operationId":"get_openapi.json","description":"This document.","parameters":[],"responses":{"200":{"description":"OK"}}}}}}