ml-connector
OdooJira

Odoo and Jira integration

Odoo runs procurement and accounting across your business. Jira tracks the work your teams execute. Connecting Odoo to Jira keeps your procurement pipeline visible to the project team without manual ticket creation. New purchase orders and invoices in Odoo become tracked issues in Jira, with status changes flowing back to Odoo. Your team stays aligned on what is being procured, what is invoiced, and what still needs attention.

How Odoo works

Odoo is an open-source ERP covering accounting, purchasing, inventory, and HR. It exposes purchase orders, invoices, GL accounts, partners, and analytic accounts through XML-RPC and JSON-2 REST APIs, authenticated with an API key paired with username login. Write-date filtering supports high-water-mark polling for incremental syncs. Odoo Online, Odoo.sh, and self-hosted instances each use different base URLs. Webhooks via Automated Actions exist but are not production-grade, so polling is the recommended approach for reliable integrations.

How Jira works

Jira is Atlassian's project and issue tracking platform. It exposes issues, projects, users, and workflows through REST API, authenticated via OAuth 2.0 (recommended) or Basic auth with email and API token. Webhooks are registered via REST and deliver events for issue creation, updates, and deletions with HMAC-SHA256 signature verification. Webhooks expire after 30 days and must be refreshed. Jira has no native accounting, invoice, or purchase order entities, so integration flows are workflow-driven: procurement events trigger task creation or issue updates rather than financial record synchronization.

What moves between them

The main flow moves from Odoo into Jira. ml-connector polls Odoo for new and updated purchase orders and invoices at a configurable interval, creates or updates corresponding Jira issues in a designated project, and links them to the relevant Jira issue types and assignees. If Jira webhooks are enabled, status changes on issues flow back to Odoo as custom fields on the source purchase order or invoice record, closing the feedback loop. The flow respects Odoo's field-level access rights and does not override Jira's user and project permissions.

How ml-connector handles it

ml-connector stores Odoo API key and Jira OAuth2 credentials encrypted. On the Odoo side, it polls the purchase.order and account.move (invoice) models using write_date filters to fetch only changed records since the last poll, and respects the integration user's Odoo access rights and record rules. On the Jira side, it creates or updates issues via the Issue API, maps Odoo document types to Jira issue types (for example, purchase orders to Tasks or Stories), and populates custom fields with Odoo references. If Jira webhooks are registered, ml-connector listens for issue state changes and writes them back to Odoo as custom fields via the JSON-2 API. Webhook signatures are verified using HMAC-SHA256 before processing. Polling retries on Odoo connection failures with exponential backoff. Jira webhook expiry is tracked so webhooks are refreshed before the 30-day window closes, preventing silent sync failure.

A real-world example

A mid-sized services firm runs Odoo for procurement and accounting, and uses Jira for project and task management across delivery teams. Before the integration, procurement sent purchase order and invoice notifications via email, and project managers manually created Jira tasks to track supplier deliveries and invoicing status. With Odoo and Jira connected, each new purchase order is automatically added to Jira as a tracked task in the procurement project, tagged with the supplier and delivery date. As invoices are posted in Odoo, Jira tasks are updated with the invoice reference and amount. The delivery team sees real-time procurement status without email hunting, and finance has a clickable audit trail linking each Jira task to the underlying Odoo document.

What you can do

  • Create Jira issues from Odoo purchase orders and invoices, with configurable issue types and project assignments.
  • Poll Odoo at configurable intervals and filter by write-date to sync only changed records.
  • Map Odoo vendors, dates, amounts, and other fields to Jira issue custom fields and descriptions.
  • Verify Jira webhook signatures with HMAC-SHA256 and refresh webhook registrations before the 30-day expiry.
  • Authenticate Odoo with API keys and Jira with OAuth2 or Basic auth, with encrypted credential storage.

Questions

Can Jira issues sync back to Odoo after an issue is updated?
Yes, if Jira webhooks are registered and enabled. ml-connector listens for issue state changes and writes them back to Odoo as custom fields on the source purchase order or invoice. This creates a two-way feedback loop so procurement staff can see task completion status without logging into Jira.
What if a purchase order or invoice is updated in Odoo between polls?
ml-connector filters Odoo records by write_date and polls at a configurable interval, so it catches all changes since the last poll. If a record is updated multiple times between polls, ml-connector syncs the latest version. High-water-mark timestamps prevent duplicate issue creation.
Does Jira's 30-day webhook expiry cause sync failures?
No. ml-connector tracks webhook expiry and refreshes registrations before the 30-day window closes, so the integration does not go silent. Expiry and refresh status are logged and visible in the audit trail for debugging.

Related integrations

Connect Odoo and Jira

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started