User data (Scopes and Claims)
What data you receive is decided by scopes. The same claims are returned in the id_token and by /userinfo. The id_token reflects the moment of sign-in; /userinfo reflects the current state.
Scopes
| Scope | Description | Claims |
|---|---|---|
| openid | Required. Enables OpenID Connect and the id_token. | sub |
| profile | First name, last name and language. | given_name, family_name, name, locale |
| Email and whether it is confirmed. | email, email_verified |
|
| phone | Phone and whether it is confirmed. | phone_number, phone_number_verified |
The scopes available to your client are fixed when it is registered. Asking for more or fewer in the request still returns exactly the list configured for you. Contact us if you need another scope.
Claims
| Claim | Type | Description |
|---|---|---|
| sub | string (UUID) | The customer's permanent, unique identifier. Use it as receiver.inexUserId when creating a parcel. |
| given_name | string | First name (Latin letters). |
| family_name | string | Last name (Latin letters). |
| name | string | Full name. |
| locale | string|null | Preferred language: ka, en or ru. |
| string|null | Email. One email = one INEX account. | |
| email_verified | boolean | Whether the email is confirmed. |
| phone_number | string|null | Phone in international format, e.g. 995599123456. |
| phone_number_verified | boolean | Whether the phone is confirmed. |
| auth_time | integer | (id_token only) Unix time of the customer's last authentication. |
| nonce | string | (id_token only) The nonce sent in the authorize request. |
/userinfo
GET
{issuer}/userinfo
GET {issuer}/userinfo with the header Authorization: Bearer {access_token} returns the customer's current data as a JSON object (only the claims whose scope the token holds). Use it to refresh a stored name, email or phone.
Rules for identifying the customer
-
Link a local user by
subonly. - Email and phone may change; a phone is not unique (one number can belong to several accounts). Do not use them as an identity key.
-
If you link an existing local account by email, first check
email_verified = true.
Personal number
The personal number is not issued as a claim — it is personal data and you do not need it: INEX already has it. To create a parcel the
sub (receiver.inexUserId) is enough; we attach the personal number and everything customs needs ourselves.
Userinfo (cURL)
BASH
curl https://id-staging.inex.ge/userinfo \
-H "Authorization: Bearer ACCESS_TOKEN"
Response (200 OK)
JSON
{
"sub": "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d",
"given_name": "Nino",
"family_name": "Beridze",
"name": "Nino Beridze",
"locale": "ka",
"email": "nino@example.com",
"email_verified": true,
"phone_number": "995599123456",
"phone_number_verified": true
}