yabby logo

API: Getting started

Use the yabby REST API to create and manage websites, read videos and playlists for custom frontends, and automate curation — authenticated with workspace API keys.

The yabby API lets you do everything the dashboard does, programmatically: create and configure websites, add YouTube channels, and curate videos and playlists. It's also the way to pull your synced videos and playlists into a custom website you build yourself — yabby keeps the data in sync with YouTube, you render it however you like.

If you'd rather have an AI assistant do the work, the same capabilities are available through the MCP server.

Authentication

Create an API key in your dashboard under Workspace Settings → API. Keys are scoped to your workspace: one key grants access to all websites of the workspace that created it, and nothing else.

Pass the key on every request in the Authorization header with the Bearer scheme:

curl https://www.yabby.page/api/v1/me \
  -H "Authorization: Bearer yabby_your_api_key"

Treat API keys like passwords. They are shown once at creation and only stored as a hash — if a key leaks, revoke it in the dashboard and create a new one. Keys created by a member stop working when that member leaves the workspace.

Base URL

All v1 endpoints live under:

https://www.yabby.page/api/v1/

Your first request

GET /me identifies the workspace behind your key and returns your plan limits — useful as a connectivity check:

curl https://www.yabby.page/api/v1/me \
  -H "Authorization: Bearer yabby_your_api_key"
{
  "data": {
    "organization": { "id": "…", "name": "My Workspace", "slug": "my-workspace" },
    "apiKey": { "id": "…", "name": "My integration" },
    "plan": {
      "id": "pro",
      "name": "Pro",
      "isFreePlan": false,
      "limits": { "websites": 3, "channelsPerWebsite": 3, "videosPerChannel": null }
    }
  }
}

Response format

Successful responses wrap the payload in data. List endpoints that paginate add a pagination object:

{
  "data": [ … ],
  "pagination": { "limit": 50, "offset": 0, "count": 50, "total": 132 }
}

Errors return an error object with a stable machine-readable code:

{
  "error": {
    "code": "not_found",
    "message": "Website not found"
  }
}
HTTP statuscodeMeaning
400bad_request / validation_errorMalformed JSON or invalid fields (details.issues lists them)
401unauthorizedMissing, invalid, expired, or revoked API key
403forbiddenYour plan doesn't allow this action (e.g. publishing on the free plan)
404not_foundThe resource doesn't exist or belongs to another workspace
409conflicte.g. slug already taken, channel already added
429rate_limitedToo many requests — slow down and retry
500internal_server_errorSomething went wrong on our side

Rate limits

Each API key allows 120 requests per minute. When you exceed the limit, requests fail with 429 rate_limited until the window resets.

Plan limits

The API enforces the same plan limits as the dashboard: the number of websites per workspace, channels per website, and publishing requires a paid plan. Check your current limits via GET /me.

Resources

  • Websites — list, create, update, publish, delete
  • Videos — list with filters and search, curate, transcriptions
  • Playlists — list and read with videos, curate
  • Channels — list, add, remove, reorder, sync
  • MCP server — the same capabilities for AI assistants

On this page