ml-connector
DeltekWise

Deltek and Wise integration

Deltek Vantagepoint runs your projects, vendors, and accounting. Wise moves money across borders. Connecting the two lets approved vendor bills in Deltek get paid through Wise without re-keying bank details or amounts into a separate payments tool. ml-connector reads each approved AP invoice and its vendor from Deltek, runs Wise through its required quote, recipient, and transfer sequence, funds the transfer from your Wise balance, and writes the payment reference and cleared status back onto the Deltek record. Wise is payout-only and has no general ledger, so Deltek stays the system of record and Wise is the execution rail.

How Deltek works

Deltek Vantagepoint exposes firms (vendors and clients), contacts, employees, projects, AP invoices, AR invoices, journal entries, vendor payments, and GL accounts through a REST JSON API on a tenant-specific URL such as https://acme.deltekfirst.com/acme/api/. It authenticates with OAuth2 using the password grant against that instance, with the client id and secret generated once under Utilities > Integrations > API Authorization. Vantagepoint webhooks are workflow-driven callbacks with no HMAC signature, so most finance data is read by polling. The GovCon product Deltek Costpoint is SOAP-heavy and pull-only by comparison.

How Wise works

Wise is a payments platform, not an ERP, so it has no invoices, purchase orders, GL accounts, or cost centers. The Wise Platform API exposes profiles, balances, recipients, quotes, transfers, balance statements, and an activity feed as REST JSON over HTTPS. A connector authenticates with OAuth2, where access tokens expire after twelve hours and refresh tokens are long-lived, and nearly every call requires the numeric profileId fetched from GET /v1/profiles. Wise pushes transfer state-change, payout-failure, and refund events by webhook, signed with RSA-SHA256 in the X-Signature-SHA256 header.

What moves between them

The flow runs from Deltek into Wise, then a confirmation flows back. ml-connector polls Deltek for approved AP invoices and their vendor firm records, creates or reuses a Wise recipient from the vendor bank details, locks a Wise quote for the invoice currency and amount, books the transfer, and funds it from the Wise balance. When Wise reports the transfer cleared, ml-connector writes a payment record back onto the Deltek AP invoice with the Wise transfer id and status. Reference data such as vendor identity and currency is aligned so each transfer maps to a real Deltek firm. Wise holds no ledger, so ml-connector never reads accounting entries out of Wise.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Deltek side it accepts the full tenant URL per customer, since Deltek publishes no shared base address, and refreshes the OAuth2 bearer token using the password grant when a call returns 401; it also depends on the API user role having full field visibility, because fields a role cannot see come back as zero rather than an error. On the Wise side it caches the profileId, refreshes the twelve-hour access token, and runs the mandatory four-step sequence of quote, recipient, transfer, and fund, since skipping the fund step leaves the transfer in incoming_payment_waiting and it never executes. Each transfer carries a customerTransactionId so a retry deduplicates instead of paying twice. Wise recipients are immutable, so a changed vendor bank detail forces a delete and recreate rather than an update. Quotes expire, so an expired quote triggers a fresh quote before funding. Wise transfer state-change webhooks mark the Deltek payment cleared, a 429 from Wise backs off using the Retry-After header, and Deltek has no native idempotency key so ml-connector checks for an existing payment by invoice number before posting back. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A two-hundred-person architecture and engineering firm runs Deltek Vantagepoint for project accounting and pays a mix of domestic subconsultants and overseas drafting and rendering partners. Before the integration, the AP team approved vendor invoices in Deltek, then re-typed each overseas payee's bank details, amount, and currency into a separate bank portal, where a wrong IBAN or a stale exchange rate meant a bounced payment and a delayed project. With Deltek and Wise connected, an approved AP invoice creates the recipient, locks the rate, and funds the transfer in Wise automatically, and the cleared status and transfer reference land back on the Deltek invoice. The duplicate data entry is gone and the ledger shows exactly what was paid and when.

What you can do

  • Pay approved Deltek Vantagepoint AP invoices through Wise without re-keying vendor bank details or amounts.
  • Create or reuse Wise recipients from Deltek vendor firm records, handling immutable recipients with delete and recreate.
  • Run the required Wise quote, recipient, transfer, and fund sequence, locking the exchange rate before paying.
  • Write the Wise transfer id and cleared status back onto the Deltek AP invoice as a payment record.
  • Set a customerTransactionId on every transfer and check Deltek by invoice number so a retry never double-pays.

Questions

Which direction does data move between Deltek and Wise?
The main flow is Deltek into Wise. Approved AP invoices and vendor records move from Deltek into Wise to create and fund transfers, and the Wise transfer id and cleared status are written back onto the Deltek payment. Wise has no general ledger, so ml-connector never reads accounting entries out of Wise.
Can Wise hold invoices or GL postings from Deltek?
No. Wise is a payout-only payments platform with no invoices, purchase orders, GL accounts, or cost centers. Deltek Vantagepoint stays the system of record, and Wise is the rail that executes the international transfer for each approved bill.
How does the integration prevent paying a vendor twice on a retry?
Every Wise transfer carries a customerTransactionId, a UUID that Wise deduplicates on, so a repeated funding call does not create a second payment. Because Deltek has no native idempotency key, ml-connector also checks for an existing payment by invoice number in Deltek before posting status back, and it tracks the twelve-hour Wise token so an expiry is refreshed rather than failing mid-run.

Related integrations

Connect Deltek and Wise

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

Get started