Skip to content

Lists ​

Lists are static groups of contacts. You add contacts to them and remove contacts from them yourself. A contact can belong to several lists.

The list object ​

json
{
  "id": 1,
  "name": "Newsletter",
  "description": "Monthly product updates",
  "color": "#6366f1",
  "contacts_count": 120,
  "created_at": "2026-02-01T10:00:00.000000Z",
  "updated_at": "2026-02-01T10:00:00.000000Z"
}

Endpoints ​

MethodPathPermissionDescription
GET/listslists:readList lists, sorted by name (paginated)
POST/listslists:writeCreate a list
GET/lists/{id}lists:readGet a list
PUT/lists/{id}lists:writeUpdate a list (partial)
DELETE/lists/{id}lists:writeDelete a list. Returns 204.
GET/lists/{id}/contactslists:readThe list's active contacts (paginated)
POST/lists/{id}/contactslists:writeAdd contacts
DELETE/lists/{id}/contactslists:writeRemove contacts

List lists ​

GET /lists

Returns lists from the token workspace. The default order remains name asc, then id asc. Invalid query values return 422.

QueryTypeDescription
pageintegerPage number, minimum 1, default 1.
per_pageintegerLists per page, from 1 to 100, default 15.
searchstringPartial search over name and description. Every term must match; at most six terms are used.
colorstringExact list color.
has_contactsboolean1 keeps lists with contacts; 0 keeps empty lists.
sortenumname, created_at, updated_at, or contacts_count.
directionenumasc or desc. The default is asc.
bash
curl --get https://app.beeving.com/api/v1/lists \
  -H "Authorization: Bearer TOKEN" \
  -H "Accept: application/json" \
  --data-urlencode "search=product leads" \
  --data-urlencode "has_contacts=1" \
  --data-urlencode "sort=contacts_count" \
  --data-urlencode "direction=desc"

List contacts in a list ​

GET /lists/{id}/contacts

The parent list and returned contacts are both restricted to the token workspace. A list from another workspace returns 404. Results default to active contacts ordered by created_at desc, then id desc; an explicit status selects another status.

QueryTypeDescription
page, per_pageintegerPage defaults to 1. Page size is from 1 to 100 and defaults to 15.
searchstringPartial contact search over identity, name, job title and linked company.
statusenumactive, unsubscribed, bounced, or complained. Defaults to active.
lifecycle_stageenumsubscriber, lead, marketing_qualified_lead, sales_qualified_lead, opportunity, customer, evangelist, or other.
company_idintegerOnly contacts linked to this workspace company.
list_id, tag_idintegerIntersect with another workspace list or tag. A foreign ID returns 422.
has_email, has_linkedin, has_companyboolean1 requires the value or relation; 0 requires it to be absent.
sortenumcreated_at, updated_at, first_name, last_name, email, linkedin_url, job_title, status, or lifecycle_stage.
directionenumasc or desc. Default desc.
bash
curl --get https://app.beeving.com/api/v1/lists/12/contacts \
  -H "Authorization: Bearer TOKEN" \
  -H "Accept: application/json" \
  --data-urlencode "search=alice acme" \
  --data-urlencode "lifecycle_stage=lead" \
  --data-urlencode "has_email=1" \
  --data-urlencode "sort=first_name" \
  --data-urlencode "direction=asc"

Both listing responses contain data, navigation URLs in links, and meta with current_page, last_page, per_page, total, and count for the current page.

Create / update ​

FieldTypeRules
namestringRequired on create. Max 255 characters
descriptionstring | nullMax 1000 characters

201 on create and 200 on update. Both return { "data": List }.

Add or remove contacts ​

POST   /lists/{id}/contacts
DELETE /lists/{id}/contacts
json
{ "contact_ids": [12, 13, 14] }

Every ID must be a contact in your workspace. Otherwise the request fails with 422.

200: { "data": { "message": "Contacts added to list" } }, or "Contacts removed from list" for a removal.

TIP

To create contacts and add them to lists in a single call, send lists: [id] to POST /contacts.

API v1.0