curl --request GET \
--url https://api.recoupable.dev/api/catalogs/{catalogId}/streams \
--header 'x-api-key: <api-key>'import requests
url = "https://api.recoupable.dev/api/catalogs/{catalogId}/streams"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.recoupable.dev/api/catalogs/{catalogId}/streams', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.recoupable.dev/api/catalogs/{catalogId}/streams",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.recoupable.dev/api/catalogs/{catalogId}/streams"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.recoupable.dev/api/catalogs/{catalogId}/streams")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/catalogs/{catalogId}/streams")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "<string>",
"catalog_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"provider": "luminate",
"platform": "all_dsps",
"metric": "daily_streams",
"latest_run": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"catalog_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"revision": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scheduled_day": "2023-12-25",
"since": "2023-12-25",
"until": "2023-12-25",
"status": "queued",
"coverage": {},
"error": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z"
},
"territory": "worldwide",
"semantics": "<string>",
"source_updated_at": null,
"periods": {
"previous": {
"start": "2023-12-25",
"end_exclusive": "2023-12-25"
},
"current": {
"start": "2023-12-25",
"end_exclusive": "2023-12-25"
},
"days": 123,
"timezone": "UTC"
},
"pagination": {
"page": 123,
"limit": 123,
"total_count": 123,
"has_more": true
},
"summary_scope": "page",
"recordings": [
{
"isrc": "<string>",
"name": "<string>",
"provider_recording_id": "<string>",
"retrieved_at": "2023-11-07T05:31:56Z",
"days": [
{
"date": "2023-12-25",
"streams": 123
}
],
"state": "comparable",
"missing_days": [
"2023-12-25"
],
"previous_streams": 123,
"current_streams": 123,
"absolute_growth": 123,
"percentage_growth": 123,
"zero_baseline": true,
"latest_attempt": {
"state": "complete",
"observed_days": 31,
"retrieved_at": "2023-11-07T05:31:56Z",
"source_hash": "<string>",
"provider_recording_id": "<string>"
}
}
]
}Daily Catalog Streams
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.
curl --request GET \
--url https://api.recoupable.dev/api/catalogs/{catalogId}/streams \
--header 'x-api-key: <api-key>'import requests
url = "https://api.recoupable.dev/api/catalogs/{catalogId}/streams"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.recoupable.dev/api/catalogs/{catalogId}/streams', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.recoupable.dev/api/catalogs/{catalogId}/streams",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.recoupable.dev/api/catalogs/{catalogId}/streams"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.recoupable.dev/api/catalogs/{catalogId}/streams")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recoupable.dev/api/catalogs/{catalogId}/streams")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "<string>",
"catalog_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"provider": "luminate",
"platform": "all_dsps",
"metric": "daily_streams",
"latest_run": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"catalog_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"revision": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"scheduled_day": "2023-12-25",
"since": "2023-12-25",
"until": "2023-12-25",
"status": "queued",
"coverage": {},
"error": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z"
},
"territory": "worldwide",
"semantics": "<string>",
"source_updated_at": null,
"periods": {
"previous": {
"start": "2023-12-25",
"end_exclusive": "2023-12-25"
},
"current": {
"start": "2023-12-25",
"end_exclusive": "2023-12-25"
},
"days": 123,
"timezone": "UTC"
},
"pagination": {
"page": 123,
"limit": 123,
"total_count": 123,
"has_more": true
},
"summary_scope": "page",
"recordings": [
{
"isrc": "<string>",
"name": "<string>",
"provider_recording_id": "<string>",
"retrieved_at": "2023-11-07T05:31:56Z",
"days": [
{
"date": "2023-12-25",
"streams": 123
}
],
"state": "comparable",
"missing_days": [
"2023-12-25"
],
"previous_streams": 123,
"current_streams": 123,
"absolute_growth": 123,
"percentage_growth": 123,
"zero_baseline": true,
"latest_attempt": {
"state": "complete",
"observed_days": 31,
"retrieved_at": "2023-11-07T05:31:56Z",
"source_hash": "<string>",
"provider_recording_id": "<string>"
}
}
]
}Authorizations
Your Recoup API key. Learn more.
Path Parameters
Catalog owned by the authenticated account or an organization it currently belongs to.
Query Parameters
Current period start, inclusive. Previous period has the same length and immediately precedes it.
Equal period length; end dates are exclusive. Missing days suppress growth.
1 <= x <= 311 <= x <= 10000001 <= x <= 25Response
Saved history and comparisons
luminate all_dsps daily_streams Run status, per-ISRC coverage, errors, window and completion timestamp.
Show child attributes
Show child attributes
worldwide Show child attributes
Show child attributes
Show child attributes
Show child attributes
page Show child attributes
Show child attributes
Was this page helpful?
