Ramp Integration

Connect your Ramp corporate card account for automated expense categorization, reimbursement tracking, and journal entry creation.

What Gets Synced

Data Description
Card transactions Expense journal entries with category mapping
Reimbursements Employee reimbursement tracking as AP
Merchants Merchant name normalization
Categories Ramp category to GL account mapping
Receipts Receipt and memo data for audit trail

Connect Ramp

OAuth (Recommended)

From the Integrations page in DayZero, click Connect Ramp. You'll be redirected to Ramp to authorize access.

Or via API:

bash
curl "https://api.ondayzero.com/api/v1/ramp/connect-url" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

The response includes a connect_url. Redirect the user to that URL to begin the OAuth flow. After authorization, DayZero stores the connection and begins syncing transactions.

Client credentials (Bring your own Ramp Developer App)

Use this when your business created its own Ramp Developer App (Company → Developer → Create New App) with the Client Credentials grant type enabled.

From the Integrations page, enter your Client ID and Client Secret and click Connect Ramp.

Or via API — the body must be a flat JSON object (not wrapped in data):

bash
curl -X POST "https://api.ondayzero.com/api/v1/ramp/connect-with-credentials" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"ramp_id_...","client_secret":"..."}'

Required Ramp app setup:

  1. Grant type: Client Credentials
  2. Scopes: configure the scopes your integration needs in the Ramp Developer Console (e.g. transactions:read, business:read, cards:read, users:read, departments:read)
  3. Copy the Client ID (ramp_id_...) and Client Secret from the app settings

When Ramp refuses the connection, the endpoint answers with Ramp's own reason rather than a generic failure:

  • 400 INTEGRATION_079 — Ramp rejected the Client ID / Client Secret pair.
  • 400 INTEGRATION_076 — the token was issued but is missing business:read / transactions:read; the message lists the scopes DayZero detected on it.
  • 400 INTEGRATION_080 — Ramp rejected the token request for some other reason (e.g. the Client Credentials grant type is not enabled); the message quotes Ramp's error_description.
  • 503 INTEGRATION_080 — Ramp was rate-limiting or unavailable. Retry.

Automatic Accounting

When a corporate card transaction occurs, DayZero creates journal entries:

  • Card purchase: Debit Expense Account / Credit Ramp Card Payable
  • Card payment: Debit Ramp Card Payable / Credit Cash
  • Reimbursement approved: Debit Expense Account / Credit Reimbursement Payable
  • Reimbursement paid: Debit Reimbursement Payable / Credit Cash

Expense accounts are mapped from Ramp's category data. You can customize the category-to-GL mapping in Settings.

Connection Status

bash
curl "https://api.ondayzero.com/api/v1/ramp/status" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

Returns connection health, transaction count, and last sync timestamp.

Manual Sync

Trigger a manual sync of recent transactions and reimbursements:

bash
curl -X POST "https://api.ondayzero.com/api/v1/ramp/sync" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

Webhooks

Nothing to set up: when you connect, DayZero registers a webhook subscription on your Ramp account pointing at its own endpoint and answers Ramp's setup challenge automatically. Ramp issues a signing secret per subscription, so each business that brings its own Developer App gets its own. Disconnecting removes the subscription.

If your Ramp app can't manage webhooks, connecting still succeeds — the integration falls back to scheduled polling, just with more delay before a transaction appears.

DayZero processes the following Ramp webhook events in real time:

Event Action
transactions.authorized Records the pending card transaction
transactions.cleared Creates the expense journal entry
transactions.ready_for_review Updates the stored transaction record
transactions.ready_to_sync Updates the stored transaction record
bills.created Creates the bill in the Bills module
bills.approved Updates bill approval status
bills.paid Creates the bill payment journal entry
bills.rejected Updates bill status

Ramp webhook payloads carry only the resource ID, so DayZero fetches the full record from the Ramp API when an event arrives. Events may arrive out of order and are retried up to 10 times; DayZero de-duplicates on the event id.

Disconnect

bash
curl -X DELETE "https://api.ondayzero.com/api/v1/ramp/disconnect" \
  -H "Authorization: Bearer dz_your_token_here" \
  -H "x-business-id: YOUR_BUSINESS_ID"

Removes stored credentials and disconnects the Ramp integration from the business.