---
title: "Download a TikTok video"
method: GET
path: "/v1/tools/tiktok/download"
tags: ["Tools"]
---

# Download a TikTok video

`GET /v1/tools/tiktok/download`

Get a download URL or list available formats for a TikTok video. Requires Tools API access and uses the Tools API rate limit. Provider gateway failures and provider-side access blocks return 503; an unavailable video returns 404.

## Query parameters

- `url` string, required
- `action` 'download' | 'formats'
- `formatId` string

## Response `200`

Download URL or available formats.

- object
  - `success` boolean, required
  - `title` string, required
  - `format` string — Selected format label for action=download.
  - `downloadUrl` string — Media download URL for action=download.
  - `duration` number — Duration in seconds for action=formats.
  - `cover` string — Thumbnail URL for action=formats.
  - `formats` object[] — Available formats for action=formats.
    - `id` string
    - `label` string
    - `ext` string
    - `type` string
    - `height` number
    - `width` number
    - `fps` number
    - `hasAudio` boolean
    - `hasVideo` boolean

## Other responses

- `400` — Missing or invalid url, action, or formatId.
- `401` — Unauthorized
- `403` — Tools API access is required.
- `404` — The video or a downloadable format was not found.
- `429` — The connected account's upstream platform quota is exhausted. Reddit rate-limits per connected Reddit user (1000 requests per 10-minute window), and that budget is shared by every operation using that account. Retry after the window resets rather than retrying immediately; repeated calls while exhausted do not succeed and keep the budget spent. Google Ads: writes and reports run on one developer token shared by every Google Ads account on Zernio. The token holds Standard access (no daily operations cap), so this only happens when Google throttles the token or your ad account. The envelope has `code: rate_limited`, `platform: google`, `details.quotaScope: DEVELOPER` (`ACCOUNT` when it is your own ad account's quota), `details.resetsAt` (ISO instant when Google accepts requests again) and `Retry-After` counting down to it. Retrying earlier cannot succeed.
- `502` — The platform returned a server error.
- `503` — An upstream service or database is temporarily unavailable. Retry after the indicated delay. A timed-out write may have completed upstream; check its outcome before resubmitting.

## Changes

- **2026-09-16** `3e6ddf2a99ea` — 3 info
  - added the optional property `details/budgetScope` to the response with the `429` status
  - added the optional property `details/budgetScope` to the response with the `502` status
  - added the optional property `details/budgetScope` to the response with the `503` status
- **2026-09-15** `0dba7d004d75` — 6 info
  - added the optional property `details/quotaExhausted` to the response with the `429` status
  - added the optional property `details/quotaExhausted` to the response with the `502` status
  - added the optional property `details/quotaExhausted` to the response with the `503` status
  - added the optional property `details/quotaScope` to the response with the `429` status
  - …2 more
- **2026-09-10** `e70ed06e7150` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/tools/tiktok/download/get.md)

---

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