{"openapi":"3.1.0","info":{"title":"BillSplitPro API","version":"0.1.0","description":"A recurring-household-bill splitting engine for roommates: cent-exact even and weighted splits, a per-utility bundle splitter for mixing methods across bills, a multi-month running ledger, and a real debt-simplification settle-up algorithm for ongoing monthly household bills. Nothing looked up or stored -- every result is computed locally from the numbers you provide.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://billsplitpro.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/billsplitpro/docs"},"termsOfService":"https://connectorbay.com/billsplitpro/terms"},"servers":[{"url":"https://billsplitpro.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/billsplitpro/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/even_split":{"post":{"operationId":"even_split","summary":"Splits a bill evenly among named roommates, cent-exact via largest-remainder rounding (shares always","description":"Splits a bill evenly among named roommates, cent-exact via largest-remainder rounding (shares always\n    sum exactly to the total). Use for \"split the $90 internet bill evenly between Alice, Bob, and Carol\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"total_amount":{"description":"The bill total to split.","minimum":0,"title":"Total Amount","type":"number"},"roommates":{"description":"Names of everyone splitting the bill.","items":{"type":"string"},"minItems":1,"title":"Roommates","type":"array"}},"required":["total_amount","roommates"],"title":"even_splitArguments","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/weighted_split":{"post":{"operationId":"weighted_split","summary":"Splits a bill in proportion to arbitrary weights -- room size, occupancy (number of people in each","description":"Splits a bill in proportion to arbitrary weights -- room size, occupancy (number of people in each\n    room), or any other fairness basis -- cent-exact. Use for \"split electricity by occupancy: Alice 1\n    person, Bob 1 person, Carol 2 people\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"total_amount":{"description":"The bill total to split.","minimum":0,"title":"Total Amount","type":"number"},"weights":{"additionalProperties":{"type":"number"},"description":"Roommate name -> weight (e.g. room size or occupancy), any non-negative numbers.","title":"Weights","type":"object"}},"required":["total_amount","weights"],"title":"weighted_splitArguments","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/split_utility_bundle":{"post":{"operationId":"split_utility_bundle","summary":"Splits a whole month's set of utility bills at once, where each bill can use its own method -- e.g.","description":"Splits a whole month's set of utility bills at once, where each bill can use its own method -- e.g.\n    split internet evenly but electricity by occupancy weights in the same call -- and aggregates each\n    roommate's total across all of them. Use for \"split internet evenly but electricity by occupancy this\n    month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"bills":{"description":"Each bill: {name, amount, method: 'even'|'weighted', participants? (for even), weights? (for weighted)}.","items":{"additionalProperties":true,"type":"object"},"title":"Bills","type":"array"},"roommates":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Default participant list for any 'even' bill that doesn't specify its own participants.","title":"Roommates"}},"required":["bills"],"title":"split_utility_bundleArguments","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/household_ledger":{"post":{"operationId":"household_ledger","summary":"Builds a running ledger across as many months as you like: each roommate's total paid, total owed, and","description":"Builds a running ledger across as many months as you like: each roommate's total paid, total owed, and\n    net balance over the whole period. Balances always sum to zero for consistent inputs, and feed directly\n    into settle_up. Use for \"here's 3 months of bills and who paid what, what's the running balance\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"entries":{"description":"Each entry: {month, bill_name, amount, payer, method: 'even'|'weighted', participants? (for even), weights? (for weighted)}.","items":{"additionalProperties":true,"type":"object"},"title":"Entries","type":"array"}},"required":["entries"],"title":"household_ledgerArguments","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/settle_up":{"post":{"operationId":"settle_up","summary":"Runs a greedy debt-simplification algorithm on a household's accumulated balances (typically from","description":"Runs a greedy debt-simplification algorithm on a household's accumulated balances (typically from\n    household_ledger), computing a minimal-ish set of direct payments so roommates don't have to settle every\n    individual bill separately. Use for \"minimize the number of payments to settle up our household\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"balances":{"additionalProperties":{"type":"number"},"description":"Roommate name -> net balance (positive = owed money, negative = owes money); must sum to ~0.","title":"Balances","type":"object"}},"required":["balances"],"title":"settle_upArguments","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/billsplitpro_glossary":{"post":{"operationId":"billsplitpro_glossary","summary":"Definitions of household-bill-splitting terms: even split, weighted split, utility bundle, household","description":"Definitions of household-bill-splitting terms: even split, weighted split, utility bundle, household\n    ledger, net balance, settle-up transaction, debt simplification, occupancy-based split. Use for \"what does\n    occupancy-based split mean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"billsplitpro_glossaryArguments","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}}}}