{"openapi":"3.1.0","info":{"title":"Tabs (BYOK) API","version":"0.1.0","description":"Tabs (BYOK) lets an AI assistant read your own Tabs data through the Tabs API with a key you supply (Tabs API key (sent raw in the Authorization header, no Bearer prefix)). Read-only: 12 tools (list_customers, get_customer, list_invoices, list_contracts, list_payments, list_credit_memos, list_items, list_billing_terms, list_obligations, get_book_close_date, list_departments, list_event_types)....\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-tabs.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-tabs/docs"},"termsOfService":"https://connectorbay.com/byok-tabs/terms"},"servers":[{"url":"https://byok-tabs.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-tabs/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_customers":{"post":{"operationId":"list_customers","summary":"List customers in the Tabs entity: name, company, default currency, parent customer, tax-exempt flag and external IDs, w","description":"List customers in the Tabs entity: name, company, default currency, parent customer, tax-exempt flag and external IDs, with paging and optional filter. Use for \"List my Tabs customers whose name contains acme\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: name, externalIds.externalId, lastUpdatedAt. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"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/get_customer":{"post":{"operationId":"get_customer","summary":"Get one Tabs customer by ID: name, company, parent, default currency, billing address, auto-charge and dunning flags and","description":"Get one Tabs customer by ID: name, company, parent, default currency, billing address, auto-charge and dunning flags and tax info. Use for \"Show Tabs customer 123e4567-e89b-12d3-a456-426614174000\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Tabs customer ID (UUID).","maxLength":64,"title":"Id","type":"string"}},"required":["id"],"title":"get_customerArguments","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 with number, status, dates, totals, balance remaining, line items and payment link, with paging and option","description":"List invoices with number, status, dates, totals, balance remaining, line items and payment link, with paging and optional filter (customer, status, total, dates). Use for \"Which Tabs invoices are still open for customer 123e4567\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: customerId, contractId, status, source, total, issueDate, dueDate, lastUpdatedAt. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"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_contracts":{"post":{"operationId":"list_contracts","summary":"List contracts: name, status, customer, close date, source and document classifications, with paging and optional filter","description":"List contracts: name, status, customer, close date, source and document classifications, with paging and optional filter. Use for \"List active Tabs contracts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: name, status, source, customerId, closeDate, lastUpdatedAt. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"title":"list_contractsArguments","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_payments":{"post":{"operationId":"list_payments","summary":"List payments received against invoices: amount, date, status, type, method and reference, with paging and optional filt","description":"List payments received against invoices: amount, date, status, type, method and reference, with paging and optional filter. Use for \"Show the latest Tabs payments\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: receivedAt, status, type, invoiceId. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"title":"list_paymentsArguments","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_credit_memos":{"post":{"operationId":"list_credit_memos","summary":"List credit memos: number, customer, issue date, total, remaining credit, reason, status and applications, with paging a","description":"List credit memos: number, customer, issue date, total, remaining credit, reason, status and applications, with paging and optional filter. Use for \"Which Tabs credit memos are still open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: creditMemoNumber, customerId, status (OPEN, PARTIALLY_APPLIED, APPLIED, VOID), issueDateFrom, issueDateTo, lastUpdatedAt. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"title":"list_credit_memosArguments","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_items":{"post":{"operationId":"list_items","summary":"List billable items (products in the item catalog) with display name and accounting-system external IDs, with paging and","description":"List billable items (products in the item catalog) with display name and accounting-system external IDs, with paging and optional filter. Use for \"List the items in my Tabs catalog\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: name, externalId, externalIdType. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"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_billing_terms":{"post":{"operationId":"list_billing_terms","summary":"List billing terms of contracts: item, interval, duration, quantity, pricing tiers, discounts, net terms and start and e","description":"List billing terms of contracts: item, interval, duration, quantity, pricing tiers, discounts, net terms and start and end dates, with paging and optional filter. Use for \"Show the billing terms for contract d2e4f7a9\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: contractId, customerId, startDate, endDate, productId, billingTermGroupId. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"title":"list_billing_termsArguments","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_obligations":{"post":{"operationId":"list_obligations","summary":"List contract obligations with service period, billing schedule, recognized-revenue schedule and discount, with paging a","description":"List contract obligations with service period, billing schedule, recognized-revenue schedule and discount, with paging and optional filter. Use for \"List the obligations for Tabs contract d2e4f7a9\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: contractId, customerId, billingTermId, startDate, endDate, serviceStartDate. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"title":"list_obligationsArguments","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_book_close_date":{"post":{"operationId":"get_book_close_date","summary":"Show whether an accounting book close date is set and when; Tabs will not change revenue before that date. Use for \"When","description":"Show whether an accounting book close date is set and when; Tabs will not change revenue before that date. Use for \"When are my Tabs books closed through\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_book_close_dateArguments","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_departments":{"post":{"operationId":"list_departments","summary":"List the departments synced from the accounting system (name, full path, external ID). Use for \"Which departments are in","description":"List the departments synced from the accounting system (name, full path, external ID). Use for \"Which departments are in Tabs\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_departmentsArguments","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_event_types":{"post":{"operationId":"list_event_types","summary":"List usage event types defined for usage-based billing, with paging and optional name filter. Use for \"What usage event ","description":"List usage event types defined for usage-based billing, with paging and optional name filter. Use for \"What usage event types exist in Tabs\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 100).","title":"Limit"},"filter":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Optional filter 'field:rule:value', comma-separated to combine (AND). Fields: name. Rules include eq, neq, like, in, gt, gte, lt, lte.","title":"Filter"}},"title":"list_event_typesArguments","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}}}}