コンテンツにスキップ

Compare per-frame performance runs (pilot)

GET
/v1/projects/{id}/performance-runs/compare

Opt-in LP2 pilot contract. Requires Unity SDK 0.1.8, CLI 0.1.11 and a deployment containing this endpoint. Earlier Unity 0.1.7 and CLI 0.1.10 packages do not include the new capture/run-diff command. Requires analytics:read. Reads at most three distinct run UUIDs from the last seven days using existing project access, retention and erasure. Unavailable for COPPA-enabled organizations (403): their server-side redaction removes the run identity and histogram attributes. SDK capture or flush success does not establish eligibility for this pilot. Missing, incomplete, conflicting or condition-mismatched evidence returns an inconclusive result, never a successful regression verdict. Histogram quantiles are millisecond bin intervals, not confidence intervals. Repeat must share the baseline build and commit. No automatic regression gate or public sharing is implied. Read-limit or transport failures return errors.

id
required
string format: uuid

Project UUID.

baseline
required
string format: uuid
>= 36 characters <= 36 characters /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/
candidate
required
string format: uuid
>= 36 characters <= 36 characters /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/
repeat
string format: uuid
>= 36 characters <= 36 characters /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/

Unchanged repeat with a distinct run ID and the baseline build/commit.

Comparable report or explicit inconclusive evidence.

object
success
boolean
data
required
object
status
required
string
Allowed values: comparable inconclusive
reasons
required
Array<string>
baseline
required
object
runId
required
string format: uuid
>= 36 characters <= 36 characters /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/
status
required
string
Allowed values: missing incomplete invalid complete
reasons
required
Array<string>
metadata

Required declared profiles and observed engine/platform/SDK. Matching declarations are not hardware attestation.

object
buildId
required
string
commit
required
string
branch
required
string
scenario
required
string
hardware
required
string
graphics
required
string
resolution
required
string
configuration
required
string
platform
required
string
engineVersion
required
string
method
required
string
Allowed values: unity-update-stopwatch-v1
sdkVersion
required
string
warmupFrames
required
integer
<= 60000
targetFrames
required
integer
>= 1000 <= 1000000
startedAtUs

UTC Unix microseconds as a decimal string.

string
/^[1-9][0-9]{0,17}$/
endedAtUs

UTC Unix microseconds as a decimal string.

string
/^[1-9][0-9]{0,17}$/
samples
integer
droppedSamples
integer
warmupSamples
integer
durationMs

Sum of accepted measurement intervals; excludes warm-up and dropped samples.

number
quantiles
object
p50
required
Array<number>
>= 2 items <= 2 items
p95
required
Array<number>
>= 2 items <= 2 items
p99
required
Array<number>
>= 2 items <= 2 items
hitches

Exact counts strictly above 1000/60, 1000/30, 50 and 100 milliseconds, with rates per 1000 accepted frames.

array
>= 4 items <= 4 items
candidate
required
object
runId
required
string format: uuid
>= 36 characters <= 36 characters /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/
status
required
string
Allowed values: missing incomplete invalid complete
reasons
required
Array<string>
metadata

Required declared profiles and observed engine/platform/SDK. Matching declarations are not hardware attestation.

object
buildId
required
string
commit
required
string
branch
required
string
scenario
required
string
hardware
required
string
graphics
required
string
resolution
required
string
configuration
required
string
platform
required
string
engineVersion
required
string
method
required
string
Allowed values: unity-update-stopwatch-v1
sdkVersion
required
string
warmupFrames
required
integer
<= 60000
targetFrames
required
integer
>= 1000 <= 1000000
startedAtUs

UTC Unix microseconds as a decimal string.

string
/^[1-9][0-9]{0,17}$/
endedAtUs

UTC Unix microseconds as a decimal string.

string
/^[1-9][0-9]{0,17}$/
samples
integer
droppedSamples
integer
warmupSamples
integer
durationMs

Sum of accepted measurement intervals; excludes warm-up and dropped samples.

number
quantiles
object
p50
required
Array<number>
>= 2 items <= 2 items
p95
required
Array<number>
>= 2 items <= 2 items
p99
required
Array<number>
>= 2 items <= 2 items
hitches

Exact counts strictly above 1000/60, 1000/30, 50 and 100 milliseconds, with rates per 1000 accepted frames.

array
>= 4 items <= 4 items
repeat
object
runId
required
string format: uuid
>= 36 characters <= 36 characters /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/
status
required
string
Allowed values: missing incomplete invalid complete
reasons
required
Array<string>
metadata

Required declared profiles and observed engine/platform/SDK. Matching declarations are not hardware attestation.

object
buildId
required
string
commit
required
string
branch
required
string
scenario
required
string
hardware
required
string
graphics
required
string
resolution
required
string
configuration
required
string
platform
required
string
engineVersion
required
string
method
required
string
Allowed values: unity-update-stopwatch-v1
sdkVersion
required
string
warmupFrames
required
integer
<= 60000
targetFrames
required
integer
>= 1000 <= 1000000
startedAtUs

UTC Unix microseconds as a decimal string.

string
/^[1-9][0-9]{0,17}$/
endedAtUs

UTC Unix microseconds as a decimal string.

string
/^[1-9][0-9]{0,17}$/
samples
integer
droppedSamples
integer
warmupSamples
integer
durationMs

Sum of accepted measurement intervals; excludes warm-up and dropped samples.

number
quantiles
object
p50
required
Array<number>
>= 2 items <= 2 items
p95
required
Array<number>
>= 2 items <= 2 items
p99
required
Array<number>
>= 2 items <= 2 items
hitches

Exact counts strictly above 1000/60, 1000/30, 50 and 100 milliseconds, with rates per 1000 accepted frames.

array
>= 4 items <= 4 items
windowDays
required
integer
Allowed values: 7
quantiles
object
p50
required
object
baseline
required
Array<number>
>= 2 items <= 2 items
candidate
required
Array<number>
>= 2 items <= 2 items
deltaMs
required

Lower and upper millisecond bounds. Quantile bins exclude the upper bound; differences conservatively subtract opposing endpoints.

Array<number>
>= 2 items <= 2 items
p95
required
object
baseline
required
Array<number>
>= 2 items <= 2 items
candidate
required
Array<number>
>= 2 items <= 2 items
deltaMs
required

Lower and upper millisecond bounds. Quantile bins exclude the upper bound; differences conservatively subtract opposing endpoints.

Array<number>
>= 2 items <= 2 items
p99
required
object
baseline
required
Array<number>
>= 2 items <= 2 items
candidate
required
Array<number>
>= 2 items <= 2 items
deltaMs
required

Lower and upper millisecond bounds. Quantile bins exclude the upper bound; differences conservatively subtract opposing endpoints.

Array<number>
>= 2 items <= 2 items
repeatVariation

Signed difference intervals for one unchanged pair; not an established noise threshold.

object
p50
required

Lower and upper millisecond bounds. Quantile bins exclude the upper bound; differences conservatively subtract opposing endpoints.

Array<number>
>= 2 items <= 2 items
p95
required

Lower and upper millisecond bounds. Quantile bins exclude the upper bound; differences conservatively subtract opposing endpoints.

Array<number>
>= 2 items <= 2 items
p99
required

Lower and upper millisecond bounds. Quantile bins exclude the upper bound; differences conservatively subtract opposing endpoints.

Array<number>
>= 2 items <= 2 items
X-RateLimit-Limit
integer

Maximum number of requests allowed per hour.

X-RateLimit-Remaining
integer

Number of requests remaining in the current window.

X-RateLimit-Reset
integer

Unix timestamp when the rate limit window resets.

Invalid request parameters or body.

RFC 9457 Problem Details. Served with the application/problem+json media type. error_category, retryable, and retry_after are Framedash extension members. type always defaults to about:blank, so it is always present; detail and the extension members are present only when applicable.

object
type
required

Problem type URI; about:blank when no specific type applies.

string format: uri
default: about:blank
title
required

Short, human-readable summary of the problem type.

string
status
required

HTTP status code.

integer
detail

Human-readable explanation specific to this occurrence.

string
error_category

Extension member categorizing the error.

string
Allowed values: authentication authorization validation rate_limit not_found conflict payload internal
retryable

Extension member; true when retrying may succeed (e.g. 429, 503).

boolean
retry_after

Extension member; suggested retry delay in seconds, when applicable.

integer

Missing or invalid API key.

RFC 9457 Problem Details. Served with the application/problem+json media type. error_category, retryable, and retry_after are Framedash extension members. type always defaults to about:blank, so it is always present; detail and the extension members are present only when applicable.

object
type
required

Problem type URI; about:blank when no specific type applies.

string format: uri
default: about:blank
title
required

Short, human-readable summary of the problem type.

string
status
required

HTTP status code.

integer
detail

Human-readable explanation specific to this occurrence.

string
error_category

Extension member categorizing the error.

string
Allowed values: authentication authorization validation rate_limit not_found conflict payload internal
retryable

Extension member; true when retrying may succeed (e.g. 429, 503).

boolean
retry_after

Extension member; suggested retry delay in seconds, when applicable.

integer

Credential lacks project access, analytics:read scope, or a required account entitlement, or the organization has COPPA enabled.

RFC 9457 Problem Details. Served with the application/problem+json media type. error_category, retryable, and retry_after are Framedash extension members. type always defaults to about:blank, so it is always present; detail and the extension members are present only when applicable.

object
type
required

Problem type URI; about:blank when no specific type applies.

string format: uri
default: about:blank
title
required

Short, human-readable summary of the problem type.

string
status
required

HTTP status code.

integer
detail

Human-readable explanation specific to this occurrence.

string
error_category

Extension member categorizing the error.

string
Allowed values: authentication authorization validation rate_limit not_found conflict payload internal
retryable

Extension member; true when retrying may succeed (e.g. 429, 503).

boolean
retry_after

Extension member; suggested retry delay in seconds, when applicable.

integer

Rate limit exceeded.

RFC 9457 Problem Details. Served with the application/problem+json media type. error_category, retryable, and retry_after are Framedash extension members. type always defaults to about:blank, so it is always present; detail and the extension members are present only when applicable.

object
type
required

Problem type URI; about:blank when no specific type applies.

string format: uri
default: about:blank
title
required

Short, human-readable summary of the problem type.

string
status
required

HTTP status code.

integer
detail

Human-readable explanation specific to this occurrence.

string
error_category

Extension member categorizing the error.

string
Allowed values: authentication authorization validation rate_limit not_found conflict payload internal
retryable

Extension member; true when retrying may succeed (e.g. 429, 503).

boolean
retry_after

Extension member; suggested retry delay in seconds, when applicable.

integer
X-RateLimit-Limit
integer

Maximum number of requests allowed per hour.

X-RateLimit-Remaining
integer

Number of requests remaining in the current window.

X-RateLimit-Reset
integer

Unix timestamp when the rate limit window resets.

Retry-After
integer

Number of seconds to wait before retrying. Present only on 429 responses. Because the limit uses a sliding window, honor this value per response rather than scheduling a retry for the reset time.

The bounded analytics read failed. No comparison verdict is available.

RFC 9457 Problem Details. Served with the application/problem+json media type. error_category, retryable, and retry_after are Framedash extension members. type always defaults to about:blank, so it is always present; detail and the extension members are present only when applicable.

object
type
required

Problem type URI; about:blank when no specific type applies.

string format: uri
default: about:blank
title
required

Short, human-readable summary of the problem type.

string
status
required

HTTP status code.

integer
detail

Human-readable explanation specific to this occurrence.

string
error_category

Extension member categorizing the error.

string
Allowed values: authentication authorization validation rate_limit not_found conflict payload internal
retryable

Extension member; true when retrying may succeed (e.g. 429, 503).

boolean
retry_after

Extension member; suggested retry delay in seconds, when applicable.

integer