ml-connector
DeltekAdobe Commerce

Deltek and Adobe Commerce integration

Deltek runs project accounting, billing, and finance for professional services and project-based firms. Adobe Commerce runs the online storefront and B2B company accounts. Connecting the two means web orders, the invoices captured against them, and refunds flow into Deltek without re-keying, and the client and buyer masters stay in agreement. ml-connector handles the different APIs on each side and moves the data on a schedule you control. Because Adobe Commerce has no GL account resource, the general ledger stays in Deltek where it belongs.

How Deltek works

Deltek Vantagepoint exposes Firms, Contacts, Employees, Projects, AP invoices, AR invoices, journal entries, cash receipts, and GL accounts through a REST JSON API on a tenant-specific deltekfirst.com URL, with an interactive reference per version. It authenticates with OAuth 2.0 using the password grant, which must be explicitly enabled in settings, and the bearer token is refreshed before its expiry. Webhooks exist only as workflow-triggered callbacks configured per hub object, carry no HMAC signature, and authenticate by basic or key fields on the URL, so finance records are most reliably read by polling. Older Costpoint sites integrate through SOAP web services or file-based preprocessor templates instead.

How Adobe Commerce works

Adobe Commerce exposes orders, invoices, credit memos, customers, B2B companies, and products through its REST Commerce Web APIs, with paths under a /V1/ prefix scoped by store view on PaaS or by header on the Cloud Service. PaaS authenticates with OAuth 1.0a integration credentials signed with HMAC-SHA256, or an admin bearer token, while the Cloud Service uses IMS OAuth 2.0 client credentials with tokens that expire in about 24 hours. Purchase orders, negotiable quotes, and company accounts require the B2B extension. Adobe Commerce supports synchronous outbound webhooks signed with HMAC-SHA256 plus async Adobe I/O Events, but exposes no GL chart-of-accounts resource.

What moves between them

The main flow runs from Adobe Commerce into Deltek. ml-connector reads sales orders, the invoices captured against them, and credit memos from Adobe Commerce and posts them into Deltek Vantagepoint as AR invoices and journal entries, mapped to the matching Deltek project, client Firm, and GL accounts. Customer and B2B company records flow the same direction so the Deltek Firm master reflects storefront and corporate buyers. Each order line is aligned to a Deltek project so revenue lands on the right job. GL postings stay in Deltek, since Adobe Commerce has no GL resource, so ml-connector never writes ledger entries back to the store.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Adobe Commerce side it signs each PaaS request with the OAuth 1.0a consumer and access tokens using HMAC-SHA256, or requests and refreshes an IMS OAuth 2.0 bearer token for the Cloud Service before its roughly 24-hour expiry, and it scopes every call to the right store view by URL path or header. On the Deltek side it requests a password-grant OAuth 2.0 token against the tenant deltekfirst.com URL per customer and refreshes it before it expires, and it requires the API user role to have full field visibility so fee and amount fields do not return as zero. Because Deltek's webhooks are workflow-only and unsigned, ml-connector polls Adobe Commerce orders, invoices, and credit memos on a schedule rather than relying on a push, paging through results with searchCriteria and the total_count field. Clients and projects are mapped first, so every order resolves to a Deltek Firm and a project that already exist. Neither side offers an idempotency key header, so ml-connector dedupes on the Adobe Commerce increment_id and a BullMQ jobId, and checks for an existing Deltek invoice number before posting, which avoids double-booking a re-read order. Where Adobe Commerce webhooks are enabled it can take a push as a trigger while keeping the synchronous endpoint fast so storefront operations do not stall. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized architecture and engineering firm runs Deltek Vantagepoint for project accounting and billing, and sells standardized design templates and document packages to clients through an Adobe Commerce storefront. Before the integration, a billing clerk printed each web order and keyed it into Vantagepoint as an AR invoice by hand, which meant orders sat for hours, project codes were sometimes typed wrong, and the receivables in the ledger never matched the storefront totals. With Deltek and Adobe Commerce connected, each order and its captured invoice flow into Vantagepoint within the polling window, allocated to the correct client Firm and project, and refunds post as credit notes. Revenue is recognized sooner, the keying errors are gone, and the project accounts reconcile without a month-end scramble.

What you can do

  • Post Adobe Commerce sales orders and captured invoices into Deltek Vantagepoint as AR invoices and journal entries.
  • Map each Adobe Commerce order line to a Deltek project so revenue lands on the right job.
  • Keep the Deltek Firm master aligned with Adobe Commerce storefront buyers and B2B company accounts.
  • Authenticate Adobe Commerce with OAuth 1.0a or IMS OAuth 2.0, and Deltek with its tenant password-grant token.
  • Poll on a schedule with increment_id and jobId dedup, retries, and a full audit trail on every record.

Questions

Which direction does data move between Deltek and Adobe Commerce?
The main flow is Adobe Commerce into Deltek. Sales orders, captured invoices, credit memos, and customer records move from Adobe Commerce into Deltek as AR invoices, journal entries, and Firms, while each order line is aligned to a Deltek project. Adobe Commerce has no GL account resource, so the general ledger stays in Deltek and ml-connector never writes ledger entries back to the store.
How does the integration handle Adobe Commerce PaaS versus the Cloud Service?
ml-connector supports both deployment models. For PaaS it signs each request with OAuth 1.0a integration credentials using HMAC-SHA256, and for the Cloud Service it requests and refreshes an IMS OAuth 2.0 bearer token before its roughly 24-hour expiry. It also scopes every call to the correct store view, by URL path on PaaS or by header on the Cloud Service.
Does Deltek push orders, or does ml-connector poll for them?
ml-connector polls, because Deltek's webhooks are workflow-triggered callbacks without an HMAC signature rather than a reliable event stream. It reads Adobe Commerce orders, invoices, and credit memos on a schedule, paging with searchCriteria and total_count, and posts them into Deltek over its REST API. Where Adobe Commerce webhooks are enabled it can take a push as a trigger while keeping the synchronous endpoint fast so storefront operations are not held up.

Related integrations

Connect Deltek and Adobe Commerce

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

Get started