Get Profile
Retrieve the authenticated customer's profile
Returns the authenticated user's account information and linked customer profile. If the account does not have an active linked customer profile, the request still succeeds and data.customer is null.
Endpoint
GET /profileAuthentication
Requires a valid JWT access token.
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9...Example request
curl -X GET "https://edge.tiquo.app/api/client/v1/profile" \
-H "Authorization: Bearer eyJhbGciOiJSUzI1NiJ9..."Response
{
"success": true,
"data": {
"user": {
"id": "user_abc123",
"email": "customer@example.com"
},
"customer": {
"id": "cust_456",
"firstName": "John",
"lastName": "Doe",
"displayName": "John Doe",
"title": "mr",
"titleText": "Mr",
"nickname": "Johnny",
"customerNumber": "CUST-000001",
"email": "customer@example.com",
"phone": "+1234567890",
"profilePhoto": "https://example.com/photo.jpg",
"status": "active",
"totalOrders": 5,
"totalSpent": 150.00,
"lifetimeValue": 200.00,
"createdAt": 1704067200000,
"firstActiveAt": 1706745600000,
"emails": [
{ "address": "customer@example.com", "isPrimary": true, "order": 0 }
],
"phones": [
{ "number": "+1234567890", "isPrimary": true, "order": 0 }
],
"addresses": [
{
"id": "k57addr123",
"type": "both",
"isDefault": true,
"addressLine1": "1 High Street",
"city": "London",
"postalCode": "SW1A 1AA",
"country": "United Kingdom"
}
],
"taxId": "GB123456789",
"parameters": [],
"parameterValues": {}
}
}
}User object
| Field | Type | Description |
|---|---|---|
id | string | The user's unique ID |
email | string | The user's email address |
Customer object
The customer field is included when the user has a linked customer profile in the organization. If no customer record exists, this field will be null.
| Field | Type | Description |
|---|---|---|
id | string | Customer document ID |
firstName | string or omitted | First name |
lastName | string or omitted | Last name |
displayName | string or omitted | Full display name |
title | string or omitted | Title code: mr, mrs, ms, miss, mx, dr, prof, or other |
customTitle | string or omitted | The title text when title is other, for example Sir |
titleText | string or omitted | The written title in the venue's document language, such as Mr or Dr, or the customTitle text. Omitted when no title is set |
nickname | string or omitted | The name the customer likes to be called |
customerNumber | string | Human-readable customer number (e.g. CUST-000001) |
email | string or omitted | Primary email address |
phone | string or omitted | Phone number |
profilePhoto | string or omitted | URL to profile photo |
status | string | One of: active, inactive, banned |
totalOrders | integer or omitted | Total number of orders |
totalSpent | number or omitted | Total amount spent |
lifetimeValue | number or omitted | Customer lifetime value |
createdAt | integer or omitted | Read-only Unix timestamp in milliseconds for when the customer profile was created |
firstActiveAt | integer or omitted | Read-only Unix timestamp in milliseconds for the customer's first qualifying activity |
emails | array or omitted | Every email address, as { address, isPrimary, order } |
phones | array or omitted | Every phone number, as { number, isPrimary, order } |
addresses | array | Saved billing and shipping addresses, each with its id, type (billing, shipping, or both), isDefault, and address fields. Send the IDs back in Update Profile to keep each address |
taxId | string or omitted | The customer's personal tax number for invoices, when one is saved |
parameters | array | Customer parameters the customer can see, each with id, name, key, value, and type |
parameterValues | object | The same values keyed by parameter ID and by normalized name |
Titles
title is a language-neutral code. titleText is the title written out in the venue's document language (for example "Mrs", or "Mme" for a venue that writes documents in French), or the customTitle text when title is other. To show the title in your website's own language instead, map the title code to your own wording (for example mrs as "Frau" in German) and show customTitle as it is. To change the title or nickname, see Update Profile.
Created and first active
createdAt is the time the profile itself was created. It is never rewritten or backdated from customer activity.
firstActiveAt is the time the customer first became active through qualifying customer activity. It is not the database insertion time. Activities performed by staff, systems, integrations, or imports do not set it. The field can be omitted for a legacy or never-active profile until qualifying activity is recorded.
The two values are equal when the customer creates their own account and is immediately active in the same flow. Imported or staff-created profiles can have a later First Active value.
Both fields are system-managed and cannot be changed through PATCH /profile or customer parameter updates.
Errors
| Status | Description |
|---|---|
401 | Invalid or expired access token |
500 | Internal server error |
Code examples
JavaScript
const response = await fetch('https://edge.tiquo.app/api/client/v1/profile', {
headers: {
'Authorization': `Bearer ${accessToken}`,
},
});
const { success, data, error } = await response.json();
if (success) {
console.log(data.user.email);
console.log(data.customer?.displayName);
console.log(data.customer?.createdAt);
console.log(data.customer?.firstActiveAt);
}Swift
var request = URLRequest(url: URL(string: "https://edge.tiquo.app/api/client/v1/profile")!)
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: request)
let result = try JSONDecoder().decode(ProfileResponse.self, from: data)Kotlin
val client = OkHttpClient()
val request = Request.Builder()
.url("https://edge.tiquo.app/api/client/v1/profile")
.addHeader("Authorization", "Bearer $accessToken")
.build()
val response = client.newCall(request).execute()