Skip to main content

API reference

Wire BrollCollective into anything.

Three endpoints, one bearer token. Search the vault, pull clip metadata, and issue signed CDN URLs. Everything our own product uses, available over HTTPS.

Authentication

Bearer tokens

Every request passes your API key as a bearer token. Keys start with brc_live_ in production and brc_test_ in the review sandbox. Generate one at Settings → API keys.

curl -H "Authorization: Bearer brc_live_…" \
  https://brollcollective.com/api/v1/vault/search?q=golden+hour&pageSize=5
GET/api/v1/vault/{id}scope: read:vault

Get a single clip

Single-clip metadata with the full rendition ladder (4k / 1080p / 720p / 9:16) and any AI-enriched fields (scene description, quality score, best use cases).

Request

curl -H "Authorization: Bearer brc_live_…" \
  https://brollcollective.com/api/v1/vault/c12f4a0e-…

200 OK response

{
  "object": "clip",
  "id": "c12f4a0e-…",
  "title": "Capitol Hill golden hour pan",
  "description": "Slow pan over the skyline as the sun clears the Cascades.",
  "status": "published",
  "orientation": "horizontal",
  "duration_seconds": 14,
  "ai": {
    "scene_description": "Rooftop view of downtown Seattle with warm backlight.",
    "quality_score": 0.92,
    "best_use_cases": ["real_estate_reel","city_b_roll"]
  },
  "published_at": "2026-03-22T19:04:00Z",
  "assets": [
    { "label": "4k",    "cdn_url": "https://cdn.…/c12f4a0e/4k.mp4",    "width": 3840, "height": 2160 },
    { "label": "1080p", "cdn_url": "https://cdn.…/c12f4a0e/1080p.mp4", "width": 1920, "height": 1080 },
    { "label": "9x16",  "cdn_url": "https://cdn.…/c12f4a0e/9x16.mp4",  "width": 1080, "height": 1920 }
  ]
}
POST/api/v1/vault/{id}/downloadscope: download:vault

Issue a signed download URL

Returns a 15-minute presigned URL for the requested rendition. Each call increments the key owner's `api_calls_overage` meter and, when billing is wired, counts against your plan's included downloads.

Body

renditionenum`4k` · `1080p` · `720p` · `9x16`. Defaults to `1080p`.

Request

curl -X POST "https://brollcollective.com/api/v1/vault/c12f4a0e-…/download" \
  -H "Authorization: Bearer brc_live_…" \
  -H "content-type: application/json" \
  -d '{"rendition":"4k"}'

200 OK response

{
  "object": "download_url",
  "video_id": "c12f4a0e-…",
  "rendition": "1080p",
  "url": "https://cdn.brollcollective.com/…?X-Amz-Signature=…",
  "expires_in_seconds": 900,
  "key_id": "apk_3m0h…"
}

Rate limits

Per-key sliding window

/vault/search

60 / min

/vault/{id}

120 / min

/vault/{id}/download

30 / min

Every response includes X-RateLimit-Remaining and X-RateLimit-Reset headers. 429s carry a Retry-After value in seconds.

Errors

Standard JSON envelope

Every error is a JSON object with a stable error code plus a human-readable hint. Never parse the HTTP status alone.

StatusCodeMeaning
400bad_requestMalformed or missing required parameters.
401unauthorizedMissing, malformed, or revoked API key.
403forbiddenKey lacks the scope listed under `required_scope`.
404not_foundClip id doesn't exist or isn't published.
429rate_limitedHit a per-key rate-limit window.
500server_errorSomething we need to look at. Retry with backoff.

Scopes

Key scopes

read:vault

Search + read clip metadata. Safe to ship in client-side code with a short-lived key.

download:vault

Issue signed CDN URLs. Keep this on a server-side key. Leaking it costs you real $.

Changelog

v1 timeline

  • Public API docs

    Launched /docs/api with curl + Node + Python samples for every endpoint.

  • download:vault

    Added POST /vault/{id}/download for short-lived signed URLs.

  • v1 public preview

    GET /vault/search and /vault/{id} opened to key holders.

API Reference · BrollCollective