Skip to content

Read the complete experiment results

GET
/v1/experiments/{experiment_id}/results
curl --request GET \
--url https://api.octaneai.com/v1/experiments/example/results \
--header 'Authorization: Bearer <token>'
experiment_id
required
Experiment Id
string

The complete results, including decision evidence, gates, periods and attention context.

Media typeapplication/json
ExperimentResultsResponse
object
admission_cutoff
required
Any of:
string format: date-time
admission_line
required
Any of:
string
ai_decision_trace
required
Any of:
ExperimentDecisionTrace
object
alpha
required
Alpha

The error rate the range allows, 0.05

number
arms
required
Arms

The decision metric per version, live version first: label, n, events, rate, se, raw_money, capped_money, design_effect

Array<object>
object
key
additional properties
any
as_of
required
As Of

When the decision was made, UTC ISO 8601

string format: date-time
attribution_window_days
required
Attribution Window Days

The store’s order-matching window in days: how long after a visit an order still counts

integer
bound
required
Bound

What the range had to clear: k, alpha_used, se, n and needed_lo (the lead that excludes zero)

object
key
additional properties
any
cap_value
required
Any of:
number
changes
required
Changes

Notes recorded with the decision; currently always empty

Array<string>
compared_version_ids
required
Compared Version Ids

The live version and the variant, in that order

Array<string>
decision_metric
required
Decision Metric

Completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer

string
delta
required
Any of:
number
floors
required
Floors
Array<object>
ExperimentFloor
object
have
required
Have
integer
met
required
Met
boolean
name
required
Name

What the minimum counts: starts | visits | orders | events

string
needed
required
Needed

The minimum a version needs before its number is read

integer
formulas
required
Formulas
Array<object>
ExperimentTraceFormula
object
key
required
Key

Formula_cs | formula_k | formula_se | formula_srm | formula_floor | formula_guardrail | formula_rpv_cap

string
label
required
Label
string
latex
required
Latex

The formula as written, in LaTeX

string
latex_plugged
required
Latex Plugged

The formula with this test’s numbers, in LaTeX

string
terms
required
Terms

Each symbol with its meaning in words

object
key
additional properties
string
hi
required
Any of:
number
judgement
required
Judgement

True for our AI’s decision, its own judgement rather than the automatic rule’s

boolean
lo
required
Any of:
number
n_star
required
N Star

The visits expected by the decision date, where the range is tuned to be narrowest

number
period
required
Period
integer
plain_line
required
Plain Line
string
protection
required
Protection

Each protected metric when decided: kind, label, lo, hi, assessed, harmed

Array<object>
object
key
additional properties
any
publish_arm
required
Any of:
string
reason
required
Reason

Under_minimum_hours | split_unhealthy | collecting | leaning | clear_for_control | clear | protected_harmed:

string
revenue_tiers
required
Revenue Tiers

The kinds of revenue counted: added_from_quiz | shown_bought_later | bought_not_shown

Array<string>
revision
required
Revision

The test’s revision when decided

integer
split
required
ExperimentSplitCheck
object
expected
required
Expected

The share of shoppers each version should get, 0 to 1, live version first

Array<number>
expected_share
required
Expected Share

The variant’s share of shoppers the split was set to, 0 to 1

number
latched
required
Latched

Whether the check has fired; once fired it stays on for the rest of the test

boolean
line
required
Any of:
string
log_odds
required
Log Odds

The evidence that shoppers are not landing as the split was set; the check fires above 6.91

number
n
required
N

The shoppers counted on both versions

integer
observed_share
required
Any of:
number
surfaced
required
Surfaced

Whether the 200 shoppers the check needs have been counted

boolean
units_per_arm
required
Units Per Arm

Shoppers counted per version, live version first

Array<integer>
winner
required
Any of:
string
arms
required
Arms

Each version’s numbers in the current counting period, live version first

Array<object>
ExperimentArmCounts
object
arm_id
required
Arm Id
string
/^arm_[0-9a-f]{32}$/
assignment_units
required
Assignment Units

Distinct shoppers assigned to this version; a shopper without cookies counts once per visit

integer
completion_rate
required
Any of:
number
completions
required
Completions

Visits that finished the quiz: reached its last page and answered whatever that page requires

integer
counted_revenue
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
email_opt_ins
required
Email Opt Ins

Visits where the shopper submitted an email address

integer
is_control
required
Is Control
boolean
label
required
Label
string
orders
required
Orders

Orders linked to these visits with a line in a revenue kind the test counts

integer
phone_opt_ins
required
Phone Opt Ins

Visits where the shopper submitted a phone number

integer
revenue
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
revenue_by_bucket
required
ProductBucketMoney

That revenue split by how each item reached the cart

object
added_from_quiz
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
bought_not_shown
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
shown_bought_later
required
Any of:
Money
object
amount
required
Amount

A decimal string, as “79.97”

string
currency
required
Currency

ISO 4217 code

string
starts
required
Starts

Visits where the shopper answered or stepped forward at least once

integer
version_id
required
Version Id
string
/^ver_[0-9a-f]{32}$/
version_number
required
Version Number
integer
views
required
Views

Visits that opened the quiz on the store, whether or not the shopper answered anything; previews are not counted

integer
visits_with_order
required
Visits With Order

Visits followed by at least one such order

integer
weight
required
Weight

The arm’s share of the split, a whole number weighed against the other arm’s

integer
as_of
required
As Of

When these numbers were read, UTC ISO 8601; a read is served again for up to two hours

string format: date-time
attribution_line
required
Attribution Line
string
attribution_window_days
required
Attribution Window Days

The store’s order-matching window in days: how long after a visit an order still counts

integer
changed_since
required
Changed Since

Whether revenue arriving since the decision moved the lead past half the recorded range

boolean
changed_since_line
required
Any of:
string
changes
required
Changes

Pages the variant adds, removes or changes against the live version

Array<object>
ExperimentPageChange
object
kind
required
Kind

How the variant differs on this page: added | removed | changed

string
Allowed values: added removed changed
page_key
required
Page Key
string
page_title
required
Any of:
string
cookieless_line
required
Any of:
string
cookieless_share
required
Any of:
number
decision_trace
required
Any of:
ExperimentDecisionTrace
object
alpha
required
Alpha

The error rate the range allows, 0.05

number
arms
required
Arms

The decision metric per version, live version first: label, n, events, rate, se, raw_money, capped_money, design_effect

Array<object>
object
key
additional properties
any
as_of
required
As Of

When the decision was made, UTC ISO 8601

string format: date-time
attribution_window_days
required
Attribution Window Days

The store’s order-matching window in days: how long after a visit an order still counts

integer
bound
required
Bound

What the range had to clear: k, alpha_used, se, n and needed_lo (the lead that excludes zero)

object
key
additional properties
any
cap_value
required
Any of:
number
changes
required
Changes

Notes recorded with the decision; currently always empty

Array<string>
compared_version_ids
required
Compared Version Ids

The live version and the variant, in that order

Array<string>
decision_metric
required
Decision Metric

Completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer

string
delta
required
Any of:
number
floors
required
Floors
Array<object>
ExperimentFloor
object
have
required
Have
integer
met
required
Met
boolean
name
required
Name

What the minimum counts: starts | visits | orders | events

string
needed
required
Needed

The minimum a version needs before its number is read

integer
formulas
required
Formulas
Array<object>
ExperimentTraceFormula
object
key
required
Key

Formula_cs | formula_k | formula_se | formula_srm | formula_floor | formula_guardrail | formula_rpv_cap

string
label
required
Label
string
latex
required
Latex

The formula as written, in LaTeX

string
latex_plugged
required
Latex Plugged

The formula with this test’s numbers, in LaTeX

string
terms
required
Terms

Each symbol with its meaning in words

object
key
additional properties
string
hi
required
Any of:
number
judgement
required
Judgement

True for our AI’s decision, its own judgement rather than the automatic rule’s

boolean
lo
required
Any of:
number
n_star
required
N Star

The visits expected by the decision date, where the range is tuned to be narrowest

number
period
required
Period
integer
plain_line
required
Plain Line
string
protection
required
Protection

Each protected metric when decided: kind, label, lo, hi, assessed, harmed

Array<object>
object
key
additional properties
any
publish_arm
required
Any of:
string
reason
required
Reason

Under_minimum_hours | split_unhealthy | collecting | leaning | clear_for_control | clear | protected_harmed:

string
revenue_tiers
required
Revenue Tiers

The kinds of revenue counted: added_from_quiz | shown_bought_later | bought_not_shown

Array<string>
revision
required
Revision

The test’s revision when decided

integer
split
required
ExperimentSplitCheck
object
expected
required
Expected

The share of shoppers each version should get, 0 to 1, live version first

Array<number>
expected_share
required
Expected Share

The variant’s share of shoppers the split was set to, 0 to 1

number
latched
required
Latched

Whether the check has fired; once fired it stays on for the rest of the test

boolean
line
required
Any of:
string
log_odds
required
Log Odds

The evidence that shoppers are not landing as the split was set; the check fires above 6.91

number
n
required
N

The shoppers counted on both versions

integer
observed_share
required
Any of:
number
surfaced
required
Surfaced

Whether the 200 shoppers the check needs have been counted

boolean
units_per_arm
required
Units Per Arm

Shoppers counted per version, live version first

Array<integer>
winner
required
Any of:
string
events
required
Events
Array<object>
ExperimentTimelineEvent
object
arm_id
required
Any of:
string
/^arm_[0-9a-f]{32}$/
at
required
At
string format: date-time
data
required
Data

What the event recorded, by kind; version ids in it are public ids, null once that version is deleted

object
key
additional properties
any
kind
required
Kind

Created | started | period_opened | weights_changed | control_published | arm_republished | decision_metric_changed | decision_option_changed | protect_changed | revenue_tiers_changed | settings_changed | evaluation_delayed | decision_traced | ai_decided | srm_flagged | clear | nudged | digest_sent | warning_sent | result_sent | ended | target_missing; a new kind may be added

string
label
required
Label
string
experiment
required
ExperimentResponse
object
ai_fallback
required
AiFallback

After that many runs: decide at the first clear result without the AI, or wait for you

string
Allowed values: when_clear notify
ai_max_runs
Any of:
integer
ai_rationale
Any of:
string
ai_trigger
Any of:
AiTrigger
string
Allowed values: when_clear on_date
ai_verdict
Any of:
AiVerdict

What the AI decided last, as the trusted decide path accepted it; a refused verdict lives on the timeline only.

string
Allowed values: publish keep_running no_change
app_id
required
App Id
string
/^quiz_[0-9a-f]{32}$/
arms
required
Arms
Array<object>
ExperimentArmResponse
object
id
required
Id
string
/^arm_[0-9a-f]{32}$/
is_control
required
Is Control
boolean
label
required
Label
string
position
required
Position

0 for the live version, 1 for the variant

integer
version_id
required
Version Id
string
/^ver_[0-9a-f]{32}$/
version_number
required
Version Number
integer
weight
required
Weight

The arm’s share of the split, a whole number weighed against the other arm’s

integer
clear_since_at
Any of:
string format: date-time
created_at
required
Created At
string format: date-time
decides_at
Any of:
string format: date-time
decision_date
Any of:
string format: date
decision_metric
required
Decision Metric

Completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer

string
decision_option
required
DecisionOption

Manual: the merchant decides. when_clear: publish at the first clear result. on_date: decide on a date. ai: the AI decides.

string
Allowed values: manual when_clear on_date ai
decision_target
Any of:
object
key
additional properties
any
ended_at
Any of:
string format: date-time
ended_by
Any of:
EndedBy
string
Allowed values: manual auto ai fallback_revert
fallback
required
Fallback

What happens on the date without a clear result: keep running, put the live version back, or tell the merchant and wait.

string
Allowed values: keep revert notify
id
required
Id
string
/^expt_[0-9a-f]{32}$/
long_run_reminders
required
Long Run Reminders

Whether reminder emails go out six weeks after the start and every two weeks after until it ends

boolean
merchant_note
Any of:
string
name
required
Name
string
outcome
Any of:
Outcome

How a test ended, in one word.

string
Allowed values: winner_manual winner_auto winner_ai ai_no_change ai_recommended ai_keep_running ai_blocked_credits srm_flagged no_winner_notify reverted plan_downgraded ended_manual cancelled
period
required
Period

The current counting period: 0 on a draft, 1 once started, one higher each time a new one opens

integer
period_reason
required
PeriodReason

Why a counting period began.

string
Allowed values: started split_changed control_published variant_republished metric_changed revenue_tiers_changed
period_started_at
Any of:
string format: date-time
protect_metrics
required
Protect Metrics

The metrics the test watches for harm: completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer

Array<string>
revenue_tiers
required
Revenue Tiers

The kinds of revenue counted: added_from_quiz | shown_bought_later | bought_not_shown

Array<string>
revision
required
Revision

A number that goes up with every change to the test

integer
srm_flagged_at
Any of:
string format: date-time
started_at
Any of:
string format: date-time
status
required
ExperimentStatus

Draft: set up, not started. running: shoppers are being split. waiting: still splitting, automatic decisions paused. ended: no longer assigning.

string
Allowed values: draft running waiting ended
timezone
required
Timezone

IANA name of the timezone decision_date is read in

string
updated_at
required
Updated At
string format: date-time
weekly_digest
required
Weekly Digest

Whether a weekly email reports where the test stands

boolean
winner_arm_id
Any of:
string
/^arm_[0-9a-f]{32}$/
explainer_keys
required
Explainer Keys

The camelCase names of the help topics that explain the numbers in this response

Array<string>
frozen
required
Frozen

True once the test has ended: the visits counted stop at its end while their orders keep arriving

boolean
gates
required
Gates
Array<object>
ExperimentGate
object
detail
required
Detail
string
key
required
Key

Decision_metric | min_days (seven days in the period) | enough_data | split_health | protected (no protected metric harmed)

string
Allowed values: decision_metric min_days enough_data split_health protected
label
required
Label
string
met
required
Any of:
boolean
header
required
ExperimentHeader
object
current_read
required
Current Read

What the decision metric reads now, in one sentence

string
current_read_numbers
Any of:
string
day_line
required
Any of:
string
difference
required
Any of:
string
evaluated_on_line
required
Any of:
string
next
required
Next

What happens next, per how the test decides

string
testing
required
Testing

What is tested: each version with its number and share of shoppers

string
metrics
required
Metrics
Array<object>
ExperimentMetricReadout
object
abs_hi
required
Any of:
number
abs_lo
required
Any of:
number
alpha
required
Alpha

The error rate the range allows, 0.05

number
control
required
ExperimentArmReadout
object
arm_id
required
Arm Id
string
/^arm_[0-9a-f]{32}$/
capped_money
required
Capped Money

Counted revenue with unusually large visits counted at the cap, in the store’s currency; 0 for a rate

number
design_effect
required
Design Effect

How much returning shoppers widened the range; 1 means repeats made no difference

number
events
required
Events

How many of those did what the metric counts; for the money metrics, the distinct counted orders

integer
floors
required
Floors
Array<object>
ExperimentFloor
object
have
required
Have
integer
met
required
Met
boolean
name
required
Name

What the minimum counts: starts | visits | orders | events

string
needed
required
Needed

The minimum a version needs before its number is read

integer
label
required
Label
string
mean
required
Mean

The metric on this version: a rate from 0 to 1, or revenue per visit or per order in the store’s currency

number
n
required
N

The visits the metric is read on: starts for completion and opt-in rates, visits for the rest

integer
raw_money
required
Raw Money

Counted revenue before the cap on unusually large visits, in the store’s currency; 0 for a rate

number
se
required
Se

The standard error of mean, with each returning shopper’s visits grouped

number
delta
required
Any of:
number
design_effect
required
Design Effect

The larger of the two versions’ design effects

number
hi
required
Any of:
number
k
required
Any of:
number
kind
required
Kind

Completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer

string
label
required
Label
string
level
required
Level

Whether the line reads the two versions as level so far

boolean
lift
required
Any of:
number
line
required
Line

The gap between the versions in one sentence, relative to the live version

string
lo
required
Any of:
number
n_star
required
N Star

The visits expected by the decision date, where the range is tuned to be narrowest

number
population
required
Population

What the metric counts over: starts | visits | orders

string
role
required
Role

Decider: the decision metric | exploratory: reported beside it, never decides

string
Allowed values: decider exploratory
se
required
Any of:
number
state
required
State

Collecting: not enough data | leaning: one version ahead, range still includes zero | clear: range excludes zero

string
Allowed values: collecting leaning clear
target
required
Any of:
object
key
additional properties
string
unit
required
Unit

The unit of delta and its range: percentage points, sent as a fraction (0.05 is five points) | currency per order | currency per visit

string
variant
required
ExperimentArmReadout
object
arm_id
required
Arm Id
string
/^arm_[0-9a-f]{32}$/
capped_money
required
Capped Money

Counted revenue with unusually large visits counted at the cap, in the store’s currency; 0 for a rate

number
design_effect
required
Design Effect

How much returning shoppers widened the range; 1 means repeats made no difference

number
events
required
Events

How many of those did what the metric counts; for the money metrics, the distinct counted orders

integer
floors
required
Floors
Array<object>
ExperimentFloor
object
have
required
Have
integer
met
required
Met
boolean
name
required
Name

What the minimum counts: starts | visits | orders | events

string
needed
required
Needed

The minimum a version needs before its number is read

integer
label
required
Label
string
mean
required
Mean

The metric on this version: a rate from 0 to 1, or revenue per visit or per order in the store’s currency

number
n
required
N

The visits the metric is read on: starts for completion and opt-in rates, visits for the rest

integer
raw_money
required
Raw Money

Counted revenue before the cap on unusually large visits, in the store’s currency; 0 for a rate

number
se
required
Se

The standard error of mean, with each returning shopper’s visits grouped

number
why
required
Why
string
periods
required
Periods
Array<object>
ExperimentPeriod
object
current
required
Current
boolean
ended_at
required
Any of:
string format: date-time
label
required
Label
string
period
required
Period
integer
reason
required
Reason

Why the period began: started | split_changed | control_published | variant_republished | metric_changed | revenue_tiers_changed

string
started_at
required
Started At
string format: date-time
progress
required
ExperimentProgress
object
day
required
Day

The day of the current counting period, 1 on the day it began

integer
days_at_pace
required
Any of:
integer
line
required
Line

What the progress says; empty when the period has no planned sample or the decision metric is clear

string
observed
required
Observed

What each version has so far toward its quota, keyed control and variant

object
key
additional properties
integer
pace
required
Any of:
number
planned
required
Any of:
integer
quotas
required
Any of:
object
key
additional properties
integer
share
required
Any of:
number
tier
required
Tier

Min_days: inside the minimum days | estimating: no pace yet | reached: enough shoppers and clear | reached_unclear: enough shoppers, not clear | on_track | slow

string
protection
required
Protection
Array<object>
ExperimentProtection
object
assessed
required
Assessed

Whether the metric has enough data to be checked

boolean
detail
required
Detail
string
harmed
required
Harmed

Whether even the best case for the variant is worse than the live version

boolean
hi
required
Any of:
number
kind
required
Kind

The protected metric: completion_rate | email_opt_in | order_conversion | rpv | aov | phone_opt_in | reached_page | product_page_clicked | custom_url_clicked | button_clicked | chose_answer

string
label
required
Label

Not checked yet: too little data | no harm | worse: blocks an automatic publish

string
Allowed values: not checked yet no harm worse
lo
required
Any of:
number
split
required
ExperimentSplitCheck
object
expected
required
Expected

The share of shoppers each version should get, 0 to 1, live version first

Array<number>
expected_share
required
Expected Share

The variant’s share of shoppers the split was set to, 0 to 1

number
latched
required
Latched

Whether the check has fired; once fired it stays on for the rest of the test

boolean
line
required
Any of:
string
log_odds
required
Log Odds

The evidence that shoppers are not landing as the split was set; the check fires above 6.91

number
n
required
N

The shoppers counted on both versions

integer
observed_share
required
Any of:
number
surfaced
required
Surfaced

Whether the 200 shoppers the check needs have been counted

boolean
units_per_arm
required
Units Per Arm

Shoppers counted per version, live version first

Array<integer>
window_end
required
Any of:
string format: date-time
window_start
required
Any of:
string format: date-time
Example
{
"arms": [],
"as_of": "2026-09-16T12:00:00Z",
"attribution_line": "Orders can arrive up to 7 days after a visit, so the newest visits look poorer on both versions for now.",
"attribution_window_days": 7,
"changed_since": false,
"changes": [],
"events": [],
"experiment": {
"ai_fallback": "when_clear",
"app_id": "quiz_7c9e6679742540de944be07fc1f90ae7",
"arms": [
{
"id": "arm_00000000000000000000000000000001",
"is_control": true,
"label": "Live version",
"position": 0,
"version_id": "ver_00000000000000000000000000000001",
"version_number": 1,
"weight": 1
},
{
"id": "arm_00000000000000000000000000000002",
"is_control": false,
"label": "Variant B",
"position": 1,
"version_id": "ver_00000000000000000000000000000002",
"version_number": 2,
"weight": 1
}
],
"created_at": "2026-09-16T12:00:00Z",
"decision_metric": "completion_rate",
"decision_option": "when_clear",
"fallback": "notify",
"id": "expt_7c9e6679742540de944be07fc1f90ae7",
"long_run_reminders": true,
"name": "Skip the email page",
"period": 0,
"period_reason": "started",
"protect_metrics": [],
"revenue_tiers": [
"added_from_quiz",
"shown_bought_later",
"bought_not_shown"
],
"revision": 0,
"status": "draft",
"timezone": "UTC",
"updated_at": "2026-09-16T12:00:00Z",
"weekly_digest": true
},
"explainer_keys": [
"views",
"starts",
"completions",
"completionRate",
"experimentLift",
"experimentInterval"
],
"frozen": false,
"gates": [
{
"detail": "Completion rate is measured on both versions.",
"key": "decision_metric",
"label": "Decision metric",
"met": true
},
{
"detail": "168 hours to go.",
"key": "min_days",
"label": "7-day minimum",
"met": false
},
{
"detail": "No completions on either version yet.",
"key": "enough_data",
"label": "Enough data",
"met": false
},
{
"detail": "Not enough shoppers to check yet.",
"key": "split_health",
"label": "Split healthy",
"met": true
},
{
"detail": "No protected metric stands in the way.",
"key": "protected",
"label": "Protected metrics",
"met": true
}
],
"header": {
"current_read": "No completions on either version yet.",
"day_line": "Day 1",
"next": "Publishes the winner at the first clear result, once the test starts.",
"testing": "Live version (v1) 50% vs Variant B (v2) 50%"
},
"metrics": [],
"periods": [],
"progress": {
"day": 1,
"line": "",
"observed": {
"control": 0,
"variant": 0
},
"tier": "min_days"
},
"protection": [],
"split": {
"expected": [
0.5,
0.5
],
"expected_share": 0.5,
"latched": false,
"log_odds": 0,
"n": 0,
"surfaced": false,
"units_per_arm": [
0,
0
]
}
}

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
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
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; the Errors guide lists every one

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
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
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; the Errors guide lists every one

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": [
"experiments: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
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
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; the Errors guide lists every one

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
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
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; the Errors guide lists every one

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
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
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; the Errors guide lists every one

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
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
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; the Errors guide lists every one

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
feature
Any of:
Feature
string
Allowed values: merchant_api quiz_ab_testing ai_model_switch ai_advanced_model analytics_paths people_filter analytics_funnel analytics_answers quiz_shopify_customer_metafields custom_css_classes shopify_metafields_plan
plan
Any of:
PlanTier

Declared lowest first: a tier includes what every tier before it includes.

string
Allowed values: none basic plus enterprise
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; the Errors guide lists every one

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