ml-connector
DeltekRamp

Deltek and Ramp integration

Deltek Vantagepoint is the project-based ERP and ledger of record. Ramp is where corporate spend starts, through bill pay, cards, and reimbursements. Connecting the two means approved bills and card transactions in Ramp post into Deltek as AP invoices and journal entries without re-keying, coded to the right firms and GL accounts. The Deltek chart of accounts and vendor list flow back into Ramp so every charge is coded to an account that exists in the ledger. ml-connector handles the different APIs on each side and moves the data on a schedule you control.

How Deltek works

Deltek Vantagepoint exposes firms, employees, projects, AP invoices, journal entries, cash receipts, expense reports, and GL accounts through REST business document APIs, with accounting transaction endpoints for injecting and reading AP and GL data. It authenticates with OAuth2 password-grant tokens against a tenant-specific URL such as company.deltekfirst.com, so there is no shared hostname and the full instance URL is set per customer. Vantagepoint webhooks are workflow-triggered and carry no HMAC signature, and there is no native idempotency key, so finance records are read by polling and duplicates are prevented by checking for an existing record before posting.

How Ramp works

Ramp exposes bills, vendors, purchase orders, card transactions, reimbursements, users, departments, and GL accounts through its REST developer API. Every call uses an OAuth2 client-credentials bearer token that lasts ten days and is opaque, list endpoints use cursor pagination with a page.next cursor, and the limit is 100 requests per minute returning HTTP 429 when exceeded. POST and PATCH calls accept an Idempotency-Key header so retries are safe. Ramp pushes real HMAC-SHA256 signed webhooks for bill, transaction, and vendor events, and bills carry a sync_status field that tracks whether a bill has reached the ERP.

What moves between them

The main flow runs from Ramp into Deltek. As bills move to approved in Ramp, ml-connector reads them and posts each one into Deltek Vantagepoint as an AP invoice against the matching firm, GL account, and project, and posts card transactions and reimbursements as journal entries to the right accounts. Vendors and the chart of accounts flow the other direction, from Deltek into Ramp, so bills and card spend are coded to firms and GL accounts that already exist in the ledger. Cadence is driven by Ramp bill and transaction webhooks for near real-time posting, with a scheduled poll of Deltek as a backstop. Once a bill posts in Deltek, ml-connector marks it synced in Ramp.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Ramp side it uses the client-credentials grant and refreshes the ten-day bearer token on a daily cycle rather than waiting for a 401, and it sends an Idempotency-Key on every Ramp POST and PATCH. On the Deltek side it accepts the full tenant URL per customer, since Deltek publishes no shared base address, requests a password-grant token, and refreshes it when a call returns 401. Vendors and GL accounts are mapped first, so every Ramp bill posts to a Deltek firm and GL account that already exists. Because Vantagepoint webhooks carry no signature and Deltek has no idempotency key, ml-connector drives the flow from Ramp HMAC-SHA256 webhooks, re-fetches each bill by its id to get the authoritative state, and checks Deltek for an existing invoice number before posting so a redelivered event cannot create a duplicate. Ramp 429 responses are handled with exponential backoff and jitter, and AP invoices may land in a draft or approval state depending on the customer Deltek workflow. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A 180-person architecture and engineering firm runs Deltek Vantagepoint for projects, billing, and the general ledger, and uses Ramp for corporate cards and vendor bill pay. Before the integration, accounting exported bills and card statements from Ramp and re-keyed them into Deltek as AP invoices and journal entries every week, and often coded charges to the wrong project or account because the two systems held different vendor and account lists. With Deltek and Ramp connected, each approved bill and cleared transaction posts into Deltek automatically against the correct firm and GL account, and the Deltek chart of accounts keeps Ramp coding in line. The weekly re-keying step is gone and month-end close starts with AP already in the ledger.

What you can do

  • Post approved Ramp bills into Deltek Vantagepoint as AP invoices against the matching firm and GL account.
  • Post Ramp card transactions and reimbursements into Deltek as journal entries on the right accounts.
  • Push the Deltek chart of accounts and vendor list into Ramp so spend is coded to accounts that exist.
  • Bridge Ramp client-credentials OAuth2 and Deltek tenant password-grant login, refreshing each token automatically.
  • Drive posting from Ramp HMAC-SHA256 webhooks, mark bills synced in Ramp, and replay any failed record.

Questions

Which direction does data move between Deltek and Ramp?
The main flow is Ramp into Deltek. Approved bills, card transactions, and reimbursements move from Ramp into Deltek Vantagepoint as AP invoices and journal entries, while vendors and the chart of accounts move from Deltek into Ramp so spend is coded correctly. Once a bill posts in Deltek, ml-connector marks it synced back in Ramp using the bill sync_status field.
How are duplicate AP invoices avoided when Deltek has no idempotency key?
Deltek Vantagepoint has no native idempotency header, and its workflow webhooks carry no signature, so ml-connector drives the flow from Ramp signed webhooks instead. It re-fetches each bill from Ramp to confirm the current state, then checks Deltek for an existing invoice number before posting. A redelivered Ramp event therefore cannot create a second AP invoice.
Does Ramp ten-day token and rate limit need special handling?
Yes. Ramp client-credentials tokens are opaque and last ten days, so ml-connector refreshes them on a daily cycle rather than waiting for a 401. Ramp also limits callers to 100 requests per minute and returns HTTP 429 when exceeded, so bulk syncs use exponential backoff with jitter and an Idempotency-Key on every write.

Related integrations

Connect Deltek and Ramp

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

Get started