Ellipse Gradient for Header

Odoo Accounting Integration Guide

Integrate Odoo Accounting with enterprise applications through Odoo’s external RPC and JSON APIs, configured webhook-style notifications, and Martini workflows.

Odoo Accounting integration options at a glance

Odoo Accounting exposes accounting data through Odoo platform models and external APIs rather than a separate Accounting-specific API. Integrations can use XML-RPC, JSON-RPC, or the newer JSON-2 HTTP API, depending on the Odoo version and deployment. Odoo also supports webhook-style outbound notifications for selected automated actions, while attachments are available through the ir.attachment model. Martini can authenticate with Odoo credentials or API keys, orchestrate scheduled and event-assisted synchronization, map accounting models, maintain checkpoints, and expose normalized APIs for downstream systems. Direct database access is deployment-specific and is not the standard approach for Odoo business integrations.

Integration pointSupported by Odoo Accounting?Common use casesHow Martini supports it
External XML-RPC and JSON-RPC APIsYesCall Odoo model methods such as search, read, search_read, create, write, unlink, and execute_kw for Accounting data.Martini can orchestrate HTTP-based API calls, map request and response payloads, and handle application-level errors in workflows.
JSON-2 HTTP APILimitedUse Odoo’s newer HTTP JSON model interface where the target Odoo version and deployment provide it.Martini can consume the documented HTTP JSON endpoint pattern after version, endpoint, and authentication behavior are confirmed.
REST APIsLimitedOdoo documents a JSON-2 HTTP API, but traditional Odoo integrations are primarily RPC-oriented rather than conventional resource-based REST.Martini can consume HTTP APIs, while implementation should preserve the specific Odoo JSON-2 request and model semantics.
Webhooks / outbound callbacksLimitedConfigured Odoo automation rules can send outbound HTTP notifications for selected events or conditions.Martini can receive webhook-style notifications and use them to trigger targeted retrieval or follow-up workflows; scheduled reads remain important for completeness.
Batch and incremental synchronizationLimitedRepeated model queries can synchronize bounded sets using write_date, create_date, state, invoice_date, or date filters.Martini can schedule workflows, persist watermarks, page through results, and advance checkpoints only after successful processing.
File and attachment APIsYesThe ir.attachment model provides access to invoice PDFs, vendor bill documents, receipts, and other linked files subject to permissions.Martini can retrieve metadata and content, preserve filenames and MIME types, and deliver documents to downstream systems.
AuthenticationYesAuthentication can use the Odoo database name, user login, password or API key, uid, bearer API keys for JSON-2, and model-level permissions.Martini can store credentials and API keys in secrets or environment configuration and apply them to workflow API calls.
Direct database accessNot confirmedDirect PostgreSQL access may exist in some self-managed deployments but is not the standard integration method, especially for Odoo Online.Martini can connect to databases where explicitly provisioned, but Odoo business integrations should normally use documented external APIs.

How Odoo Accounting exposes data and business events

Odoo RPC APIs

Odoo documents XML-RPC and JSON-RPC access to its model layer. Accounting integrations can call methods such as search, read, search_read, create, write, unlink, and execute_kw against models including account.move, res.partner, and account.payment.

Martini implementation pattern

Martini implementation pattern: a workflow authenticates to the Odoo database, constructs the required RPC request, retrieves or submits model data, maps the response, and classifies Odoo application errors separately from transport failures.

Implementation sequence

Authenticate with the Odoo database and API credentials
Build the model and method request
Retrieve or submit bounded accounting data
Map the response into the canonical model
Apply validation and document-state rules
Persist the checkpoint or error outcome

Odoo JSON-2 API

Newer Odoo versions document a JSON-2 HTTP API that exposes model operations using bearer API-key authentication. Availability and exact behavior depend on the Odoo version and deployment.

Martini implementation pattern

Martini implementation pattern: Martini consumes the confirmed JSON-2 HTTP endpoint, sends the required model operation and fields, validates the response, and keeps the API version and deployment configuration externalized.

Implementation sequence

Confirm JSON-2 availability for the Odoo environment
Store the bearer API key in Martini secrets
Call the required model operation over HTTP
Validate response status and application errors
Transform the returned model data
Record a checkpoint or route the failure

Odoo webhook-style notifications

Odoo automation rules can send outbound HTTP notifications for selected configured events or conditions. These notifications are not a universal event stream for every Accounting model change.

Martini implementation pattern

Martini implementation pattern: Martini receives the notification, validates its source and identifiers, retrieves the current Odoo resource when required, and uses scheduled incremental reads to cover events that are not emitted or are missed.

Implementation sequence

Receive the configured Odoo notification
Validate the event payload and source identifiers
Retrieve the current Odoo resource
Apply the relevant accounting business rules
Deliver the mapped result to the target
Record the event and reconciliation status

Odoo attachment model

Odoo exposes files and document metadata through the ir.attachment model, subject to the authenticated user’s permissions and record rules.

Martini implementation pattern

Martini implementation pattern: a workflow retrieves the attachment and its linked Accounting record, preserves binary content and metadata, and delivers the document to a downstream repository or application with duplicate protection.

Implementation sequence

Identify the source Accounting record
Retrieve authorized attachment metadata
Retrieve the attachment content
Preserve filename and MIME type
Map the source relationship to the target
Record delivery and duplicate-check information

Common Odoo Accounting integration patterns

Pattern 1: Synchronize invoices and vendor bills

When to use this pattern

Use this pattern when another finance, billing, reporting, or customer platform needs current Odoo Accounting documents. A scheduled incremental workflow is generally more reliable than depending only on selected webhook-style notifications.

Integration direction
Odoo Accounting
Martini
Salesforce
Example Mapping
Odoo Accounting FieldCanonical FieldTarget Field
account.move.idsourceDocumentIdExternal Invoice ID
account.move.namedocumentNumberInvoice Number
account.move.invoice_datedocumentDateInvoice Date
account.move.amount_totaltotalAmountTotal Amount
Martini implementation pattern

Martini authenticates to Odoo, queries account.move using bounded write_date, type, and state filters, retrieves related account.move.line, res.partner, account.tax, and account.account data, then maps and validates the target payload. The workflow stores a checkpoint only after successful delivery and routes permission, validation, and duplicate errors separately from transient failures.

Martini capabilities used
  • workflows
  • API consumption
  • scheduling
  • data mapping
  • business rules
  • error handling

Pattern 2: Publish payment status

When to use this pattern

Use this pattern when portals, CRM processes, order-management applications, or reporting platforms need payment information without directly querying Odoo.

Integration direction
Odoo Accounting
Martini
Salesforce
Example Mapping
Odoo Accounting FieldCanonical FieldTarget Field
account.payment.idpaymentIdExternal Payment ID
account.payment.amountpaidAmountAmount Paid
account.payment.datepaymentDatePayment Date
account.payment.statepaymentStatusPayment Status
Martini implementation pattern

A Martini workflow reads account.payment and related account.move data, normalizes payment status, dates, currency, and document references, then exposes the result through a Martini API or sends it to the target application. Stable Odoo identifiers support idempotency, while unmatched payments are retained for reconciliation rather than repeatedly retried.

Martini capabilities used
  • workflows
  • API consumption
  • API exposure
  • data mapping
  • validation
  • error handling

Pattern 3: Import customers and accounting master data

When to use this pattern

Use this pattern when a commerce, CRM, marketplace, or enterprise master-data system is the source for customers or vendors that must exist in Odoo Accounting.

Integration direction
Shopify
Martini
Odoo Accounting
Example Mapping
Odoo Accounting FieldCanonical FieldTarget Field
customer.external_idexternalPartyIdres.partner.x_external_id
customer.namepartyNameres.partner.name
customer.emailemailAddressres.partner.email
customer.tax_idtaxIdentifierres.partner.vat
Martini implementation pattern

Martini receives or retrieves source customer data, validates mandatory fields and references, checks for an existing stable external identifier, and creates or updates res.partner through Odoo’s model API. Business rules can map payment terms or fiscal positions where the target configuration supports them, and rejected records are reported without advancing the successful checkpoint.

Martini capabilities used
  • workflows
  • API consumption
  • data mapping
  • business rules
  • validation
  • idempotency handling

Pattern 4: Distribute invoice documents

When to use this pattern

Use this pattern when invoice PDFs, vendor bill documents, receipts, or supporting files must be delivered to a document-management system, procurement application, or customer-facing portal.

Integration direction
Odoo Accounting
Martini
Stripe
Example Mapping
Odoo Accounting FieldCanonical FieldTarget Field
ir.attachment.idattachmentIdExternal Document ID
ir.attachment.namefileNameDocument Name
ir.attachment.mimetypecontentTypeMIME Type
ir.attachment.res_idsourceRecordIdRelated Invoice ID
Martini implementation pattern

A Martini workflow identifies account.move documents, retrieves related ir.attachment metadata and content, preserves the Odoo record and attachment IDs, and sends the file to the target repository. Payload size, MIME type, duplicate delivery, access permissions, and transient transfer failures are handled explicitly.

Martini capabilities used
  • workflows
  • API consumption
  • file handling
  • data mapping
  • business rules
  • error handling

Applications commonly integrated with Odoo Accounting

Odoo Accounting can participate in broader commerce, customer, payment, tax, marketplace, and enterprise-finance landscapes. The exact flow depends on the Odoo version, installed modules, localization, and configuration. Martini can coordinate these exchanges through API-consuming workflows, validation, transformation, checkpointing, and controlled error handling.

Application Scenario Direction Martini Pattern
Salesforce Synchronize customers, invoices, payment status, and account balances between CRM processes and Odoo Accounting. Odoo Accounting → Martini → Salesforce Use scheduled incremental reads of res.partner, account.move, and account.payment, map them to Salesforce objects, apply company and status rules, and retry only transient delivery failures.
Shopify Send orders and customer information into Odoo for invoicing and accounting, with selected financial or fulfillment status returned where configured. Shopify → Martini → Odoo Accounting Receive or retrieve Shopify transaction data, validate customer and tax references, transform orders into Odoo-compatible model operations, and use stable external identifiers for idempotency.
Stripe Reconcile payment transactions with Odoo customer invoices and payment records. Stripe → Martini → Odoo Accounting Retrieve payment activity, match it to account.move and account.payment using durable references, normalize currencies and statuses, and route unmatched transactions for review.
WooCommerce Import online orders, customers, taxes, and payment information into Odoo Accounting. WooCommerce → Martini → Odoo Accounting Run a scheduled workflow that retrieves changed orders, enriches them with customer and tax information, validates required Odoo references, and writes model operations with duplicate protection.
PayPal Reconcile PayPal payment activity with Odoo invoices and payment records. PayPal → Martini → Odoo Accounting Consume payment data, map transaction identifiers and amounts to Odoo accounting objects, preserve currency and settlement details, and separate validation errors from retryable transport failures.
Avalara Exchange tax calculation or tax reporting information with Odoo Accounting where the relevant localization and configuration are installed. Odoo Accounting → Martini → Avalara Orchestrate tax-related requests around invoice processing, map tax codes and amounts, validate rounding and jurisdiction data, and record the Odoo document reference for reconciliation.
Amazon Seller Central Bring marketplace orders, fees, settlements, and customer data into Odoo for accounting and reconciliation. Amazon Seller Central → Martini → Odoo Accounting Process bounded settlement or order batches, transform marketplace fees and payments into the target Odoo model structure, and use checkpoints plus reconciliation exceptions for incomplete data.
Workday Exchange selected supplier, customer, payment, or financial reference data where Odoo and Workday coexist in an enterprise landscape. Workday → Martini → Odoo Accounting Use Martini workflows to validate master-data exchanges, map identifiers and organizational dimensions, call Odoo model APIs, and log rejected records for controlled correction.

How to build a Odoo Accounting integration in Martini

Objective

Confirm the Odoo version, deployment type, API availability, database name, and Accounting permissions before building the integration.

Instructions in Martini

  • Create a dedicated Odoo integration user where appropriate
  • Confirm XML-RPC, JSON-RPC, or JSON-2 availability
  • Store the password or API key in Martini secrets
  • Validate company, journal, model, and attachment permissions

Objective

Select scheduled polling, a configured Odoo webhook-style notification, or an API request based on completeness and latency requirements.

Instructions in Martini

  • Use a scheduler for broad or incremental synchronization
  • Use notifications as an event-assistance mechanism for selected rules
  • Expose a Martini API when downstream systems need controlled access
  • Define the synchronization watermark and processing scope

Objective

Retrieve Odoo models in bounded, ordered requests and include the related objects required for correct accounting interpretation.

Instructions in Martini

  • Use search followed by read or search_read where appropriate
  • Filter using write_date, create_date, state, invoice_date, or date
  • Retrieve related account.move.line, res.partner, account.tax, and account.account data as needed
  • Preserve Odoo database, company, and record identifiers

Objective

Coordinate API calls, enrichment, validation, target delivery, checkpoints, and exception handling as a maintainable Martini workflow.

Instructions in Martini

  • Separate transport, validation, permission, and business errors
  • Apply controlled concurrency and reasonable page sizes
  • Use reusable services or workflow stages for common model operations
  • Advance checkpoints only after successful processing

Objective

Convert Odoo model structures into canonical and target-specific formats while preserving accounting, tax, currency, and lifecycle semantics.

Instructions in Martini

  • Map header and line collections explicitly
  • Preserve currency, company, tax, analytic, and rounding context
  • Transform JSON or RPC response structures into target payloads
  • Validate required fields and stable external identifiers

Objective

Respect Odoo document states, access rules, duplicate prevention, and the distinction between drafts, posted documents, cancellations, and corrections.

Instructions in Martini

  • Prevent updates that are not valid for posted documents
  • Check existing external references before creating objects
  • Route missing references and permission failures for correction
  • Handle credit notes, reversals, and cancelled documents explicitly

Common Odoo Accounting data objects used in integrations

ObjectTypical UseCommon target systemsMartini handling
account.moveRepresents journal entries, customer invoices, vendor bills, credit notes, and debit notes.Salesforce, Shopify, Stripe, reporting platforms, and finance applicationsMartini retrieves or writes model data, filters by type and state, maps header and lifecycle fields, and maintains Odoo IDs and synchronization checkpoints.
account.move.lineContains individual journal-entry or invoice lines, including accounts, taxes, quantities, and amounts.Finance platforms, reporting warehouses, tax systems, and reconciliation toolsMartini retrieves related lines with the parent account.move, preserves currency and tax context, and transforms line collections into the target model.
res.partnerRepresents customers, vendors, and other business contacts.Salesforce, Shopify, WooCommerce, Workday, and customer platformsMartini validates stable external identifiers, applies company and access rules, and creates or updates partners without relying solely on names.
account.paymentRepresents customer and vendor payments and their accounting status.Stripe, PayPal, Salesforce, reporting platforms, and reconciliation systemsMartini maps payment references, dates, amounts, currencies, and statuses, then correlates payments with account.move records.
account.taxDefines sales, purchase, withholding, and other tax rules used by accounting documents.Avalara, commerce platforms, tax reporting systems, and finance applicationsMartini validates tax references and maps codes, rates, inclusivity, and rounding behavior before creating or transforming accounting data.
ir.attachmentStores files and documents linked to Odoo records, including invoice PDFs and receipts.Document-management systems, procurement platforms, customer portals, and archivesMartini retrieves attachment metadata and binary content where authorized, preserves the source relationship, and prevents duplicate delivery.

Authentication and security considerations

Authentication and access control

Odoo authentication can require a database name, user login, password or API key, and user ID details for RPC calls. JSON-2 uses a bearer API key where available. The authenticated user’s model permissions, company access, journal access, record rules, and attachment permissions determine what Martini can read or change.

Credential protection

Store Odoo passwords and API keys in Martini secrets or protected environment configuration. Use a dedicated integration identity with only the Accounting access required by the workflow.

Deployment and data boundaries

Confirm whether the environment is Odoo Online, Odoo.sh, or self-hosted, because API availability and subscription entitlement can differ. Avoid assuming that direct database access is available or appropriate for business integrations.

Operational considerations for Odoo Accounting integrations

Pagination and load

Use bounded queries, restricted fields, stable ordering, and incremental write_date or create_date filters. Hosting, worker, reverse-proxy, or subscription limits may affect concurrency and request volume.

Accounting state and idempotency

Distinguish draft, posted, and cancelled documents. Use the Odoo database plus record ID or a durable external reference to prevent duplicate invoices, payments, partners, and attachments.

Financial accuracy

Preserve company, currency, tax inclusivity, decimal precision, rounding, analytic dimensions, and exchange-rate context. Do not assume that totals can be reconstructed through simple multiplication.

Errors and schema change

Separate authentication, access-rights, validation, missing-reference, duplicate, transport, and temporary server errors. Odoo custom modules, Studio fields, localization fields, and selection values should be validated against the target instance.

Testing and monitoring

Test against representative companies, journals, tax configurations, document states, attachments, and custom fields. Monitor workflow outcomes, checkpoints, rejected records, retry counts, and reconciliation exceptions.

Why use Martini instead of scripts or point-to-point integrations?

Orchestrate more than one API call

Odoo Accounting integrations often require account.move, account.move.line, res.partner, account.tax, account.account, account.payment, and ir.attachment data. Martini workflows coordinate retrieval, enrichment, validation, target delivery, and checkpointing in one maintainable integration asset.

Separate business rules from transport

Martini can distinguish Odoo application errors from transport failures, apply document-state and idempotency rules, and route validation or permission issues for correction instead of retrying them indefinitely.

Support multiple integration styles

Martini can consume Odoo HTTP and RPC-oriented endpoints, receive selected webhook-style notifications, run scheduled synchronization, and expose a controlled API façade for downstream applications.

Reduce point-to-point coupling

Mappings, transformations, authentication configuration, reusable workflow logic, and operational handling are centralized so changes to an Odoo version, target application, or Accounting schema do not require duplicating script logic across every integration.

Frequently asked questions

How can Odoo Accounting be integrated with enterprise systems?

Odoo Accounting can be integrated through Odoo’s XML-RPC and JSON-RPC model APIs, the JSON-2 HTTP API where available, configured webhook-style automation notifications, and the ir.attachment model for documents. Scheduled incremental synchronization is commonly used for complete coverage.

Can Martini integrate with Odoo Accounting?

Yes. Martini can consume Odoo’s documented external APIs, receive selected webhook-style notifications, retrieve attachments, orchestrate synchronization workflows, map Accounting models, and expose normalized APIs for downstream systems.

Do I need a connector to integrate Odoo Accounting with Martini?

No. A dedicated Odoo Accounting connector is not required. Martini can use Odoo’s confirmed native RPC or JSON API mechanisms, configured outbound notifications, authentication methods, and attachment model access.

Is there any extra Lonti cost to integrate Odoo Accounting with Martini?

Lonti does not charge an additional per-connector or per-vendor fee to integrate Odoo Accounting. Integrations are subject to the provisioned capacity of the Martini environment. Separate costs may apply from Odoo, infrastructure, or other third-party systems based on subscription, usage, and deployment model.

Which Odoo APIs should Martini use?

The appropriate API depends on the Odoo major version and deployment. Odoo documents XML-RPC and JSON-RPC, while newer versions document JSON-2. The target environment should be checked for API availability, subscription entitlement, endpoint behavior, and model customizations before implementation.

Does Odoo Accounting provide events or webhooks?

Odoo supports webhook-style outbound HTTP actions for selected configured automation rules. This is not a universal event stream for every Accounting change, so Martini should generally combine notifications with scheduled incremental API reads.

How does Martini synchronize Odoo Accounting data?

Martini can query models such as account.move and account.payment using write_date, create_date, state, invoice_date, or date filters, process bounded pages, map related objects, and persist a checkpoint after successful delivery. The exact watermark strategy should account for updates to headers and related lines.

How does Martini handle Odoo mapping, errors, and duplicates?

Martini maps Odoo model fields and related collections into canonical and target structures, validates tax and currency context, and applies business rules for document states. Workflows can use stable Odoo IDs or external references for idempotency, retry transient failures, and route validation or permission errors for correction.