Understanding report limits, usage tracking, and the LRS add-on for unlimited reporting
The Listener Report Service (LRS) provides four report endpoints that give you visibility into your API usage and report generation history. Every subscription tier includes LRS access — the difference is how many reports you can generate per month.
All four endpoints count against the same monthly and daily report limits. Every report request — whether it's a usage detail, usage summary, report-usage detail, or report-summary — uses one report from your monthly allowance.
/reports/usage and /reports/summary endpoints let you query this data./reports/report-usage and /reports/report-summary endpoints let you see your report generation patterns.| Tier | Reports per Month | Price |
|---|---|---|
| Free | 10 | $0/mo |
| Pro | 10 | $30/mo |
| Enterprise | 10 | $100/mo |
| Unlimited | Unlimited | $300/mo |
| Lifetime | Unlimited forever | $3,000 one-time |
/reports/usage, /reports/summary, /reports/report-usage, or /reports/report-summary each consume one report from your monthly allowance. Plan your report requests accordingly.
Monthly counts reset automatically on the first day of each calendar month via the nightly sync job. There is no daily limit — you can use all your reports in a single day or spread them across the month. It's your choice.
Remove the 10 report/month cap and generate unlimited reports across all four endpoints. Available to Free, Pro, and Enterprise subscribers.
| Feature | Without Add-On | With Add-On |
|---|---|---|
| Monthly report limit | 10 | Unlimited |
| All 4 report endpoints | ✅ | ✅ |
| All 4 output formats | ✅ | ✅ |
| 93-day data retention | ✅ | ✅ |
After purchasing the add-on through Stripe, your API key is automatically upgraded. No configuration changes needed — your next report request will have unlimited access.
All endpoints require authentication via Authorization: Bearer YOUR_API_KEY header or api_key_id query parameter. All endpoints support four output formats (json, csv, tsv, text).
Returns paginated usage log entries showing every price request made with your API key. Each entry includes the asset, price, source, latency, cache status, and more.
| Parameter | Type | Default | Description |
|---|---|---|---|
asset | string | — | Filter by asset symbol (e.g. BTC) |
start_date | string | 93 days ago | Start date (YYYY-MM-DD) |
end_date | string | Today | End date (YYYY-MM-DD) |
cached | bool | — | Filter by cache status: true or false |
page | int | 1 | Page number |
page_size | int | 100 | Records per page (max 1000) |
format | string | json | Output format: json, csv, tsv, text |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://lrs.cpmp-site.org/reports/usage?asset=BTC&start_date=2026-03-01&page_size=50"
Returns aggregated statistics for your API usage over a date range: total requests, cache hit rate, average latency, breakdown by asset and source.
| Parameter | Type | Default | Description |
|---|---|---|---|
start_date | string | 30 days ago | Start date (YYYY-MM-DD) |
end_date | string | Today | End date (YYYY-MM-DD) |
format | string | json | Output format: json, csv, tsv, text |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://lrs.cpmp-site.org/reports/summary?start_date=2026-03-01"
Returns detailed logs of every report you have generated. See which reports you ran, when, what filters you used, how many rows were returned, how long each report took, and which server node generated it.
| Parameter | Type | Default | Description |
|---|---|---|---|
start_date | string | 93 days ago | Start date (YYYY-MM-DD) |
end_date | string | Today | End date (YYYY-MM-DD) |
report_type | string | — | Filter by report type: usage, summary, report-usage, report-summary |
output_format | string | — | Filter by output format used: json, csv, tsv, text |
page | int | 1 | Page number |
page_size | int | 100 | Records per page (max 1000) |
format | string | json | Response output format: json, csv, tsv, text |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://lrs.cpmp-site.org/reports/report-usage?report_type=usage&page_size=20"
Returns aggregated statistics about your report generation history: total reports generated, breakdown by report type, output format, and cluster node, average report duration, and average rows returned.
| Parameter | Type | Default | Description |
|---|---|---|---|
start_date | string | 30 days ago | Start date (YYYY-MM-DD) |
end_date | string | Today | End date (YYYY-MM-DD) |
format | string | json | Response output format: json, csv, tsv, text |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://lrs.cpmp-site.org/reports/report-summary?start_date=2026-03-01"
All four report endpoints support the same four output formats. Use the format query parameter to select your preferred format.
| Format | Content-Type | Use Case |
|---|---|---|
json | application/json | Default. Best for programmatic consumption and APIs. |
csv | text/csv | Comma-separated. Import into Excel, Google Sheets, or any CSV tool. |
tsv | text/tab-separated-values | Tab-delimited. Ideal for databases and ETL pipelines. |
text | text/plain | Human-readable plain text. Good for quick terminal review. |
All report endpoints enforce consistent date range validation:
| Rule | Description |
|---|---|
| Maximum range | 90 days. Requests spanning more than 90 days are rejected with a 400 error. |
| No future dates | start_date cannot be in the future. The LRS only reports on historical data. |
| Start before end | start_date must be on or before end_date. |
| Format | Dates must be in YYYY-MM-DD format (e.g. 2026-03-15). |
| Default end_date | If you provide start_date without end_date, the system defaults to today. |
| Data retention | Usage logs and report history are retained for 93 days. |
All LRS error responses are returned as structured JSON with a consistent format, regardless of the requested output format. Every error message includes the 🛑 indicator, the region, cluster node, HTTP status code, and a complete sentence describing the issue.
{
"error": "🛑 [LRS] [us-east-2] [BeastMirror] [400] Invalid date format for start_date parameter.",
"code": 400,
"service": "LRS",
"region": "us-east-2",
"cluster_node": "BeastMirror",
"timestamp": "2026-05-03T18:30:00Z"
}
Every LRS response includes a status field and, when usage is elevated, a usage_warning field. The warning thresholds are runtime-tunable via application parameters (default: 85% / 90% / 95%).
| Status | usage_warning | Meaning | When It Appears |
|---|---|---|---|
| ✅ | (absent) | Normal — usage well within limits | Monthly report usage below 85% of your limit |
| ✅🟡 | "green" | Heads-up — usage above 85% | Monthly report usage at or above 85% of your limit |
| ✅⚠️ | "yellow" | Caution — approaching limit | Monthly report usage at or above 90% of your limit |
| ✅🔴 | "red" | Critical — near limit | Monthly report usage at or above 95% of your limit |
| 🛑🔴 | "red" | Limit exceeded | 429 error — monthly report limit reached |
| 🛑 | (absent) | Error | Invalid request, authentication failure, or server error |
usage_warning_green_pct, usage_warning_yellow_pct, and usage_warning_red_pct application parameters.
By default, all LRS responses use the emoji status indicators shown above — the Trinity Beast Convention (TBC) format. If your system does not render emoji well, or you prefer machine-friendly text-only responses, you can request plain-text mode by submitting a support ticket through our Support page.
Once enabled for your API key, all status indicators switch to text equivalents:
| TBC (Default) | Plain Text | Meaning |
|---|---|---|
| ✅ | OK | Normal — usage within limits |
| ✅🟡 | OK - NOTE: usage above 85% | Heads-up |
| ✅⚠️ | OK - WARNING: approaching monthly query limit | Caution |
| ✅🔴 | OK - CRITICAL: near monthly query limit | Critical |
| 🛑🔴 | ERROR - LIMIT EXCEEDED | 429 — limit reached |
| 🛑 [LRS] ... | ERROR [LRS] ... | Error responses |
| ✅ [LRS] ... | OK [LRS] ... | Envelope status line |
usage_warning field always uses the text level ("green", "yellow", "red") regardless of format — only the status field changes.
| HTTP Status | Meaning | Common Cause |
|---|---|---|
400 | Bad Request | Invalid date format, date range exceeds 90 days, future start date, or start after end. |
401 | Unauthorized | Missing API key, invalid API key, or revoked API key. |
429 | Too Many Requests | Monthly report limit exceeded for your tier. Message includes your current count and limit. |
500 | Internal Server Error | Failed to query data from cache or database connectivity issue. |
503 | Service Unavailable | ElastiCache health check failed. |
When your report limit is exceeded, the response includes your API key, current usage, your limit, usage percentage, the graduated warning level, a link to upgrade, and which server caught the limit:
{
"error": "🛑 [LRS] [us-east-2] [BeastLRS] [429] Monthly report limit exceeded",
"code": 429,
"status": "🛑🔴",
"service": "LRS",
"region": "us-east-2",
"cluster_node": "BeastLRS",
"timestamp": "2026-05-03T18:30:00Z",
"api_key_id": "key_abc123",
"monthly_usage": 10,
"monthly_limit": 10,
"usage_pct": 100,
"usage_warning": "red",
"upgrade_url": "https://cpmp-site.org/subscribe#lrs-addon"
}
Every LRS JSON response includes status, monthly_usage, monthly_limit, usage_pct, tier, and — when usage is elevated — usage_warning. These fields mirror the graduated warning system used by the LPO price API.
Example request: GET /reports/usage?asset=BTC&start_date=2026-04-01&page_size=2
{
"status": "✅",
"logs": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef0123456789",
"api_key_id": "key_abc123",
"asset": "BTC",
"price": 94250.12,
"source": "coinbase",
"cached": false,
"latency_ms": 0,
"duration_ms": 2,
"ip_address": "203.0.113.42",
"timestamp": 1714761600,
"readable_timestamp": "2026-05-03T12:00:00Z",
"cache_age_seconds": 0,
"region": "us-east-2",
"cluster_node": "BeastMain"
},
{
"id": "b2c3d4e5-f6a7-8901-bcde-f01234567890",
"api_key_id": "key_abc123",
"asset": "BTC",
"price": 94248.75,
"source": "gemini",
"cached": true,
"latency_ms": 0,
"duration_ms": 1,
"ip_address": "203.0.113.42",
"timestamp": 1714761300,
"readable_timestamp": "2026-05-03T11:55:00Z",
"cache_age_seconds": 2.4,
"region": "us-east-2",
"cluster_node": "BeastMirror"
}
],
"total_count": 247,
"page": 1,
"page_size": 2,
"filters": {
"api_key_id": "key_abc123",
"asset": "BTC",
"start_date": "2026-04-01"
},
"monthly_usage": 3,
"monthly_limit": 10,
"usage_pct": 30,
"tier": "pro"
}
Example request: GET /reports/summary?start_date=2026-04-01
{
"status": "✅",
"total_requests": 1482,
"cache_hit_rate": 87.45,
"avg_latency_ms": 1.23,
"by_asset": {
"BTC": 612,
"ETH": 445,
"SOL": 218,
"XRP": 207
},
"by_source": {
"coinbase": 520,
"gemini": 380,
"kraken": 310,
"bybit": 272
},
"date_range": {
"start": "2026-04-01",
"end": "2026-05-03"
},
"monthly_usage": 4,
"monthly_limit": 10,
"usage_pct": 40,
"tier": "pro"
}
Example request: GET /reports/report-usage?start_date=2026-03-16&end_date=2026-04-15&report_type=usage&format=json
{
"status": "✅",
"logs": [
{
"id": "f7a1b2c3-d4e5-6789-abcd-ef0123456789",
"api_key_id": "key_abc123",
"report_type": "usage",
"report_run_date": "2026-04-15T10:30:00Z",
"asset_filter": "BTC",
"start_date_filter": "2026-03-15",
"end_date_filter": "2026-04-15",
"max_rows_returned": "247",
"report_duration_ms": "42",
"output_format": "json",
"region": "us-east-2",
"cluster_node": "BeastMirror"
},
{
"id": "b2c3d4e5-f6a7-8901-bcde-f01234567890",
"api_key_id": "key_abc123",
"report_type": "usage",
"report_run_date": "2026-04-12T08:15:00Z",
"asset_filter": "ETH",
"start_date_filter": "2026-04-01",
"end_date_filter": "2026-04-12",
"max_rows_returned": "89",
"report_duration_ms": "28",
"output_format": "csv",
"region": "us-east-2",
"cluster_node": "BeastLRS"
}
],
"total_count": 2,
"page": 1,
"page_size": 100,
"monthly_usage": 5,
"monthly_limit": 10,
"usage_pct": 50,
"tier": "pro"
}
Example request: GET /reports/report-summary?start_date=2026-03-16&end_date=2026-04-15&format=json
{
"status": "✅",
"total_reports": 7,
"by_report_type": {
"usage": 4,
"summary": 2,
"report-usage": 1
},
"by_output_format": {
"json": 5,
"csv": 1,
"text": 1
},
"by_cluster_node": {
"BeastMirror": 5,
"BeastLRS": 2
},
"avg_duration_ms": 38.71,
"avg_rows_returned": 2145.86,
"date_range": {
"start": "2026-03-16",
"end": "2026-04-15"
},
"monthly_usage": 6,
"monthly_limit": 10,
"usage_pct": 60,
"tier": "pro"
}
LRS Report Summary — 2026-03-16 to 2026-04-15
============================================================
Total Reports : 7
Avg Duration : 38.71ms
Avg Rows Returned : 2145.86
By Report Type:
usage 4
summary 2
report-usage 1
By Output Format:
json 5
csv 1
text 1
By Cluster Node:
BeastMirror 5
BeastLRS 2
As your monthly report usage increases, the status and usage_warning fields change to give you advance notice before hitting your limit. These examples show the metadata fields at each warning level for a Pro tier subscriber with a 10-report monthly limit.
// 8 of 10 reports used = 80% — below green threshold
{
"status": "✅",
...
"monthly_usage": 8,
"monthly_limit": 10,
"usage_pct": 80,
"tier": "pro"
// No usage_warning field — usage is within normal range
}
// 9 of 10 reports used = 90% — above green AND yellow thresholds
{
"status": "✅⚠️",
...
"monthly_usage": 9,
"monthly_limit": 10,
"usage_pct": 90,
"usage_warning": "yellow",
"tier": "pro"
}
Shown above at 9 of 10 (90%). For subscribers with higher limits, here's what yellow looks like:
// Enterprise subscriber with 50-report limit, 46 used = 92%
{
"status": "✅⚠️",
...
"monthly_usage": 46,
"monthly_limit": 50,
"usage_pct": 92,
"usage_warning": "yellow",
"tier": "enterprise"
}
// Enterprise subscriber with 50-report limit, 48 used = 96%
{
"status": "✅🔴",
...
"monthly_usage": 48,
"monthly_limit": 50,
"usage_pct": 96,
"usage_warning": "red",
"tier": "enterprise"
}
When your monthly report limit is reached, the LRS returns a 429 with full usage context and a link to upgrade:
{
"error": "🛑 [LRS] [us-east-2] [BeastLRS] [429] Monthly report limit exceeded",
"code": 429,
"status": "🛑🔴",
"service": "LRS",
"region": "us-east-2",
"cluster_node": "BeastLRS",
"timestamp": "2026-05-03T18:30:00Z",
"api_key_id": "key_abc123",
"monthly_usage": 10,
"monthly_limit": 10,
"usage_pct": 100,
"usage_warning": "red",
"upgrade_url": "https://cpmp-site.org/subscribe#lrs-addon"
}
Subscribers on Unlimited, Lifetime, or with the LRS add-on see unlimited access with zeroed limits:
{
"status": "✅",
"total_reports": 42,
"by_report_type": {
"usage": 20,
"summary": 12,
"report-usage": 6,
"report-summary": 4
},
"by_output_format": {
"json": 30,
"csv": 8,
"tsv": 2,
"text": 2
},
"by_cluster_node": {
"BeastMain": 18,
"BeastMirror": 14,
"BeastLRS": 10
},
"avg_duration_ms": 31.45,
"avg_rows_returned": 1876.33,
"date_range": {
"start": "2026-04-01",
"end": "2026-05-03"
},
"monthly_usage": 0,
"monthly_limit": 0,
"usage_pct": 0,
"tier": "unlimited"
}
monthly_limit is 0, it means unlimited. No usage_warning field appears. The status is always ✅.