Skip to main content
First-party CRM that ships with every Lava account: contacts, accounts (companies), leads, opportunities (deals), tasks, cases, and invoices over a REST API. Best for agents that read or update the user’s own CRM, syncing contacts, logging activity, advancing deals, or creating follow-up tasks, with zero setup because Lava provisions and connects the credential automatically. Every call is scoped to the caller’s org. 15 example endpoints available through Lava’s AI Gateway. See the Lava CRM API docs for full documentation.
This is a managed Lava service — no setup required. Lava provisions and connects it for you automatically.
This is a catch-all provider — any valid URL under https://lava-crm-api.fly.dev is supported. Lava CRM REST API. Base: https://lava-crm-api.fly.dev, all paths under /api/ with a trailing slash. Auth: Bearer token (provisioned automatically by Lava; no manual key). Resources: /api/contacts/, /api/accounts/ (companies), /api/leads/, /api/opportunities/ (deals), /api/tasks/, /api/cases/, /api/invoices/. List endpoints support page and search query params; detail endpoints are /api/{resource}/{id}/. Deal pipelines with fully custom stages live under /api/deal-pipelines/: list pipelines GET /api/deal-pipelines/, create a pipeline POST /api/deal-pipelines/ {name}, board (each stage with its deals) GET /api/deal-pipelines/board/?pipeline_id=<id>, add a custom stage POST /api/deal-pipelines/<pipeline_id>/stages/ {name}, rename a stage PUT /api/deal-pipelines/stages/<stage_id>/ {name}, delete an (empty, non Won/Lost) stage DELETE /api/deal-pipelines/stages/<stage_id>/. To move a deal between stages, use PATCH /api/deal-pipelines/deals/<deal_id>/move/ {stage_id} with a stage_id from the board — NOT the fixed 6-value ‘stage’ enum on /api/opportunities/ (PROSPECTING/QUALIFICATION/PROPOSAL/NEGOTIATION/CLOSED_WON/CLOSED_LOST). That enum is legacy and only accepts those six values; custom stages (e.g. Contacted, Meeting) only exist through /api/deal-pipelines/. Moving a deal to a Won/Lost stage closes it automatically. All access is scoped to the caller token owner org. The endpoints below are curated examples.

Endpoints

List contacts. Supports page and search query params.

GET https://lava-crm-api.fly.dev/api/contacts/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/contacts/', { method: 'GET' });

Create a contact. Common fields: first_name, last_name, primary_email, mobile_number.

POST https://lava-crm-api.fly.dev/api/contacts/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/contacts/', {
  body: {
"first_name": "Jane",
"last_name": "Smith",
"primary_email": "jane@example.com"
},
});

Update a contact by id (partial update).

PATCH https://lava-crm-api.fly.dev/api/contacts/{id}/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/contacts/{id}/', { method: 'PATCH', body: {"title":"VP Sales"} });

Delete a contact by id.

DELETE https://lava-crm-api.fly.dev/api/contacts/{id}/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/contacts/{id}/', { method: 'DELETE' });

List accounts (companies the org does business with).

GET https://lava-crm-api.fly.dev/api/accounts/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/accounts/', { method: 'GET' });

List leads. Supports page and search query params.

GET https://lava-crm-api.fly.dev/api/leads/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/leads/', { method: 'GET' });

List opportunities (deals) across the pipeline.

GET https://lava-crm-api.fly.dev/api/opportunities/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/opportunities/', { method: 'GET' });

List tasks.

GET https://lava-crm-api.fly.dev/api/tasks/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/tasks/', { method: 'GET' });

List deal pipelines (a default pipeline is auto-provisioned). Each has stages with stage_type open/won/lost.

GET https://lava-crm-api.fly.dev/api/deal-pipelines/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/deal-pipelines/', { method: 'GET' });

Create a deal pipeline. Seeds default stages plus a mandatory Won and Lost stage.

POST https://lava-crm-api.fly.dev/api/deal-pipelines/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/deal-pipelines/', { body: {"name":"Enterprise"} });

Pipeline board: every stage (column) with its deals and the stage ids needed to move deals. Pass ?pipeline_id=<id> to pick a pipeline; omit for the default.

GET https://lava-crm-api.fly.dev/api/deal-pipelines/board/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/deal-pipelines/board/', { method: 'GET' });

Move a deal to a stage. Use stage_id from the board, not the opportunity ‘stage’ enum. Moving to a Won/Lost stage closes the deal. Optional above_id/below_id position it within the stage.

PATCH https://lava-crm-api.fly.dev/api/deal-pipelines/deals/{deal_id}/move/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/deal-pipelines/deals/{deal_id}/move/', { method: 'PATCH', body: {"stage_id":"{stage_id}"} });

Add a custom open stage to a pipeline (e.g. Contacted, Meeting). This is the only way custom stages exist on the backend.

POST https://lava-crm-api.fly.dev/api/deal-pipelines/{pipeline_id}/stages/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/deal-pipelines/{pipeline_id}/stages/', { body: {"name":"Contacted"} });

Rename a stage by id.

PUT https://lava-crm-api.fly.dev/api/deal-pipelines/stages/{stage_id}/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/deal-pipelines/stages/{stage_id}/', { method: 'PUT', body: {"name":"Discovery"} });

Delete a stage by id. Only empty open stages can be deleted; Won and Lost are required and protected.

DELETE https://lava-crm-api.fly.dev/api/deal-pipelines/stages/{stage_id}/ — Free
const data = await lava.gateway('https://lava-crm-api.fly.dev/api/deal-pipelines/stages/{stage_id}/', { method: 'DELETE' });

Next Steps

All Providers

Browse all supported AI providers

Forward Proxy

Learn how to construct proxy URLs and authenticate requests