ml-connector
DeltekStripe

Deltek and Stripe integration

Deltek Vantagepoint runs project accounting and billing for professional services firms. Stripe collects the money. Connecting the two lets a client invoice raised in Deltek be presented and paid through Stripe, and the resulting payment flows back into Deltek as a cash receipt against the correct project without re-keying. ml-connector reads AR invoices from the Deltek REST API, creates or updates the matching Stripe customer and invoice, and listens for Stripe payment events to keep the Deltek ledger current. Because Stripe is payer-side and has no vendors, purchase orders, or GL of its own, the flow is built around the records both systems actually share: client invoices and the payments against them.

How Deltek works

Deltek Vantagepoint exposes client firms, contacts, employees, and projects through Hub REST APIs, and AR invoices, AP invoices, journal entries, cash receipts, and payments through Accounting Transaction REST APIs, all under a tenant-specific deltekfirst.com base URL. Authentication is OAuth2 using the password grant, which must be explicitly enabled, returning a bearer token that expires in about an hour and is renewed with a refresh token. Vantagepoint webhooks are workflow-driven and carry no HMAC signature, so cloud connectors read finance records by page-based polling. Legacy Costpoint is SOAP and pull-only.

How Stripe works

Stripe exposes customers, invoices, invoice line items, payment intents, charges, refunds, payouts, and balance transactions through a v1 REST API, authenticated with a secret API key sent over HTTP Basic auth; there is no OAuth for standard server use. Amounts are in the smallest currency unit, updates use POST rather than PATCH, and an invoice must be finalized before it can be paid. Stripe pushes real events to a registered endpoint, signed with a Stripe-Signature HMAC-SHA256 header verified against the raw request body, and retries failed deliveries for up to three days. Stripe has no vendors, purchase orders, or general ledger, so GL reconciliation relies on metadata and balance transactions.

What moves between them

The main flow runs from Deltek into Stripe. ml-connector reads finalized AR invoices and their client firms from Deltek Vantagepoint, creates or updates the matching Stripe customer, and creates a Stripe invoice with the same line items so the client can pay by card or bank. Payment events flow the other direction: when Stripe reports an invoice paid, a charge succeeded, or a refund, ml-connector posts a cash receipt and updates AR payment status in Deltek against the originating project. Client firm and contact details are kept aligned so every Stripe customer ties back to a Deltek firm. Polling for new Deltek invoices runs on a schedule you set, while Stripe payment confirmations arrive as near-real-time webhook events.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Deltek side it accepts the full tenant deltekfirst.com URL and database name per customer, requests an OAuth2 password-grant token, and renews it with the refresh token when a call returns 401. On the Stripe side it sends the secret API key over HTTP Basic auth and attaches an Idempotency-Key to every invoice and customer create so a retry never produces a duplicate. Inbound Stripe events are verified against the Stripe-Signature HMAC over the raw body, deduplicated on the event id, and treated as triggers to re-fetch the current object from Stripe, since events are unordered and delivered at least once. A Deltek AR invoice maps to a Stripe invoice and its client firm to a Stripe customer; a Stripe paid invoice or charge maps back to a Deltek cash receipt keyed by project and original invoice number. Because Vantagepoint has no signed connector webhook, new invoices are found by page-based polling, and the connector checks for an existing record before posting because Deltek has no native idempotency. Stripe rate limits return HTTP 429, so ml-connector backs off and retries with jitter. The Deltek API user must have full field visibility, or fee and amount fields can return as zero. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A 90-person architecture and engineering firm runs Deltek Vantagepoint for project accounting and client billing. Before the integration, the billing team emailed PDF invoices and waited on checks and manual bank transfers, then re-entered each payment into Vantagepoint as a cash receipt and matched it to the right project by hand, which left AR weeks out of date at month-end. With Deltek and Stripe connected, each finalized Vantagepoint invoice becomes a Stripe invoice the client can pay by card or ACH, and the moment Stripe confirms payment the cash receipt posts back to the originating project automatically. The billing team stops re-keying payments, AR reflects reality the same day, and month-end close starts with receipts already matched.

What you can do

  • Turn finalized Deltek Vantagepoint AR invoices into Stripe invoices against matching Stripe customers.
  • Post Stripe payments back into Deltek as cash receipts and AR status updates on the correct project.
  • Keep Deltek client firms aligned with Stripe customers so every payment ties back to a project.
  • Bridge the Deltek tenant OAuth2 token and the Stripe secret API key, with verified Stripe-Signature events.
  • Poll Deltek for new invoices on your schedule, with idempotent writes, retries, and a full audit trail.

Questions

Which direction does data move between Deltek and Stripe?
The main flow is Deltek into Stripe: finalized AR invoices and their client firms become Stripe invoices and customers so clients can pay online. Payments flow back the other way, where Stripe paid-invoice, charge, and refund events become cash receipts and AR status updates in Deltek against the originating project. Stripe has no vendors or general ledger, so the connector never tries to push AP or GL data into it.
Does Deltek push events, or does ml-connector have to poll?
Deltek Vantagepoint webhooks are workflow-driven and carry no HMAC signature you can verify, so for finance records ml-connector reads from the Deltek REST API by page-based polling on a schedule you set. Stripe is the opposite: it pushes signed webhook events for payments, so payment confirmations come back in near real time rather than waiting for the next poll.
How are duplicate invoices and payments prevented?
On Stripe, every customer and invoice create carries an Idempotency-Key, so a retried request returns the original result instead of creating a duplicate. Deltek has no native idempotency header, so ml-connector queries by invoice number before posting and checks for an existing cash receipt before writing one. Inbound Stripe events are also deduplicated on their event id.

Related integrations

Connect Deltek and Stripe

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

Get started