---
title: "List songs"
method: GET
path: "/api/v1/songs"
tags: ["songs"]
---

# List songs

`GET /api/v1/songs`

## Request

- Base URL: `https://kinetune.com`
- URL: `https://kinetune.com/api/v1/songs`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://kinetune.com/api/auth/oauth2/authorize`, token URL `https://kinetune.com/api/auth/oauth2/token`, scopes: `music:read`, `videos:read`)

Songs with their cover, duration and analysis status

A song must be analyzed (analysis.status "ready") before videos can be made. 50 per page by default: pass q to search, and limit/offset to page. cover_art.url is the cover at up to 1536 px (JPEG; width and height describe it), preview_url a 640 px and thumbnail_url a 160 px WebP. Image links are signed for 7 days and stay the same all day, so they can be cached.

## Query parameters

- `artist_id` string: Only this artist’s songs
- `q` string: Part of the song title or artist name
- `limit` integer: Results per page, 1-100 (default 50)
- `offset` integer: How many results to skip
- `status` 'pending' | 'processing' | 'ready' | 'failed': Only songs whose analysis has this status (ready = usable for videos)
- `sort` 'title' | 'newest': title (default): by artist then title; newest: latest uploads first

## Response `200`

OK

## Other responses

- `201`: Created
- `400`: Invalid request
- `401`: Missing or invalid credentials
- `402`: Not enough credits
- `403`: Missing scope
- `404`: Not found
- `409`: Conflict
- `422`: Unprocessable
- `503`: Temporarily unavailable (AI video): nothing was held; try again after Retry-After seconds

---

[API](https://skmtc.dev/kinetune/apis/kinetune-api.md) · [All operations](https://skmtc.dev/kinetune/apis/kinetune-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kinetune/apis/kinetune-api/revisions/372c8e87d1ff?raw)
