{"openapi":"3.1.0","info":{"title":"Lexcel Public API","description":"Public REST API for Lexcel. Authenticate with an API key: `Authorization: Bearer lxcl_live_...`.","version":"1.0.0"},"servers":[{"url":"/public"}],"paths":{"/v1/org":{"get":{"tags":["Public API - Organization"],"summary":"Get Organization","description":"Return the organization the API key belongs to.","operationId":"get_organization_v1_org_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicOrganization"}}}}}}},"/v1/workspaces":{"get":{"tags":["Public API - Workspaces"],"summary":"List Workspaces","description":"List the workspaces this API key can access.\n\nWorkspace-bound key: just its workspace. Org-scoped key: all workspaces the creator can access.","operationId":"list_workspaces_v1_workspaces_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserWorkspaceResponseSchema"},"type":"array","title":"Response List Workspaces V1 Workspaces Get"}}}}}}},"/v1/workspaces/{workspace_id}":{"get":{"tags":["Public API - Workspaces"],"summary":"Get Workspace","description":"Retrieve a single workspace by id.","operationId":"get_workspace_v1_workspaces__workspace_id__get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWorkspaceResponseSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workspaces/{workspace_id}/projects":{"get":{"tags":["Public API - Workspaces"],"summary":"List Projects","description":"List projects in a workspace.","operationId":"list_projects_v1_workspaces__workspace_id__projects_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProjectSchema"},"title":"Response List Projects V1 Workspaces  Workspace Id  Projects Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workspaces/{workspace_id}/documents":{"get":{"tags":["Public API - Documents"],"summary":"List Documents","description":"Return the workspace's directory and file tree as a flat node list.","operationId":"list_documents_v1_workspaces__workspace_id__documents_get","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentTreeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Public API - Documents"],"summary":"Upload Document","description":"Upload a document into the workspace using the same pipeline as internal uploads.\nIdempotent on file content: re-uploading identical bytes returns the existing file (workspace-scoped dedup).","operationId":"upload_document_v1_workspaces__workspace_id__documents_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}},{"name":"parent_directory_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Directory Id"}},{"name":"X-Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Idempotency-Key"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_v1_workspaces__workspace_id__documents_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/workspaces/{workspace_id}/query":{"post":{"tags":["Public API - Query"],"summary":"Ask","description":"Ask a question grounded in the workspace; returns the agent's answer with file citations.","operationId":"ask_v1_workspaces__workspace_id__query_post","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"integer","title":"Workspace Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_upload_document_v1_workspaces__workspace_id__documents_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_document_v1_workspaces__workspace_id__documents_post"},"DocumentTreeNode":{"properties":{"id":{"type":"integer","title":"Id","description":"Directory id for directories, file id for files."},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type","description":"\"directory\" or \"file\"."},"parent_directory_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Directory Id"},"file_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"File Id","description":"Set for files; use with read endpoints."}},"type":"object","required":["id","name","type"],"title":"DocumentTreeNode"},"DocumentTreeResponse":{"properties":{"workspace_id":{"type":"integer","title":"Workspace Id"},"workspace_name":{"type":"string","title":"Workspace Name"},"nodes":{"items":{"$ref":"#/components/schemas/DocumentTreeNode"},"type":"array","title":"Nodes"}},"type":"object","required":["workspace_id","workspace_name","nodes"],"title":"DocumentTreeResponse"},"DocumentUploadResponse":{"properties":{"file_id":{"type":"integer","title":"File Id"},"file_name":{"type":"string","title":"File Name"},"status":{"type":"string","title":"Status"}},"type":"object","required":["file_id","file_name","status"],"title":"DocumentUploadResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ProjectColumnSchema":{"properties":{"column_id":{"type":"integer","title":"Column Id"},"project_id":{"type":"integer","title":"Project Id"},"column_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Column Title"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"response_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Structure"},"display_order":{"type":"integer","title":"Display Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["column_id","project_id","display_order","created_at","updated_at"],"title":"ProjectColumnSchema"},"ProjectRowSchema":{"properties":{"row_id":{"type":"integer","title":"Row Id"},"project_id":{"type":"integer","title":"Project Id"},"uploaded_file_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Uploaded File Ids"},"display_order":{"type":"integer","title":"Display Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["row_id","project_id","uploaded_file_ids","display_order","created_at","updated_at"],"title":"ProjectRowSchema"},"ProjectSchema":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"workspace_id":{"type":"integer","title":"Workspace Id"},"display_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Order","default":0},"project_type":{"$ref":"#/components/schemas/ProjectType","default":"table"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"files":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Files","default":[]},"rows":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProjectRowSchema"},"type":"array"},{"type":"null"}],"title":"Rows","default":[]},"columns":{"anyOf":[{"items":{"$ref":"#/components/schemas/ProjectColumnSchema"},"type":"array"},{"type":"null"}],"title":"Columns","default":[]}},"type":"object","required":["id","name","description","workspace_id","created_at","updated_at"],"title":"ProjectSchema"},"ProjectType":{"type":"string","enum":["table","insight","memo"],"title":"ProjectType","description":"Enum for project types."},"PublicOrganization":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"Organization identifier."},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","created_at"],"title":"PublicOrganization"},"QueryRequest":{"properties":{"question":{"type":"string","minLength":1,"title":"Question","description":"Natural-language question about the workspace."}},"type":"object","required":["question"],"title":"QueryRequest"},"QueryResponse":{"properties":{"answer":{"type":"string","title":"Answer","description":"Agent answer. May contain `<<file_id = N>>` citation tags."},"citations":{"items":{"type":"integer"},"type":"array","title":"Citations","description":"File ids referenced by citation tags in the answer."}},"type":"object","required":["answer"],"title":"QueryResponse"},"UserWorkspaceResponseSchema":{"properties":{"workspace_id":{"type":"integer","title":"Workspace Id"},"owner_id":{"type":"string","format":"uuid","title":"Owner Id"},"org_id":{"type":"string","format":"uuid","title":"Org Id"},"workspace_type":{"$ref":"#/components/schemas/WorkspaceType","default":"standard"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"is_public":{"type":"boolean","title":"Is Public"},"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until"},"index_frozen":{"type":"boolean","title":"Index Frozen","default":false},"is_external":{"type":"boolean","title":"Is External","default":false},"deal":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceDealSchema"},{"type":"null"}]}},"type":"object","required":["workspace_id","owner_id","org_id","name","description","created_at","updated_at","is_public"],"title":"UserWorkspaceResponseSchema","description":"Workspace response enriched with user-relative context."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkspaceDealSchema":{"properties":{"buy_side_party":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buy Side Party"},"sell_side_party":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sell Side Party"},"target_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Name"},"project_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Project Name"},"matter_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Matter Id"}},"type":"object","title":"WorkspaceDealSchema","description":"Deal metadata for a workspace, backed by a linked `deal`-type matter. Absent when no deal matter exists."},"WorkspaceType":{"type":"string","enum":["vdr","standard"],"title":"WorkspaceType","description":"Enum for workspace types."}}}}