{"openapi":"3.1.0","info":{"title":"PartsBox (BYOK) API","version":"0.1.0","description":"PartsBox (BYOK) lets an AI assistant read your own PartsBox data through the PartsBox API with a key you supply (PartsBox API key (starts with partsboxapi_)). Read-only: 12 tools (list_parts, get_part, get_part_total_stock, get_part_storage_locations, get_part_lots, list_storage_locations, list_parts_in_storage, list_lots, list_projects, get_project_bom, list_builds, list_orders). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-partsbox.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-partsbox/docs"},"termsOfService":"https://connectorbay.com/byok-partsbox/terms"},"servers":[{"url":"https://byok-partsbox.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-partsbox/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/list_parts":{"post":{"operationId":"list_parts","summary":"List the parts in your PartsBox inventory with name, description, footprint, manufacturer, MPN, unit, tags and default s","description":"List the parts in your PartsBox inventory with name, description, footprint, manufacturer, MPN, unit, tags and default storage location. Stock history is left out; use get_part_total_stock. Use for \"Which parts do I have in PartsBox\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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/get_part":{"post":{"operationId":"get_part","summary":"Get one part by id: name, description, footprint, manufacturer, MPN, unit, tags, notes and default storage. Use for \"Sho","description":"Get one part by id: name, description, footprint, manufacturer, MPN, unit, tags, notes and default storage. Use for \"Show PartsBox part 1pbvre0cfg4f58azmvsgetasxq\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"part_id":{"description":"PartsBox part id (26-character id from list_parts).","maxLength":40,"title":"Part Id","type":"string"}},"required":["part_id"],"title":"get_partArguments","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/get_part_total_stock":{"post":{"operationId":"get_part_total_stock","summary":"Get the total on-hand stock count of a part, optionally limited to one storage location. Use for \"How many of part 1pbvr","description":"Get the total on-hand stock count of a part, optionally limited to one storage location. Use for \"How many of part 1pbvre0cfg4f58azmvsgetasxq do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"part_id":{"description":"PartsBox part id (26-character id from list_parts).","maxLength":40,"title":"Part Id","type":"string"},"storage_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only count stock in this storage location.","title":"Storage Id"}},"required":["part_id"],"title":"get_part_total_stockArguments","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/get_part_storage_locations":{"post":{"operationId":"get_part_storage_locations","summary":"Show where a part is stored: one row per storage location with the aggregated quantity. Use for \"Where is part 1pbvre0cf","description":"Show where a part is stored: one row per storage location with the aggregated quantity. Use for \"Where is part 1pbvre0cfg4f58azmvsgetasxq stored\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"part_id":{"description":"PartsBox part id (26-character id from list_parts).","maxLength":40,"title":"Part Id","type":"string"}},"required":["part_id"],"title":"get_part_storage_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/get_part_lots":{"post":{"operationId":"get_part_lots","summary":"Show every lot of a part as a separate source with quantity, storage location, status and resolved unit cost and value. ","description":"Show every lot of a part as a separate source with quantity, storage location, status and resolved unit cost and value. Use for \"Which lots of part 1pbvre0cfg4f58azmvsgetasxq are in stock and what did they cost\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"part_id":{"description":"PartsBox part id (26-character id from list_parts).","maxLength":40,"title":"Part Id","type":"string"}},"required":["part_id"],"title":"get_part_lotsArguments","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_storage_locations":{"post":{"operationId":"list_storage_locations","summary":"List all storage locations (drawers, shelves, bins) with name, description and tags. Use for \"What storage locations are","description":"List all storage locations (drawers, shelves, bins) with name, description and tags. Use for \"What storage locations are set up in PartsBox\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_storage_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_parts_in_storage":{"post":{"operationId":"list_parts_in_storage","summary":"List the parts held in one storage location with their aggregated quantities. Use for \"What is stored in Drawer A1\".","description":"List the parts held in one storage location with their aggregated quantities. Use for \"What is stored in Drawer A1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"storage_id":{"description":"PartsBox storage location id (from list_storage_locations).","maxLength":40,"title":"Storage Id","type":"string"}},"required":["storage_id"],"title":"list_parts_in_storageArguments","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_lots":{"post":{"operationId":"list_lots","summary":"List all lots (batches) with name, description, creation and expiry date and the order or build they came from. Use for ","description":"List all lots (batches) with name, description, creation and expiry date and the order or build they came from. Use for \"Which lots expire soon in PartsBox\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_lotsArguments","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_projects":{"post":{"operationId":"list_projects","summary":"List all projects (BOMs) with name, description, tags and notes. Use for \"Which projects do I have in PartsBox\".","description":"List all projects (BOMs) with name, description, tags and notes. Use for \"Which projects do I have in PartsBox\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_projectsArguments","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/get_project_bom":{"post":{"operationId":"get_project_bom","summary":"Get a project's bill of materials entries: part id, quantity, designators, name and comments. Pass a build id to see tha","description":"Get a project's bill of materials entries: part id, quantity, designators, name and comments. Pass a build id to see that build's entries instead. Use for \"What parts does project 1pbq4bmcfg4f59azmvsyftqsxe need\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"PartsBox project id (from list_projects).","maxLength":40,"title":"Project Id","type":"string"},"build_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Optional build id: return that build's entries.","title":"Build Id"}},"required":["project_id"],"title":"get_project_bomArguments","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_builds":{"post":{"operationId":"list_builds","summary":"List all project builds with project id, date, quantity built and comments. Use for \"How many units of each project have","description":"List all project builds with project id, date, quantity built and comments. Use for \"How many units of each project have we built\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_buildsArguments","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_orders":{"post":{"operationId":"list_orders","summary":"List purchase orders with vendor, order and PO numbers, status, expected arrival and creation date. Use for \"Which purch","description":"List purchase orders with vendor, order and PO numbers, status, expected arrival and creation date. Use for \"Which purchase orders are still open or on the way\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_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}}}}