---
title: "List customers, attributes, and devices"
method: POST
path: "/v1/customers/attributes"
tags: ["Customers"]
---

# List customers, attributes, and devices

`POST /v1/customers/attributes`

Return attributes and devices for up to 100 customers by ID. If an ID in the request does not exist, the response omits it.

## Query parameters

- `id_type` 'id' | 'email' | 'phone' | 'cio_id'

## Request body

- object
  - `ids` string[], required — An array of up to 100 customer identifiers. All values must match the `id_type` query parameter—`id` values by default.

## Response `200`

Returns an array of `customers`. Each object represents a customer profile.

- object
  - `customers` CustomerAttributesObject[]
    - `customer` object — The profile you referenced by ID in the request.
      - `id` string — The customer ID referenced in the request.
      - `identifiers` CustomerIdentifiers — Identifiers for the person in a response—`id`, `cio_id`, and `email`. Unset `id` or `email` values are `null`. We recommend this object over the less descriptive `customer_id`. This object doesn't include `phone`, even if your workspace uses phone numbers as an identifier; look for the person's `phone` attribute instead.
        - `email` string, email, nullable, required — A person's email address, if set.
        - `id` string, nullable, required — A person's unique ID, if set. This is the same as the `customer_id` if present.
        - `cio_id` string, required — A unique identifier set by Customer.io, used to reference a person if you want to update their identifiers.
      - `attributes` object — Contains attributes assigned to this profile, including your workspace's people-identifiers (by default, these are `id`, `email`, and `cio_id`). Attributes are all stored as strings.
        - `id` string, nullable — The ID of a customer profile, analogous to a "person" in the UI. If your workspace supports multiple identifiers (email and ID), this value can be null.
        - `email` string, nullable — The email address of the customer.
        - `cio_id` string — A unique identifier set by Customer.io, used to reference a person if you want to update their identifiers.
        - `cio_subscription_preferences` string — A person's subscription preferences as stringified JSON. If unset, preferences are computed from topic defaults; see `_cio_subscription_preferences_computed`.
        - `_cio_subscription_preferences_computed` string — A person's computed subscription preferences as stringified JSON, combining set preferences with defaults for unset topics. [Learn more about backfilled preferences](/messaging/channels/subscriptions/center/#backfill-preferences).
      - `timestamps` object — The epoch timestamps when corresponding attributes were set on the customer profile.
        - `cio_id` integer — The date-time when `cio_id` was assigned.
        - `_last_emailed` integer — The date-time when you last emailed a person.
        - `email` integer — The date-time when the person's email address was added.
        - `id` integer — The date-time when the person's ID was generated.
        - `unsubscribed` integer — The date-time when the person unsubscribed.
        - `_cio_subscription_preferences_computed` integer — Because this value is computed and not actually set on a person, this value is always 0
        - `cio_subscription_preferences` integer — The datetime when a person's subscription preferences were last updated.
        - `additionalProperties` unknown
      - `unsubscribed` boolean — If `true`, a person is globally unsubscribed from email, SMS, WhatsApp, and push. Values like `true`, `TRUE`, `1`, and `"1"` count as true; other values are treated as subscribed or topic-based.
      - `devices` DeviceObject[] — Lists the devices associated with the customer profile.
        - `id` string, required — The device token.
        - `last_used` integer — The `timestamp` when you last identified this device. If you don't pass a timestamp when you add or update a device, we use the time of the request itself. Our SDKs identify a device when a person launches their app.
        - `platform` 'ios' | 'android', required — The device/messaging platform.
        - `attributes` object — Attributes that you can reference to segment your audience—like a person's attributes, but specific to a device. These can be either the attributes defined below or custom key-value attributes.
          - `device_os` string — The operating system, including the version, on the device.
          - `device_model` string — The model of the device a person uses.
          - `app_version` string — The version of your app that a customer uses. You might target app versions to let people know when they need to update, or expose them to new features when they do.
          - `cio_sdk_version` string — The version of the Customer.io SDK in the app.
          - `_last_status` '' | 'bounced' | 'sent' | 'suppressed' — The delivery status of the last message sent to the device—sent, bounced, or suppressed. An empty string indicates that that the device hasn't received a push yet.
          - `device_locale` string — The device's [IETF language code](/journeys/channels/localization/getting-started/#supported-languages), such as `en-MX` or `es-ES`.
          - `push_enabled` 'true' | 'false' — If `"true"`, the device is opted-in and can receive push notifications.

## Other responses

- `400` — The request is malformed.
- `429` — Your request is over the 10-per-second limit.

---

[API](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference.md) · [All operations](https://skmtc.dev/customer/apis/customer-io-journeys-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/customer/customer-io-journeys-api-reference/revisions/4b391af7cb06/schema)
