> ## Documentation Index
> Fetch the complete documentation index at: https://lava.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Ramp

> Corporate card and spend-management API for reading transactions, bills, vendors, cards, and reimbursements, and for creating/updating spend programs, limits, and accounting records on a Ramp business.

Corporate card and spend-management API for reading transactions, bills, vendors, cards, and reimbursements, and for creating/updating spend programs, limits, and accounting records on a Ramp business. Best when an agent needs to query or act on a company's actual card and AP activity. Unlike accounting APIs (QuickBooks, Xero), Ramp is the system of record for the underlying card swipes and bill payments themselves.

18 example endpoints available through Lava's AI Gateway. See the [Ramp API docs](https://docs.ramp.com/developer-api/v1) for full documentation.

<Warning>This provider requires your own credentials — connect your API key or OAuth account before use.</Warning>

<Info>This is a **catch-all provider** — any valid URL under `https://api.ramp.com/developer/v1` is supported. Any Ramp Developer API endpoint. Construct URL as [https://api.ramp.com/developer/v1/\&#123;path\&#125](https://api.ramp.com/developer/v1/\&#123;path\&#125);. Card lifecycle actions (freeze/unfreeze/terminate) are POSTs to /cards/\{card\_id}/deferred/\{suspension|unsuspension|termination} with a \{ "idempotency\_key": "..." } body — each returns a deferred task you poll at GET /cards/deferred/status/\{task\_id}. PATCH /cards/\{card\_id} only edits display name, owner, and spending limits; it has NO state field, and a card's state and spending\_restrictions.suspended are read-only (returned by GET, rejected on write). See [https://docs.ramp.com/developer-api/v1](https://docs.ramp.com/developer-api/v1) for the full reference. The endpoints below are curated examples.</Info>

## Endpoints

### List card transactions. Supports synced\_after/from\_date/to\_date filters and pagination.

**GET** `https://api.ramp.com/developer/v1/transactions?page_size=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/transactions?page_size=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Ftransactions%3Fpage_size%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List bills (accounts payable).

**GET** `https://api.ramp.com/developer/v1/bills?page_size=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/bills?page_size=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fbills%3Fpage_size%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create an approved bill and select the payment method (ACH, check, wire, SWIFT, or Ramp card) in one call. Bills created via the API skip the draft phase. Resolve vendor\_id, vendor\_contact\_id, entity\_id, and source\_bank\_account\_id from the entities/vendors endpoints first.

**POST** `https://api.ramp.com/developer/v1/bills` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/bills', {
      body: {
    "vendor_id": "{vendor_id}",
    "vendor_contact_id": "{vendor_contact_id}",
    "entity_id": "{entity_id}",
    "invoice_number": "INV-2026-001",
    "invoice_currency": "USD",
    "issued_at": "2026-05-15",
    "due_at": "2026-06-15",
    "payment_method": "ACH",
    "payment_details": {
      "payment_arrival_date": "2026-06-15",
      "source_bank_account_id": "{source_bank_account_id}",
      "vendor_account_id": "{vendor_account_id}"
    }
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fbills" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"vendor_id":"{vendor_id}","vendor_contact_id":"{vendor_contact_id}","entity_id":"{entity_id}","invoice_number":"INV-2026-001","invoice_currency":"USD","issued_at":"2026-05-15","due_at":"2026-06-15","payment_method":"ACH","payment_details":{"payment_arrival_date":"2026-06-15","source_bank_account_id":"{source_bank_account_id}","vendor_account_id":"{vendor_account_id}"}}'
    ```
  </Tab>
</Tabs>

### List physical and virtual cards.

**GET** `https://api.ramp.com/developer/v1/cards?page_size=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/cards?page_size=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fcards%3Fpage_size%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create a virtual card for a user with a spending limit.

**POST** `https://api.ramp.com/developer/v1/cards/deferred/virtual` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/cards/deferred/virtual', {
      body: {
    "display_name": "Vendor X subscription",
    "user_id": "{user_id}",
    "spending_restrictions": {
      "amount": 50000,
      "interval": "MONTHLY"
    }
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fcards%2Fdeferred%2Fvirtual" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"display_name":"Vendor X subscription","user_id":"{user_id}","spending_restrictions":{"amount":50000,"interval":"MONTHLY"}}'
    ```
  </Tab>
</Tabs>

### List vendors on the Ramp business.

**GET** `https://api.ramp.com/developer/v1/vendors?page_size=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/vendors?page_size=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fvendors%3Fpage_size%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Create a vendor on the Ramp business. Requires country and at least one contact (business\_vendor\_contacts, whose email is mandatory).

**POST** `https://api.ramp.com/developer/v1/vendors` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/vendors', {
      body: {
    "name": "Acme Supplies",
    "country": "US",
    "business_vendor_contacts": {
      "email": "ap@acme.com"
    }
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fvendors" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"name":"Acme Supplies","country":"US","business_vendor_contacts":{"email":"ap@acme.com"}}'
    ```
  </Tab>
</Tabs>

### Update an existing vendor — accounting fields, country/state, description, or is\_active (to deactivate). There is no name field on update.

**PATCH** `https://api.ramp.com/developer/v1/vendors/{vendor_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/vendors/{vendor_id}', { method: 'PATCH', body: {"is_active":false} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X PATCH "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fvendors%2F%7Bvendor_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"is_active":false}'
    ```
  </Tab>
</Tabs>

### List vendor credits (credit memos) for the business. Read-only: Ramp exposes vendor credits for reading only — there is NO API to create or upload a vendor credit. Vendor credits are issued in the Ramp UI from a paid bill and synced to accounting.

**GET** `https://api.ramp.com/developer/v1/vendors/credits?page_size=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/vendors/credits?page_size=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fvendors%2Fcredits%3Fpage_size%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List employee reimbursement requests.

**GET** `https://api.ramp.com/developer/v1/reimbursements?page_size=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/reimbursements?page_size=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Freimbursements%3Fpage_size%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List users on the Ramp business.

**GET** `https://api.ramp.com/developer/v1/users?page_size=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/users?page_size=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fusers%3Fpage_size%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Get the connected Ramp business profile.

**GET** `https://api.ramp.com/developer/v1/business` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/business', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fbusiness" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### List spend programs on the Ramp business.

**GET** `https://api.ramp.com/developer/v1/spend-programs?page_size=100` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/spend-programs?page_size=100', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fspend-programs%3Fpage_size%3D100" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Edit a card: display name, owner (new\_user\_id), entity, notification settings, and spending limits. This endpoint does NOT freeze a card — it has no state field, and spending\_restrictions.suspended and the card's state are read-only (returned by GET, rejected on write with DEVELOPER\_7001). To freeze, unfreeze, or terminate a card use the deferred actions below; setting spending\_restrictions.amount to 0 caps the limit but does not block new charges.

**PATCH** `https://api.ramp.com/developer/v1/cards/{card_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/cards/{card_id}', {
      method: 'PATCH',
      body: {
    "display_name": "Marketing tools",
    "spending_restrictions": {
      "amount": 100000,
      "interval": "MONTHLY"
    }
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X PATCH "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fcards%2F%7Bcard_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"display_name":"Marketing tools","spending_restrictions":{"amount":100000,"interval":"MONTHLY"}}'
    ```
  </Tab>
</Tabs>

### Freeze (suspend) a card — the only way to block new charges. This is NOT a PATCH field and NOT part of spending\_restrictions. The action is asynchronous: it returns a deferred task id; poll GET /cards/deferred/status/\{task\_id} to confirm the card reached the SUSPENDED state. Reverse with the unsuspension endpoint.

**POST** `https://api.ramp.com/developer/v1/cards/{card_id}/deferred/suspension` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/cards/{card_id}/deferred/suspension', { body: {"idempotency_key":"00000000-0000-0000-0000-000000000000"} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fcards%2F%7Bcard_id%7D%2Fdeferred%2Fsuspension" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"idempotency_key":"00000000-0000-0000-0000-000000000000"}'
    ```
  </Tab>
</Tabs>

### Unfreeze (unsuspend) a previously suspended card, restoring it to ACTIVE. Asynchronous — returns a deferred task id; poll GET /cards/deferred/status/\{task\_id} to confirm.

**POST** `https://api.ramp.com/developer/v1/cards/{card_id}/deferred/unsuspension` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/cards/{card_id}/deferred/unsuspension', { body: {"idempotency_key":"00000000-0000-0000-0000-000000000000"} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fcards%2F%7Bcard_id%7D%2Fdeferred%2Funsuspension" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"idempotency_key":"00000000-0000-0000-0000-000000000000"}'
    ```
  </Tab>
</Tabs>

### Permanently terminate a card. This is IRREVERSIBLE — unlike suspension, a terminated card cannot be reactivated. Asynchronous — returns a deferred task id; poll GET /cards/deferred/status/\{task\_id} to confirm.

**POST** `https://api.ramp.com/developer/v1/cards/{card_id}/deferred/termination` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/cards/{card_id}/deferred/termination', { body: {"idempotency_key":"00000000-0000-0000-0000-000000000000"} });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fcards%2F%7Bcard_id%7D%2Fdeferred%2Ftermination" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"idempotency_key":"00000000-0000-0000-0000-000000000000"}'
    ```
  </Tab>
</Tabs>

### Poll the result of a deferred card action. Every card mutation (suspension, unsuspension, termination, and virtual/physical card creation) returns a task id rather than completing inline; fetch this until the task reports success and exposes the resulting card.

**GET** `https://api.ramp.com/developer/v1/cards/deferred/status/{task_id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://api.ramp.com/developer/v1/cards/deferred/status/{task_id}', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2Fapi.ramp.com%2Fdeveloper%2Fv1%2Fcards%2Fdeferred%2Fstatus%2F%7Btask_id%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

## Next Steps

<CardGroup cols={2}>
  <Card title="All Providers" icon="grid" href="/gateway/supported-providers">
    Browse all supported AI providers
  </Card>

  <Card title="Forward Proxy" icon="route" href="/gateway/forward-proxy">
    Learn how to construct proxy URLs and authenticate requests
  </Card>
</CardGroup>
