Tikfly API
Unofficial TikTok API Wrapped in Python
Available on PyPi
Installation
pip install tikfly
Usage
Get TikTok User Info
import asyncio
from tikfly import TikflyApi
API_KEY = 'YOUR_API_KEY' # How to get your api key -> https://docs.tikfly.io/getting-started/quickstart
USERNAME = 'taylorswift' # Change to the user you want to get data from
async def get_tiktok_user_info():
tikfly = TikflyApi(x_rapidapi_key=API_KEY)
res_user_info = await tikfly.get_user_info(unique_id=USERNAME)
print(res_user_info.userInfo)
asyncio.run(get_tiktok_user_info())
Get Tiktok User Videos
import asyncio
from tikfly import TikflyApi
from tikfly.schemas.UserPostSchema import VideoItem
API_KEY = 'YOUR_API_KEY' # How to get your api key -> https://docs.tikfly.io/getting-started/quickstart
USERNAME = 'taylorswift' # Change to the user you want to get data from
NUM = 50 # Max number of videos to fetch
async def get_tiktok_user_videos():
tikfly = TikflyApi(x_rapidapi_key=API_KEY)
print(f'Fetching {NUM} videos of user: {USERNAME}')
res_user_info = await tikfly.get_user_info(USERNAME)
user_sec_uid = res_user_info.userInfo.user.secUid
print('User secUid:', user_sec_uid)
results: list[VideoItem] = []
cursor = 0
count = 15
has_more = True
while has_more and len(results) < NUM:
print(f'Current cursor: {cursor}')
res_user_posts = await tikfly.get_user_posts(
user_sec_uid,
count=count,
cursor=cursor
)
itemList = getattr(res_user_posts, 'itemList', [])
if not itemList:
break
results.extend(itemList)
remaining = NUM - len(results)
results.extend(itemList[:remaining])
has_more = res_user_posts.hasMore
cursor = res_user_posts.cursor
for video in results:
print(f'- {video.id}: {video.desc}')
asyncio.run(get_tiktok_user_videos())
Download Tiktok Videos (Without Watermark)
import ssl
import asyncio
import certifi
import aiohttp
from tikfly import TikflyApi
API_KEY = 'YOUR_API_KEY' # How to get your api key -> https://docs.tikfly.io/getting-started/quickstart
VIDEO_URLS = [
'https://www.tiktok.com/@taylorswift/video/7558098574555254046'
]
async def download_video(url: str, save_path: str):
CHUNK_SIZE = 1024 * 1024
ssl_context = ssl.create_default_context(cafile=certifi.where())
async with aiohttp.ClientSession() as session:
async with session.get(url, ssl=ssl_context) as resp:
resp.raise_for_status()
with open(save_path, 'wb') as f:
async for chunk in resp.content.iter_chunked(CHUNK_SIZE):
f.write(chunk)
print(f'Saved video to: {save_path}')
async def download_tiktok_videos():
tikfly = TikflyApi(x_rapidapi_key=API_KEY)
for url in VIDEO_URLS:
res = await tikfly.download_video(url)
download_url = res.play
print(f'Download URL: {download_url}')
if download_url:
video_id = url.rstrip('/').split('/')[-1]
await download_video(download_url, f'{video_id}.mp4')
asyncio.run(download_tiktok_videos())
Examples
Go to the /tests and /examples folder to view more snippet code and example data.
Tutorials
- Tikfly API Documentation
- How to get Rapid API Key
- Working with Cursor in TikTok API for Pagination
- What is Tiktok User secUid?
- How TikTok Classifies a Video?
Contributing
Contributions are welcome! If you find this project helpful, please consider starring the repository on GitHub ⭐️
License
This project is licensed under the MIT License. See the LICENSE file for more details.
Disclaimer
This project is an independent, open-source tool and is not affiliated, endorsed, or sponsored by TikTok.
Metadata
Release files for tikfly 1.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tikfly-1.1.2.tar.gz | 16.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tikfly-1.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.9 kB
Release files / tikfly-1.1.2.tar.gz
| Download URL | tikfly-1.1.2.tar.gz |
|---|---|
| Size | 16.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8182c83770882a5e6ed9e0d04849a647960550c7cdc5b639b5dfb769d2ec2611
|
|
BLAKE2b-256 checksum How to use checksums |
7f1fc391f3430eea2139f8f2de65c82dd2410f257fe8a84f283ccd37cf4941b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 3, 2026.
Transparency logRelease files / tikfly-1.1.2-py3-none-any.whl
| Download URL | tikfly-1.1.2-py3-none-any.whl |
|---|---|
| Size | 24.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
666b0aed4d1807e01e36d84766b8d988f3d3b1f23c5664c8438038ab5c673908
|
|
BLAKE2b-256 checksum How to use checksums |
931e52dce8ac1c230b29ceb650e42b30e7b33141044dd63f038a76cb9b6c7af3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 3, 2026.
Transparency log