WorkloomDevelopers
v1Get an API key
Reference/Lists

Lists

Lists of contacts, as your team uses them in Workloom. Add contacts to a static list and take them out; a smart list’s filter decides who is in it.

Scopes: lists:read to read, lists:write to change.

The list object

idstring

The list’s id.

namestring

Its name.

descriptionstring, nullable

What it is for.

kindstring

static: people are added and removed. smart: its filter decides, so it cannot be added to. One of static, smart.

owner_seat_idstring, nullable

Who owns it.

member_countinteger, nullable

How many contacts are in it.

created_attimestamp

When it was made.

The list object
{
  "id": "66ff8096e4b0a1b2c3d4dd01",
  "name": "Series B ops leaders",
  "description": null,
  "kind": "static",
  "owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
  "member_count": 42,
  "created_at": "2026-09-29T08:00:00.000Z"
}

Endpoints

GET/lists

List lists

Lists the key reaches: every list for a workspace key; for a key acting for one person, theirs and those shared with them.

Scope: lists:read
Query parameters
limitinteger

How many to return, 1 to 100. Default 25.

cursorstring

The next_cursor from the previous page.

Errors
400

invalid_request, unknown_fields, reason_required or unsupported_version.

401

authentication_required or invalid_key.

403

missing_scope, forbidden, seat_inactive or organisation_inactive.

429

rate_limited. Wait Retry-After seconds.

500

internal_error.

List lists
curl "https://api.useworkloom.com/api/public/v1/lists?limit=25" \
  -H "Authorization: Bearer $WORKLOOM_KEY"
const res = await fetch("https://api.useworkloom.com/api/public/v1/lists?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/lists?limit=25",
    headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}"},
)
data = res.json()
Response
{
  "data": [
    {
      "id": "66ff8096e4b0a1b2c3d4dd01",
      "name": "Series B ops leaders",
      "description": null,
      "kind": "static",
      "owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
      "member_count": 42,
      "created_at": "2026-09-29T08:00:00.000Z"
    }
  ],
  "has_more": true,
  "next_cursor": "66ff8096e4b0a1b2c3d4dd01"
}
200 OKsample
GET/lists/{id}

Get a list

Scope: lists:read
Path parameters
idstringRequired

The list’s id.

Errors
400

invalid_request, unknown_fields, reason_required or unsupported_version.

401

authentication_required or invalid_key.

403

missing_scope, forbidden, seat_inactive or organisation_inactive.

404

not_found.

429

rate_limited. Wait Retry-After seconds.

500

internal_error.

Get a list
curl "https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01" \
  -H "Authorization: Bearer $WORKLOOM_KEY"
const res = await fetch("https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01", {
  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/lists/66ff8096e4b0a1b2c3d4dd01",
    headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}"},
)
data = res.json()
Response
{
  "data": {
    "id": "66ff8096e4b0a1b2c3d4dd01",
    "name": "Series B ops leaders",
    "description": null,
    "kind": "static",
    "owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
    "member_count": 42,
    "created_at": "2026-09-29T08:00:00.000Z"
  }
}
200 OKsample
GET/lists/{id}/members

List who is in a list

The contacts in a list, oldest first, as contact objects. A smart list’s members are worked out from its filter when you ask.

Scope: lists:read
Path parameters
idstringRequired

The list’s id.

Query parameters
limitinteger

How many to return, 1 to 100. Default 25.

cursorstring

The next_cursor from the previous page.

Errors
400

invalid_request, unknown_fields, reason_required or unsupported_version.

401

authentication_required or invalid_key.

403

missing_scope, forbidden, seat_inactive or organisation_inactive.

404

not_found.

429

rate_limited. Wait Retry-After seconds.

500

internal_error.

List who is in a list
curl "https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01/members?limit=25" \
  -H "Authorization: Bearer $WORKLOOM_KEY"
const res = await fetch("https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01/members?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/lists/66ff8096e4b0a1b2c3d4dd01/members?limit=25",
    headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}"},
)
data = res.json()
Response
{
  "data": [
    {
      "id": "66f2a1c0e4b0a1b2c3d4e5f6",
      "first_name": "Priya",
      "last_name": "Nair",
      "full_name": "Priya Nair",
      "email": "priya@brightline.example",
      "phone": "+91 98200 11210",
      "title": "Head of Sales",
      "company_name": "Brightline",
      "company_domain": "brightline.example",
      "company_id": "66f19b77e4b0a1b2c3d4a1b2",
      "linkedin_url": "https://www.linkedin.com/in/priyanair",
      "location": {
        "city": "Bengaluru",
        "state": "Karnataka",
        "country": "India"
      },
      "owner_seat_id": "66e0f1a2e4b0a1b2c3d40a0b",
      "tags": [
        "ops-leaders",
        "series-b"
      ],
      "custom_fields": {
        "region": "South",
        "segment": "Mid-market"
      },
      "created_at": "2026-09-21T10:12:44.000Z",
      "updated_at": "2026-10-03T08:41:09.000Z"
    }
  ],
  "has_more": true,
  "next_cursor": "66f2a1c0e4b0a1b2c3d4e5f6"
}
200 OKsample
POST/lists/{id}/members

Add contacts to a list

Adds contacts to a static list the key owns, honouring the list’s rules (one per company, email required…). Every contact not added is listed with why.

Scope: lists:writeTakes Idempotency-Key
Path parameters
idstringRequired

The list’s id.

Header parameters
Idempotency-Keystring

Any 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.

Body parameters
contact_idsarray of stringRequired

The contact ids, up to 500.

Errors
400

invalid_request, unknown_fields, reason_required or unsupported_version.

401

authentication_required or invalid_key.

403

missing_scope, forbidden, seat_inactive or organisation_inactive.

404

not_found.

409

duplicate, conflict or idempotency_key_in_use.

422

idempotency_key_reused.

429

rate_limited. Wait Retry-After seconds.

500

internal_error.

Add contacts to a list
curl -X POST "https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01/members" \
  -H "Authorization: Bearer $WORKLOOM_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "contact_ids": [
    "66f2a1c0e4b0a1b2c3d4e5f6",
    "66f2a1c0e4b0a1b2c3d4e600"
  ]
}'
const res = await fetch("https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01/members", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.WORKLOOM_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID()
  },
  body: JSON.stringify({
    "contact_ids": [
      "66f2a1c0e4b0a1b2c3d4e5f6",
      "66f2a1c0e4b0a1b2c3d4e600"
    ]
  })
});
const data = await res.json();
import os, uuid, requests

res = requests.post(
    "https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01/members",
    headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
    json={
      "contact_ids": [
        "66f2a1c0e4b0a1b2c3d4e5f6",
        "66f2a1c0e4b0a1b2c3d4e600"
      ]
    },
)
data = res.json()
Response
{
  "data": {
    "added": 2,
    "already_in": 1,
    "skipped": [
      {
        "contact_id": "66f2a1c0e4b0a1b2c3d4e600",
        "reason": "No email address on file"
      }
    ],
    "not_found": []
  },
  "livemode": true
}
200 OKsample
POST/lists/{id}/members/remove

Take contacts out of a list

Removes contacts from a static list the key owns.

Scope: lists:write
Path parameters
idstringRequired

The list’s id.

Body parameters
contact_idsarray of stringRequired

The contact ids, up to 500.

Errors
400

invalid_request, unknown_fields, reason_required or unsupported_version.

401

authentication_required or invalid_key.

403

missing_scope, forbidden, seat_inactive or organisation_inactive.

404

not_found.

409

duplicate, conflict or idempotency_key_in_use.

429

rate_limited. Wait Retry-After seconds.

500

internal_error.

Take contacts out of a list
curl -X POST "https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01/members/remove" \
  -H "Authorization: Bearer $WORKLOOM_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "contact_ids": [
    "66f2a1c0e4b0a1b2c3d4e5f6"
  ]
}'
const res = await fetch("https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01/members/remove", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.WORKLOOM_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "contact_ids": [
      "66f2a1c0e4b0a1b2c3d4e5f6"
    ]
  })
});
const data = await res.json();
import os, requests

res = requests.post(
    "https://api.useworkloom.com/api/public/v1/lists/66ff8096e4b0a1b2c3d4dd01/members/remove",
    headers={"Authorization": f"Bearer {os.environ['WORKLOOM_KEY']}"},
    json={
      "contact_ids": [
        "66f2a1c0e4b0a1b2c3d4e5f6"
      ]
    },
)
data = res.json()
Response
{
  "data": {
    "removed": 1,
    "not_in_list": 0
  },
  "livemode": true
}
200 OKsample
Was this page useful?