---
title: "List companies"
method: GET
path: "/companies"
tags: ["Objects"]
---

# List companies

`GET /companies`

Returns a paginated list of company records. Supports cursor pagination, full-text search, structured filters (stage, owner, tags, dates), and sorting. Results respect the API key user's ownership permissions. See the [Listing & filters](/api-v2/listing-and-filters) guide for filter syntax.

## Query parameters

- `cursor` string
- `pageSize` integer
- `search` string
- `orderBy` 'createdAt' | 'name' | 'number'
- `orderDir` 'asc' | 'desc'
- `filters` object — Structured filters. Each key is a filter field with operator and values. Option fields use string IDs; date fields use ISO 8601 date-time strings. See the Listing & filters guide.

## Response `200`

OK

- object
  - `data` Company[], required
    - `id` string, required — Company ID
    - `name` string, required — Company name
    - `number` string, required — Auto-generated company number
    - `type` 'contact' | 'company', nullable — Record type (always company for this endpoint)
    - `email` string, nullable — Email address
    - `phone` string, nullable — Phone number
    - `taxNumber` string, nullable — Tax number
    - `website` string, nullable — Website URL
    - `description` string, nullable — Description
    - `stageId` string, nullable — Client stage ID
    - `stageName` string, nullable — Client stage label
    - `ownerUserId` string, nullable — Owner user ID
    - `crmSourceId` string, nullable — CRM source ID
    - `sourceName` string, nullable — CRM source name
    - `currency` string, nullable — Currency code
    - `openingBalance` number, required — Opening balance
    - `showJobAmountToWorker` boolean, required — Whether job amounts are visible to field workers
    - `isClientPortalEnabled` boolean, required — Whether the client portal is enabled
    - `internalNotes` string, nullable — Internal notes
    - `linkedin` string, nullable — LinkedIn URL
    - `createdAt` string, date-time — When the company was created
    - `updatedAt` string, date-time — When the company was last updated
  - `meta` object, required
    - `nextCursor` string, nullable — Cursor to fetch the next page
    - `hasMore` boolean, required — Whether additional results are available

## Other responses

- `400` — Validation error or bad request
- `401` — Missing or invalid API key
- `403` — Insufficient permission
- `404` — Resource not found
- `429` — Rate limit exceeded

---

[API](https://skmtc.net/heffl/apis/heffl-api-v2-beta.md) · [All operations](https://skmtc.net/heffl/apis/heffl-api-v2-beta/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/heffl/heffl-api-v2-beta/versions/27006cfef4d8/schema)
