{"openapi":"3.1.0","info":{"title":"Zuper Billing (BYOK) API","version":"0.1.0","description":"Zuper Billing (BYOK) lets an AI assistant read your own Zuper Billing data through the Zuper Billing API with a key you supply (Zuper API key). Read-only: 5 tools (list_quotes, list_invoices, list_credit_notes, list_service_contracts, list_payment_transactions). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-zuper-billing.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-zuper-billing/docs"},"termsOfService":"https://connectorbay.com/byok-zuper-billing/terms"},"servers":[{"url":"https://byok-zuper-billing.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-zuper-billing/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_quotes":{"post":{"operationId":"list_quotes","summary":"List quotes and estimates with number, date, expiry, total, status and expired or converted flags (no customer details).","description":"List quotes and estimates with number, date, expiry, total, status and expired or converted flags (no customer details). Use for \"Which Zuper quotes are still in draft\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"status":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Quote status, for example DRAFT.","title":"Status"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","description":"Sort direction: DESC or ASC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 1000; keep small).","title":"Count"}},"required":["dc_region"],"title":"list_quotesArguments","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, date, due date, total, status and paid flag (no customer details). Use for \"Which Zuper invoi","description":"List invoices with number, date, due date, total, status and paid flag (no customer details). Use for \"Which Zuper invoices are awaiting payment\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"status":{"anyOf":[{"enum":["DRAFT","AWAIT_PAYMENT","PARTIALLY_PAID","PAID","BAD_DEBT","ARCHIVED","CLOSED","CANCELED","READY_TO_INVOICE"],"type":"string"},{"type":"null"}],"default":null,"description":"Invoice status.","title":"Status"},"sort_by":{"anyOf":[{"enum":["invoice_no","reference_no","created_at","invoice_date","due_date"],"type":"string"},{"type":"null"}],"default":"created_at","description":"Sort key: invoice_no, reference_no, created_at, invoice_date, due_date.","title":"Sort By"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","description":"Sort direction: DESC or ASC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 1000; keep small).","title":"Count"}},"required":["dc_region"],"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_credit_notes":{"post":{"operationId":"list_credit_notes","summary":"List credit notes with number, date, total, used and remaining amount and status. Use for \"Which Zuper credit notes are ","description":"List credit notes with number, date, total, used and remaining amount and status. Use for \"Which Zuper credit notes are still unapplied\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"status":{"anyOf":[{"enum":["UNAPPLIED","PARTIALLY_APPLIED","APPLIED"],"type":"string"},{"type":"null"}],"default":null,"description":"UNAPPLIED, PARTIALLY_APPLIED or APPLIED.","title":"Status"},"sort_by":{"anyOf":[{"enum":["created_at","credit_note_date"],"type":"string"},{"type":"null"}],"default":"created_at","description":"Sort key: created_at, credit_note_date.","title":"Sort By"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","description":"Sort direction: DESC or ASC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 1000; keep small).","title":"Count"}},"required":["dc_region"],"title":"list_credit_notesArguments","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_service_contracts":{"post":{"operationId":"list_service_contracts","summary":"List service contracts with number, name, start and end dates, term, approval status, total and active or expired flags ","description":"List service contracts with number, name, start and end dates, term, approval status, total and active or expired flags (no customer details). Use for \"Which Zuper service contracts expire this quarter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keyword search.","title":"Keyword"},"is_expired":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for expired contracts only.","title":"Is Expired"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active contracts only.","title":"Is Active"},"end_from":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only contracts ending on or after this date.","title":"End From"},"end_to":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only contracts ending on or before this date.","title":"End To"},"sort_by":{"anyOf":[{"enum":["contract_number","end_date","created_at"],"type":"string"},{"type":"null"}],"default":"contract_number","description":"Sort key: contract_number, end_date, created_at.","title":"Sort By"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","description":"Sort direction: DESC or ASC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 1000; keep small).","title":"Count"}},"required":["dc_region"],"title":"list_service_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_payment_transactions":{"post":{"operationId":"list_payment_transactions","summary":"List payment transactions with amount, currency, payment mode, status, source and time (no payer details). Use for \"What","description":"List payment transactions with amount, currency, payment mode, status, source and time (no payer details). Use for \"What payments were recorded in Zuper recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"dc_region":{"description":"Your Zuper data-centre label, the part before .zuperpro.com in your base API URL (for example us-west-1c).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Dc Region","type":"string"},"sort_by":{"anyOf":[{"enum":["created_at","updated_at"],"type":"string"},{"type":"null"}],"default":"created_at","description":"Sort key: created_at, updated_at.","title":"Sort By"},"sort":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"DESC","description":"Sort direction: DESC or ASC.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"count":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 1000; keep small).","title":"Count"}},"required":["dc_region"],"title":"list_payment_transactionsArguments","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}}}}