slice icon Context Slice

Attio API Reference

Filter syntax, attribute types, and query patterns for Attio People

Attio People Query Reference

Filter Syntax

Filters use attribute slugs with condition operators.

Basic filter structure:

{
  "filter": {
    "attribute_slug": {
      "condition": "value"
    }
  }
}

Common Conditions

Text/String attributes:

  • {"$eq": "exact match"} — equals
  • {"$contains": "substring"} — contains text
  • {"$not_empty": true} — has a value
  • {"$is_empty": true} — is empty/null

Email addresses:

{"email_addresses": {"$contains": "@company.com"}}

Select/Status attributes:

{"status": {"$eq": "active"}}

Record references (linked companies):

{"company": {"$contains": "record_id_here"}}

Date attributes:

  • {"$lt": "2024-01-01"} — before date
  • {"$gt": "2024-01-01"} — after date
  • {"$gte": "2024-01-01"} — on or after
  • {"$lte": "2024-01-01"} — on or before

Compound Filters

AND (all conditions must match):

{
  "filter": {
    "$and": [
      {"email_addresses": {"$not_empty": true}},
      {"job_title": {"$contains": "Engineer"}}
    ]
  }
}

OR (any condition matches):

{
  "filter": {
    "$or": [
      {"job_title": {"$contains": "CEO"}},
      {"job_title": {"$contains": "Founder"}}
    ]
  }
}

Sorts

{
  "sorts": [
    {"attribute": "name", "direction": "asc"},
    {"attribute": "created_at", "direction": "desc"}
  ]
}

Directions: asc (ascending), desc (descending)

Standard People Attributes

Attribute Type Description
name text Full name
email_addresses email Email addresses (array)
phone_numbers phone Phone numbers (array)
job_title text Job title
company record-reference Linked company record
primary_location location Location with city, region, country
description text Notes/description
created_at timestamp Record creation time

Example Queries

Find people at a specific company:

{
  "filter": {"company": {"$contains": "company_record_id"}}
}

Find people with email addresses:

{
  "filter": {"email_addresses": {"$not_empty": true}}
}

Find engineers, sorted by name:

{
  "filter": {"job_title": {"$contains": "Engineer"}},
  "sorts": [{"attribute": "name", "direction": "asc"}]
}

Find people added recently:

{
  "filter": {"created_at": {"$gt": "2024-01-01"}},
  "sorts": [{"attribute": "created_at", "direction": "desc"}]
}

Pagination

The API returns up to 100 records per request. Use offset for pagination:

  • First page: no offset
  • Next page: use next_page_offset from response

The code bullet handles pagination automatically up to maxResults.

                  # Attio People Query Reference

## Filter Syntax

Filters use attribute slugs with condition operators.

**Basic filter structure:**

```json
{
  "filter": {
    "attribute_slug": {
      "condition": "value"
    }
  }
}
```

## Common Conditions

**Text/String attributes:**

- `{"$eq": "exact match"}` — equals
- `{"$contains": "substring"}` — contains text
- `{"$not_empty": true}` — has a value
- `{"$is_empty": true}` — is empty/null

**Email addresses:**

```json
{"email_addresses": {"$contains": "@company.com"}}
```

**Select/Status attributes:**

```json
{"status": {"$eq": "active"}}
```

**Record references (linked companies):**

```json
{"company": {"$contains": "record_id_here"}}
```

**Date attributes:**

- `{"$lt": "2024-01-01"}` — before date
- `{"$gt": "2024-01-01"}` — after date
- `{"$gte": "2024-01-01"}` — on or after
- `{"$lte": "2024-01-01"}` — on or before

## Compound Filters

**AND (all conditions must match):**

```json
{
  "filter": {
    "$and": [
      {"email_addresses": {"$not_empty": true}},
      {"job_title": {"$contains": "Engineer"}}
    ]
  }
}
```

**OR (any condition matches):**

```json
{
  "filter": {
    "$or": [
      {"job_title": {"$contains": "CEO"}},
      {"job_title": {"$contains": "Founder"}}
    ]
  }
}
```

## Sorts

```json
{
  "sorts": [
    {"attribute": "name", "direction": "asc"},
    {"attribute": "created_at", "direction": "desc"}
  ]
}
```

Directions: `asc` (ascending), `desc` (descending)

## Standard People Attributes

| Attribute | Type | Description |
|-----------|------|-------------|
| `name` | text | Full name |
| `email_addresses` | email | Email addresses (array) |
| `phone_numbers` | phone | Phone numbers (array) |
| `job_title` | text | Job title |
| `company` | record-reference | Linked company record |
| `primary_location` | location | Location with city, region, country |
| `description` | text | Notes/description |
| `created_at` | timestamp | Record creation time |

## Example Queries

**Find people at a specific company:**

```json
{
  "filter": {"company": {"$contains": "company_record_id"}}
}
```

**Find people with email addresses:**

```json
{
  "filter": {"email_addresses": {"$not_empty": true}}
}
```

**Find engineers, sorted by name:**

```json
{
  "filter": {"job_title": {"$contains": "Engineer"}},
  "sorts": [{"attribute": "name", "direction": "asc"}]
}
```

**Find people added recently:**

```json
{
  "filter": {"created_at": {"$gt": "2024-01-01"}},
  "sorts": [{"attribute": "created_at", "direction": "desc"}]
}
```

## Pagination

The API returns up to 100 records per request. Use `offset` for pagination:

- First page: no offset
- Next page: use `next_page_offset` from response

The code bullet handles pagination automatically up to `maxResults`.