User Profile

The User Profile object

{
  "id": "AVqvOB58Fg6nZfQ0ZqXt",
  "name": "John Doe",
  "given_name": "John",
  "family_name": "Doe",
  "username": "jdoe",
  "nickname": "Johnny",
  "birthdate": "1983-11-13",
  "age": 33,
  "custom_identifier": "rollingUser1",
  "email": "john.doe@example.com",
  "email_verified": true,
  "emails": {
    "verified": [
      "john.doe@example.com"
    ],
    "unverified": [
      "other@example.com"
    ]
  },
  "password_hash": "$2a$13$A3BmaewEhI/lgxGsXoPATeKhxh1ToRG5r1eES76bVns4P4jAv0f/O",
  "gender": "male",
  "phone_number": "+33612345678",
  "phone_number_verified": false,
  "picture": "https://graph.facebook.com/10154..8019865/picture",
  "profile_url": "https://www.facebook.com/app_scoped_user_id/10154..019865/",
  "addresses": [
    {
      "id": 0,
      "to_delete": true, (1)
      "default": true,
      "address_type": "billing",
      "street_address": "10 rue Chaptal",
      "address_complement": "4 étage",
      "locality": "Paris",
      "postal_code": "75009",
      "region": "Île-de-France",
      "country": "France",
      "recipient": "Matthieu Winoc",
      "phone_number": "0723538943",
      "custom_fields": {
        "custom_field_example": "example_string",
        "custom_field_example_2": "example_string_2"
      }
    }
  ],
  "likes_count": 67,
  "credentials":[
    {
      "created_at": "2021-04-12T15:18:30.612129Z",
      "phone_number": "+33612345678",
      "friendly_name": "my MFA phone number",
      "type": "sms"
    },
    {
      "created_at": "2022-05-12T12:22:33.162029Z",
      "email": "bob@example.com",
      "friendly_name": "my MFA email",
      "type": "email"
    }
  ],
  "identities":{
      "updated_at": "2021-05-18T14:28:25.682123Z",
      "created_at": "2021-04-12T15:18:30.612129Z",
      "provider": "google",
      "provider_variant": "Brand B",
      "user_id": "122548588103668578225",
      "id": "122548588103668578225",
      "username": "cool_gal@example.com"
  },
  "created_at": "2017-03-08T18:39:35.026123Z",
  "updated_at": "2018-08-12T12:54:09.631124Z",
  "first_login": "2017-03-08T18:39:35.026121Z",
  "last_login": "2018-08-12T12:54:09.631126Z",
  "logins_count": 53,
  "suspension_status": "permanent", (2)
  "suspension_information": { (2)
      "reason": "suspiciousUserNoGood"
  },
  "lockout_end_date": "2022-11-25T12:15:09.536Z",
  "origins": [
    "website",
    "game"
  ],
  "last_login_type": "facebook",
  "custom_fields": {
    "loyalty_card_number": "19872359235"
  },
  "consents": {
    "newsletter": {
        "consent_type": "doi",
        "granted": false,
        "date": "2018-05-25T15:41:09.671321Z",
        "waiting_double_accept": true,
        "consent_version": { (3)
          "version_id": 1,
          "language": "fr"
        }
      }
  },
  "facebook_ids_for_pages": [
    {
      "user_id": "649145309042062",
      "page_id": "931332113682072"
    }
  ],
  "external_id": "2977460",
  "provider_metadata": { (4)
    "kakaotalk": {
      "ci": "OUBQAU1Uc5WY…​R/dLqvtWeVbL6r2BuT1S33A==",
      "ci_authenticated_at": "2022-01-24T08:41:03Z",
      "kakaotalk_age_range": "30~39"
    }
  }
}
1 Deleting an address only applies during an import.
2 When importing suspension information, the status is part of the suspension_information object. Otherwise, the suspension_status is standalone.
3 Displays the latest interaction with the user. For audit or history purposes, see the Consent logs.
4 The provider_metadata object contains important provider-related information.

User Profile fields

Table key
  • Import = importable into ReachFive

  • Sort = sortable (with API via :desc or :asc)

  • Export = exportable

    Jobs marked with export are exportable by both hooks (webhooks and pub/sub hooks) and jobs unless otherwise noted.
Name Description Import Export Sort

id

The ReachFive user ID.

required scope= none

name

Full user name

required scope= profile

given_name

Given name(s) or first name(s).

required scope= profile

family_name

Surname(s) or last name(s).

required scope= profile

username

The username.

required scope= profile

middle_name

Middle name(s).

required scope= profile

nickname

The Casual name that may or may not be the same as the given_name.

required scope= profile

profile_url

The URL of one of the user’s profile page (usually a social provider’s page).

required scope= profile

picture

The URL of one of the user’s profile picture. This URL refers to an image file (for example, a PNG, JPEG, or GIF image file).

required scope= profile

email

The user’s primary email address.

required scope= email

email_verified

Boolean specifying whether the user’s email address has been verified.

required scope= email

emails

Emails object. User’s email addresses.

required scope= email

hook only

password_hash

The user’s encrypted (hashed) password.

The hash cannot be retrieved except for very specific cases. If you would like to learn more, please contact your ReachFive representative.

hook only

phone_number

User’s primary phone number.

required scope= phone

At ReachFive, we use a dedicated library to validate a user’s phone number.

Since January 2022, all newly-created accounts where no country code is provided at creation have their default country code set to FR france (France).
For more details, check out Validating phone numbers.

phone_number_verified

Boolean specifying whether the user’s phone number has been verified.

required scope= phone

custom_identifier

A string that allows users to authenticate with something other than an email or phone_number. It’s important to note that an email and/or phone_number is still required to create a managed profile.

Field rules:

  • Each custom_identifier value must be unique.

  • The custom_identifier must be between 4-100 characters.

  • The custom_identifier cannot be an email or phone number.

required scope= profile

gender

The user’s gender. This field can take any value; however, when retrieved, ReachFive values it to male, female, or other.

required scope= profile

birthdate

The user’s birthdate represented as an ISO 8601 YYYY-MM-DD format.

required scope= profile

age

An integer specifying the user’s age computed from birth date.

required scope= profile

company

The user’s company name (if applicable).

required scope= profile

likes_count

An integer representing the number of facebook pages liked by the user.

required scope= profile

addresses

An array of address objects showing the user’s postal addresses.

required scope= address

identities

An array of Identity objects listing the user’s provider identities.

required scope= profile

[1]

has_password

A boolean specifying whether user has a password.

required scope= profile

created_at

The date when the user was created.

required scope= profile

updated_at

The date when the user was last updated.

required scope= profile

first_login

The date of the user’s first login.

required scope= profile

last_login

The date of the user’s last login.

required scope= profile

lockout_end_date

Specifies the date and time when a user lockout ends.

required scope= profile

  • If the date is in the future, the user is locked out.

  • If the date is in the past, the lockout is over and the user is not locked out.

  • If the user has never been locked out, the field is empty.

logins_count

An integer showing the number of logins for this user.

required scope= profile

last_login_type

The name of the authentication type used when user last logged in, (e.g., facebook, google, password).

required scope= profile

origins

Array of strings which provide a list of origins.

required scope= profile

What is an origin? 🤔

An origin is the channel through which the user authenticated. This could be a website, or perhaps a mobile app. It is defined via user interaction and only authenticated profiles contain origins. This means lite profiles do not contain the field.

You can value this field via the Identity API or our SDKs. However, the field cannot be valued through Imports or the Management API.

hook only

custom_fields

An object showing the user’s custom fields.

required scope= profile

consents

The user’s consents which is an object containing a series of fields: for each consent key, a Consent object.

required scope= profile

friends

An array of Friend objects which is a list of user’s friends also linked to the same ReachFive account.

required scope= profile

hook only

facebook-id-for-pages

An array of Facebook Page objects which is a list of page scoped facebook user ids.

required scope= profile

hook only

lite_only

A boolean specifying if the profile is LITE only.

required scope= profile

external_id

The unique identifier of the profile in your systems or Single Customer View. External IDs can only come from imports, the Management API, or the signup method.

required scope= profile

The external ID is usually your internal unified customer profile ID, before you integrate with ReachFive.

Loading this information into ReachFive is useful to progressively update your systems with the ReachFive profile ID, or, if you must continue to use this ID for specific purposes.

suspension_status

Specifies whether the suspension of the user is temporary or permanent.

required scope= profile

If the suspension_status of the user is temporary, they are able to reactivate with a password reset link. If their suspension_status is permanent, they must contact their account administrator to unsuspend and reactive their account. See User suspension for more details.

suspension_information

Object that provides specific information related to user suspension.

required scope= profile

provider_metadata

Object containing metadata from a specified provider. This includes things such as connecting information and user age ranges provided retrieved from the social provider.

required scope= profile

Emails object

Name Description

verified

Array of strings. List of verified user’s email addresses.

Typically, a user has one email address for their account on your site. However, if a social profile is linked to their account, they may have multiple email addresses since it’s permissible to have a different email for the linked social account(s). In this case, the secondary email(s) are added to the emails.verified object.

unverified

Array of strings. List of unverified email addresses.

Addresses object

The addresses object can be sorted with the Management API through the specific fields (like ..&sort=addresses.locality:asc). When sorted, the results are sorted by address for all users.

Name Description Sort

id

ID of the address

to_delete

Boolean to specify whether the address should be deleted or not.

  • true = delete the address

This only applies to imports.

title

Title of the address

default

Boolean. true if the address is the default postal address of the user. Only a single address can be the default address.

address_type

Type of the address. Allowed values are delivery or billing.

street_address

Full street address component, which may include house number, street name, and extended street address information separated by new lines.

address_complement

A complementary address field which can contain additional information about the address.

This can be the floor, door number, or any other useful address information.

locality

City or locality.

region

State, province, prefecture, or region.

postal_code

Zip code or postal code.

country

Country name.

delivery_note

Additional note from the user for the delivery.

recipient

Name of the recipient located at these address.

company

Name of the company located at these address.

phone_number

Phone number of the contact point at these address (no format validation is required).

custom_fields

Custom fields specific to the addresses object.

Identities object

Table key

Filter = Filterable on the API.

Name Description Filter

id

The unique ID. This is created from a concatenation of the provider, :, and the user_id. For example: facebook:123456789.

provider

Name of the connected provider for this identity, in lowercase letters (facebook, google, etc.)

provider_variant

Specifies the variant of a social provider. For example, a country or brand-specific variant for the provider.

If there is no provider variant, this fields defaults to "default".

Default example
...
"provider": "google",
"provider_variant": "default",
...

user_id

User’s unique identifier of the provider.

created_at

Date when this identity was linked to the profile.

updated_at

Date when this identity was last updated.

username

User’s username with the specified provider.

Suspension information object

Name Description

reason

The reason why the user was suspended.

status

Specifies whether the suspension of the user is temporary or permanent.

When importing suspension information, the status should be part of the suspension_information object. Otherwise, the suspension_status is a standalone field.

Consents object

Displays the latest interaction with the user. For audit or history purposes, see the Consent logs.

Example:

  • Lily accepts Consent C (Version 1, Language FR) on the 18th June, 2024 .

  • She then accepts Consent C (Version 1, Language EN) on the 30th June, 2024 .

Lily’s profile will only contain the Consent C (Version 1, Language EN) accepted on the 30th June, 2024 and won’t have the information that FR was accepted as well.

Name Description

consent_type

Consents type: opt-in or opt-out.

granted

Boolean. Whether the consent has been granted or not.

date

Consent date. This reflects the latest date when the granted or consent_version field was valued.

If a consent is updated, but the granted and/or consent_version field is unchanged, the date field remains the same as well. However, if either the granted or consent_version field is changed, the date then reflects the date of that change and a consent log is created.

waiting_double_accept

Boolean specifiying whether we are still awaiting the double opt-in confirmation from the user.

This is only applicable to consents with a consent type of doi (Double opt-in consents).

consent_version

The consent version. This is an object containing a version ID and language.

Field Description

version_id

Specifies the consent version.

language

Specifies the default language of the consent.

reporter

Specifies the reporter who made the modification. For example, this could be an administrator for your site or even an import being executed.

This is an optional field and isn’t always applicable.

Friends object

Name Description

id

ReachFive identifier.

name

Full name.

given_name

Given name

family_name

Family name

gender

Gender

Facebook page object fields

Name Description

user_id

Page scoped user identifier.

page_id

Facebook page identifier.

MFA credentials object

The MFA credentials object contains information related to the MFA second factor for the user.

The MFA credentials can only be retrieved by dedicated MFA endpoints and methods. These include:

Name Type Description

credentials

array

An array of objects containing the MFA second factor credentials.

Property Description

created_at

string <date-time>

The timestamp for when the MFA second factor was created.

phone_number

string

The phone number used for the MFA second factor.

email

string

The email used for the MFA second factor.

type

string

Specifies the second factor type.

This is either email or sms.

friendly_name

string

The label for the MFA second factor credential.

Custom fields

The required scope must be declared when creating custom fields.


1. All fields in the Identity object can be exported with a webhook or pub/sub hook. Only id and updated_at are exportable with a job.