Odoo and Adyen integration
Odoo tracks sales, invoices, and customer accounts. Adyen processes and settles payments across online, mobile, and in-person channels. Connecting them keeps your cash position accurate and reconciled. Payment captures and settlements flow from Adyen into Odoo's general ledger without re-keying, customer payment status stays in sync, and disputes are tracked as credit memos. ml-connector bridges the two by listening to Adyen webhooks and importing settlement reports on a schedule you control.
What moves between them
Payment events and settlement data flow from Adyen into Odoo. When a payment is authorized or captured through Adyen, ml-connector receives the webhook notification, matches the payment to an Odoo invoice by amount and customer, and posts the receivable into Odoo's general ledger. After each settlement period, Adyen reports are imported to reconcile cash received against invoices paid. Refunds and chargebacks flow as credit memos in Odoo. Customer sync is one-way: Odoo customers are read to match incoming Adyen payments, but not written back.
How ml-connector handles it
ml-connector subscribes to Adyen webhooks using a registered endpoint and verifies every notification with HMAC-SHA256. When a CAPTURE or REFUND event arrives, it looks up the matching Odoo invoice by amount, date, and customer email, then posts the payment into the correct GL account in Odoo via the JSON-2 API. Settlement reports are pulled daily from Adyen and compared against Odoo cash accounts to flag reconciliation gaps. Disputed transactions trigger credit memo entries in Odoo so the finance team can track them separately. Adyen API keys and webhook secrets are stored encrypted in ml-connector. Because Odoo does not push payment updates and Adyen does not read invoices, the sync is one-directional and fully asynchronous: Odoo acts as the invoice ledger and Adyen as the authoritative source of payment and settlement truth.
A real-world example
A mid-sized e-commerce business runs Odoo for order management, invoicing, and accounting, and uses Adyen for online payment processing across web and mobile channels. Before integration, the finance team reconciled Adyen settlement statements to Odoo cash accounts by hand every morning, manually flagged disputed transactions as credit memos, and spent days chasing discrepancies when payment amounts did not match invoice totals. With Odoo and Adyen connected, each Adyen capture flows into Odoo as a posted payment, settlement totals are reconciled automatically against the cash account, and disputes are logged as credit memos the same day. Month-end close is faster because the cash account is already reconciled, and the payment-lookup step is eliminated.
What you can do
- Post Adyen payment captures, refunds, and cancellations into Odoo's general ledger, allocated to the correct receivable accounts.
- Match Adyen payments to Odoo invoices by amount, date, and customer, and update invoice status when payment is received.
- Reconcile Adyen settlement reports against Odoo cash accounts daily, flagging discrepancies and aging items.
- Track chargebacks and payment disputes in Odoo as credit memos with full audit detail for the finance team.
- Verify Adyen webhook signatures with HMAC-SHA256 and retry failed posts to Odoo with exponential backoff and full error logging.
Questions
- Which direction does data move between Odoo and Adyen?
- Payment events and settlement data flow from Adyen into Odoo. Captures, refunds, and disputes post into Odoo's general ledger and are matched to invoices. Customer and invoice data are read from Odoo to match incoming payments, but not written back to Adyen, since Adyen is a payment processor with no concept of invoices or GL accounts.
- How does ml-connector verify Adyen webhooks and prevent replay attacks?
- Every Adyen webhook arrives with an HMAC-SHA256 signature in the notification header. ml-connector verifies the signature using the webhook secret scoped to the Adyen account, rejecting any notification with an invalid signature. This prevents tampered or replayed events from posting into Odoo.
- What happens if an Odoo invoice amount does not match the Adyen payment amount?
- ml-connector flags the mismatch in the audit log and the Adyen payment is held for manual review rather than posting immediately. The finance team can then investigate the difference, adjust the Odoo invoice if needed, and manually trigger the post once resolved. This prevents out-of-balance GL entries.
Related integrations
More Odoo integrations
Other systems that connect to Adyen
Connect Odoo and Adyen
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started