Skip to main content

Base URL

https://<your-domain>/api/v2/crm

Key Features

  • Read-only customer data access
  • Bearer token authentication (Sanctum)
  • Rate limited to 60 requests per minute
  • Multi-tenant — tokens only access your company’s data
  • Granular permissions — control what each token can access

Response Format

All responses follow a consistent envelope:
{
  "success": true,
  "data": [ ... ],
  "meta": {
    "per_page": 25,
    "next_cursor": "eyJsYXN0X2FjdGl2aXR5X2F0IjoiMjAyNi0wMiIsImlkIjo0NDB9",
    "prev_cursor": null,
    "has_more": true
  }
}
For single resources, data is an object instead of an array, and meta is omitted.

Error Responses

StatusMeaning
401Missing or invalid token
403Token lacks required permission
404Resource not found
429Rate limit exceeded (retry after header included)
{
  "success": false,
  "message": "Unauthenticated."
}

Pagination

The API uses cursor-based pagination — no total count, but faster and stable on large datasets. Use per_page (max 100) to control page size. Pass cursor from the previous response’s meta.next_cursor to get the next page.
# First page
GET /api/v2/crm/customers?per_page=50

# Next page
GET /api/v2/crm/customers?per_page=50&cursor=eyJsYXN0X2FjdGl2aXR5X2F0IjoiMjAyNiIsImlkIjo0NDB9
When meta.has_more is false, you have reached the last page.

Filtering

Filters use the filter query parameter:
FilterExampleDescription
filter[query]?filter[query]=ahmedSearch by name
filter[lead_status.id][]?filter[lead_status.id][]=3Filter by lead status
filter[owner.id][]?filter[owner.id][]=7Filter by owner
filter[lead_source.id][]?filter[lead_source.id][]=2Filter by lead source
filter[priority.id]?filter[priority.id]=1Filter by priority
filter[date_from]?filter[date_from]=2026-01-01Created after date
filter[date_to]?filter[date_to]=2026-02-28Created before date