@nova-sdk/api
import { Nova } from "@nova-sdk/api";
const nova = new Nova({
apiKey: "sk_test_...",
tenantId: "acme-corp",
});
const latency = await nova.analytics.scoringLatency({ timeRange: "24h" });curl -X GET "https://embed.nova.dweet.com/v1/analytics/scoring-latency?timeRange=24h" \
-H "Authorization: Bearer sk_test_..."{
"period": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
},
"granularity": "minute",
"data": [
{
"timestamp": "2023-11-07T05:31:56Z",
"p50Ms": 123,
"p95Ms": 123,
"p99Ms": 123
}
]
}{
"type": "<string>",
"code": "UNAUTHORIZED",
"status": 123,
"message": "<string>",
"retryable": true,
"traceId": "<string>",
"details": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"code": "UNAUTHORIZED",
"status": 123,
"message": "<string>",
"retryable": true,
"traceId": "<string>",
"details": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"code": "UNAUTHORIZED",
"status": 123,
"message": "<string>",
"retryable": true,
"traceId": "<string>",
"details": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"code": "UNAUTHORIZED",
"status": 123,
"message": "<string>",
"retryable": true,
"traceId": "<string>",
"details": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}Analytics
Get Scoring Latency
Time-series of P50, P95, and P99 scoring duration percentiles
GET
/
v1
/
analytics
/
scoring-latency
@nova-sdk/api
import { Nova } from "@nova-sdk/api";
const nova = new Nova({
apiKey: "sk_test_...",
tenantId: "acme-corp",
});
const latency = await nova.analytics.scoringLatency({ timeRange: "24h" });curl -X GET "https://embed.nova.dweet.com/v1/analytics/scoring-latency?timeRange=24h" \
-H "Authorization: Bearer sk_test_..."{
"period": {
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z"
},
"granularity": "minute",
"data": [
{
"timestamp": "2023-11-07T05:31:56Z",
"p50Ms": 123,
"p95Ms": 123,
"p99Ms": 123
}
]
}{
"type": "<string>",
"code": "UNAUTHORIZED",
"status": 123,
"message": "<string>",
"retryable": true,
"traceId": "<string>",
"details": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"code": "UNAUTHORIZED",
"status": 123,
"message": "<string>",
"retryable": true,
"traceId": "<string>",
"details": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"code": "UNAUTHORIZED",
"status": 123,
"message": "<string>",
"retryable": true,
"traceId": "<string>",
"details": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}{
"type": "<string>",
"code": "UNAUTHORIZED",
"status": 123,
"message": "<string>",
"retryable": true,
"traceId": "<string>",
"details": [
{
"field": "<string>",
"code": "<string>",
"message": "<string>"
}
]
}Returns percentile breakdowns of end-to-end scoring duration over time. Useful for tracking performance trends and identifying latency spikes.
This endpoint requires only a valid API key.
X-Tenant-Id isn’t required.
Query parameters
| Parameter | Required | Values | Description |
|---|---|---|---|
timeRange | Yes | 1h, 24h, 7d, 30d, 90d | Lookback window for the data |
Example response
{
"period": {
"start": "2026-03-07T00:00:00.000Z",
"end": "2026-03-08T00:00:00.000Z"
},
"granularity": "hour",
"data": [
{
"timestamp": "2026-03-07T12:00:00.000Z",
"p50Ms": 800,
"p95Ms": 2000,
"p99Ms": 3500
},
{
"timestamp": "2026-03-07T13:00:00.000Z",
"p50Ms": 750,
"p95Ms": 1800,
"p99Ms": 3200
}
]
}
Response fields
| Field | Type | Description |
|---|---|---|
period.start | string | ISO 8601 start of the period |
period.end | string | ISO 8601 end of the period |
granularity | string | Bucket size for each data point |
data[].timestamp | string | ISO 8601 timestamp for this bucket |
data[].p50Ms | number | null | Median scoring duration in milliseconds |
data[].p95Ms | number | null | 95th percentile scoring duration in milliseconds |
data[].p99Ms | number | null | 99th percentile scoring duration in milliseconds |
P50 reflects the typical scoring experience. P95 and P99 surface tail latency that affects a small fraction of requests but can indicate bottlenecks.
Responses are cached for 60 seconds (
Cache-Control: private, max-age=60). This endpoint is rate-limited under the analytics bucket (20 req/s).Authorizations
Use Authorization: Bearer sk_test_* or Authorization: Bearer sk_live_*.
Query Parameters
Time range for the analytics query Time range for analytics queries.
Available options:
1h, 24h, 7d, 30d, 90d Was this page helpful?