Skip to content

Get a shopper profile

GET
/v1/profiles/{profile_id}
curl --request GET \
--url https://api.octaneai.com/v1/profiles/example \
--header 'Authorization: Bearer <token>'
profile_id
required
Profile Id
string

The shopper’s identities, latest answers and results, sessions, and linked orders.

Media typeapplication/json
ProfileDetail
object
completed_count
required
Completed Count
integer
first_seen_at
required
Any of:
string format: date-time
id
required
Id
string
/^prof_[0-9a-f]{32}$/
identities
required
Identities
Array<object>
ProfileIdentity
object
consent
required
Any of:
boolean
first_seen_at
required
Any of:
string format: date-time
kind
required
Kind
string
last_seen_at
required
Any of:
string format: date-time
value
required
Value
string
last_order_at
required
Any of:
string format: date-time
last_seen_at
required
Last Seen At
string format: date-time
latest_results
required
Latest Results
Array<object>
ProfileResult
object
answers
required
Answers
Array<object>
ProfileAnswer
object
component_key
required
Component Key
string
image_urls
required
Image Urls

For an image choice: one entry per label in values, the option’s image or null

Array
kind
required
Kind
string
Allowed values: choice image text email phone number date other
page_key
required
Page Key
string
page_title
required
Any of:
string
question
required
Question
string
removed
required
Removed
boolean
value
required
Value
values
required
Values
Array<string>
completed_at
required
Completed At
string format: date-time
formulas
required
Formulas
Array<object>
ProfileFormula
object
component_key
required
Component Key
string
label
required
Label
string
page_key
required
Page Key
string
value
required
Value
number
points
required
Points
Array<object>
ProfilePoints
object
dimension_id
required
Dimension Id
string
name
required
Name
string
total
required
Total
number
points_total
required
Any of:
number
quiz_id
required
Quiz Id
string
/^quiz_[0-9a-f]{32}$/
quiz_name
required
Quiz Name
string
result_page
required
Any of:
ProfileResultPage
object
page_count
required
Any of:
integer
page_key
required
Page Key
string
position
required
Any of:
integer
shown_products
required
Shown Products
Array<object>
ProfileShownProduct
object
block_key
required
Block Key
string
currency
required
Any of:
string
handle
required
Any of:
string
image
required
Any of:
string
price
required
Any of:
number
product_id
required
Product Id
string
title
required
Any of:
string
variant_id
required
Any of:
string
variant_title
required
Any of:
string
title
required
Any of:
string
session_id
required
Session Id
string
/^sess_[0-9a-f]{32}$/
started_at
required
Started At
string format: date-time
version_number
required
Any of:
integer
winner
required
Any of:
ProfilePoints
object
dimension_id
required
Dimension Id
string
name
required
Name
string
total
required
Total
number
orders
required
Orders
Array<object>
ProfileOrder
object
amount
required
Money
object
amount
required
Amount
string
currency
required
Currency
string
created_at
required
Created At
string format: date-time
matched_tier
required
Matched Tier
string
order_id
required
Order Id
string
order_name
required
Any of:
string
quiz_id
required
Any of:
string
/^quiz_[0-9a-f]{32}$/
quiz_name
required
Any of:
string
session_id
required
Any of:
string
/^sess_[0-9a-f]{32}$/
orders_count
required
Orders Count
integer
quizzes_taken_count
required
Quizzes Taken Count
integer
removed
required
Removed
boolean
removed_at
required
Any of:
string format: date-time
returning
required
Any of:
boolean
returning_count
required
Any of:
integer
sessions
required
Sessions
Array<object>
ProfileSession
object
channel
required
Channel
string
completed_at
required
Any of:
string format: date-time
country
required
Any of:
string
device_class
required
Device Class
string
ended_at
required
Any of:
string format: date-time
last_page_key
required
Any of:
string
last_page_position
required
Any of:
integer
last_page_title
required
Any of:
string
order
required
Any of:
ProfileSessionOrder
object
amount
required
Money
object
amount
required
Amount
string
currency
required
Currency
string
created_at
required
Created At
string format: date-time
matched_tier
required
Matched Tier
string
minutes_after
required
Any of:
integer
order_id
required
Order Id
string
order_name
required
Any of:
string
page_count
required
Any of:
integer
pages_visited
required
Pages Visited
integer
quiz_id
required
Quiz Id
string
/^quiz_[0-9a-f]{32}$/
quiz_name
required
Quiz Name
string
returning
required
Any of:
boolean
session_id
required
Session Id
string
/^sess_[0-9a-f]{32}$/
started_at
required
Started At
string format: date-time
status
required
Status
string
Allowed values: completed in_progress left
version_number
required
Any of:
integer
sessions_count
required
Sessions Count
integer
spent
required
Any of:
Money
object
amount
required
Amount
string
currency
required
Currency
string
Example
{
"completed_count": 1,
"first_seen_at": "2026-09-01T12:00:00Z",
"id": "prof_50e1b7e458f14dfca7a2a5b971af2821",
"identities": [
{
"consent": true,
"first_seen_at": "2026-09-01T12:00:00Z",
"kind": "email",
"last_seen_at": "2026-09-01T12:00:00Z",
"value": "shopper@example.com"
},
{
"first_seen_at": "2026-09-01T12:00:00Z",
"kind": "phone",
"value": "+14155552671"
}
],
"last_order_at": "2026-09-01T12:40:00Z",
"last_seen_at": "2026-09-01T12:00:00Z",
"latest_results": [
{
"answers": [
{
"component_key": "image_choice-48su5",
"image_urls": [
"https://cdn.shopify.com/s/files/1/0001/skin-dry.jpg"
],
"kind": "image",
"page_key": "skin",
"page_title": "Your skin",
"question": "Skin type?",
"removed": false,
"value": "dry",
"values": [
"Dry"
]
},
{
"component_key": "number_input-re853",
"image_urls": [],
"kind": "number",
"page_key": "skin",
"page_title": "Your skin",
"question": "Your age",
"removed": false,
"value": 42,
"values": [
"42"
]
},
{
"component_key": "email_input-abc12",
"image_urls": [],
"kind": "email",
"page_key": "contact",
"page_title": "Stay in touch",
"question": "Email",
"removed": false,
"value": "shopper@example.com",
"values": [
"shopper@example.com"
]
}
],
"completed_at": "2026-09-01T12:04:00Z",
"formulas": [
{
"component_key": "formula-tidtk",
"label": "Hydration score",
"page_key": "result",
"value": 72
}
],
"points": [
{
"dimension_id": "dry",
"name": "Dry",
"total": 14
},
{
"dimension_id": "oily",
"name": "Oily",
"total": 6
}
],
"points_total": 20,
"quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7",
"quiz_name": "Find your routine",
"result_page": {
"page_count": 3,
"page_key": "result",
"position": 3,
"shown_products": [
{
"block_key": "products-k3x9q",
"currency": "USD",
"handle": "hydrating-serum",
"image": "https://cdn.shopify.com/s/files/1/0001/serum.jpg",
"price": 39,
"product_id": "gid://shopify/Product/8692896989320",
"title": "Hydrating Serum",
"variant_id": "gid://shopify/ProductVariant/40926435967056",
"variant_title": "30 ml"
}
],
"title": "Your match"
},
"session_id": "sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e",
"started_at": "2026-09-01T12:00:00Z",
"version_number": 2,
"winner": {
"dimension_id": "dry",
"name": "Dry",
"total": 14
}
}
],
"orders": [
{
"amount": {
"amount": "79.97",
"currency": "USD"
},
"created_at": "2026-09-01T12:40:00Z",
"matched_tier": "session",
"order_id": "5820135686408",
"order_name": "#1042",
"quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7",
"quiz_name": "Find your routine",
"session_id": "sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e"
}
],
"orders_count": 1,
"quizzes_taken_count": 1,
"removed": false,
"returning": false,
"returning_count": 0,
"sessions": [
{
"channel": "email",
"completed_at": "2026-09-01T12:04:00Z",
"country": "US",
"device_class": "mobile",
"ended_at": "2026-09-01T12:04:00Z",
"last_page_key": "result",
"last_page_position": 3,
"last_page_title": "Your match",
"order": {
"amount": {
"amount": "79.97",
"currency": "USD"
},
"created_at": "2026-09-01T12:40:00Z",
"matched_tier": "session",
"minutes_after": 36,
"order_id": "5820135686408",
"order_name": "#1042"
},
"page_count": 3,
"pages_visited": 3,
"quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7",
"quiz_name": "Find your routine",
"returning": false,
"session_id": "sess_9b2d4a5e6f7a4b8c9d0e1f2a3b4c5d6e",
"started_at": "2026-09-01T12:00:00Z",
"status": "completed",
"version_number": 2
}
],
"sessions_count": 1,
"spent": {
"amount": "79.97",
"currency": "USD"
}
}

The key is missing, malformed, revoked or expired.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Example
{
"detail": "The API key is missing, malformed, revoked or expired",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": 401,
"title": "invalid_api_key",
"type": "https://api.octaneai.com/errors/invalid_api_key"
}
WWW-Authenticate
string
Example
Bearer

The store’s plan has no API access, or the key lacks the scope.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Examples
{
"detail": "The API key does not carry the scope this route needs",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"required": [
"quizzes:read"
],
"status": 403,
"title": "insufficient_scope",
"type": "https://api.octaneai.com/errors/insufficient_scope"
}

Not found

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Example
{
"detail": "Not found",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": 404,
"title": "not_found",
"type": "https://api.octaneai.com/errors/not_found"
}

A request parameter is invalid.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Example
{
"detail": "A request parameter is invalid.",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": 422,
"title": "validation_error",
"type": "https://api.octaneai.com/errors/validation_error"
}

The key’s or the store’s bucket is full; Retry-After says when to try again.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Example
{
"detail": "Too many requests",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"retry_after": 1,
"status": 429,
"title": "rate_limited",
"type": "https://api.octaneai.com/errors/rate_limited"
}

The request timed out.

Media typeapplication/problem+json
Problem

The body of every non-2xx response.

object
detail
required
Detail

What went wrong, for people

string
errors
Any of:
Array<object>
FieldError
object
field
required
Field

The input that failed, as a dotted path (body.label, query.from)

string
message
required
Message

Why it failed

string
export
Any of:
object
key
additional properties
any
request_id
required
Request Id

The same value as the Request-Id header; quote it to support

string
required
Any of:
Array<string>
retry_after
Any of:
integer
status
required
Status

The HTTP status of the response

integer
title
required
Title

The machine-readable error code

string
type
required
Type

A stable URI naming the error, on this API’s public host

string
Example
{
"detail": "The request timed out.",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": 504,
"title": "timeout",
"type": "https://api.octaneai.com/errors/timeout"
}