{"openapi":"3.1.0","info":{"title":"Odoo Accounting Setup (BYOK) API","version":"0.1.0","description":"Odoo Accounting Setup (BYOK) lets an AI assistant read your own Odoo Accounting Setup data through the Odoo Accounting Setup API with a key you supply (Odoo API key (Preferences, Account Security, New API Key); JSON-2 access needs a Custom plan). Read-only: 8 tools (list_accounts, list_account_groups, list_taxes, list_tax_groups, list_journals, list_payment_terms, list_fiscal_positions,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-odoo-accounting-setup.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-odoo-accounting-setup/docs"},"termsOfService":"https://connectorbay.com/byok-odoo-accounting-setup/terms"},"servers":[{"url":"https://byok-odoo-accounting-setup.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-odoo-accounting-setup/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_accounts":{"post":{"operationId":"list_accounts","summary":"List the chart of accounts (model account.account) with code, name, account type, reconcile flag, currency and internal ","description":"List the chart of accounts (model account.account) with code, name, account type, reconcile flag, currency and internal group. Active accounts only, the key user's company. Use for \"What accounts are in my Odoo chart of accounts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database":{"description":"Your Odoo Online database subdomain: the part before .odoo.com, for example 'mycompany' for mycompany.odoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Database","type":"string"},"order":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"code asc","description":"Sort expression, for example 'code asc'.","title":"Order"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Offset"}},"required":["database"],"title":"list_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}},"/v1/tools/list_account_groups":{"post":{"operationId":"list_account_groups","summary":"List the account groups (model account.group) with name, code prefix range and parent group. Use for \"How are my Odoo ac","description":"List the account groups (model account.group) with name, code prefix range and parent group. Use for \"How are my Odoo accounts grouped by code prefix\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database":{"description":"Your Odoo Online database subdomain: the part before .odoo.com, for example 'mycompany' for mycompany.odoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Database","type":"string"},"order":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"code_prefix_start asc","description":"Sort expression, for example 'code_prefix_start asc'.","title":"Order"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Offset"}},"required":["database"],"title":"list_account_groupsArguments","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_taxes":{"post":{"operationId":"list_taxes","summary":"List taxes (model account.tax) with name, use (sale, purchase or none), scope, computation type, amount, price-included ","description":"List taxes (model account.tax) with name, use (sale, purchase or none), scope, computation type, amount, price-included flag, invoice label, tax group and country. Active taxes only. Use for \"Which sales taxes are configured in Odoo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database":{"description":"Your Odoo Online database subdomain: the part before .odoo.com, for example 'mycompany' for mycompany.odoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Database","type":"string"},"order":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"sequence asc","description":"Sort expression, for example 'sequence asc'.","title":"Order"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Offset"}},"required":["database"],"title":"list_taxesArguments","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_tax_groups":{"post":{"operationId":"list_tax_groups","summary":"List tax groups (model account.tax.group) with name, sequence and country. Use for \"What tax groups exist in Odoo\".","description":"List tax groups (model account.tax.group) with name, sequence and country. Use for \"What tax groups exist in Odoo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database":{"description":"Your Odoo Online database subdomain: the part before .odoo.com, for example 'mycompany' for mycompany.odoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Database","type":"string"},"order":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"sequence asc","description":"Sort expression, for example 'sequence asc'.","title":"Order"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Offset"}},"required":["database"],"title":"list_tax_groupsArguments","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_journals":{"post":{"operationId":"list_journals","summary":"List accounting journals (model account.journal) with name, short code, type (sale, purchase, cash, bank, general), curr","description":"List accounting journals (model account.journal) with name, short code, type (sale, purchase, cash, bank, general), currency and default account. Active journals only. Use for \"Which accounting journals do I have in Odoo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database":{"description":"Your Odoo Online database subdomain: the part before .odoo.com, for example 'mycompany' for mycompany.odoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Database","type":"string"},"order":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"sequence asc","description":"Sort expression, for example 'sequence asc'.","title":"Order"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Offset"}},"required":["database"],"title":"list_journalsArguments","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_terms":{"post":{"operationId":"list_payment_terms","summary":"List payment terms (model account.payment.term) with name, early-payment discount settings and display flag. Active term","description":"List payment terms (model account.payment.term) with name, early-payment discount settings and display flag. Active terms only. Use for \"What payment terms are configured in Odoo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database":{"description":"Your Odoo Online database subdomain: the part before .odoo.com, for example 'mycompany' for mycompany.odoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Database","type":"string"},"order":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"sequence asc","description":"Sort expression, for example 'sequence asc'.","title":"Order"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Offset"}},"required":["database"],"title":"list_payment_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_fiscal_positions":{"post":{"operationId":"list_fiscal_positions","summary":"List fiscal positions (model account.fiscal.position) with name, country, automatic-detection and VAT-required flags and","description":"List fiscal positions (model account.fiscal.position) with name, country, automatic-detection and VAT-required flags and ZIP range. Active positions only. Use for \"Which fiscal positions are set up in Odoo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database":{"description":"Your Odoo Online database subdomain: the part before .odoo.com, for example 'mycompany' for mycompany.odoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Database","type":"string"},"order":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"sequence asc","description":"Sort expression, for example 'sequence asc'.","title":"Order"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Offset"}},"required":["database"],"title":"list_fiscal_positionsArguments","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_currencies":{"post":{"operationId":"list_currencies","summary":"List the active currencies (model res.currency) with ISO code, name, symbol, current rate, rounding, decimal places and ","description":"List the active currencies (model res.currency) with ISO code, name, symbol, current rate, rounding, decimal places and symbol position. Use for \"Which currencies are enabled in my Odoo and what are their rates\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"database":{"description":"Your Odoo Online database subdomain: the part before .odoo.com, for example 'mycompany' for mycompany.odoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Database","type":"string"},"order":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":"name asc","description":"Sort expression, for example 'name asc'.","title":"Order"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records to return (1 to 200).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Offset"}},"required":["database"],"title":"list_currenciesArguments","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}}}}