Reserved attributes

In Customer.io, attributes marked as reserved support core functionality in the platform. Some of them are generated by our system and immutable; for others, you can modify the values. Make sure you understand the purpose of reserved attributes before making changes so you don't unintentionally impact system workflows.

Identifiers

To add, update, or delete people, you need an identifier unique to each person, so your workspace needs to reserve attributes for identification. What attributes count as identifiers depend on your workspace settings.

AttributePurposeEditableData Format
anonymous_idAn anonymous identifier that your website or app assigns to a visitor before you know who they are. When you identify a person with an anonymous_id, Customer.io links the events and page views recorded under that ID to the person.YesString
cio_idA unique, immutable identifier set by Customer.io, set automatically when you add a person.No, system-generatedString
emailA person’s email address. If your workspace uses email as a unique identifier (the default setting for new workspaces), and the email address does not yet exist, we create a new person. The TO line of your email templates is pre-filled with this attribute.YesString, valid RFC 5322 email addresses
idA unique identifier for people. If the id does not yet exist, Customer.io creates a new person.YesString, max 150 characters
phoneA person’s phone number. If your workspace uses phone as a unique identifier (the default setting for new workspaces), and the phone number does not yet exist, Customer.io creates a new person.YesString, E.164 format (like +14155552671). Values that aren’t valid E.164 numbers can’t identify a person.

Message subscription preferences

To manage people’s communication preferences, you need to use these reserved attributes. Customer.io updates these attributes when people subscribe or unsubscribe from messaging using your workspace’s unsubscribe links.

You have to set up and enable a subscription center for subscription preferences to apply. Otherwise, your workspace automatically supports a global unsubscribe page where people can indicate if they want any messaging from you. Each person has a global subscription status managed by the unsubscribed attribute.

AttributePurposeEditableData Format
cio_subscription_preferencesStores the topic and channel preferences a person set through the subscription center, or that you set on their behalf. You can’t delete this attribute.YesJSON object with topics and channels keys.
_cio_subscription_preferences_computedStores all of a person’s subscription preferences, including defaults for topics and channels the person hasn’t explicitly set. Customer.io computes this value from cio_subscription_preferences and your topic settings. You can’t set or edit it.No, system-generatedJSON object with topics and channels keys.
unsubscribedDetermines whether a person is globally unsubscribed from messages.YesBoolean, but will accept other data formats

Consent records aren’t attributes. Customer.io stores them as activities, so you won’t find them on people’s Attributes tabs.

Custom objects & relationships

These attributes are reserved for managing custom objects and relationships, two distinct types of data in Customer.io.

AttributePurposeEditableData Format
cio_object_idA unique, immutable identifier for objects provided by Customer.io. If this id doesn’t exist in your workspace, Customer.io creates a new object.No, system-generatedString
object_idA unique identifier for objects. If the object_id doesn’t exist, Customer.io creates a new object.YesString, max 150 characters
objectIdAn analog for object_id in some Customer.io integrations.YesString
created_atUnix timestamp when the object was first created. For example, used when listing objects in the UI.YesInteger, unix timestamp

These two JSON objects are reserved for relationship attributes and let you pull in information for different types of audience members in your automations.

KeyPurposeEditableData Format
relationshipStores attributes for a relationship to a custom object. Use this to reference relationships in liquid. Cannot be used as the name of an object attribute.YesJSON object
_relationshipIn relationship-triggered automations, this stores relationship attributes for audience members who didn’t trigger the journey which you can use to personalize messages. Cannot be used as the name of a customer attribute.Yes, by editing the relationship attributesJSON object

Localization

Customer.io uses these attributes when you want to send messages in certain timezones or at certain times of day. You store timezone information on people’s profiles.

AttributePurposeEditableData Format
timezoneThe user’s time zone. Used for sending localized messages.YesString, region format
timezone_validA computed attribute that tells you whether a person’s timezone attribute contains a valid IANA time zone. Customer.io sets and maintains this value automatically—you can’t set or change it. Use it to find and fix people with missing or invalid time zones.No, system-generatedBoolean. true when timezone holds a valid IANA time zone; false when timezone is missing or isn’t a valid IANA time zone.

Geolocation

When you enable automatic geolocation data collection, Customer.io sets these attributes when you identify a person. You don’t set them yourself. When geolocation is enabled, you can’t delete them.

AttributePurposeEditableData Format
cio_cityCity name.No, system-generatedString
cio_continentContinent name, like North America.No, system-generatedString
cio_countryCountry name, like United States.No, system-generatedString
cio_iso_continentISO continent code, like NA for North America.No, system-generatedString
cio_iso_countryISO 3166-1 alpha-2 country code, like US.No, system-generatedString
cio_iso_regionISO region code, like CA for California.No, system-generatedString
cio_latitudeLatitude of the person’s location. For IP-based geolocation, this is the approximate latitude of the city. For device-based geolocation, this is the precise GPS latitude.No, system-generatedDecimal degrees
cio_location_sourceWhich source provided the person’s current location: ip (IP address lookup) or device (mobile SDK GPS coordinates).No, system-generatedString: ip or device
cio_longitudeLongitude of the person’s location. For IP-based geolocation, this is the approximate longitude of the city. For device-based geolocation, this is the precise GPS longitude.No, system-generatedDecimal degrees
cio_postal_codePostal or ZIP code, approximated from the IP address. It may not be exact.No, system-generatedString
cio_regionRegion name, like California. Usually a state, province, or administrative division.No, system-generatedString
cio_timezoneThe person’s time zone. Customer.io uses it for recommended send time and as a fallback when timezone isn’t set.No, system-generatedString, region format

Ad audiences

Customer.io uses these attributes to securely share data with any advertising networks you’ve integrated with your workspace. Learn more about Ad audiences.

AttributePurposeEditableData Format
email_sha256To keep your data secure, you can hash your customer email using the SHA256 algorithm before sending it to your account. This field is only used in Ad Audiences and cannot be used to send messages.YesValid encoded sha256
mobile_ad_idUsed to record either Apple’s Advertising Identifier (IDFA) or Android’s Advertising ID (AAID). This id can improve match accuracy in Google or Facebook Ads when using Ad Audiences.YesApple’s Advertising Identifier (IDFA) or Android’s Advertising ID (AAID)
mobile_ad_id_sha256To keep your data secure, you can hash the mobile_ad_id using the SHA256 algorithm before sending it to your account. This field is only used in Ad Audiences.YesValid encoded sha256

Other

AttributePurposeEditableData Format
cio_email_tracking_consentRecords whether a person has consented to email open tracking, honored when the workspace uses consent-based open tracking. For attributes that track subscription preferences, whether people want to receive email and other messages, see cio_subscription_preferences and unsubscribed.YesString, granted means the person consented; denied means they objected.
cio_sms_unsendable_reasonRecords that a person’s phone number can’t receive SMS, based on a provider bounce, so we stop sending SMS to that number. Customer.io sets this value automatically and clears it when the phone attribute changes.No, system-generatedString: invalid, landline, or unreachable.
_created_in_customerio_atThe date-time when a person was added in Customer.io. This value can be different from created_at. In the API, this value is represented by the timestamp for the cio_id attribute.No, system-generatedInteger, unix timestamp
created_atStores a timestamp. Use this to capture information like when your customer was first added to your system. Use _created_in_customerio_at for when people were added to Customer.io.YesInteger, unix timestamp
_last_visitThe date-time when a person was last active on your site or app. Customer.io updates this value from page views and events, and shows it as the Last Visited field. You can set it in an identify call.YesInteger, unix timestamp
Updated October 15, 2026