List companies
Changed onReturns a paginated list of companies under the caller's agency, newest first.
Filters:
- relationship — comma-separated relationships (client, target, none). Defaults to client,target — none companies are excluded unless you request them explicitly (e.g. ?relationship=none or ?relationship=client,target,none). none is the relationship of every company auto-created from a person’s experience, enrichment, or import — and the default for a company created via POST /api/v1/companies without an explicit relationship — so they are omitted from the sync surface by default.
- name — case-insensitive partial match on the company name.
- createdAfter / createdBefore — only companies created within the range (inclusive).
- updatedAfter / updatedBefore — only companies updated within the range (inclusive). Use updatedAfter as an incremental-sync cursor: persist the maximum updatedAt you receive and pass it back on the next poll to fetch only what changed (upsert by id to stay idempotent).
Deletions (tombstones): Soft-deleted companies are excluded by default. Pass includeDeleted=true to also receive deleted companies as tombstones — each carries a populated deletedAt (live rows have deletedAt: null). Combine includeDeleted=true with updatedAfter to incrementally pick up deletions: a soft-delete bumps updatedAt, so the deleted row resurfaces in the next poll with deletedAt set.
Pagination: By default the list is offset-paginated (page / pageSize) and the response's pagination object carries page, pageSize, total, and totalPages.
- For large agencies, full crawls, or incremental syncs, prefer keyset (cursor) pagination: set paginate=cursor. In this mode page is ignored, the expensive total COUNT is skipped, and paging stays stable while the list changes underneath a long sync. For the default newest-first crawl (live rows) it also stays fast at any depth; combining cursor mode with includeDeleted=true or a narrow updatedAfter/updatedBefore window can still be slow on very large agencies (those paths are not yet index-optimized). The response pagination object then carries pageSize, hasMore, and nextCursor (total/totalPages are omitted). Request page 1 with just paginate=cursor (no cursor), then replay pagination.nextCursor.cursorDate + cursorId on each subsequent request until nextCursor is null (equivalently hasMore is false). Both cursor halves must be sent together — a half-cursor is a 422. When paginate is omitted, a cursorDate + cursorId pair activates cursor mode on its own; combining a cursor pair with an explicit paginate=offset is contradictory and is rejected with 422.
Each item has the same shape as GET /api/v1/companies/{id}, including location, identities, custom attributes, and owners.
Request
- Base URLhttps://api.recruitwithatlas.com
- AuthHTTP bearer
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Query parameters
Comma-separated company relationships to filter by (client, target, none). These are company values; contacts use client, prospect, none instead.
Default (when omitted): client,target — none companies are excluded. none is the relationship of every company auto-created from a person’s work experience, enrichment, or import (the large majority of companies), so the sync surface excludes them by default. To include them, request none explicitly — e.g. ?relationship=none or ?relationship=client,target,none.
Filter by company name (case-insensitive partial match)
Include soft-deleted companies as tombstones (with a populated deletedAt). Defaults to false. Pair with updatedAfter to incrementally sync deletions.
Sort order by createdAt (record creation time) — desc (default, newest first) or asc (oldest first). id is used as a stable tie-breaker, applied in the same direction.
Page number (1-indexed)
Items per page (max 100)
Alias for pageSize
Pagination strategy. offset (the default when omitted) uses page/pageSize and returns total/totalPages. cursor uses keyset pagination (cursorDate + cursorId) and skips the expensive total COUNT — recommended for full crawls and incremental syncs; it stays fast at any depth for the default newest-first crawl, though includeDeleted=true or a narrow updatedAfter/updatedBefore window can still be slow on very large agencies. When paginate is omitted, passing cursorDate/cursorId infers cursor; combining an explicit paginate=offset with a cursor pair is rejected with 422.
Keyset pagination cursor (used with paginate=cursor): pass back the pagination.nextCursor.cursorDate from the previous response. Must be sent together with cursorId. Omit for the first page. When cursor mode is active page is ignored and total/totalPages are omitted from the response — walk pages until nextCursor is null.
Keyset pagination cursor id (used with paginate=cursor): pass back the pagination.nextCursor.cursorId from the previous response. Must be sent together with cursorDate.
Response
Paginated list of companies
Example response
{
"data": [
{
"name": "Acme Corp",
"websiteUrl": "https://acme.com",
"linkedinUrl": "https://linkedin.com/company/acme",
"relationship": "client",
"industry": [
"Technology"
],
"employeeCount": 150,
"ticker": "AAPL",
"location": {
"formattedAddress": "San Francisco, California, United States",
"city": "San Francisco",
"region": "California",
"country": "United States",
"metro": "San Francisco Bay Area",
"raw": "London, England, United Kingdom",
"latitude": 37.7749,
"longitude": -122.4194
},
"identities": [
{
"type": "linkedin",
"value": "linkedin.com/company/acme"
}
],
"owners": [
{
"name": "Jane Smith",
"email": "jane@agency.com"
}
]
}
],
"pagination": {
"page": 1,
"pageSize": 25,
"total": 42,
"totalPages": 2
}
}Changes
- warning
added the new
undefinedenum value to the////response property for the response status - warning
added the new
undefinedenum value to the//response property for the response status - warning
added the new
undefinedenum value to the//response property for the response status
- warning
- info
added the optional property
to the response with the status
- info