ml-connector
DeltekBrex

Deltek and Brex integration

Deltek Vantagepoint runs project accounting and finance. Brex runs corporate cards, expenses, and bill pay. Connecting the two brings coded card spend and expense activity into the general ledger without re-keying. Once Brex finishes coding a transaction, the amount, merchant, and dimension values post into Deltek as a journal entry or AP invoice against the right GL account, organization, and project. ml-connector handles the different APIs on each side and moves the data as soon as Brex marks a record ready for export.

How Deltek works

Deltek Vantagepoint exposes firms (vendors and clients), contacts, employees, projects, AP invoices, AR invoices, journal entries, expense reports, payments, GL accounts, organizations, and accounting codes through a REST API on a tenant-specific deltekfirst.com URL, so there is no shared hostname. It authenticates with an OAuth2 password grant that returns a bearer token, and the Allow Password Grant Type setting must be enabled on the instance. Vantagepoint webhooks are workflow-driven callbacks with no HMAC signature, so finance records are read by polling. Purchase orders exist in the product but have no documented public REST endpoint.

How Brex works

Brex is a corporate spend platform, not a full ERP, so it has no AP invoice or chart-of-accounts authority of its own. It exposes read-only settled card and cash transactions, read-write expenses with receipts and coding, vendors, transfers, accounting records, and custom accounting fields through a REST API split across api.brex.com (v2) and platform.brexapis.com (v1). Every call carries a static bearer token, and transfers require an Idempotency-Key header. Brex signs its webhooks with Svix HMAC-SHA256 and fires ACCOUNTING_RECORD_READY_FOR_EXPORT when a transaction is coded and ready for the ledger.

What moves between them

The flow runs from Brex into Deltek. ml-connector consumes coded Brex accounting records and expenses and posts them into Deltek as journal entries or AP invoices, each mapped to the matching Deltek GL account, organization, and project. Brex vendors flow into Deltek firms so card spend ties to a known payee, and Brex users align with Deltek employees for expense attribution. The ACCOUNTING_RECORD_READY_FOR_EXPORT webhook triggers the work as soon as a transaction is coded, and a scheduled poll backfills anything a webhook missed. Brex is treated as the read-only spend source for accounting, so ml-connector marks each record exported but never writes financial entries back into Brex.

How ml-connector handles it

ml-connector stores both credential sets encrypted and sends the Brex bearer token on every request, using the v2 base for transactions and users and the v1 base for expenses, vendors, and accounting records. On the Deltek side it accepts the full tenant URL per customer, since Deltek publishes no shared base address, runs the OAuth2 password grant, and refreshes the bearer token when a call returns 401. Brex webhooks arrive signed with Svix HMAC-SHA256, so each notification is verified against the signing secret using the webhook-id, webhook-timestamp, and raw body before it is processed, and the webhook-id is used to dedupe redelivered events. GL accounts, organizations, and projects are mapped first, so every posted line references a Deltek dimension that already exists. Brex merchant names rarely match Deltek firm names exactly, so a fuzzy-match and caching layer resolves the payee before posting. Because Deltek has no native idempotency key, ml-connector queries by source reference before creating a record so a retry does not double-post. Brex rate limits return HTTP 429, so it backs off with jitter and retries, and every record carries a full audit trail and can be replayed if a Deltek post fails.

A real-world example

A mid-sized engineering and consulting firm of about 200 staff runs Deltek Vantagepoint for project accounting and uses Brex corporate cards for travel, software, and project expenses. Before the integration, finance exported Brex transaction reports each week and re-keyed the totals into Vantagepoint by hand, guessing which project and cost center each charge belonged to, then spent month-end close untangling miscoded card spend. With Deltek and Brex connected, each coded Brex transaction posts into Vantagepoint automatically against the project and GL account the employee selected at swipe time, and the vendor is matched to an existing firm. Project costs stay current through the month and close starts with card spend already allocated.

What you can do

  • Post coded Brex card transactions and expenses into Deltek as journal entries or AP invoices against the right GL account and project.
  • Map Brex accounting fields to Deltek accounts, organizations, and projects so spend lands on valid dimensions.
  • Match Brex vendors to Deltek firms and Brex users to Deltek employees so spend ties to a known payee and owner.
  • Verify Brex ACCOUNTING_RECORD_READY_FOR_EXPORT webhooks by Svix HMAC-SHA256 and act on them as transactions are coded.
  • Authenticate Brex with its bearer token and Deltek with its tenant-specific OAuth2 password grant, with retries and a full audit trail on every record.

Questions

Which direction does data move between Deltek and Brex?
The flow is Brex into Deltek. Coded card transactions, expenses, vendors, and users move from Brex into the Deltek general ledger, firms, and employees. Brex is treated as the read-only spend source for accounting, so ml-connector marks each Brex record exported but does not write financial entries back into Brex.
How does the integration know when a Brex transaction is ready to post?
Brex fires the ACCOUNTING_RECORD_READY_FOR_EXPORT webhook once a transaction is fully coded. ml-connector verifies that event with Svix HMAC-SHA256, pulls the coded accounting record, and posts it into Deltek. A scheduled poll also runs as a backstop so nothing is lost if a webhook is missed.
How are Brex spend categories and merchants mapped to Deltek accounts and vendors?
Brex accounting fields and GL account selections are mapped to Deltek GL accounts, organizations, and projects, which are aligned first so every posted line references a valid dimension. Because Brex merchant names rarely match Deltek firm names exactly, ml-connector uses a fuzzy-match and caching layer to resolve the payee before posting.

Related integrations

Connect Deltek and Brex

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

Get started