# Cue > Match licensed music to any video, over an API. - [Cue API](https://cue.vibeset.ai/docs/index.md): Match licensed music to any video, over an API. - [Quickstart](https://cue.vibeset.ai/docs/quickstart.md): Match music to a video in five minutes. - [Authentication](https://cue.vibeset.ai/docs/authentication.md): How to authenticate, and how to keep your keys safe. - [Starting credits](https://cue.vibeset.ai/docs/credits.md): Redeem a code, then call the API until the credits run out. - [Match music to a video](https://cue.vibeset.ai/docs/match.md): Send a clip, get a ranked shortlist of licensed tracks. - [Underscore a script](https://cue.vibeset.ai/docs/underscore.md): Match licensed music to a script. No video needed. - [Map a track's beats](https://cue.vibeset.ai/docs/beats.md): Beat and downbeat times for any audio you can point us at. - [Find where to cut](https://cue.vibeset.ai/docs/sync.md): Sync points for one track against a video, and where the music lands. - [Loop a track over a long video](https://cue.vibeset.ai/docs/loop.md): Cover a clip that runs longer than the song. - [Render loops under your own license](https://cue.vibeset.ai/docs/own-license.md): Cue returns the timings. You hold the recording and render it yourself. - [MCP server](https://cue.vibeset.ai/docs/mcp-server.md): Drive Cue from any AI coding agent over the Model Context Protocol. - [MCP tools reference](https://cue.vibeset.ai/docs/mcp-tools.md): Every Cue MCP tool, with parameters, examples, and what the first call actually returns. - [Metering & pricing](https://cue.vibeset.ai/docs/metering-and-pricing.md): What a call costs, what's never billed, and where the cheap rate actually applies. - [Errors & rate limits](https://cue.vibeset.ai/docs/errors-and-limits.md): Status codes, error shape, the rate limit, and what an Idempotency-Key really does. - [Changelog](https://cue.vibeset.ai/docs/changelog.md): Changes to the Cue API, newest first. - [API reference](https://cue.vibeset.ai/docs/api-reference/overview.md): Base URL, auth, conventions, and every endpoint. - [Match music to a video](https://cue.vibeset.ai/docs/api-reference/match/match-music-to-a-video.md): Pass a `video_id` for a shortlist. This answers three ways and they carry different bodies: - [Poll a match job](https://cue.vibeset.ai/docs/api-reference/match/poll-a-match-job.md): Poll a match job returned by `POST /v1/match`. `202` while it is still running. `200` with the lane once complete, plus `job_id` and `status`. Billed once, on completion, and polling is free. - [Match music to a script](https://cue.vibeset.ai/docs/api-reference/underscore/match-music-to-a-script.md): Cue Underscore: match licensed music to a text **script** (no video). Paste the script and get a ranked shortlist of ten licensed tracks, each with a title, artist, tempo, its catalog ids and a why-it-fits map showing which words pulled which sound. Synchronous: there's no video ingest or per-minute… - [Get sync points for a track](https://cue.vibeset.ai/docs/api-reference/sync/get-sync-points-for-a-track.md): Sync points for one track against a video you own, no match required. Pass a `track_id` (from a match, or one you picked yourself). Returns labeled offsets, best first: where to start the track under the top of your clip. - [Poll an align job](https://cue.vibeset.ai/docs/api-reference/sync/poll-an-align-job.md): Poll an align job returned by `POST /v1/align`. `202` while it is still running. `200` with the sync points once complete, plus `job_id`, `status` and `cached`. Billed once, on completion. - [Loop a track across a long video](https://cue.vibeset.ai/docs/api-reference/loop/loop-a-track-across-a-long-video.md): Loop a short track seamlessly across a LONG video: a downbeat-aligned, integer-bar self-loop with musical seams and fades that covers the whole clip. Pass a `track_id` for a video you own. Soundstripe tracks only. - [Poll a loop job](https://cue.vibeset.ai/docs/api-reference/loop/poll-a-loop-job.md): Poll a loop job returned by `POST /v1/loop`. `202` while running. `200` with the loop plan once complete, plus `job_id`, `status` and `cached`. Billed once, on completion, and not billed at all when the result is `applicable: false`. - [Map a track's beats and downbeats](https://cue.vibeset.ai/docs/api-reference/beats/map-a-tracks-beats-and-downbeats.md): Map a track's beat grid. Returns every beat, and separately every **downbeat**, the first beat of each bar, which is what decides whether a cut lands musically right. - [Poll a beat-mapping job](https://cue.vibeset.ai/docs/api-reference/beats/poll-a-beat-mapping-job.md): `202` while the job is running. `200` with the grid once complete. `422` if the job failed, if it started and will not finish, or if it sat in the queue past its retention. None of the three is billed. - [Ingest a video](https://cue.vibeset.ai/docs/api-reference/videos/ingest-a-video.md): Pass a `video_url` and we fetch it for you. Or pass a `filename` to get a presigned upload URL, then `PUT` the bytes there and call `POST /v1/videos/{video_id}/ingest`. - [Start processing an uploaded video](https://cue.vibeset.ai/docs/api-reference/videos/start-processing-an-uploaded-video.md): Call this after PUTting a video to the presigned URL from `POST /v1/videos`. The `s3_key` must be the one that call returned, and the object must already be there. - [Get video status](https://cue.vibeset.ai/docs/api-reference/videos/get-video-status.md): Check whether a submitted video is `processing`, `ready` or `failed`. Free to call. ## OpenAPI Specs - [openapi](/docs/api-reference/openapi.yaml)