API REFERENCE
Get Catalogs
On this page
/api/accounts/{id}/catalogsRetrieve the catalogs visible to a specific account. Returns the catalogs the account owns directly, plus the catalogs owned by any organization the account belongs to - so every member of an organization sees that organization's catalogs without passing the organization's id. A catalog owned both directly and through an organization is returned once. An account that belongs to no organization receives only its own catalogs. Create an organization-owned catalog with Create catalog or Run valuation.
Each catalog carries its estimated value band and its owner, so a list of catalogs can be ranked by worth and a member can tell an organization's catalog from their own. valuation is null for a catalog with no measured songs; owner.image is null when the owner account has no avatar.
Authentication
See the authentication guide for API key and account access requirements.
Request
curl --request GET \
--url 'https://api.recoupable.dev/api/accounts/YOUR_ID/catalogs' \
--header 'x-api-key: YOUR_API_KEY'Replace the YOUR_ placeholders with your values. Required query parameters are included; optional parameters are listed below.
Parameters
Path parameters
idstringrequiredThe unique identifier of the account to query. The catalogs of every organization this account belongs to are included in the response.
Responses
200Catalogs retrieved successfully+
application/json
statusstring · enumStatus of the request
Values: "success", "error"
catalogsarray<CatalogListItem>Array of catalog objects, each with its estimated value and its owner
Item properties for catalogs
idstringrequiredUnique identifier for the catalog
format: uuid
namestringrequiredName of the catalog
created_atstringrequiredISO timestamp of when the catalog was created
format: date-time
updated_atstringrequiredISO timestamp of when the catalog was last updated
format: date-time
measured_song_countintegerrequiredSongs in the catalog with at least one play-count measurement. 0 for a catalog that was never measured, in which case valuation is null.
valuationone ofrequiredEstimated value band - the same schema and model as Get catalog measurements returns, so a list and the report it opens cannot disagree. Null when nothing in the catalog has been measured; clients should say so rather than render $0.
Properties for valuation
oneOf · ValuationBand 1
Estimated catalog value in USD, derived at read time from the latest measurements - the same model as the recoupable.dev valuation card. Annual run-rate = lifetime streams / catalog age (lifetime-average proxy), converted to net label share (all-DSP gross-up 1.25/1.4/1.6, 15% distribution fee, 25% royalty share, $0.0035 per Spotify stream) and multiplied by a 10x/13x/16x master-catalog market multiple.
lownumberLow estimate in USD (1.25x gross-up, 10x multiple)
midnumberCentral estimate in USD (1.4x gross-up, 13x multiple)
highnumberHigh estimate in USD (1.6x gross-up, 16x multiple)
oneOf · null 2
null
ownerobjectrequiredThe account a catalog belongs to. A catalog owned both directly and through an organization reports the organization - that is the ownership worth surfacing to a member.
Properties for owner
idstringrequiredOwner account id
format: uuid
namestringrequirednullableOwner display name, null when the account has none
imagestringrequirednullableOwner avatar URL from account_info, null when the account has no image. Clients should fall back to initials rather than render a broken image.
is_organizationbooleanrequiredTrue when the owner is an organization the caller belongs to, false when it is a personal account
errorstringError message (only present if status is 'error')
400Bad request - missing or invalid account id+
application/json
statusstring · enumStatus of the request
Values: "error"
errorstringError message describing what went wrong
401Unauthorized - missing or invalid authentication+
application/json
statusstring · enumStatus of the request
Values: "error"
errorstringError message describing what went wrong
403Forbidden - caller lacks access to the target account+
application/json
statusstring · enumStatus of the request
Values: "error"
errorstringError message describing what went wrong
404Account not found+
application/json
statusstring · enumStatus of the request
Values: "error"
errorstringError message describing what went wrong
500Internal server error+
application/json
statusstring · enumStatus of the request
Values: "error"
errorstringError message describing what went wrong
Full specification
Download the OpenAPI file for complete schemas, constraints, and examples.
Download releases.jsonView operation source
{
"description": "Retrieve the catalogs visible to a specific account. Returns the catalogs the account owns directly, plus the catalogs owned by any organization the account belongs to - so every member of an organization sees that organization's catalogs without passing the organization's id. A catalog owned both directly and through an organization is returned once. An account that belongs to no organization receives only its own catalogs. Create an organization-owned catalog with [Create catalog](/api-reference/songs/catalogs-create) or [Run valuation](/api-reference/songs/valuation-run).\n\nEach catalog carries its estimated value band and its owner, so a list of catalogs can be ranked by worth and a member can tell an organization's catalog from their own. `valuation` is null for a catalog with no measured songs; `owner.image` is null when the owner account has no avatar.",
"parameters": [
{
"name": "id",
"in": "path",
"description": "The unique identifier of the account to query. The catalogs of every organization this account belongs to are included in the response.",
"required": true,
"schema": {
"type": "string",
"format": "uuid"
}
}
],
"responses": {
"200": {
"description": "Catalogs retrieved successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CatalogsResponse"
}
}
}
},
"400": {
"description": "Bad request - missing or invalid account id",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CatalogsErrorResponse"
}
}
}
},
"401": {
"description": "Unauthorized - missing or invalid authentication",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CatalogsErrorResponse"
}
}
}
},
"403": {
"description": "Forbidden - caller lacks access to the target account",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CatalogsErrorResponse"
}
}
}
},
"404": {
"description": "Account not found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CatalogsErrorResponse"
}
}
}
},
"500": {
"description": "Internal server error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CatalogsErrorResponse"
}
}
}
}
}
}