{"openapi":"3.1.0","info":{"title":"AnyCutlist API","version":"1.0.0","description":"Programmatic access to AnyCutlist, cutlist software for cut-and-edge shops: read customers' cutting lists, manage cut lists and boards, optimize and export.\n\n**Authentication.** Send an organization API key as `Authorization: Bearer cai_...`. Organization admins create keys in Settings, API & Connections. API access is included on the Professional and Enterprise plans.\n\n**Scopes.** Each key carries scopes; each operation lists the scopes it accepts (`x-required-scopes`, any one of them). Endpoints not listed here refuse API keys.\n\n**Limits and errors.** Each key has a per-minute limit; responses carry X-RateLimit-* headers, and a 429 carries Retry-After. Errors are JSON with `error`, usually a stable `code`, and a `requestId`.\n\n**AI agents.** A remote MCP server at https://www.anycutlist.com/api/mcp offers task-shaped tools over the same keys. See https://www.anycutlist.com/developers.","contact":{"name":"AnyCutlist","url":"https://www.anycutlist.com/contact"},"termsOfService":"https://www.anycutlist.com/terms"},"servers":[{"url":"https://www.anycutlist.com/api/v1"}],"security":[{"apiKey":[]}],"externalDocs":{"description":"Developers and AI agents","url":"https://www.anycutlist.com/developers"},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"Organization API key: cai_ followed by 32 hex characters."}},"responses":{"Error":{"description":"Refused","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"requestId":{"type":"string"}}}}}}}},"paths":{"/parse-text":{"post":{"summary":"Read a typed or pasted list with the AI reader (synchronous)","description":"Uses one AI parse credit.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","maxLength":500000},"options":{"type":"object","properties":{"defaultMaterialId":{"type":"string"},"defaultThicknessMm":{"type":"number"},"materialPalette":{"type":"array","description":"The organization's boards, so material names on the list map to catalog ids.","items":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"thickness_mm":{"type":"number"}}}},"extractMetadata":{"type":"boolean","default":true}}}}}}}},"x-required-scopes":["parse:text"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/parse-file":{"post":{"summary":"Read a photo, PDF or document","description":"Photos and PDFs need parse:image and use AI parse credits; with queue=true they return 202 with a parseJobId to poll. Spreadsheets and CSV files are not read here: send their rows to POST /parse-jobs as a table source.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"},"queue":{"type":"string","enum":["true"],"description":"Queue a photo or PDF and return 202 with parseJobId."},"materialPalette":{"type":"string","description":"JSON array of { id, name, thickness_mm }."},"edgebandPalette":{"type":"string","description":"JSON array of { id, name, thickness_mm }."},"defaultMaterialId":{"type":"string"}}}}}},"x-required-scopes":["parse:file","parse:image"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/parse":{"post":{"summary":"Parse text or an uploaded file synchronously","x-required-scopes":["parse:text","parse:file","parse:image"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/parse-jobs":{"get":{"summary":"List parse jobs","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"status","in":"query","schema":{"type":"string"}}],"x-required-scopes":["parse:text","parse:file","parse:image"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Queue a parse job","description":"A file source needs parse:file; text, table and voice sources need parse:text. Returns 201 with job.id.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source"],"properties":{"source":{"oneOf":[{"type":"object","required":["type","content"],"properties":{"type":{"const":"text"},"content":{"type":"string","minLength":1,"maxLength":500000},"format":{"enum":["free_text","csv_inline","json_inline"],"default":"free_text"}}},{"type":"object","required":["type","fileId"],"properties":{"type":{"const":"file"},"fileId":{"type":"string","format":"uuid"},"mimeType":{"type":"string"}}},{"type":"object","required":["type","headers","rows"],"description":"Rows are joined as CSV and read as text; set options.aiMode for the AI reader.","properties":{"type":{"const":"table"},"headers":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":200},"rows":{"type":"array","items":{"type":"array","items":{"type":"string"}},"minItems":1,"maxItems":10000}}},{"type":"object","required":["type","transcript"],"properties":{"type":{"const":"voice"},"transcript":{"type":"string"},"audioUrl":{"type":"string","format":"uri"}}}]},"options":{"type":"object","properties":{"aiMode":{"type":"boolean","default":false,"description":"Read with the AI reader (uses an AI parse credit)."},"defaultMaterialId":{"type":"string"},"defaultThicknessMm":{"type":"number"}}},"cutlistId":{"type":"string","format":"uuid"}}}}}},"x-required-scopes":["parse:text","parse:file","parse:image"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/parse-jobs/{id}":{"get":{"summary":"Get a parse job; parts and summary once it has finished","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["parse:text","parse:file","parse:image"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"patch":{"summary":"Retry a failed parse job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["parse:text","parse:file","parse:image"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Cancel or delete a parse job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["parse:text","parse:file","parse:image"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/cutlists":{"get":{"summary":"List cut lists","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"status","in":"query","schema":{"enum":["draft","pending","processing","completed","optimized","exported","archived"]}},{"name":"search","in":"query","schema":{"type":"string"}}],"x-required-scopes":["read:cutlists"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Create a cut list","description":"create:cutlists may create but never change or delete cut lists.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"},"status":{"enum":["draft","completed"]},"project_name":{"type":"string"},"customer_id":{"type":"string"},"file_ids":{"type":"array","items":{"type":"string"}},"parts":{"type":"array","items":{"type":"object","required":["part_id","qty","size","thickness_mm","material_id"],"properties":{"part_id":{"type":"string"},"label":{"type":"string"},"qty":{"type":"integer","minimum":1},"size":{"type":"object","required":["L","W"],"properties":{"L":{"type":"number"},"W":{"type":"number"}}},"thickness_mm":{"type":"number"},"material_id":{"type":"string"},"allow_rotation":{"type":"boolean"},"ops":{"type":"object"},"notes":{}}}}}}}}},"x-required-scopes":["write:cutlists","create:cutlists"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/cutlists/{id}":{"get":{"summary":"Get a cut list","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["read:cutlists"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"put":{"summary":"Update a cut list","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:cutlists"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Delete a cut list","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:cutlists"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/cutlists/{id}/parts":{"get":{"summary":"List a cut list's parts","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["read:parts"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Add parts","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:parts"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"patch":{"summary":"Update parts","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:parts"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Delete parts","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:parts"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/cutlists/{id}/history":{"get":{"summary":"A cut list's change history","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["read:cutlists"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/cutlists/{id}/stats":{"get":{"summary":"A cut list's totals","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["read:cutlists"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/materials":{"get":{"summary":"List boards","parameters":[{"name":"search","in":"query","schema":{"type":"string"}},{"name":"thickness","in":"query","schema":{"type":"number"}}],"x-required-scopes":["read:materials"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Add a board","x-required-scopes":["write:materials"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/materials/{id}":{"get":{"summary":"Get a board","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["read:materials"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"put":{"summary":"Update a board","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:materials"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Delete a board","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:materials"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/files":{"get":{"summary":"List uploaded files","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"x-required-scopes":["read:files"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Upload a file (multipart: file, kind)","x-required-scopes":["write:files"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/files/{id}":{"get":{"summary":"Get an uploaded file","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["read:files"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Delete an uploaded file","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:files"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/exports":{"get":{"summary":"List exports","x-required-scopes":["read:exports"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Create an export","x-required-scopes":["read:exports"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/exports/access":{"get":{"summary":"Which export formats the organization allows","x-required-scopes":["read:exports"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Check access to an export format","x-required-scopes":["read:exports"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/exports/layouts":{"get":{"summary":"Export layouts","x-required-scopes":["read:exports"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/optimize":{"post":{"summary":"Optimize a cut list's sheets","x-required-scopes":["optimize:run"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/optimize-jobs":{"get":{"summary":"List optimization jobs","x-required-scopes":["optimize:run"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/optimize-jobs/{id}":{"get":{"summary":"Get an optimization job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["optimize:run"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"patch":{"summary":"Retry an optimization job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["optimize:run"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Cancel an optimization job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["optimize:run"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/optimize/export/bom":{"post":{"summary":"Bill of materials for an optimization","x-required-scopes":["optimize:export"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/optimize/export/labels":{"post":{"summary":"Part labels for an optimization","x-required-scopes":["optimize:export"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/assembly-templates":{"get":{"summary":"List assembly templates","x-required-scopes":["read:templates"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Create an assembly template","x-required-scopes":["write:templates"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/assembly-templates/{id}":{"get":{"summary":"Get an assembly template","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["read:templates"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"put":{"summary":"Update an assembly template","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:templates"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}},"delete":{"summary":"Delete an assembly template","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["write:templates"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}},"/assembly-templates/part-analytics":{"get":{"summary":"Part usage across templates","x-required-scopes":["read:templates"],"responses":{"2XX":{"description":"Success (JSON)"},"4XX":{"$ref":"#/components/responses/Error"}}}}}}