API Access

Last updated: May 2026

Overview

Ralivi's public API lets you pull your CRM data into any external tool — dashboards, reporting software, automation platforms, or custom integrations. Authentication uses long-lived API keys, so no Firebase SDK or login flow is required.

API Access is a paid feature. You must be on an active paid plan to generate API keys. Trial accounts cannot create keys.

Generating an API Key

  1. Go to Settings → API Access.
  2. Click + New key.
  3. Give the key a descriptive name (e.g. Frankdash, Zapier).
  4. Copy the key immediately — it is shown only once and cannot be retrieved later.

You can create multiple keys for different integrations and revoke any key at any time without affecting the others.

Authentication

Pass your API key in the Authorization header of every request:

Authorization: Bearer rlv_live_xxxxxxxxxxxxxxxx...

Requests without a valid key receive a 401 Unauthorized response.

Base URL

https://www.ralivi.com/api/v1

All responses are JSON.

Available Endpoints

All endpoints are read-only. Data is scoped to your organization automatically — you do not need to pass an organization ID. Nullable fields return null rather than being omitted.

GET/api/v1/contacts

List all contacts in your CRM.

Query parameters

  • limit — max 100, default 50
  • cursor — for pagination

Response shape

{ "data": [{ "id": "string", "name": "string", "email": "string", "phone": "string", "company": "string", "status": "string", "tags": ["string"], "summary": "string", "createdAt": "2026-01-15T10:00:00.000Z", "updatedAt": "2026-01-15T10:00:00.000Z", "lastTouchedAt": "2026-01-15T10:00:00.000Z" }], "count": 50, "nextCursor": "string | null" }
GET/api/v1/deals

List all deals in your pipeline.

Query parameters

  • limit — max 100, default 50
  • cursor — for pagination
  • stage — filter by stage ID (see stage values below)

Field notes

  • Deal value is amount (not value)
  • There is no closedAt field — to find closed deals, filter by stage=closed-won and use updatedAt as the close date

Stage values

lead, qualified, proposal, negotiation, closed-won

Custom stages also exist per account and will appear as their ID string.

Response shape

{ "data": [{ "id": "string", "title": "string", "stage": "string", "amount": "number", "probability": "number", "contactId": "string", "summary": "string", "createdAt": "2026-01-15T10:00:00.000Z", "updatedAt": "2026-01-15T10:00:00.000Z", "lastActivityAt": "2026-01-15T10:00:00.000Z", "nextActionDueAt": "2026-01-15T10:00:00.000Z" }], "count": 50, "nextCursor": "string | null" }
GET/api/v1/tasks

List tasks across your organization.

Query parameters

  • limit, cursor
  • dealId — filter to a specific deal
  • contactId — filter to a specific contact

Response shape

{ "data": [{ "id": "string", "title": "string", "description": "string", "status": "string", "priority": "string", "dueDate": "string", "dealId": "string", "contactId": "string", "assignedTo": "string", "createdAt": "2026-01-15T10:00:00.000Z", "updatedAt": "2026-01-15T10:00:00.000Z" }], "count": 50, "nextCursor": "string | null" }
GET/api/v1/activities

List activity log entries (calls, notes, emails logged).

Query parameters

  • limit, cursor
  • dealId, contactId

Response shape

{ "data": [{ "id": "string", "type": "string", "subject": "string", "body": "string", "dealId": "string", "contactId": "string", "createdAt": "2026-01-15T10:00:00.000Z", "createdBy": "string" }], "count": 50, "nextCursor": "string | null" }
GET/api/v1/organizations

Returns basic info about your organization. No query parameters.

Response shape

{ "data": { "id": "string", "name": "string", "website": "string", "industry": "string", "createdAt": "2026-01-15T10:00:00.000Z" } }

Pagination

All list endpoints use cursor-based pagination. Each response includes:

  • data — array of records
  • count — number of records in this page
  • nextCursor — pass this as cursor= on your next request to get the next page. null means you've reached the end.
// First page GET /api/v1/contacts?limit=50 // Next page (using nextCursor from previous response) GET /api/v1/contacts?limit=50&cursor=abc123

Example Request

curl https://www.ralivi.com/api/v1/contacts \ -H "Authorization: Bearer rlv_live_your_key_here"
{ "data": [ { "id": "abc123", "name": "Jane Smith", "email": "jane@example.com", "company": "Acme Corp", "status": "active", "createdAt": "2026-01-15T10:00:00.000Z" } ], "count": 1, "nextCursor": null }

Revoking a Key

Go to Settings → API Access, find the key you want to remove, and click Revoke. Any integration using that key will immediately lose access. This cannot be undone — you'll need to create a new key and update your integration.

Limits

  • Maximum 100 records per page
  • API is read-only — no write endpoints are available via API key
  • Keys do not expire, but can be revoked at any time