Home > Blog > How to Download TikTok Videos Without Watermark
Downloads

How to Download TikTok Videos Without Watermark Using an API

By PrimeApi·June 13, 2026·5 min read·Updated August 14, 2026

TikTok stamps a moving watermark and the creator's handle onto downloads from the app. For many legitimate workflows - archiving content you own, repurposing licensed clips, running computer-vision analysis, or building an internal media library, to name a few TikTok API use cases - that overlay gets in the way. This guide shows how to retrieve a clean, watermark-free version of a video through the PrimeApi download-video endpoint, where the legal lines sit, and how to handle the URL the API returns, with copy-paste code in curl, Node.js and Python.

Why download without a watermark?

A clean file matters whenever the watermark would interfere with the end use. Video editors compositing licensed footage do not want a bouncing logo in frame; machine-learning pipelines get cleaner training data without overlay artifacts; brands archiving their own posts want the original asset, not a re-encoded, stamped copy. The watermark is also re-encoded on top of the video, so a source-quality, unstamped file is simply higher fidelity.

If you are archiving a whole account rather than one clip, resolve the creator first: fetching TikTok user data via API returns the secUid you need to list that profile's posts, and you then feed each post URL into the download endpoint below.

A note on legality and fair use

Removing a watermark does not transfer any rights. Copyright in a TikTok video belongs to its creator, and TikTok's Terms of Service govern how content may be accessed and used. Downloading a clean file is appropriate for content you own, content you have licensed, or uses that genuinely qualify as fair dealing/fair use in your jurisdiction - the US Copyright Office overview of fair use is a reasonable starting point if you are in the United States, but the test differs country by country and it is your responsibility to confirm it. PrimeApi is an independent, unofficial service that is not affiliated with or endorsed by TikTok or ByteDance, and it is no part of TikTok's official developer platform; it provides the technical means, not legal clearance. When in doubt, get permission from the creator.

The download-video endpoint

The endpoint is download-video and it takes a single required parameter, url, which is the full, URL-encoded TikTok video link. The base URL is https://api.primeapi.co/ and your key travels in the X-PrimeAPI-Key header, exactly as described in the PrimeApi API documentation. The endpoint does not stream the binary back to you - instead it returns JSON containing direct media URLs (typically a no-watermark variant plus the original), which you then fetch yourself. That two-step design keeps the API response small and lets you stream or save the file however you like.

curl

curl -s "https://api.primeapi.co/download-video?url=https%3A%2F%2Fwww.tiktok.com%2F%40taylorswift%2Fvideo%2F7288965373704064286" \
  -H "X-PrimeAPI-Key: YOUR_API_KEY"

Node.js (Axios)

const axios = require("axios");
const fs = require("fs");

async function downloadVideo(tiktokUrl, outFile) {
  // 1) Ask PrimeApi for the direct, watermark-free media URL
  const meta = await axios.get("https://api.primeapi.co/download-video", {
    params: { url: tiktokUrl },
    headers: { "X-PrimeAPI-Key": "YOUR_API_KEY" }
  });
  console.log("Remaining credits:", meta.headers["x-primeapi-balance"]);

  // Field names mirror TikTok's structure; pick the no-watermark URL.
  const data = meta.data;
  const videoUrl =
    data.play || data.nwm_video_url || (data.video && data.video.playAddr);
  if (!videoUrl) throw new Error("No downloadable URL in response");

  // 2) Fetch the actual file and stream it to disk
  const file = await axios.get(videoUrl, { responseType: "stream" });
  await new Promise((resolve, reject) => {
    const w = fs.createWriteStream(outFile);
    file.data.pipe(w);
    w.on("finish", resolve);
    w.on("error", reject);
  });
  console.log("Saved to", outFile);
}

downloadVideo(
  "https://www.tiktok.com/@taylorswift/video/7288965373704064286",
  "clip.mp4"
).catch(e => console.error(e.response ? e.response.data : e.message));

Python (Requests)

import requests

API_KEY = "YOUR_API_KEY"

def download_video(tiktok_url, out_file):
    # 1) Resolve the direct media URL
    meta = requests.get(
        "https://api.primeapi.co/download-video",
        params={"url": tiktok_url},
        headers={"X-PrimeAPI-Key": API_KEY},
        timeout=20,
    )
    print("Remaining credits:", meta.headers.get("X-PrimeAPI-Balance"))
    meta.raise_for_status()
    data = meta.json()

    video_url = data.get("play") or data.get("nwm_video_url")
    if not video_url:
        raise RuntimeError("No downloadable URL in response")

    # 2) Stream the file to disk
    with requests.get(video_url, stream=True, timeout=60) as r:
        r.raise_for_status()
        with open(out_file, "wb") as f:
            for chunk in r.iter_content(chunk_size=8192):
                f.write(chunk)
    print("Saved to", out_file)

if __name__ == "__main__":
    download_video(
        "https://www.tiktok.com/@taylorswift/video/7288965373704064286",
        "clip.mp4",
    )

Handling the returned video URL

Two things matter when you consume the URL the API hands back. First, the field names mirror TikTok's own JSON, so check the response shape and select the no-watermark variant rather than assuming a single fixed key. Second, these direct URLs are time-limited - they are signed and expire. Treat them as short-lived: download or proxy the file immediately rather than storing the link in a database for later. If you need to serve the video to your own users, fetch it server-side and re-host it on your storage, which also insulates you from URL expiry and hotlink protection.

Credits and limits

One download-video call costs 1 credit, like every PrimeApi endpoint, and the remaining balance comes back in the X-PrimeAPI-Balance header (the samples print it). Note that the second step - actually downloading the media file from the returned URL - is a direct fetch from the CDN and does not consume PrimeApi credits. The default rate limit is 100 requests per minute on the API call itself. Bundle sizes and per-call costs are listed on the PrimeApi pricing page, and if you are still comparing vendors our buyer's guide to choosing a TikTok API explains how to normalise those numbers.

Need the audio too?

If you also want the sound, use the companion download-music endpoint with the same video URL, or read the music fields embedded in post-detail. That keeps your video and audio pipelines independent while reusing the same authentication and credit model.

Frequently asked questions

Is downloading TikTok videos without a watermark legal?

Removing a watermark does not grant you rights to the content. Copyright stays with the original creator, and you must respect TikTok's Terms of Service plus any applicable law. Use the endpoint for permitted purposes such as content you own or have a license for.

Does the download-video endpoint return a file or a URL?

It returns JSON containing direct media URLs. You then fetch that URL yourself to stream or save the file - the endpoint does not push the binary back through the API response.

How long does the returned video URL stay valid?

The direct URLs are time-limited and can expire. Treat them as short-lived: download or proxy the file soon after the response rather than storing the URL for later use.

How many credits does a video download cost?

One request to download-video costs 1 credit, the same as every other PrimeApi endpoint. Your remaining balance is returned in the X-PrimeAPI-Balance header.

Can I also get the audio or music track?

Yes. Use the separate download-music endpoint with the same video URL to retrieve the sound, or read the music fields included in post-detail.

Is PrimeApi affiliated with TikTok?

No. PrimeApi is an independent, unofficial service and is not affiliated with or endorsed by TikTok or ByteDance.

Start building with the PrimeApi TikTok API
50 free credits when you sign up. No card required - you only pay when you need more.

← Back to the PrimeApi Blog