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 Pulse to answer a more useful question than 'How much traffic do we have?': is today above or below the normal pattern for this weekday and time?
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."
}
}