ml-connector
DeltekSPS Commerce

Deltek and SPS Commerce integration

Deltek Vantagepoint runs project accounting and billing. SPS Commerce runs the EDI network that connects you to retail trading partners. Connecting the two means a purchase order a retailer sends through SPS becomes a project and an AR invoice in Deltek without re-keying, and the invoice Deltek produces goes back out to the retailer as a compliant EDI 810. ml-connector handles the very different APIs on each side and moves documents on a schedule you control.

How Deltek works

Deltek Vantagepoint exposes firms, contacts, projects, employees, AP invoices, AR invoices, journal entries, cash receipts, and GL accounts through a REST JSON API on a tenant-specific URL of the form company.deltekfirst.com. It authenticates with OAuth2 using the password grant against a per-tenant token endpoint, so there is no shared hostname, and Allow Password Grant Type must be enabled in the instance. Vantagepoint webhooks are workflow-driven and carry no HMAC signature, and there is no confirmed REST endpoint for purchase orders, so finance records are read by polling. The older Costpoint product is SOAP-based and is not the target here.

How SPS Commerce works

SPS Commerce is an EDI network intermediary, not an ERP. It exposes EDI transaction sets as RSX 7.7.7 JSON through its REST Transaction API, where purchase orders (850) are inbound documents the retailer sends and invoices (810), purchase order acknowledgments (855), and advance ship notices (856) are outbound documents the supplier pushes. Every call uses an OAuth2 client-credentials bearer token, with the token issued from api.spscommerce.net while data calls go to api.spscommerce.com. SPS holds no GL accounts, vendor master, or payment records, and production webhooks are still under development, so inbound documents are retrieved by polling with cursor-based pagination.

What moves between them

Documents move in both directions, but the source of each is fixed by the EDI network. ml-connector polls SPS Commerce for inbound retailer purchase orders (EDI 850) and creates the matching project and AR invoice records in Deltek, mapping each line item to a Deltek project and GL account. When a Deltek AR invoice is finalized, ml-connector reads it and pushes an outbound EDI 810 invoice to SPS Commerce for delivery to the same retailer, referencing the original purchase order number. Purchase order acknowledgments (855) can also be sent back as orders are accepted in Deltek. Polling cadence is configurable, typically every 5 to 15 minutes for inbound orders, while outbound invoices are sent as Deltek invoices complete.

How ml-connector handles it

ml-connector stores both credential sets encrypted and runs two separate OAuth2 flows: the SPS client-credentials token from api.spscommerce.net for the Transaction API, and the Deltek password-grant token against the customer tenant URL, refreshing each when a call returns 401. SPS payloads are not raw JSON, so every outbound invoice is built into the RSX 7.7.7 envelope, and inbound purchase orders are unwrapped from RSX before they map to Deltek. The retailer trading partner ID, provisioned during SPS onboarding rather than discoverable through the API, is mapped to the Deltek client firm and project so each order lands in the right place. Because neither side offers production webhooks for these documents, ml-connector polls SPS for new orders using its cursor and watches Deltek for finalized invoices, deduplicating on purchaseOrderNumber and invoiceNumber since neither API provides an idempotency key. On 429 responses it backs off with jitter and retries, and every document carries a full audit trail with error replay if a downstream call fails.

A real-world example

A mid-sized consumer goods supplier, roughly 80 staff, runs Deltek Vantagepoint for project accounting and client billing and sells into two national retailers that both require EDI through SPS Commerce. Before the integration, a coordinator logged into the SPS portal each morning, printed the new purchase orders, and keyed them into Deltek as projects and invoices, then rebuilt each finished invoice in the SPS portal by hand to meet the retailer EDI format. Orders were missed on busy days and invoices were rejected for formatting errors. With Deltek and SPS Commerce connected, retailer orders flow into Deltek as projects and AR invoices automatically, and finished invoices go back out as compliant EDI 810 documents, so the coordinator reviews exceptions instead of re-typing every order.

What you can do

  • Pull inbound retailer purchase orders (EDI 850) from SPS Commerce and create matching Deltek projects and AR invoices.
  • Read finalized Deltek AR invoices and send them to SPS Commerce as outbound EDI 810 invoices for the retailer.
  • Build and parse the SPS RSX 7.7.7 envelope so Deltek records and EDI documents map cleanly in both directions.
  • Bridge SPS client-credentials tokens and the Deltek tenant password-grant login, refreshing each on expiry.
  • Poll both systems on a schedule you set, with deduplication, backoff on rate limits, and a full audit trail per document.

Questions

Which direction does data move between Deltek and SPS Commerce?
Purchase orders move from the retailer through SPS Commerce into Deltek as projects and AR invoices, and finished invoices move from Deltek back to SPS Commerce as outbound EDI 810 documents. The direction of each document is fixed by the EDI network, since a purchase order is always something the retailer sends and an invoice is always something the supplier sends. SPS Commerce carries the documents but is never the source of truth for the financial record.
Does SPS Commerce hold GL accounts or vendor data that sync into Deltek?
No. SPS Commerce is an EDI network, so it holds purchase orders, invoices, and ship notices in transit but no GL accounts, vendor master, or payment records. The integration is shaped around the documents SPS does carry, mapping purchase order line items to Deltek projects and GL accounts on the Deltek side. The chart of accounts and any payment handling stay entirely within Deltek.
How does the integration get new orders if neither system has production webhooks?
Deltek cloud webhooks are workflow-driven with no signature, and SPS Commerce webhook support is still under development, so ml-connector polls instead. It checks SPS Commerce on a configurable interval, typically every 5 to 15 minutes, using its cursor-based pagination to fetch only new orders, and watches Deltek for finalized invoices to push outbound. Documents are deduplicated on the purchase order and invoice numbers because neither API offers an idempotency key.

Related integrations

Connect Deltek and SPS Commerce

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

Get started