API REFERENCE
Daily Catalog Streams
On this page
/api/catalogs/{catalogId}/streamsSaved Luminate worldwide aggregate calendar-day streams across reporting DSPs, not Spotify-only or royalty statements. Includes current catalog recordings even when unmeasured, latest collection status, per-recording daily rows/retrieval time, missing dates, equal-period totals and growth. Newer source corrections win; historical versions remain stored. Missing days and changed provider recording identity suppress comparisons. Zero baseline yields null percentage. Page through pagination.has_more; summary_scope is page. Reads make no provider requests. Standard MCP: get_catalog_streams. Requires API and database feature release; unavailable to delegated OAuth. Unchanged daily values reuse their saved versions; new dates and corrections are appended, with fresh coverage/provenance receipts for every run.
Authentication
x-api-key in header
bearerAuth bearer
Request
curl --request GET \
--url 'https://api.recoupable.dev/api/catalogs/YOUR_CATALOG_ID/streams?since=YOUR_SINCE&days=YOUR_DAYS' \
--header 'x-api-key: YOUR_API_KEY'Replace the YOUR_ placeholders with your values. Required query parameters are included; optional parameters are listed below.
Try it
Fill in the fields, send the request from your browser, and read the live response. The curl below updates as you type.
Kept in this browser tab only and cleared when it closes.
curl --request GET \
--url 'https://recoup-api.vercel.app/api/catalogs/{catalogId}/streams'Parameters
Path parameters
catalogIdstringrequiredCatalog owned by the authenticated account or an organization it currently belongs to.
Query parameters
sincestringrequiredCurrent period start, inclusive. Previous period has the same length and immediately precedes it.
daysintegerrequiredEqual period length; end dates are exclusive. Missing days suppress growth.
pageintegerDefault: 1
limitintegerDefault: 25
Responses
200Saved history and comparisons+
application/json
statusstringcatalog_idstringformat: uuid
providerstring · enumValues: "luminate"
platformstring · enumValues: "all_dsps"
metricstring · enumValues: "daily_streams"
latest_runobject | nullRun status, per-ISRC coverage, errors, window and completion timestamp.
Properties for latest_run
idstringformat: uuid
catalog_idstringformat: uuid
revisionstringformat: uuid
scheduled_daystringformat: date
sincestringformat: date
untilstringformat: date
statusstring · enumValues: "queued", "running", "complete", "partial", "failed", "cancelled"
coverageobjecterrorstring | nullcreated_atstringformat: date-time
finished_atstring | nullformat: date-time
territorystring · enumValues: "worldwide"
semanticsstringsource_updated_atnullperiodsobjectProperties for periods
previousobjectProperties for previous
startstringformat: date
end_exclusivestringformat: date
currentobjectProperties for current
startstringformat: date
end_exclusivestringformat: date
daysintegertimezonestring · enumValues: "UTC"
paginationobjectProperties for pagination
pageintegerlimitintegertotal_countintegerhas_morebooleansummary_scopestring · enumValues: "page"
recordingsarray<object>Item properties for recordings
isrcstringnamestring | nullprovider_recording_idstring | nullretrieved_atstring | nullformat: date-time
daysarray<object>Item properties for days
datestringrequiredformat: date
streamsinteger | nullrequiredstatestring · enumValues: "comparable", "incomplete", "unfinished_period", "invalid_observation"
missing_daysarray<string>Item properties for missing_days
string
previous_streamsinteger | nullcurrent_streamsinteger | nullabsolute_growthinteger | nullpercentage_growthnumber | nullzero_baselinebooleanlatest_attemptobject | nullFresh recording-level receipt for the latest run, including state, observed_days, retrieved_at, source_hash and provider_recording_id. Observation retrieved_at is when its retained version was introduced.
Properties for latest_attempt
statestring · enumValues: "complete", "partial", "unavailable", "failed"
observed_daysintegerminimum: 0 · maximum: 62
retrieved_atstring | nullformat: date-time
source_hashstring | nullprovider_recording_idstring | null400Invalid input or incomplete calendar period+
No response body schema is specified.
401Authentication required+
No response body schema is specified.
404Catalog not accessible+
No response body schema is specified.
503Storage, configuration or dispatch unavailable+
No response body schema is specified.
Full specification
Download the OpenAPI file for complete schemas, constraints, and examples.
Download releases.jsonView operation source
{
"summary": "Read daily catalog streams",
"description": "Saved Luminate worldwide aggregate calendar-day streams across reporting DSPs, not Spotify-only or royalty statements. Includes current catalog recordings even when unmeasured, latest collection status, per-recording daily rows/retrieval time, missing dates, equal-period totals and growth. Newer source corrections win; historical versions remain stored. Missing days and changed provider recording identity suppress comparisons. Zero baseline yields null percentage. Page through pagination.has_more; summary_scope is page. Reads make no provider requests. Standard MCP: get_catalog_streams. Requires API and database feature release; unavailable to delegated OAuth. Unchanged daily values reuse their saved versions; new dates and corrections are appended, with fresh coverage/provenance receipts for every run.",
"security": [
{
"apiKeyAuth": []
},
{
"bearerAuth": []
}
],
"parameters": [
{
"name": "catalogId",
"in": "path",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
},
"description": "Catalog owned by the authenticated account or an organization it currently belongs to."
},
{
"name": "since",
"in": "query",
"required": true,
"schema": {
"type": "string",
"format": "date"
},
"description": "Current period start, inclusive. Previous period has the same length and immediately precedes it."
},
{
"name": "days",
"in": "query",
"required": true,
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 31
},
"description": "Equal period length; end dates are exclusive. Missing days suppress growth."
},
{
"name": "page",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"default": 1
}
},
{
"name": "limit",
"in": "query",
"schema": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 25
}
}
],
"responses": {
"200": {
"description": "Saved history and comparisons",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"catalog_id": {
"type": "string",
"format": "uuid"
},
"provider": {
"type": "string",
"enum": [
"luminate"
]
},
"platform": {
"type": "string",
"enum": [
"all_dsps"
]
},
"metric": {
"type": "string",
"enum": [
"daily_streams"
]
},
"latest_run": {
"$ref": "#/components/schemas/CatalogStreamRun",
"description": "Run status, per-ISRC coverage, errors, window and completion timestamp."
},
"territory": {
"type": "string",
"enum": [
"worldwide"
]
},
"semantics": {
"type": "string"
},
"source_updated_at": {
"type": "null"
},
"periods": {
"type": "object",
"properties": {
"previous": {
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date"
},
"end_exclusive": {
"type": "string",
"format": "date"
}
}
},
"current": {
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date"
},
"end_exclusive": {
"type": "string",
"format": "date"
}
}
},
"days": {
"type": "integer"
},
"timezone": {
"type": "string",
"enum": [
"UTC"
]
}
}
},
"pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"total_count": {
"type": "integer"
},
"has_more": {
"type": "boolean"
}
}
},
"summary_scope": {
"type": "string",
"enum": [
"page"
]
},
"recordings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isrc": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"provider_recording_id": {
"type": [
"string",
"null"
]
},
"retrieved_at": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"days": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date"
},
"streams": {
"type": [
"integer",
"null"
]
}
},
"required": [
"date",
"streams"
]
}
},
"state": {
"type": "string",
"enum": [
"comparable",
"incomplete",
"unfinished_period",
"invalid_observation"
]
},
"missing_days": {
"type": "array",
"items": {
"type": "string",
"format": "date"
}
},
"previous_streams": {
"type": [
"integer",
"null"
]
},
"current_streams": {
"type": [
"integer",
"null"
]
},
"absolute_growth": {
"type": [
"integer",
"null"
]
},
"percentage_growth": {
"type": [
"number",
"null"
]
},
"zero_baseline": {
"type": "boolean"
},
"latest_attempt": {
"$ref": "#/components/schemas/CatalogStreamReceipt",
"description": "Fresh recording-level receipt for the latest run, including state, observed_days, retrieved_at, source_hash and provider_recording_id. Observation retrieved_at is when its retained version was introduced."
}
}
}
}
}
}
}
}
},
"400": {
"description": "Invalid input or incomplete calendar period"
},
"401": {
"description": "Authentication required"
},
"404": {
"description": "Catalog not accessible"
},
"503": {
"description": "Storage, configuration or dispatch unavailable"
}
}
}