{"openapi":"3.1.0","info":{"title":"Holded Ledger and Treasury (BYOK) API","version":"0.1.0","description":"Holded Ledger and Treasury (BYOK) lets an AI assistant read your own Holded Ledger and Treasury data through the Holded Ledger and Treasury API with a key you supply (Holded API key (needs accounting read scopes)). Read-only: 5 tools (list_ledger_entries, get_ledger_entry, list_business_plan_scenarios, list_business_plan_goals, list_treasury_accounts). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-holded-ledger-treasury.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-holded-ledger-treasury/docs"},"termsOfService":"https://connectorbay.com/byok-holded-ledger-treasury/terms"},"servers":[{"url":"https://byok-holded-ledger-treasury.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-holded-ledger-treasury/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_ledger_entries":{"post":{"operationId":"list_ledger_entries","summary":"List accounting ledger lines posted between two dates with entry number, date, type, description, account number, debit,","description":"List accounting ledger lines posted between two dates with entry number, date, type, description, account number, debit, credit and tags. Money values are decimal strings. Needs the daily ledger read scope. Use for \"Which ledger lines were posted to account 70500001 in March 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"First date to include (YYYY-MM-DD).","maxLength":200,"title":"Start Date","type":"string"},"end_date":{"description":"Last date to include (YYYY-MM-DD).","maxLength":200,"title":"End Date","type":"string"},"account":{"anyOf":[{"maximum":999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only lines posted to this exact chart-of-accounts number, for example 70500001.","title":"Account"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200, default 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: leave out for the first page, or pass the cursor value from the previous answer while has_more is true.","title":"Cursor"}},"required":["start_date","end_date"],"title":"list_ledger_entriesArguments","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_ledger_entry":{"post":{"operationId":"get_ledger_entry","summary":"Get one ledger entry with all its debit and credit lines, date, type, notes and linked contact id. Use for \"Show the lin","description":"Get one ledger entry with all its debit and credit lines, date, type, notes and linked contact id. Use for \"Show the lines of Holded ledger entry 507f1f77bcf86cd799439011\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ledger_entry_id":{"description":"Ledger entry id (24-character hex id from list_ledger_entries).","maxLength":200,"title":"Ledger Entry Id","type":"string"}},"required":["ledger_entry_id"],"title":"get_ledger_entryArguments","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_business_plan_scenarios":{"post":{"operationId":"list_business_plan_scenarios","summary":"List the Business Plan scenarios with name, color and whether each is the main scenario. Returns an empty list when no B","description":"List the Business Plan scenarios with name, color and whether each is the main scenario. Returns an empty list when no Business Plan exists. Needs the cashflow read scope. Use for \"Which business plan scenarios do I have in Holded\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_business_plan_scenariosArguments","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_business_plan_goals":{"post":{"operationId":"list_business_plan_goals","summary":"List profit and loss goals against actuals per accounting account and month for a date range of at most 36 months. Empty","description":"List profit and loss goals against actuals per accounting account and month for a date range of at most 36 months. Empty when no Business Plan or goals exist. Use for \"How did my Holded business plan goals compare with actuals in the first quarter of 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"Start of the range (YYYY-MM-DD), snapped to the first day of its month.","maxLength":200,"title":"Start Date","type":"string"},"end_date":{"description":"End of the range (YYYY-MM-DD), any day within the last month wanted.","maxLength":200,"title":"End Date","type":"string"},"tree":{"const":"profit_and_loss","description":"Goal tree to query; only profit_and_loss is supported.","title":"Tree","type":"string"},"scenario_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Business plan scenario id from list_business_plan_scenarios; defaults to the main scenario.","title":"Scenario Id"},"accounting_account_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only this accounting account id.","title":"Accounting Account Id"},"only_with_goals":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to leave out accounts that have no goal anywhere in the range.","title":"Only With Goals"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200, default 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: leave out for the first page, or pass the cursor value from the previous answer while has_more is true.","title":"Cursor"}},"required":["start_date","end_date","tree"],"title":"list_business_plan_goalsArguments","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_treasury_accounts":{"post":{"operationId":"list_treasury_accounts","summary":"List bank, card, payment gateway and cash accounts with name, type, currency, balance, archived flag, last sync time and","description":"List bank, card, payment gateway and cash accounts with name, type, currency, balance, archived flag, last sync time and number of transactions waiting to be reconciled. IBAN and account numbers are not returned. Use for \"What are the balances of my Holded bank accounts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"enum":["bank","card","gateway","cash"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this account type: bank, card, gateway or cash.","title":"Type"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only archived accounts, false for only active ones; leave out for both.","title":"Archived"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results to return (1 to 200, default 50).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: leave out for the first page, or pass the cursor value from the previous answer while has_more is true.","title":"Cursor"}},"title":"list_treasury_accountsArguments","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}}}}