# Listing attendees

To list all event attendees in your event environment you may use the `event.person.find` endpoint with multiple filters and pagination. The required query attributes for this endpoint are `tokenID`, `eventID` and `selection`, and we have several optional attributes for filtering and pagination.

To retrieve the full profile of the attendee (including custom fields), you must send the `fullProfile` query attribute with value **1**.

#### `Selection` query attribute

The `selection` query attribute accepts the following values:

```json
{
    "all": "All",
    "admin": "Complete event admin power",
    "not-admin": "Standard event attendees",
    "speakers": "Linked speakers",
    "permission": "Specific event power",
    "collector": "Lead retrievals collectors",
    "custom-list": "Custom list",
    "tags": "Tags",
    "with-email": "Emails sent",
    "without-email": "Emails not sent",
    "approved": "Enrollment approved",
    "denied": "Enrollment denied",
    "nfc-synced": "NFC synced",
    "nfc-not-synced": "NFC not synced",
    "printed": "Badge printed",
    "not-printed": "Badge not printed",
    "accepted-rsvp": "RSVP accepted",
    "declined-rsvp": "RSVP declined",
    "waiting-rsvp": "RSVP waiting",
    "downloaded": "App downloaded",
    "not-downloaded": "App not downloaded",
    "incomplete-profile": "Missing role, company or image",
    "present": "Attendee present in-person",
    "not-present": "Attendee absent in-person",
    "virtual": "Attendee present online",
    "not-virtual": "Attendee absent online",
    "now-virtual": "Attendee present online right now",
    "public": "Attendee public for chats",
    "private": "Attendee private for chats",
    "favorited": "Attendee favorited by personID"
}
```

The `selection` query attribute allows *stacking* (AND operation) by separating values with a pipe. Example: `selection=printed|present`. It also allows complex stacking for a certain key, like `tags`. Example: `selection=printed|present|tags:29124,4255`.

#### Key-value filtering

We also have the following optional query attributes as filters:

```json
{
    "name": "Attendee name",
    "username": "Attendee username",
    "email": "Attendee email",
    "role": "Attendee job title",
    "company": "Attendee company",
    "assistantEmail":  "Assistant email",
    "updatedBeforeDate": "Updated before (unix timestamp)",
    "updatedAfterDate": "Updated after (unix timestamp)",
    "ticket":  "Ticket",
}
```

You can also use `query` and `queryKey` instead of using the field name as the query attribute directly if you prefer.

You can also search by custom fields using the `feedback_$feedbackID` format. Example:

```json
{
    "feedback_1234": "Query for custom field 1234"
}
```

#### Pagination

To paginate you can use `limit` and `offset` query attributes and to get the total amount of events listed in your account (used to build pagination UI and calculate the amount of pages) you should send the `paginated` query attribute with value `1`.

#### Ordering

To order the events you can use the following query attributes: `order` and `orderOrientation`. The `orderOrientation` attribute accepts `ASC` (ascending) and `DESC` (descending) as values\
and the `order` query attribute accepts the following values:

```json
[
    "level",
    "memberID",
    "name",
    "firstName",
    "lastName",
    "username",
    "role",
    "company",
    "email",
    "assistantEmail",
    "private",
    "rsvp",
    "present",
    "origin",
    "ticket",
    "language",
    "enrollmentDate",
    "updatedDate",
    "printed",
    "device",
    "downloaded",
    "rand"
]
```

#### Example

Here is an example of this API call:

```sh
curl --request GET \
     --url 'https://api.inevent.com/?action=event.person.find&tokenID=YOUR_TOKEN_HERE&eventID=YOUR_EVENT_ID_HERE&limit=100&offset=0&paginated=1' \
     --header 'Accept: application/json'
```

#### Spreadsheet reports

To generate a spreadsheet report out of that API call, you can send the `format` attribute with the value `excel-daemon`. Excel spreadsheets takes a while to generate and they will show up in your `Report center`, but you can also retrieve them using the `download.find` endpoint.
