All notable changes to the codat Elixir package will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.1.0 - 2025-05-14
Added
Core Infrastructure
Codat.Client— typed client struct with full config validation viaNimbleOptionsCodat.Config— merged configuration from app config, env vars, and runtime optionsCodat.Error— structured error type withtype,message,correlation_id,retry_afterCodat.Telemetry— telemetry events for all HTTP operations ([:codat, :request, :start/stop/exception])Codat.QueryBuilder— composable query expression builder for Codat's filter languageCodat.Pagination— page struct,Stream-based lazy pagination, and concurrentfetch_all/2Codat.API—usemacro that generates standard CRUD, streaming, and model-inspection functions
HTTP Client
Codat.HTTP.Client—Req+Finchbased client with:- Base64 API key authentication
- Exponential backoff retry with full jitter (configurable
max_retries,retry_base_delay) - Rate-limit awareness: auto-pauses on
429and retries afterRetry-Afterheader - Structured
%Codat.Error{}on all failure paths - Telemetry events on every request
Platform API (Codat.Platform.*)
Companies— list, get, create, update, delete, stream, get_access_tokenConnections— list, get, create, delete, unlink, get_authorization_urlAPIKeys— list, create, deleteWebhooks— list, get, create, update, delete, enable, disable, messagesPushOperations— list, get, poll_until_done (with configurable polling interval and timeout)DataStatus— get all, get for type, refresh all, refresh single type, pull operation historyFiles— list, upload, download, download_all (zip)
Accounting API (Codat.Accounting.*)
Invoices— full CRUD + attachments, create/update modelBills— full CRUD + attachmentsCustomers— full CRUDSuppliers— full CRUDAccounts— list, get, createBankAccounts— list, get, create, updateBankTransactions— list, get, createPayments— list, get, createCreditNotes— full CRUDBillPayments— list, get, create, deleteBillCreditNotes— full CRUDJournalEntries— list, get, create, deleteJournals— list, get, createItems— list, get, createPurchaseOrders— full CRUDTransfers— list, get, createDirectCosts— list, get, create, deleteDirectIncomes— list, get, createTaxRates— list, getTrackingCategories— list, getCompanyInfo— get, refreshBalanceSheet— get with period optionsProfitAndLoss— get with period optionsCashFlowStatement— get with period options
Bank Feeds API (Codat.BankFeeds.*)
SourceAccounts— list, get, create, update, delete, update_batchTransactions— list, get, createAccountMapping— get_options, setConnections— get_info
Lending API (Codat.Lending.*)
AccountsReceivable— invoices, customers, payments, credit_notesAccountsPayable— bills, suppliers, bill_paymentsBanking— accounts, transactions, transaction_categoriesFinancialStatements— balance_sheet, profit_and_loss, cash_flow_statementDataIntegrity— status, summaries, detailsExcelReports— generate, status, downloadCompanyInfo— get
Expenses API (Codat.Expenses.*)
Sync— initialize, list, get, complete, get_transaction_updatesTransactions— create, updateAccounts— list, getCustomers— list, getSuppliers— list, getTaxRates— list, getTrackingCategories— list, getMappings— get_options
Bill Pay API (Codat.BillPay.*)
Bills— list, get, stream, fetch_allSuppliers— list, get, stream, fetch_allPayments— list, get, create, deleteCompanies— get_mapping_optionsConnections— get_info
Webhooks (Codat.Webhooks.*)
Verifier— Svix-compatible HMAC-SHA256 signature verification with replay protectionPlug— drop-inPlugfor Phoenix/Plug apps with body caching, verification, and dispatchBodyReader—Plug.Parsersbody reader that preserves the raw body for signature verificationHandler—@behaviourfor implementing typed event handlersNoOpHandler— log-and-ignore handler for dev/testBroadcastHandler— PubSub broadcast handler (requires Phoenix.PubSub)Dispatcher— macro-based event router supporting string, list, regex, and catch-all patternsEventTypes— compile-time constants (macros) and runtime helpers for all event type stringsVerificationError— structured exception raised byverify!/4