Skip to content

Request an export

POST
/v1/exports
curl --request POST \
--url https://api.octaneai.com/v1/exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "dataset": "profiles", "format": "csv", "from": "2026-04-15", "quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7", "search": { "from": "2026-04-15", "groups": [ { "all": [ { "component_key": "example", "dimension_id": "example", "kind": "choice", "max": 1, "min": 1, "op": "in", "option_ids": [ "example" ], "option_labels": [ "example" ], "page_key": "example", "quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7", "value": 1 } ] } ], "has_email": true, "has_marketing_consent": true, "has_order": true, "has_phone": true, "is_returning": true, "match": "any_session", "quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7", "to": "2026-04-15" }, "to": "2026-04-15", "tz": "example" }'
Media typeapplication/json
ExportCreate
object
dataset
required
Dataset

Profiles or responses need profiles:read; quiz_analytics needs analytics:read

string
Allowed values: profiles responses quiz_analytics
format
Format

Csv: one row per line behind a UTF-8 byte-order mark; json: one object {dataset, filters, generated_at, items} whose items are the rows as the API returns them

string
default: csv
Allowed values: csv json
from
Any of:
string format: date
quiz_id
Any of:
string
/^quiz_[0-9a-f]{32}$/
search
Any of:
ProfileSearch

Who to find: the list filters of GET /v1/profiles except q, plus person facts and an answer filter, an OR of AND groups. Send the same body with every page; the cursor is positional only.

object
from
Any of:
string format: date
groups
Any of:
Array<object>
<= 4 items
ProfileSearchGroup
object
all
required
All

Every slot must hold: a term, or {any: [terms]}

Array
>= 1 items <= 8 items
Any of:
ProfileSearchTerm
object
component_key
Any of:
string
<= 200 characters
dimension_id
Any of:
string
<= 200 characters
kind
required
Kind

Choice | number | date | text | email | phone: a question of the quiz (page_key + component_key); points: a dimension (dimension_id); formula: a formula component (page_key + component_key); winner: the top dimension (dimension ids in option_ids); session: how the shopper’s session ended (value completed | abandoned, page_key the page they left on)

string
Allowed values: choice number date text email phone points formula winner session
max
Any of:
number
min
Any of:
number
op
required
Op

Choice: in | not_in; number, points, formula: eq | lt | gt | between; date: eq | before | after | between; text: contains | equals | matches | answered | not_answered; email, phone: answered | not_answered; winner: in; session: equals. not_in means answered the question and picked none of these; not_answered means took the quiz and left the question unanswered.

string
Allowed values: in not_in eq lt gt between before after contains equals matches answered not_answered
option_ids
Any of:
Array<string>
<= 50 items
option_labels
Any of:
Array<string>
<= 50 items
page_key
Any of:
string
<= 200 characters
quiz_id
required
Quiz Id
string
/^quiz_[0-9a-f]{32}$/
value
Any of:
number
has_email
Any of:
boolean
has_marketing_consent
Any of:
boolean
has_order
Any of:
boolean
has_phone
Any of:
boolean
is_returning
Any of:
boolean
match
Match

Any_session: any time they took the quiz counts; latest_completed_per_quiz: only their latest completed take of each quiz

string
default: any_session
Allowed values: any_session latest_completed_per_quiz
quiz_id
Any of:
string
/^quiz_[0-9a-f]{32}$/
to
Any of:
string format: date
to
Any of:
string format: date
tz
Any of:
string
<= 64 characters

The export is queued. Poll urls.self until status is completed, then follow download_url.

Media typeapplication/json
ExportSummary
object
bytes
required
Any of:
integer
completed_at
required
Any of:
string format: date-time
dataset
required
Dataset
string
Allowed values: profiles responses quiz_analytics
download_url
Any of:
string
download_url_expires_at
Any of:
string format: date-time
error
required
Any of:
string
expires_at
required
Expires At
string format: date-time
filters
required
ExportFilters
object
from
Any of:
string format: date
quiz_id
Any of:
string
/^quiz_[0-9a-f]{32}$/
search
Any of:
ProfileSearch

Who to find: the list filters of GET /v1/profiles except q, plus person facts and an answer filter, an OR of AND groups. Send the same body with every page; the cursor is positional only.

object
from
Any of:
string format: date
groups
Any of:
Array<object>
<= 4 items
ProfileSearchGroup
object
all
required
All

Every slot must hold: a term, or {any: [terms]}

Array
>= 1 items <= 8 items
Any of:
ProfileSearchTerm
object
component_key
Any of:
string
<= 200 characters
dimension_id
Any of:
string
<= 200 characters
kind
required
Kind

Choice | number | date | text | email | phone: a question of the quiz (page_key + component_key); points: a dimension (dimension_id); formula: a formula component (page_key + component_key); winner: the top dimension (dimension ids in option_ids); session: how the shopper’s session ended (value completed | abandoned, page_key the page they left on)

string
Allowed values: choice number date text email phone points formula winner session
max
Any of:
number
min
Any of:
number
op
required
Op

Choice: in | not_in; number, points, formula: eq | lt | gt | between; date: eq | before | after | between; text: contains | equals | matches | answered | not_answered; email, phone: answered | not_answered; winner: in; session: equals. not_in means answered the question and picked none of these; not_answered means took the quiz and left the question unanswered.

string
Allowed values: in not_in eq lt gt between before after contains equals matches answered not_answered
option_ids
Any of:
Array<string>
<= 50 items
option_labels
Any of:
Array<string>
<= 50 items
page_key
Any of:
string
<= 200 characters
quiz_id
required
Quiz Id
string
/^quiz_[0-9a-f]{32}$/
value
Any of:
number
has_email
Any of:
boolean
has_marketing_consent
Any of:
boolean
has_order
Any of:
boolean
has_phone
Any of:
boolean
is_returning
Any of:
boolean
match
Match

Any_session: any time they took the quiz counts; latest_completed_per_quiz: only their latest completed take of each quiz

string
default: any_session
Allowed values: any_session latest_completed_per_quiz
quiz_id
Any of:
string
/^quiz_[0-9a-f]{32}$/
to
Any of:
string format: date
to
Any of:
string format: date
tz
Any of:
string
<= 64 characters
format
required
Format
string
Allowed values: csv json
id
required
Id
string
/^exp_[0-9a-f]{32}$/
requested_at
required
Requested At
string format: date-time
row_count
required
Any of:
integer
source
required
Source
string
Allowed values: api dashboard
started_at
required
Any of:
string format: date-time
status
required
Status
string
Allowed values: pending running completed failed expired
urls
required
Urls
object
key
additional properties
string
Example
{
"dataset": "profiles",
"expires_at": "2026-10-01T12:00:00Z",
"filters": {
"from": "2026-08-01",
"quiz_id": "quiz_7c9e6679742540de944be07fc1f90ae7",
"to": "2026-08-31"
},
"format": "csv",
"id": "exp_3f2504e04f8911d39a0c0305e82c3301",
"requested_at": "2026-09-01T12:00:00Z",
"source": "api",
"status": "pending",
"urls": {
"self": "https://api.octaneai.com/v1/exports/exp_3f2504e04f8911d39a0c0305e82c3301"
}
}
Location
string
Example
https://api.octaneai.com/v1/exports/exp_3f2504e04f8911d39a0c0305e82c3301

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"
}

An export of this dataset is still being built; wait for it to finish.

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": "An export of this dataset is already being built; wait for it to finish",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": 409,
"title": "conflict",
"type": "https://api.octaneai.com/errors/conflict"
}

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"
}

Request limits cannot be checked right now; retry shortly.

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": "Request limits cannot be checked right now; retry shortly",
"request_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"status": 503,
"title": "limiter_unavailable",
"type": "https://api.octaneai.com/errors/limiter_unavailable"
}

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"
}