REST API endpoint
GET /v1/pulse
Today pulse, yesterday comparison, and 15-minute intraday curves.
Request
GET
https://api.nowmetrix.com/v1/pulse?site=TRACKER_ID
Use this endpoint when you need to explain whether the current day is above or below the normal pattern for the same weekday and time of day.
Authentication
Requires an API key in the Authorization header: Authorization: Bearer nm_YOUR_KEY.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
site |
string |
required | Tracker ID. The API key must have access to this tracker. |
cURL example
curl -H "Authorization: Bearer nm_YOUR_KEY" \
"https://api.nowmetrix.com/v1/pulse?site=TRACKER_ID"
Example response
{
"site": "TRACKER_ID",
"updated_at": "2026-06-26T12:24:30Z",
"timezone": "Europe/Zurich",
"pulse": {
"available": true,
"reason": null,
"delta_percent": 12,
"days_counted": 8,
"is_provisional": false,
"minute_of_day": 865,
"metrics": {
"pageviews": {
"today": 48215,
"avg": 43040,
"delta_percent": 12
},
"visitors": {
"today": 31890,
"avg": 29620,
"delta_percent": 8
},
"active_users": {
"today": 128,
"avg": 104,
"delta_percent": 23
}
},
"baseline": {
"snapshot_time": "14:25",
"aggregation": "median",
"combination": "mean_of_deltas",
"days_counted": 8,
"samples": [
{
"date": "2026-06-19",
"pageviews": 42110,
"visitors": 29100,
"active_users": 98
}
]
}
},
"yesterday_vs_day_before": {
"yesterday": {
"date": "2026-06-25",
"pageviews": 77480,
"visitors": 50195
},
"day_before": {
"date": "2026-06-24",
"pageviews": 81240,
"visitors": 53210
},
"delta_percent": {
"pageviews": -5,
"visitors": -6
}
},
"chart": {
"interval_minutes": 15,
"today_date": "2026-06-26",
"yesterday_date": "2026-06-25",
"average_basis_days": 8,
"average_method": "median_same_weekday",
"pageviews": {
"today": [
{
"time": "08:00",
"value": 920
},
{
"time": "08:15",
"value": 1110
}
],
"yesterday": [
{
"time": "08:00",
"value": 870
}
],
"average": [
{
"time": "08:00",
"value": 810
}
]
},
"visitors": {
"today": [
{
"time": "08:00",
"value": 620
}
],
"yesterday": [
{
"time": "08:00",
"value": 580
}
],
"average": [
{
"time": "08:00",
"value": 540
}
]
}
}
}
Response fields
| Field | Type | Description |
|---|---|---|
site |
string |
Tracker ID used for the request. |
updated_at |
string |
UTC timestamp for when the payload was generated. |
timezone |
string |
Tracker timezone used to resolve local dates. |
pulse.available |
boolean |
Whether enough history is available for pulse calculation. |
pulse.reason |
string|null |
Reason when pulse is not available. |
pulse.delta_percent |
integer|null |
Overall percentage difference from the baseline. |
pulse.days_counted |
integer |
Number of baseline days included. |
pulse.is_provisional |
boolean |
Whether the pulse result is provisional. |
pulse.minute_of_day |
integer |
Current minute of the local day used for comparison. |
pulse.metrics.pageviews |
object |
Today, average, and delta_percent for pageviews. |
pulse.metrics.visitors |
object |
Today, average, and delta_percent for visitors. |
pulse.metrics.active_users |
object |
Today, average, and delta_percent for active users. |
pulse.baseline |
object |
Baseline metadata and sample days used for the pulse calculation. |
yesterday_vs_day_before |
object |
Completed-day comparison for pageviews and visitors. |
chart |
object |
15-minute series for today, yesterday, and average, split into pageviews and visitors. |
Freshness and caching
Responses are microcached per tracker for 30 seconds, with a 90-second stale window for burst protection.
Errors
| HTTP | Code | Description |
|---|---|---|
| 400 | site_required |
The site query parameter is missing. |
| 401 | missing_token |
The Authorization header is missing. |
| 401 | invalid_token |
The token is invalid or revoked. |
| 403 | site_not_authorized |
The API key has no access to this tracker. |
| 429 | rate_limit_exceeded |
The rate limit has been exceeded. |
| 503 | redis_unavailable |
The realtime backend is temporarily unavailable. |
{
"error": {
"code": "invalid_token",
"message": "Bearer token is invalid or revoked."
}
}