Getting started
Manage VTurb videos, uploads, files, A/B tests and domains over REST
The VTurb API is a public REST API for your VTurb account. Every documented response is recorded from the API's real behavior.
Base URL
https://api.vturb.comEvery path starts with /v1.
Authentication
Send your VTurb API token (vt_...) as a bearer token on every request:
curl https://api.vturb.com/v1/videos \
-H "Authorization: Bearer vt_..."Each action needs a scope on the token: videos:read, videos:upload and videos:write for videos, ab_tests:read and ab_tests:write for A/B tests, domains:read and domains:write for domains.
- A missing or invalid token returns
unauthorized. - A token without the scope the action requires returns
forbidden. - An organization that is not enabled for the API returns
org_not_enabled.
Errors
Errors are application/problem+json bodies with the same four fields. code names the error, and type links to its page under Errors:
{
"type": "https://docs.vturb.com/errors/not_found",
"code": "not_found",
"message": "Resource not found.",
"request_id": "0b5e7a1c-9f3d-4c2b-8e1a-7d6c5b4a3f21"
}Lists
List endpoints take the cursor and per_page query parameters for cursor pagination.
Updating a video
PATCH /v1/videos/{id} is a merge-patch: send only what you want to change, and everything else keeps its stored value. How merge-patch works covers the rules, and each feature has its own guide.
Returns the live API quota usage for the authenticated company GET
Returns the current usage and limits of the company's quota — one entry per quota window, such as per minute or per day. Every API key of the company shares this quota. Use this endpoint to self-rate-limit before issuing expensive analytics requests. Notes: - When a metric has no cap, the response returns `limit: null` and `remaining: null` so you don't divide by zero. - When the company has no quota, `quotas` is an empty list. - A single API request may count as more than one query against `max_queries_per_minute`, so the `queries` counter can climb faster than your request rate. The response includes `queries.note` to flag this when a hard limit applies. `read_bytes` reflects the actual data scanned and is the more reliable signal for sizing usage. - This endpoint itself counts as 1 query against `max_queries_per_minute`.
How merge-patch works
The one rule behind every video update: send only what you want to change.