{"openapi":"3.1.0","info":{"title":"Limble CMMS (BYOK) API","version":"0.1.0","description":"Limble CMMS (BYOK) lets an AI assistant read your own Limble CMMS data through the Limble CMMS API with a key you supply (API client ID). Read-only: 10 tools (get_account, list_assets, list_locations, list_tasks, list_parts, list_vendors, list_purchase_orders, list_purchase_order_items, list_statuses, list_priorities). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-limble.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-limble/docs"},"termsOfService":"https://connectorbay.com/byok-limble/terms"},"servers":[{"url":"https://byok-limble.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-limble/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_account":{"post":{"operationId":"get_account","summary":"Show which Limble customer the credentials belong to and its plan; a quick check that authentication works. Use for \"Whi","description":"Show which Limble customer the credentials belong to and its plan; a quick check that authentication works. Use for \"Which Limble account am I connected to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"}},"required":["region"],"title":"get_accountArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_assets":{"post":{"operationId":"list_assets","summary":"List assets with name, parent asset, location, start date, weekly run hours and last edit time. Use for \"Which assets ar","description":"List assets with name, parent asset, location, start date, weekly run hours and last edit time. Use for \"Which assets are at location 12 in Limble\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Asset name; use % as a wildcard for partial names.","title":"Name"},"locations":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only these location IDs, comma-separated, for example 12,15.","title":"Locations"},"parent_asset_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only children of these parent asset IDs, comma-separated.","title":"Parent Asset Id"},"start":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only assets last edited after this Unix timestamp in seconds.","title":"Start"},"end":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only assets last edited before this Unix timestamp in seconds.","title":"End"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000; the service default is 100).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number for limit-based paging, starting at 1. Do not combine with cursor.","title":"Page"},"cursor":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Return records whose ID is greater than this value (cursor paging). Do not combine with page.","title":"Cursor"}},"required":["region"],"title":"list_assetsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_locations":{"post":{"operationId":"list_locations","summary":"List locations (sites) with timezone, weekly operating hours, region and currency. Use for \"What locations are set up in","description":"List locations (sites) with timezone, weekly operating hours, region and currency. Use for \"What locations are set up in Limble\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Location name; use % as a wildcard for partial names.","title":"Name"},"regions":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only locations in this region ID.","title":"Regions"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000; the service default is 100).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number for limit-based paging, starting at 1. Do not combine with cursor.","title":"Page"},"cursor":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Return records whose ID is greater than this value (cursor paging). Do not combine with page.","title":"Cursor"}},"required":["region"],"title":"list_locationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tasks":{"post":{"operationId":"list_tasks","summary":"List work orders and tasks (preventive maintenance, work requests, planned and unplanned work) with due and completion d","description":"List work orders and tasks (preventive maintenance, work requests, planned and unplanned work) with due and completion dates, asset, assignee and priority. Use for \"Which Limble work orders are still open for asset 345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"},"assets":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only tasks linked to these asset IDs, comma-separated.","title":"Assets"},"locations":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only these location IDs, comma-separated, for example 12,15.","title":"Locations"},"type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Task types, comma-separated: 1 preventive maintenance, 2 unplanned work order, 4 planned work order, 5 cycle count, 6 work request, 7 min part threshold, 8 materials request.","title":"Type"},"status":{"anyOf":[{"enum":[0,1],"type":"integer"},{"type":"null"}],"default":null,"description":"Completion status: 1 complete, 0 incomplete.","title":"Status"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Task name; use % as a wildcard for partial names.","title":"Name"},"order_by":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Sort by due, createdDate, dateCompleted, scheduledStart, scheduledEnd or lastEdited; prefix with - to reverse.","title":"Order By"},"start":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only tasks last edited after this Unix timestamp in seconds.","title":"Start"},"end":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only tasks last edited before this Unix timestamp in seconds.","title":"End"},"completed_start":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only tasks completed after this Unix timestamp in seconds.","title":"Completed Start"},"completed_end":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only tasks completed before this Unix timestamp in seconds.","title":"Completed End"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000; the service default is 100).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number for limit-based paging, starting at 1. Do not combine with cursor.","title":"Page"},"cursor":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Return records whose ID is greater than this value (cursor paging). Do not combine with page.","title":"Cursor"}},"required":["region"],"title":"list_tasksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_parts":{"post":{"operationId":"list_parts","summary":"List spare parts with part number, category, stock on hand, minimum quantity threshold, price and storage bin. Use for \"","description":"List spare parts with part number, category, stock on hand, minimum quantity threshold, price and storage bin. Use for \"Which Limble spare parts are below their minimum quantity\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Part name; use % as a wildcard for partial names.","title":"Name"},"numbers":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only these part numbers, comma-separated.","title":"Numbers"},"locations":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only these location IDs, comma-separated, for example 12,15.","title":"Locations"},"start":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only parts last edited after this Unix timestamp in seconds.","title":"Start"},"end":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only parts last edited before this Unix timestamp in seconds.","title":"End"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000; the service default is 100).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number for limit-based paging, starting at 1. Do not combine with cursor.","title":"Page"},"cursor":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Return records whose ID is greater than this value (cursor paging). Do not combine with page.","title":"Cursor"}},"required":["region"],"title":"list_partsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_vendors":{"post":{"operationId":"list_vendors","summary":"List vendors with contact person, location and last edit time. Use for \"Which vendors does Limble have on file\".","description":"List vendors with contact person, location and last edit time. Use for \"Which vendors does Limble have on file\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Vendor name; use % as a wildcard for partial names.","title":"Name"},"locations":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only these location IDs, comma-separated, for example 12,15.","title":"Locations"},"start":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only vendors last edited after this Unix timestamp in seconds.","title":"Start"},"end":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only vendors last edited before this Unix timestamp in seconds.","title":"End"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000; the service default is 100).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number for limit-based paging, starting at 1. Do not combine with cursor.","title":"Page"}},"required":["region"],"title":"list_vendorsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_purchase_orders":{"post":{"operationId":"list_purchase_orders","summary":"List purchase orders with vendor, location, order date, expected date and state. Use for \"Which Limble purchase orders h","description":"List purchase orders with vendor, location, order date, expected date and state. Use for \"Which Limble purchase orders have not been received yet\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"},"vendors":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only these vendor IDs, comma-separated.","title":"Vendors"},"locations":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only these location IDs, comma-separated, for example 12,15.","title":"Locations"},"numbers":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only these PO numbers, comma-separated.","title":"Numbers"},"last_edited_start":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only POs last edited after this Unix timestamp in seconds.","title":"Last Edited Start"},"last_edited_end":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only POs last edited before this Unix timestamp in seconds.","title":"Last Edited End"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000; the service default is 100).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Page number for limit-based paging, starting at 1. Do not combine with cursor.","title":"Page"},"cursor":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Return records whose ID is greater than this value (cursor paging). Do not combine with page.","title":"Cursor"}},"required":["region"],"title":"list_purchase_ordersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_purchase_order_items":{"post":{"operationId":"list_purchase_order_items","summary":"List purchase order line items with quantity, rate, quantity received and the part or task they belong to. Use for \"What","description":"List purchase order line items with quantity, rate, quantity received and the part or task they belong to. Use for \"What was received against Limble purchase order 43\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"},"pos":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of these PO IDs, comma-separated.","title":"Pos"},"numbers":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of these PO numbers, comma-separated.","title":"Numbers"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000; the service default is 100).","title":"Limit"},"cursor":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Return records whose ID is greater than this value (cursor paging). Do not combine with page.","title":"Cursor"}},"required":["region"],"title":"list_purchase_order_itemsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_statuses":{"post":{"operationId":"list_statuses","summary":"List the custom task statuses (ID, name, description) so statusID values on tasks can be read. Use for \"What task status","description":"List the custom task statuses (ID, name, description) so statusID values on tasks can be read. Use for \"What task statuses exist in Limble\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Status name filter.","title":"Name"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000; the service default is 100).","title":"Limit"}},"required":["region"],"title":"list_statusesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_priorities":{"post":{"operationId":"list_priorities","summary":"List task priorities with level, name and colour. Use for \"What priorities can a Limble task have\".","description":"List task priorities with level, name and colour. Use for \"What priorities can a Limble task have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Limble data region of the account: api (US), eu-api (Europe), ca-api (Canada), au-api (Australia) or 21cfr-api (21 CFR).","enum":["api","eu-api","ca-api","au-api","21cfr-api"],"title":"Region","type":"string"}},"required":["region"],"title":"list_prioritiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}