{"openapi":"3.1.0","info":{"title":"POST /api/v1/ledgers/apply-coa","version":"1.0.0","description":"Apply AI-generated COA"},"servers":[{"url":"https://api.ondayzero.com","description":"Production"}],"paths":{"/api/v1/ledgers/apply-coa":{"post":{"tags":["ledgers"],"summary":"Apply AI-generated COA","description":"Apply an AI-generated or custom chart of accounts template to the business, upserting over existing ledgers. Protected ledgers (system, required, bank-linked) are skipped. Existing custom ledgers not present in the template are deactivated.","operationId":"apply_coa_api_v1_ledgers_apply_coa_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"x-business-id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Business-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomCoaTemplate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyCoaResponse"}}}},"400":{"description":"Bad Request - Invalid input","content":{"application/json":{"example":{"detail":"Invalid request parameters"}}}},"401":{"description":"Unauthorized - Authentication required","content":{"application/json":{"example":{"detail":"Not authenticated"}}}},"403":{"description":"Forbidden - Insufficient permissions","content":{"application/json":{"example":{"detail":"Not enough permissions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ApplyCoaResponse":{"properties":{"created":{"type":"integer","title":"Created","description":"Number of new ledgers created.","default":0},"updated":{"type":"integer","title":"Updated","description":"Number of existing ledgers updated.","default":0},"skipped":{"type":"integer","title":"Skipped","description":"Number of protected ledgers skipped (system, bank-linked).","default":0},"deactivated":{"type":"integer","title":"Deactivated","description":"Number of old custom ledgers deactivated (not in template).","default":0},"skipped_names":{"items":{"type":"string"},"type":"array","title":"Skipped Names","description":"Names of protected ledgers that were skipped."},"total":{"type":"integer","title":"Total","description":"Total ledgers in the submitted template.","default":0}},"type":"object","title":"ApplyCoaResponse","description":"Response from applying an AI-generated or custom COA template.\n\nProvides counts and details for each action taken: created (new ledgers),\nupdated (existing unlocked ledgers whose sort_code matched), skipped\n(protected system/bank-connected ledgers), and deactivated (existing\ncustom ledgers whose sort_code was not in the new template)."},"CustomCoaLedger":{"properties":{"name":{"type":"string","minLength":1,"title":"Name","description":"Ledger name"},"type":{"type":"string","title":"Type","description":"Ledger type: asset, liability, equity, revenue, expense"},"sub_type":{"type":"string","title":"Sub Type","description":"Ledger sub-type: current_assets, non-current_assets, transfers_between_accounts, uncategorized_assets, current_liabilities, non-current_liabilities, equity, operating_revenues, other_income, cost_of_goods_sold, operating_expenses, other_expenses"},"sort_code":{"type":"string","maxLength":20,"title":"Sort Code","description":"Numeric sort code for ordering (digits only, max 20 chars)"},"debit_credit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Debit Credit","description":"Debit/credit behavior: debit, credit. Optional - Teal auto-determines based on ledger type."},"report_cash_flow":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Report Cash Flow","description":"Include in cash flow reports. Optional."},"editable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Editable","description":"Whether line entries can be manually added or removed","default":true},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Ledger description"},"financial_account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financial Account Type","description":"Financial account type for Templated Mode. Options: bank_account, credit_card, payments, payroll, loan, prepaid_card, accounts_receivable, accounts_payable"}},"type":"object","required":["name","type","sub_type","sort_code"],"title":"CustomCoaLedger","description":"Schema for a ledger definition in a custom COA template.\n\nPer the Teal API (https://docs.teal.dev/api-reference/instances/create-an-instance),\nonly name, type, sub_type, and sort_code are required. Teal automatically determines\ndebit_credit based on the ledger type."},"CustomCoaTemplate":{"properties":{"ledgers":{"items":{"$ref":"#/components/schemas/CustomCoaLedger"},"type":"array","minItems":1,"title":"Ledgers","description":"List of ledger definitions for the custom COA"}},"type":"object","required":["ledgers"],"title":"CustomCoaTemplate","description":"Schema for a custom COA template that defines all ledgers."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Token","description":"API token authentication. Format: `Bearer dz_...`"}}},"security":[{"BearerAuth":[]}]}