Companies
A company is an account your workspace holds. Workloom matches companies on their domain, so the same business is not added twice. Size, location and industry come from Workloom’s data.
Scopes: companies:read to read, companies:write to change.
The company object
idstringThe company’s id.
namestring, nullableCompany name.
domainstring, nullableWebsite domain.
industrystring, nullableIndustry.
employee_countinteger, nullableNumber of employees, when known exactly.
employee_rangestring, nullableSize band, for example "51-200".
locationobject, nullableHeadquarters, as far as we know.
linkedin_urlstring, nullableLinkedIn company page.
owner_seat_idstring, nullableThe teammate who owns this account. Null when nobody does.
tagsarray of stringTags on the company.
custom_fieldsobjectYour own fields (Settings › Data model), by key. GET /custom-fields lists their keys, labels and types. A field with no value is left out.
created_attimestampWhen the company was added.
updated_attimestampWhen the company last changed.
{
"id": "66f19b77e4b0a1b2c3d4a1b2",
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics",
"employee_count": 420,
"employee_range": "201-500",
"location": {
"city": "Bengaluru",
"state": "Karnataka",
"country": "India"
},
"linkedin_url": "https://www.linkedin.com/company/brightline",
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b"
],
"custom_fields": {
"segment": "Mid-market"
},
"created_at": "2026-09-18T07:30:00.000Z",
"updated_at": "2026-10-02T16:20:31.000Z"
}Endpoints
List companies
Companies in your workspace, oldest first unless you sort. A key acting for one person sees the companies that person owns or whose people they can see.
domainstringOnly the company with this domain.
sortstringOrder by one field, oldest or smallest first; put - in front for newest or largest first. Empty values come first ascending and last descending. Default: oldest first. Keep the same sort while you follow next_cursor.
limitintegerHow many to return, 1 to 100. Default 25.
cursorstringThe next_cursor from the previous page.
400invalid_request, unknown_fields, reason_required or unsupported_version.
401authentication_required or invalid_key.
403missing_scope, forbidden, seat_inactive or organisation_inactive.
429rate_limited. Wait Retry-After seconds.
500internal_error.
curl "https://api.useworkloom.com/api/public/v1/companies?limit=25" \
-H "Authorization: Bearer $WORKLOOM_KEY"const res = await fetch("https://api.useworkloom.com/api/public/v1/companies?limit=25", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.WORKLOOM_KEY}`
}
});
const data = await res.json();import os, requests
res = requests.get(
"https://api.useworkloom.com/api/public/v1/companies?limit=25",
headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}"},
)
data = res.json(){
"data": [
{
"id": "66f19b77e4b0a1b2c3d4a1b2",
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics",
"employee_count": 420,
"employee_range": "201-500",
"location": {
"city": "Bengaluru",
"state": "Karnataka",
"country": "India"
},
"linkedin_url": "https://www.linkedin.com/company/brightline",
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b"
],
"custom_fields": {
"segment": "Mid-market"
},
"created_at": "2026-09-18T07:30:00.000Z",
"updated_at": "2026-10-02T16:20:31.000Z"
}
],
"has_more": true,
"next_cursor": "66f19b77e4b0a1b2c3d4a1b2"
}Add a company
Adds a company, checked for duplicates exactly as adding one in Workloom is: the same domain is refused, and the same name needs force: true. A key acting for a person makes it theirs.
Idempotency-KeystringAny unique string, up to 255 characters. Send the same key when you retry and the request runs once; the first answer comes back with Idempotent-Replayed: true. Kept 24 hours.
namestringRequiredCompany name.
domainstring, nullableWebsite or domain.
industrystring, nullableIndustry.
custom_fieldsobjectYour own fields by key (GET /custom-fields). Each value is checked against its field’s type, and everything is checked before anything is saved.
forcebooleanAdd it even though a company with the same name exists.
400invalid_request, unknown_fields, reason_required or unsupported_version.
401authentication_required or invalid_key.
403missing_scope, forbidden, seat_inactive or organisation_inactive.
409duplicate, conflict or idempotency_key_in_use.
422idempotency_key_reused.
429rate_limited. Wait Retry-After seconds.
500internal_error.
curl -X POST "https://api.useworkloom.com/api/public/v1/companies" \
-H "Authorization: Bearer $WORKLOOM_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics"
}'const res = await fetch("https://api.useworkloom.com/api/public/v1/companies", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WORKLOOM_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID()
},
body: JSON.stringify({
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics"
})
});
const data = await res.json();import os, uuid, requests
res = requests.post(
"https://api.useworkloom.com/api/public/v1/companies",
headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
json={
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics"
},
)
data = res.json(){
"data": {
"id": "66f19b77e4b0a1b2c3d4a1b2",
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics",
"employee_count": 420,
"employee_range": "201-500",
"location": {
"city": "Bengaluru",
"state": "Karnataka",
"country": "India"
},
"linkedin_url": "https://www.linkedin.com/company/brightline",
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b"
],
"custom_fields": {
"segment": "Mid-market"
},
"created_at": "2026-09-18T07:30:00.000Z",
"updated_at": "2026-10-02T16:20:31.000Z"
},
"livemode": true
}Get a company
Returns one company. A company the key cannot reach answers not_found.
idstringRequiredThe company’s id.
400invalid_request, unknown_fields, reason_required or unsupported_version.
401authentication_required or invalid_key.
403missing_scope, forbidden, seat_inactive or organisation_inactive.
404not_found.
429rate_limited. Wait Retry-After seconds.
500internal_error.
curl "https://api.useworkloom.com/api/public/v1/companies/66f19b77e4b0a1b2c3d4a1b2" \
-H "Authorization: Bearer $WORKLOOM_KEY"const res = await fetch("https://api.useworkloom.com/api/public/v1/companies/66f19b77e4b0a1b2c3d4a1b2", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.WORKLOOM_KEY}`
}
});
const data = await res.json();import os, requests
res = requests.get(
"https://api.useworkloom.com/api/public/v1/companies/66f19b77e4b0a1b2c3d4a1b2",
headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}"},
)
data = res.json(){
"data": {
"id": "66f19b77e4b0a1b2c3d4a1b2",
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics",
"employee_count": 420,
"employee_range": "201-500",
"location": {
"city": "Bengaluru",
"state": "Karnataka",
"country": "India"
},
"linkedin_url": "https://www.linkedin.com/company/brightline",
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b"
],
"custom_fields": {
"segment": "Mid-market"
},
"created_at": "2026-09-18T07:30:00.000Z",
"updated_at": "2026-10-02T16:20:31.000Z"
}
}Update a company
Changes how your workspace holds the company: its owner and its tags. Size, location and the rest come from Workloom’s data and are not set over the API.
idstringRequiredThe company’s id.
tagsarray of stringReplaces the tags.
owner_seat_idstring, nullableHand the account to a teammate. Null leaves it unowned.
custom_fieldsobjectYour own fields by key (GET /custom-fields). Each value is checked against its field’s type, and everything is checked before anything is saved.
400invalid_request, unknown_fields, reason_required or unsupported_version.
401authentication_required or invalid_key.
403missing_scope, forbidden, seat_inactive or organisation_inactive.
404not_found.
409duplicate, conflict or idempotency_key_in_use.
429rate_limited. Wait Retry-After seconds.
500internal_error.
curl -X PATCH "https://api.useworkloom.com/api/public/v1/companies/66f19b77e4b0a1b2c3d4a1b2" \
-H "Authorization: Bearer $WORKLOOM_KEY" \
-H "Content-Type: application/json" \
-d '{
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b",
"expansion"
]
}'const res = await fetch("https://api.useworkloom.com/api/public/v1/companies/66f19b77e4b0a1b2c3d4a1b2", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.WORKLOOM_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b",
"expansion"
]
})
});
const data = await res.json();import os, requests
res = requests.patch(
"https://api.useworkloom.com/api/public/v1/companies/66f19b77e4b0a1b2c3d4a1b2",
headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}"},
json={
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b",
"expansion"
]
},
)
data = res.json(){
"data": {
"id": "66f19b77e4b0a1b2c3d4a1b2",
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics",
"employee_count": 420,
"employee_range": "201-500",
"location": {
"city": "Bengaluru",
"state": "Karnataka",
"country": "India"
},
"linkedin_url": "https://www.linkedin.com/company/brightline",
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b"
],
"custom_fields": {
"segment": "Mid-market"
},
"created_at": "2026-09-18T07:30:00.000Z",
"updated_at": "2026-10-02T16:20:31.000Z"
},
"livemode": true
}Search companies
Companies matching every filter, oldest first unless you sort (created_at, updated_at or employee_count), paged like the list. Searchable: name, domain, industry, employee_count, employee_range, location.city, location.country, owner_seat_id, tags, created_at, updated_at, and custom_fields.<key>. Operators as for contacts.
filtersarray of SearchFilterUp to 20 filters. All must match.
limitintegerHow many to return, 1 to 100. Default 25.
cursorstring, nullableThe next_cursor from the previous page.
sortstring, nullableOrder by one field, as sort on the list: - in front for newest or largest first. Keep the same sort while you follow next_cursor.
400invalid_request, unknown_fields, reason_required or unsupported_version.
401authentication_required or invalid_key.
403missing_scope, forbidden, seat_inactive or organisation_inactive.
409duplicate, conflict or idempotency_key_in_use.
429rate_limited. Wait Retry-After seconds.
500internal_error.
curl -X POST "https://api.useworkloom.com/api/public/v1/companies/search" \
-H "Authorization: Bearer $WORKLOOM_KEY" \
-H "Content-Type: application/json" \
-d '{
"filters": [
{
"field": "custom_fields.segment",
"op": "eq",
"value": "Mid-market"
}
]
}'const res = await fetch("https://api.useworkloom.com/api/public/v1/companies/search", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WORKLOOM_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"filters": [
{
"field": "custom_fields.segment",
"op": "eq",
"value": "Mid-market"
}
]
})
});
const data = await res.json();import os, requests
res = requests.post(
"https://api.useworkloom.com/api/public/v1/companies/search",
headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}"},
json={
"filters": [
{
"field": "custom_fields.segment",
"op": "eq",
"value": "Mid-market"
}
]
},
)
data = res.json(){
"data": [
{
"id": "66f19b77e4b0a1b2c3d4a1b2",
"name": "Brightline",
"domain": "brightline.example",
"industry": "Logistics",
"employee_count": 420,
"employee_range": "201-500",
"location": {
"city": "Bengaluru",
"state": "Karnataka",
"country": "India"
},
"linkedin_url": "https://www.linkedin.com/company/brightline",
"owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
"tags": [
"series-b"
],
"custom_fields": {
"segment": "Mid-market"
},
"created_at": "2026-09-18T07:30:00.000Z",
"updated_at": "2026-10-02T16:20:31.000Z"
}
],
"has_more": true,
"next_cursor": "66f19b77e4b0a1b2c3d4a1b2"
}