---
title: "Resolve a public channel to its stable IDs"
method: GET
path: "/v1/channels/resolve"
tags: ["Discovery"]
---

# Resolve a public channel to its stable IDs

`GET /v1/channels/resolve`

## Request

- Base URL: `https://api.scripthaul.com`
- URL: `https://api.scripthaul.com/v1/channels/resolve`
- Auth: HTTP bearer

Free channel resolution with cached results. Accepts a handle, a UC ID, or a YouTube /channel/, /user/, or /c/ URL. Legacy /c/ names are resolved as handles. Allows 100 requests per free key per UTC day or 1,000 per paid key. Valid admitted requests count even on warm results, including negative-cache hits. A definitive missing channel returns 404 InvalidInput and is cached for 24 hours across keys by normalized input; repeats use no additional Data API units during that interval. Transient upstream, configuration, and quota failures are not cached as missing channels. The allowance is checked before upstream work; exhaustion returns 429 QuotaExceeded with Retry-After until 00:00 UTC. The normal key request rate also applies, and cold resolution obeys the existing Data API capacity guard. Use the returned channel_id for latest uploads and uploads_playlist_id for full enumeration.

## Query parameters

- `input` string, required

## Response `200`

Resolved public channel.

- ResolvedChannel
  - `ok` unknown, required
  - `channel_id` string, required
  - `handle` string, nullable, required: Public channel handle when known.
  - `title` string, required
  - `resolved_from` string, required: The input supplied by the caller.
  - `uploads_playlist_id` string, required: The channel uploads playlist ID.

## Other responses

- `400`: InvalidInput: input must be a public channel handle, URL, or UC ID. Costs zero credits.
- `401`: Forbidden: a Bearer API key is missing, malformed, unknown, or revoked. Dashboard cookies cannot authenticate this endpoint. Costs zero credits.
- `403`: AccountFrozen or Forbidden: the account is frozen or the authenticated caller cannot use this route. Costs zero credits.
- `404`: InvalidInput: YouTube confirmed that the valid input has no matching public channel. This result is cached for 24 hours across keys by normalized input. Negative-cache hits use no additional Data API units but still count toward the daily resolution allowance. Transient upstream, configuration, and quota failures are not cached as missing channels. Costs zero credits.
- `429`: QuotaExceeded: daily channel-resolution allowance (100 free or 1,000 paid requests per key), key RPM, or Data API capacity exhausted. Warm calls count. Daily exhaustion returns Retry-After until 00:00 UTC; no upstream work occurs after refusal. Costs zero credits.
- `502`: UpstreamError: channel resolution failed or returned an invalid channel. Costs zero credits.
- `503`: ConfigurationError or RateLimited: the YouTube Data API is unconfigured or temporarily out of quota. Costs zero credits.

---

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