{"openapi":"3.1.0","info":{"title":"SalesBinder (BYOK) API","version":"0.1.0","description":"SalesBinder (BYOK) lets an AI assistant read your own SalesBinder data through the SalesBinder API with a key you supply (API key (Profile, API Keys)). Read-only: 10 tools (list_items, list_customers, list_suppliers, list_invoices, list_estimates, list_sales_orders, list_purchase_orders, list_locations, list_item_categories, get_invoice). The BYOK key travels with each request, is used for that...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-salesbinder.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-salesbinder/docs"},"termsOfService":"https://connectorbay.com/byok-salesbinder/terms"},"servers":[{"url":"https://byok-salesbinder.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-salesbinder/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_items":{"post":{"operationId":"list_items","summary":"List inventory items (quantity-tracked and unique) ordered by name: SKU, category, price, quantity on hand, reserved and","description":"List inventory items (quantity-tracked and unique) ordered by name: SKU, category, price, quantity on hand, reserved and incoming, low-stock threshold. Needs scope items:read. Unit cost is not requested. Use for \"Which SalesBinder items are low on stock\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for name, SKU, barcode or serial number; a number also matches an item number.","title":"Q"},"category_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only items in this category UUID.","title":"Category Id"},"type":{"anyOf":[{"enum":["quantity","unique"],"type":"string"},{"type":"null"}],"default":null,"description":"quantity or unique items.","title":"Type"},"archived":{"anyOf":[{"enum":["true","false","all"],"type":"string"},{"type":"null"}],"default":null,"description":"Active items by default; true for archived only, all for both.","title":"Archived"},"location_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only items at this inventory location UUID.","title":"Location Id"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"title":"list_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_customers":{"post":{"operationId":"list_customers","summary":"List customers ordered by name with customer number, billing city and country, website, last invoice date and lifetime r","description":"List customers ordered by name with customer number, billing city and country, website, last invoice date and lifetime revenue. Needs scope customers:read. Phone, email and street addresses are not returned. Use for \"Who are my top customers in SalesBinder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for customer name or office email; a number matches a customer number.","title":"Q"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"title":"list_customersArguments","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_suppliers":{"post":{"operationId":"list_suppliers","summary":"List suppliers ordered by name with number, billing city and country, website and document count. Needs scope suppliers:","description":"List suppliers ordered by name with number, billing city and country, website and document count. Needs scope suppliers:read. Contact details are not returned. Use for \"Which suppliers do I have in SalesBinder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for supplier name or office email; a number matches a supplier number.","title":"Q"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"title":"list_suppliersArguments","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_invoices":{"post":{"operationId":"list_invoices","summary":"List invoices, newest first, with number, customer, status, dates, totals, amount paid and amount due (no line items). N","description":"List invoices, newest first, with number, customer, status, dates, totals, amount paid and amount due (no line items). Needs scope invoices:read. Use for \"Which SalesBinder invoices are unpaid\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for customer name, custom invoice number or invoice name; a number matches an invoice number.","title":"Q"},"customer_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only invoices of this customer UUID.","title":"Customer Id"},"status_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only invoices with this status ID.","title":"Status Id"},"issue_date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only invoices issued on or after this date (YYYY-MM-DD).","title":"Issue Date From"},"issue_date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only invoices issued on or before this date (YYYY-MM-DD).","title":"Issue Date To"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"title":"list_invoicesArguments","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_estimates":{"post":{"operationId":"list_estimates","summary":"List estimates, newest first, with number, customer or prospect, status, issue and expiry dates and totals (no line item","description":"List estimates, newest first, with number, customer or prospect, status, issue and expiry dates and totals (no line items). Needs scope estimates:read. Use for \"Which estimates are still open in SalesBinder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for customer name, custom estimate number or estimate name.","title":"Q"},"customer_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only estimates of this customer or prospect UUID.","title":"Customer Id"},"status_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only estimates with this status ID.","title":"Status Id"},"issue_date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only estimates issued on or after this date (YYYY-MM-DD).","title":"Issue Date From"},"issue_date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only estimates issued on or before this date (YYYY-MM-DD).","title":"Issue Date To"},"expiry_date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only estimates expiring on or after this date (YYYY-MM-DD).","title":"Expiry Date From"},"expiry_date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only estimates expiring on or before this date (YYYY-MM-DD).","title":"Expiry Date To"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"title":"list_estimatesArguments","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_sales_orders":{"post":{"operationId":"list_sales_orders","summary":"List sales orders, newest first, with number, customer, status, dates, totals, and invoiced, paid, packed and shipped pe","description":"List sales orders, newest first, with number, customer, status, dates, totals, and invoiced, paid, packed and shipped percentages (no line items). Needs scope sales_orders:read. Use for \"Which sales orders are not yet shipped in SalesBinder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for customer name, customer PO number or order name; a number matches an order number.","title":"Q"},"customer_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only orders of this customer UUID.","title":"Customer Id"},"status_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only orders with this status ID.","title":"Status Id"},"location_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only orders for this inventory location UUID.","title":"Location Id"},"issue_date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only orders issued on or after this date (YYYY-MM-DD).","title":"Issue Date From"},"issue_date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only orders issued on or before this date (YYYY-MM-DD).","title":"Issue Date To"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"title":"list_sales_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_orders":{"post":{"operationId":"list_purchase_orders","summary":"List purchase orders, newest first, with number, supplier, status, dates sent, needed and received, totals and amount du","description":"List purchase orders, newest first, with number, supplier, status, dates sent, needed and received, totals and amount due (no line items). Needs scope purchase_orders:read. Use for \"Which purchase orders are waiting to be received in SalesBinder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for supplier name, custom PO number or PO name.","title":"Q"},"supplier_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only purchase orders of this supplier UUID.","title":"Supplier Id"},"status_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only purchase orders with this status ID.","title":"Status Id"},"location_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only purchase orders for this location UUID.","title":"Location Id"},"issue_date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only purchase orders issued on or after this date (YYYY-MM-DD).","title":"Issue Date From"},"issue_date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only purchase orders issued on or before this date (YYYY-MM-DD).","title":"Issue Date To"},"needed_date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only POs needed on or after this date (YYYY-MM-DD).","title":"Needed Date From"},"needed_date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only POs needed on or before this date (YYYY-MM-DD).","title":"Needed Date To"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"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_locations":{"post":{"operationId":"list_locations","summary":"List active inventory locations with UUID, name and short name. Needs scope items:read. Use for \"What inventory location","description":"List active inventory locations with UUID, name and short name. Needs scope items:read. Use for \"What inventory locations does my SalesBinder account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"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_item_categories":{"post":{"operationId":"list_item_categories","summary":"List item categories with parent, inventory type (quantity or unique) and custom-field definitions. Needs scope items:re","description":"List item categories with parent, inventory type (quantity or unique) and custom-field definitions. Needs scope items:read. Use for \"What item categories exist in SalesBinder\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"q":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text for category names.","title":"Q"},"parent_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"A category UUID for its direct children, or 'root' for top-level categories.","title":"Parent Id"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records per page (1 to 100, default 20).","title":"Limit"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["account"],"title":"list_item_categoriesArguments","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_invoice":{"post":{"operationId":"get_invoice","summary":"Get one invoice by UUID, including its line items (name, quantity, unit price, discount, tax rates, subtotal) and totals","description":"Get one invoice by UUID, including its line items (name, quantity, unit price, discount, tax rates, subtotal) and totals. Needs scope invoices:read. Use for \"Show the lines of SalesBinder invoice i1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account":{"description":"Your SalesBinder subdomain: the part before .salesbinder.com in your address.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Account","type":"string"},"invoice_id":{"description":"Invoice UUID from list_invoices.","maxLength":200,"title":"Invoice Id","type":"string"}},"required":["account","invoice_id"],"title":"get_invoiceArguments","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}}}}