ml-connector
Microsoft Dynamics NAVStripe

Microsoft Dynamics NAV and Stripe integration

Microsoft Dynamics NAV runs the accounting and order management for small and mid-size businesses, while Stripe processes the online payments and subscription billing. Connecting them keeps your customer records, invoices, and payment status synchronized across both systems. New customers added to NAV appear in Stripe without manual entry, payments received in Stripe automatically post to your NAV general ledger and accounts receivable, and subscription data stays aligned so invoicing is never out of step.

How Microsoft Dynamics NAV works

Microsoft Dynamics NAV is an on-premises and cloud ERP for small to mid-size businesses that exposes customers, vendors, purchase orders, sales invoices, accounts, and general ledger entries through OData v4 REST and SOAP web services. Authentication is handled via OAuth 2.0 client credentials through Microsoft Entra ID (required for Business Central online) or via Basic auth with a web service access key. NAV supports both webhooks (which expire after 3 days and must be renewed) and polling to notify connectors of changes. Webhook events are verified using a clientState field; GL accounts and entries are read-only once posted.

How Stripe works

Stripe is a cloud payments platform that processes online transactions, manages subscriptions, and handles invoicing via REST API. All requests require an API key (Secret key) sent via HTTP Basic Auth or Bearer token, and there is no OAuth 2.0 for server-to-server connections. Stripe delivers events through webhooks via HTTPS POST with HMAC-SHA256 signature verification; webhook events include payment, invoice, customer, subscription, and charge notifications with at-least-once delivery and a 5-minute replay window. Stripe has no vendors, purchase orders, GL accounts, or employees; it is read-only for historical financial data and processes only payments and subscription billing.

What moves between them

Customer records flow from Microsoft Dynamics NAV into Stripe so payment acceptance reflects current customers. Payment and invoice events from Stripe flow back into NAV's general ledger as posted transactions: customer payments post to accounts receivable, subscription invoices update revenue recognition. Subscription and customer reference data align in both directions so billing in Stripe matches the customer master in NAV. The flow is triggered by NAV webhook notifications (if subscribed and active within the 3-day window) or by polling NAV every 30 to 60 minutes, and by Stripe webhook events delivered in near real-time.

How ml-connector handles it

ml-connector stores both credential sets encrypted and refreshes NAV's OAuth 2.0 bearer token when a call returns 401. It presents the Stripe API key via HTTP Basic Auth on every request and verifies incoming Stripe webhook signatures using HMAC-SHA256, rejecting any unsigned or invalidly signed event. Because NAV webhooks expire after 3 days, ml-connector monitors subscription age and renews them before expiry to maintain the push stream; it also polls NAV periodically as a fallback. Payment amounts and invoice line items are mapped to NAV's accounts and dimensions (customer, cost center) so every posted entry lands on the correct GL account and is tied to the right customer. When Stripe rate limits a request or NAV returns 429, ml-connector backs off with exponential jitter and retries; when a webhook renewal fails, it logs the event and falls back to polling until the subscription is restored. Every record carries a full audit trail and can be replayed if a downstream post fails.

A real-world example

A mid-sized B2B software company runs Microsoft Dynamics NAV for accounting and customer management and uses Stripe to accept customer payments and manage annual subscriptions. Before the integration, the finance team received Stripe payment notifications by email, manually entered each customer payment into NAV's accounts receivable, and reconciled invoices by hand at month-end. With the integration active, each payment received in Stripe posts automatically to the matching customer's account in NAV, subscription invoices update NAV's revenue records, and the accounts receivable ledger stays current with zero re-keying. Month-end close involves no Stripe reconciliation work, and the finance team can focus on analysis instead of data entry.

What you can do

  • Sync customer records from Microsoft Dynamics NAV into Stripe so payment acceptance reflects your current customer base.
  • Post Stripe payments and invoices automatically into NAV's general ledger and accounts receivable, mapped to the correct customer and GL account.
  • Manage NAV webhook subscriptions and renew them before the 3-day expiry window to keep the push stream active.
  • Authenticate NAV with OAuth 2.0 token refresh and Stripe with API key validation, verifying webhook signatures on both sides.
  • Retry failed posts with exponential backoff, track subscription health, and maintain a full audit trail for every transaction.

Questions

How does ml-connector handle NAV webhook expiry and keep the connection active?
Microsoft Dynamics NAV webhooks expire after 3 days and must be renewed before that window closes. ml-connector tracks the age of each subscription and renews it automatically before expiry, so the push stream from NAV remains active. If a renewal fails, ml-connector falls back to polling NAV every 30 to 60 minutes as a backup until the subscription is restored.
Which direction do payments and invoices flow between NAV and Stripe?
The main flow is from Stripe back into NAV. When Stripe receives a payment or generates an invoice, those events post into NAV's general ledger and accounts receivable, mapped to the customer and GL account. Customer records flow from NAV into Stripe so your payment gateway reflects your current customer base. Subscription and customer reference data can align in both directions.
How are Stripe webhook signatures verified and what happens if verification fails?
ml-connector verifies Stripe webhook signatures using HMAC-SHA256 with your Stripe endpoint secret. Every webhook event includes a Stripe-Signature header; ml-connector compares it against the hash of the raw request body. If verification fails or the signature is missing, the event is rejected immediately and not processed. This prevents spoofed or tampered events from posting false transactions into NAV.

Related integrations

Connect Microsoft Dynamics NAV and Stripe

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

Get started