# TikTok API
> 20 endpoints for live TikTok public data — user profiles, posts, search, hashtags, media + URL helpers.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/tiktok-api/..."
```

## Pricing
- **Free** (Free) — 300 calls/Mo, 1 req/s
- **Basic** ($27/Mo) — 12,000 calls/Mo, 5 req/s
- **Pro** ($74/Mo) — 55,000 calls/Mo, 15 req/s
- **Mega** ($189/Mo) — 220,000 calls/Mo, 40 req/s

## Endpoints

### Users

#### `GET /v1/users/detail` — User detail

Vollständiges Profil per Username. Query: username.

**Parameters:**
- `username` (query, required, string) — TikTok username (without @) Example: `jlo`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/detail?username=jlo"
```

**Response:**
```json
{
    "data": {
        "id": "6611099612067856390",
        "link": "https://www.tiktok.com/@jlo",
        "stats": {
            "likes": 85480540,
            "videos": 422,
            "followers": 17854695,
            "following": 304
        },
        "avatar": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/7a9a3eb7d876704105c12a61757b1ebd~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=10399&refresh_token=b16426af&x-expires=1778072400&x-signature=d8dE%2BhXQZNkv%2Fm5%2BzNGaztFAGQQ%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=no1a",
        "region": null,
        "sec_uid": "MS4wLjABAAAA2EvW1E1RwMcww5EY5bG0z2TeJ3dusTXaAKNJBQatp8IGSbOvWYWRm6TIIZ46Q40v",
        "language": "en",
        "nickname": "JLO",
        "username": "jlo",
        "verified": true,
        "signature": "The #1 Single SAVE ME TONIGHT with David Guetta OUT NOW 💫 OFFICE ROMANCE coming to Netflix June 5",
        "private_account": false
    },
    "meta": {
        "timestamp": "2026-05-04T13:59:45.629Z",
        "request_id": "efc3adf7-6b6b-441e-87aa-3418299194d4"
    },
    "status": "ok",
    "message": "User detail retrieved successfully",
    "success": true
}
```

#### `GET /v1/users/info-with-region` — User info with region

Profil + Region/Sprache. Query: username.

**Parameters:**
- `username` (query, required, string) — TikTok username Example: `jlo`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/info-with-region?username=jlo"
```

**Response:**
```json
{
    "data": {
        "id": "6611099612067856390",
        "region": null,
        "sec_uid": "MS4wLjABAAAA2EvW1E1RwMcww5EY5bG0z2TeJ3dusTXaAKNJBQatp8IGSbOvWYWRm6TIIZ46Q40v",
        "language": "en",
        "username": "jlo"
    },
    "meta": {
        "timestamp": "2026-05-04T13:59:46.159Z",
        "request_id": "2ef1ad50-7d84-4a39-a2a6-ac48cbc89fdd"
    },
    "status": "ok",
    "message": "User region retrieved successfully",
    "success": true
}
```

#### `GET /v1/users/id` — User ID

Numerische User-ID + sec_uid. Query: username.

**Parameters:**
- `username` (query, required, string) — TikTok username Example: `jlo`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/id?username=jlo"
```

**Response:**
```json
{
    "data": {
        "id": "6611099612067856390",
        "sec_uid": "MS4wLjABAAAA2EvW1E1RwMcww5EY5bG0z2TeJ3dusTXaAKNJBQatp8IGSbOvWYWRm6TIIZ46Q40v",
        "username": "jlo"
    },
    "meta": {
        "timestamp": "2026-05-04T13:59:46.528Z",
        "request_id": "5cd39af3-f18b-44f6-8f40-2a1084786297"
    },
    "status": "ok",
    "message": "User ID retrieved successfully",
    "success": true
}
```

#### `GET /v1/users/stats` — User stats

Followers, Following, Likes, Posts. Query: username.

**Parameters:**
- `username` (query, required, string) — TikTok username Example: `jlo`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/stats?username=jlo"
```

**Response:**
```json
{
    "data": {
        "id": "6611099612067856390",
        "stats": {
            "likes": 85480540,
            "videos": 422,
            "followers": 17854695,
            "following": 304
        },
        "sec_uid": "MS4wLjABAAAA2EvW1E1RwMcww5EY5bG0z2TeJ3dusTXaAKNJBQatp8IGSbOvWYWRm6TIIZ46Q40v",
        "username": "jlo"
    },
    "meta": {
        "timestamp": "2026-05-04T13:59:46.974Z",
        "request_id": "96e50423-b4f1-4e9c-8724-a1f1aef71538"
    },
    "status": "ok",
    "message": "User stats retrieved successfully",
    "success": true
}
```

#### `GET /v1/users/embed` — User embed

Embed-Daten für ein TikTok-Profil. Query: username.

**Parameters:**
- `username` (query, required, string) — TikTok username Example: `jlo`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/embed?username=jlo"
```

**Response:**
```json
{
    "data": {
        "html": "<blockquote class=\"tiktok-embed\" cite=\"https://www.tiktok.com/@jlo\" data-unique-id=\"jlo\" data-embed-from=\"oembed\" data-embed-type=\"creator\" style=\"max-width:780px; min-width:288px;\"> <section> <a target=\"_blank\" href=\"https://www.tiktok.com/@jlo?refer=creator_embed\">@jlo</a> </section> </blockquote> <script async src=\"https://www.tiktok.com/embed.js\"></script>",
        "type": "rich",
        "title": "JLO's Creator Profile",
        "width": "100%",
        "height": "100%",
        "version": "1.0",
        "username": "jlo",
        "video_id": null,
        "author_url": "https://www.tiktok.com/@jlo",
        "source_url": "https://www.tiktok.com/@jlo",
        "author_name": "JLO",
        "provider_url": "https://www.tiktok.com",
        "provider_name": "TikTok",
        "thumbnail_url": null,
        "thumbnail_width": null,
        "thumbnail_height": null
    },
    "meta": {
        "timestamp": "2026-05-04T13:59:47.232Z",
        "request_id": "d0fe2c12-24d8-4d7c-91f9-5c1c72e431ca"
    },
    "status": "ok",
    "message": "User embed retrieved successfully",
    "success": true
}
```

#### `GET /v1/users/profile` — User profile

Full TikTok user profile by username or numeric user id. Returns avatar, bio, follower / following counts and verified flag.

**Parameters:**
- `username` (query, optional, string) — TikTok username (without @). Alternative to id_or_username. Example: `jlo`
- `id_or_username` (query, optional, string) — Numeric user id or username. One of username / id_or_username is required. Example: `jlo`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/profile?username=jlo&id_or_username=jlo"
```

**Response:**
```json
{
    "data": {
        "id": "6611099612067856390",
        "link": "https://www.tiktok.com/@jlo",
        "stats": {
            "likes": 85661282,
            "videos": 426,
            "followers": 17855147,
            "following": 309
        },
        "avatar": "https://p19-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/d4a90dd0556e3bbbd2e82c8ab8d0de70~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=10399&refresh_token=c01126c1&x-expires=1779555600&x-signature=vPxB%2FuC8pe9RUQUIcnhXUcMGIFg%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=no1a",
        "region": null,
        "sec_uid": "MS4wLjABAAAA2EvW1E1RwMcww5EY5bG0z2TeJ3dusTXaAKNJBQatp8IGSbOvWYWRm6TIIZ46Q40v",
        "language": "en",
        "nickname": "JLO",
        "username": "jlo",
        "verified": true,
        "signature": "The #1 Single SAVE ME TONIGHT with David Guetta OUT NOW 💫 OFFICE ROMANCE coming to Netflix June 5",
        "private_account": false
    },
    "meta": {
        "timestamp": "2026-05-21T17:51:09.136Z",
        "request_id": "e72d3413-f435-4b7e-a3a7-d9952ed6abff"
    },
    "status": "ok",
    "message": "User profile retrieved successfully",
    "success": true
}
```

#### `GET /v1/users/search` — User search

Search TikTok users by free-text query. Returns ranked user matches with username, display name, follower count.

**Parameters:**
- `q` (query, required, string) — Free-text search query. Example: `chef`
- `count` (query, optional, integer) — Max results (default 20, capped at 50). Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/search?q=chef&count=20"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "query": "chef",
        "users": [
            {
                "username": "chefchrischo",
                "profile_url": "https://www.tiktok.com/@chefchrischo"
            },
            {
                "username": "chefreactions",
                "profile_url": "https://www.tiktok.com/@chefreactions"
            },
            {
                "username": "chefbae",
                "profile_url": "https://www.tiktok.com/@chefbae"
            },
            {
                "username": "chefthomson",
                "profile_url": "https://www.tiktok.com/@chefthomson"
            },
            {
                "username": "chefaaronsanchez",
                "profile_url": "https://www.tiktok.com/@chefaaronsanchez"
            },
            {
                "username": "chef__tyler",
                "profile_url": "https://www.tiktok.com/@chef__tyler"
            },
            {
                "username": "chefklosangeles",
                "profile_url": "https://www.tiktok.com/@chefklosangeles"
            },
            {
                "username": "chef.michael",
                "profile_url": "https://www.tiktok.com/@chef.michael"
            },
            {
                "username": "daronthechef",
                "profile_url": "https://www.tiktok.com/@daronthechef"
            },
            {
                "username": "thestayathomechef",
                "profile_url": "https://www.tiktok.com/@thestayatho
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/users/insights` — User insights

Engagement insights for a TikTok user — average likes per post, engagement rate, post frequency, audience growth.

**Parameters:**
- `username` (query, optional, string) — TikTok username. Alternative to id_or_username. Example: `jlo`
- `id_or_username` (query, optional, string) — Numeric user id or username. One of username / id_or_username is required. Example: `jlo`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/insights?username=jlo&id_or_username=jlo"
```

**Response:**
```json
{
    "data": {
        "id": "6611099612067856390",
        "stats": {
            "likes": 85661283,
            "videos": 426,
            "followers": 17855147,
            "following": 309
        },
        "region": null,
        "sec_uid": "MS4wLjABAAAA2EvW1E1RwMcww5EY5bG0z2TeJ3dusTXaAKNJBQatp8IGSbOvWYWRm6TIIZ46Q40v",
        "language": "en",
        "username": "jlo",
        "verified": true,
        "private_account": false
    },
    "meta": {
        "timestamp": "2026-05-21T17:51:10.960Z",
        "request_id": "d8ec90fc-3d56-48b0-93c1-11a94793f075"
    },
    "status": "ok",
    "message": "User insights retrieved successfully",
    "success": true
}
```

#### `GET /v1/users/web-profile-info` — User web profile info

Web-style profile payload mirroring the TikTok profile page — same shape as the data the website renders.

**Parameters:**
- `username` (query, optional, string) — TikTok username. Alternative to id_or_username. Example: `jlo`
- `id_or_username` (query, optional, string) — Numeric user id or username. One of username / id_or_username is required. Example: `jlo`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/users/web-profile-info?username=jlo&id_or_username=jlo"
```

**Response:**
```json
{
    "data": {
        "needFix": false,
        "userInfo": {
            "user": {
                "id": "6611099612067856390",
                "ftc": false,
                "roomId": "",
                "secUid": "MS4wLjABAAAA2EvW1E1RwMcww5EY5bG0z2TeJ3dusTXaAKNJBQatp8IGSbOvWYWRm6TIIZ46Q40v",
                "secret": false,
                "bioLink": {
                    "link": "https://JenniferLopez.lnk.to/jlo25",
                    "risk": 3
                },
                "shortId": "",
                "language": "en",
                "nickname": "JLO",
                "relation": 0,
                "ttSeller": false,
                "uniqueId": "jlo",
                "verified": true,
                "eventList": [],
                "signature": "The #1 Single SAVE ME TONIGHT with David Guetta OUT NOW 💫 OFFICE ROMANCE coming to Netflix June 5",
                "createTime": 1548716114,
                "profileTab": {
                    "showMusicTab": true,
                    "showPlayListTab": true,
                    "showQuestionTab": true
                },
                "avatarThumb": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/d4a90dd0556e3bbbd2e82c8ab8d0de70~tplv-tiktokx-cropcenter:100:100.jpeg?dr=10399&refresh_token=45f17fc2&x-expires=1779555600&x-signature=%2FHPe51x4iT89KO%2BLych1xgwyu0Q%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=no1a",
                "duetSetting": 0,
                "isADVirtual": false,
     
…(truncated, see openapi.json for full schema)
```

### Posts

#### `GET /v1/posts/detail` — Post detail

Detail-Daten zu einem Video. Query: url.

**Parameters:**
- `url` (query, required, string) — TikTok video URL Example: `https://www.tiktok.com/@scout2015/video/6718335390845095173`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/posts/detail?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173"
```

**Response:**
```json
{
    "data": {
        "html": "<blockquote class=\"tiktok-embed\" cite=\"https://www.tiktok.com/@scout2015/video/6718335390845095173\" data-video-id=\"6718335390845095173\" data-embed-from=\"oembed\" style=\"max-width:605px; min-width:325px;\"> <section> <a target=\"_blank\" title=\"@scout2015\" href=\"https://www.tiktok.com/@scout2015?refer=embed\">@scout2015</a> <p>Scramble up ur name & I’ll try to guess it😍❤️ <a title=\"foryoupage\" target=\"_blank\" href=\"https://www.tiktok.com/tag/foryoupage?refer=embed\">#foryoupage</a> <a title=\"petsoftiktok\" target=\"_blank\" href=\"https://www.tiktok.com/tag/petsoftiktok?refer=embed\">#petsoftiktok</a> <a title=\"aesthetic\" target=\"_blank\" href=\"https://www.tiktok.com/tag/aesthetic?refer=embed\">#aesthetic</a></p> <a target=\"_blank\" title=\"♬ original sound - tiff\" href=\"https://www.tiktok.com/music/original-sound-6689804660171082501?refer=embed\">♬ original sound - tiff</a> </section> </blockquote> <script async src=\"https://www.tiktok.com/embed.js\"></script>",
        "type": "video",
        "title": "Scramble up ur name & I’ll try to guess it😍❤️ #foryoupage #petsoftiktok #aesthetic",
        "width": "100%",
        "height": "100%",
        "version": "1.0",
        "username": "scout2015",
        "video_id": "6718335390845095173",
        "author_url": "https://www.tiktok.com/@scout2015",
        "source_url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "author_na
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/posts/select` — Post select

Resolve a TikTok post by either video URL or username + numeric id. Pass the url query param OR both username and id. Returns the same post payload as posts/detail.

**Parameters:**
- `url` (query, optional, string) — TikTok video URL (alternative to username+id) Example: `https://www.tiktok.com/@scout2015/video/6718335390845095173`
- `username` (query, optional, string) — TikTok username, used together with id Example: `scout2015`
- `id` (query, optional, string) — TikTok video numeric id, used together with username Example: `6718335390845095173`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/posts/select?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173&username=scout2015&id=6718335390845095173"
```

**Response:**
```json
{
    "data": {
        "id": "6718335390845095173",
        "title": "Scramble up ur name & I’ll try to guess it😍❤️ #foryoupage #petsoftiktok #aesthetic",
        "width": "100%",
        "height": "100%",
        "post_url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "username": "scout2015",
        "video_id": "6718335390845095173",
        "author_url": "https://www.tiktok.com/@scout2015",
        "embed_html": "<blockquote class=\"tiktok-embed\" cite=\"https://www.tiktok.com/@scout2015/video/6718335390845095173\" data-video-id=\"6718335390845095173\" data-embed-from=\"oembed\" style=\"max-width:605px; min-width:325px;\"> <section> <a target=\"_blank\" title=\"@scout2015\" href=\"https://www.tiktok.com/@scout2015?refer=embed\">@scout2015</a> <p>Scramble up ur name & I’ll try to guess it😍❤️ <a title=\"foryoupage\" target=\"_blank\" href=\"https://www.tiktok.com/tag/foryoupage?refer=embed\">#foryoupage</a> <a title=\"petsoftiktok\" target=\"_blank\" href=\"https://www.tiktok.com/tag/petsoftiktok?refer=embed\">#petsoftiktok</a> <a title=\"aesthetic\" target=\"_blank\" href=\"https://www.tiktok.com/tag/aesthetic?refer=embed\">#aesthetic</a></p> <a target=\"_blank\" title=\"♬ original sound - tiff\" href=\"https://www.tiktok.com/music/original-sound-6689804660171082501?refer=embed\">♬ original sound - tiff</a> </section> </blockquote> <script async src=\"https://www.tiktok.com/embed.js\"></script>",
        "author_name": "Scou
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/posts/info` — Post info

Extended post payload — captions, stats, music, hashtags, mentions. Pass either url or username + id.

**Parameters:**
- `url` (query, optional, string) — TikTok video URL (alternative to username + id). Example: `https://www.tiktok.com/@scout2015/video/6718335390845095173`
- `username` (query, optional, string) — TikTok username, used together with id. Example: `scout2015`
- `id` (query, optional, string) — TikTok video numeric id, used together with username. Example: `6718335390845095173`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/posts/info?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173&username=scout2015&id=6718335390845095173"
```

**Response:**
```json
{
    "data": {
        "id": "6718335390845095173",
        "title": "Scramble up ur name & I’ll try to guess it😍❤️ #foryoupage #petsoftiktok #aesthetic",
        "width": "100%",
        "height": "100%",
        "post_url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "username": "scout2015",
        "video_id": "6718335390845095173",
        "author_url": "https://www.tiktok.com/@scout2015",
        "embed_html": "<blockquote class=\"tiktok-embed\" cite=\"https://www.tiktok.com/@scout2015/video/6718335390845095173\" data-video-id=\"6718335390845095173\" data-embed-from=\"oembed\" style=\"max-width:605px; min-width:325px;\"> <section> <a target=\"_blank\" title=\"@scout2015\" href=\"https://www.tiktok.com/@scout2015?refer=embed\">@scout2015</a> <p>Scramble up ur name & I’ll try to guess it😍❤️ <a title=\"foryoupage\" target=\"_blank\" href=\"https://www.tiktok.com/tag/foryoupage?refer=embed\">#foryoupage</a> <a title=\"petsoftiktok\" target=\"_blank\" href=\"https://www.tiktok.com/tag/petsoftiktok?refer=embed\">#petsoftiktok</a> <a title=\"aesthetic\" target=\"_blank\" href=\"https://www.tiktok.com/tag/aesthetic?refer=embed\">#aesthetic</a></p> <a target=\"_blank\" title=\"♬ original sound - tiff\" href=\"https://www.tiktok.com/music/original-sound-6689804660171082501?refer=embed\">♬ original sound - tiff</a> </section> </blockquote> <script async src=\"https://www.tiktok.com/embed.js\"></script>",
        "author_name": "Scou
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/posts/search` — Post search

Search TikTok posts by free-text query. Returns ranked video matches with captions, stats and author.

**Parameters:**
- `q` (query, required, string) — Free-text search query. Example: `recipe`
- `count` (query, optional, integer) — Max results (default 20, capped at 50). Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/posts/search?q=recipe&count=20"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "posts": [
            {
                "id": "7214783393450429697",
                "post_url": "https://www.tiktok.com/@frommylittlekitchen/video/7214783393450429697",
                "username": "frommylittlekitchen",
                "video_id": "7214783393450429697"
            },
            {
                "id": "7480598109484010794",
                "post_url": "https://www.tiktok.com/@ddlovato/video/7480598109484010794",
                "username": "ddlovato",
                "video_id": "7480598109484010794"
            },
            {
                "id": "7463489217960643882",
                "post_url": "https://www.tiktok.com/@geoffreyzakarian/video/7463489217960643882",
                "username": "geoffreyzakarian",
                "video_id": "7463489217960643882"
            },
            {
                "id": "7122225011259133227",
                "post_url": "https://www.tiktok.com/@mealsandmunchies/video/7122225011259133227",
                "username": "mealsandmunchies",
                "video_id": "7122225011259133227"
            },
            {
                "id": "7446885506299776264",
                "post_url": "https://www.tiktok.com/@recime.app/video/7446885506299776264",
                "username": "recime.app",
                "video_id": "7446885506299776264"
            },
            {
                "id": "7489147525967007007",
                "post_url": "https://www.tiktok.com/@tikt
…(truncated, see openapi.json for full schema)
```

### Hashtags

#### `GET /v1/hashtags/search` — Hashtag search

Search TikTok hashtags by free-text query. Returns trending hashtags with view counts.

**Parameters:**
- `q` (query, required, string) — Free-text hashtag search query. Example: `summer`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/hashtags/search?q=summer"
```

**Response:**
```json
{
    "data": {
        "count": 12,
        "query": "summer",
        "source": "brave_tiktok_search",
        "hashtags": [
            {
                "link": "https://www.tiktok.com/tag/summer",
                "name": "summer",
                "hashtag": "#summer"
            },
            {
                "link": "https://www.tiktok.com/tag/summer%F0%9F%A4%8D",
                "name": "summer🤍",
                "hashtag": "#summer🤍"
            },
            {
                "link": "https://www.tiktok.com/tag/summertime%E2%98%80%EF%B8%8F",
                "name": "summertime☀️",
                "hashtag": "#summertime☀️"
            },
            {
                "link": "https://www.tiktok.com/tag/summertime%F0%9F%A4%97",
                "name": "summertime🤗",
                "hashtag": "#summertime🤗"
            },
            {
                "link": "https://www.tiktok.com/tag/summertime%F0%9F%8C%8A%F0%9F%8C%B4",
                "name": "summertime🌊🌴",
                "hashtag": "#summertime🌊🌴"
            },
            {
                "link": "https://www.tiktok.com/tag/summertime%F0%9F%98%94%F0%9F%98%94",
                "name": "summertime😔😔",
                "hashtag": "#summertime😔😔"
            },
            {
                "link": "https://www.tiktok.com/tag/summer%F0%9F%92%99%F0%9F%8F%8A%E2%80%8D%E2%99%80%EF%B8%8F%F0%9F%8F%9D",
                "name": "summer💙🏊‍♀️🏝",
                
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/hashtags/media` — Hashtag media

Latest posts tagged with a specific hashtag — captions, stats, author info.

**Parameters:**
- `hashtag` (query, required, string) — Hashtag (without #). Example: `recipe`
- `count` (query, optional, integer) — Max results (default 20, capped at 50). Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/hashtags/media?hashtag=recipe&count=20"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "media": [
            {
                "id": "7195321149796928811",
                "post_url": "https://www.tiktok.com/@setupspawn/video/7195321149796928811",
                "username": "setupspawn",
                "video_id": "7195321149796928811",
                "matched_hashtag": "#recipe"
            },
            {
                "id": "7419353376749604139",
                "post_url": "https://www.tiktok.com/@foodinwindow/video/7419353376749604139",
                "username": "foodinwindow",
                "video_id": "7419353376749604139",
                "matched_hashtag": "#recipe"
            },
            {
                "id": "7490466504538852610",
                "post_url": "https://www.tiktok.com/@recipe.hub1/video/7490466504538852610",
                "username": "recipe.hub1",
                "video_id": "7490466504538852610",
                "matched_hashtag": "#recipe"
            },
            {
                "id": "7390874644900810014",
                "post_url": "https://www.tiktok.com/@thatrecipe.us/video/7390874644900810014",
                "username": "thatrecipe.us",
                "video_id": "7390874644900810014",
                "matched_hashtag": "#recipe"
            },
            {
                "id": "7300296189713403169",
                "post_url": "https://www.tiktok.com/@recettesdefamilles/video/7300296189713403169",
                "username": "recettesdefamilles",
       
…(truncated, see openapi.json for full schema)
```

### Search

#### `GET /v1/search/global` — Global search

Combined search across users, posts and hashtags — single query, multi-type results.

**Parameters:**
- `q` (query, required, string) — Free-text search query. Example: `chef`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/search/global?q=chef"
```

**Response:**
```json
{
    "data": {
        "posts": [
            {
                "id": "7477964535081487621",
                "post_url": "https://www.tiktok.com/@chefreactions/video/7477964535081487621",
                "username": "chefreactions",
                "video_id": "7477964535081487621"
            },
            {
                "id": "7403060183817145633",
                "post_url": "https://www.tiktok.com/@chef_donky/video/7403060183817145633",
                "username": "chef_donky",
                "video_id": "7403060183817145633"
            },
            {
                "id": "7450553185225215274",
                "post_url": "https://www.tiktok.com/@jeffandlaurenshow/video/7450553185225215274",
                "username": "jeffandlaurenshow",
                "video_id": "7450553185225215274"
            },
            {
                "id": "7112079360596708613",
                "post_url": "https://www.tiktok.com/@chefreactions/video/7112079360596708613",
                "username": "chefreactions",
                "video_id": "7112079360596708613"
            },
            {
                "id": "7074315044032515374",
                "post_url": "https://www.tiktok.com/@flakeysalt/video/7074315044032515374",
                "username": "flakeysalt",
                "video_id": "7074315044032515374"
            },
            {
                "id": "7486565380748545286",
                "post_url": "https://www.tiktok.com/@chefreactions/video/74865653807485452
…(truncated, see openapi.json for full schema)
```

### Media

#### `GET /v1/media/info` — Media info

Media payload of a post — video CDN URL, thumbnail, dimensions, duration, codec. Pass url or username + id.

**Parameters:**
- `url` (query, optional, string) — TikTok video URL (alternative to username + id). Example: `https://www.tiktok.com/@scout2015/video/6718335390845095173`
- `username` (query, optional, string) — TikTok username, used together with id. Example: `scout2015`
- `id` (query, optional, string) — TikTok video numeric id, used together with username. Example: `6718335390845095173`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/media/info?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173&username=scout2015&id=6718335390845095173"
```

**Response:**
```json
{
    "data": {
        "id": "6718335390845095173",
        "title": "Scramble up ur name & I’ll try to guess it😍❤️ #foryoupage #petsoftiktok #aesthetic",
        "width": "100%",
        "height": "100%",
        "post_url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "username": "scout2015",
        "video_id": "6718335390845095173",
        "author_url": "https://www.tiktok.com/@scout2015",
        "embed_html": "<blockquote class=\"tiktok-embed\" cite=\"https://www.tiktok.com/@scout2015/video/6718335390845095173\" data-video-id=\"6718335390845095173\" data-embed-from=\"oembed\" style=\"max-width:605px; min-width:325px;\"> <section> <a target=\"_blank\" title=\"@scout2015\" href=\"https://www.tiktok.com/@scout2015?refer=embed\">@scout2015</a> <p>Scramble up ur name & I’ll try to guess it😍❤️ <a title=\"foryoupage\" target=\"_blank\" href=\"https://www.tiktok.com/tag/foryoupage?refer=embed\">#foryoupage</a> <a title=\"petsoftiktok\" target=\"_blank\" href=\"https://www.tiktok.com/tag/petsoftiktok?refer=embed\">#petsoftiktok</a> <a title=\"aesthetic\" target=\"_blank\" href=\"https://www.tiktok.com/tag/aesthetic?refer=embed\">#aesthetic</a></p> <a target=\"_blank\" title=\"♬ original sound - tiff\" href=\"https://www.tiktok.com/music/original-sound-6689804660171082501?refer=embed\">♬ original sound - tiff</a> </section> </blockquote> <script async src=\"https://www.tiktok.com/embed.js\"></script>",
        "author_name": "Scou
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/media/download` — Media download

Direct download link for a TikTok post (with watermark stripped where the provider allows). Pass url or username + id.

**Parameters:**
- `url` (query, optional, string) — TikTok video URL (alternative to username + id). Example: `https://www.tiktok.com/@scout2015/video/6718335390845095173`
- `username` (query, optional, string) — TikTok username, used together with id. Example: `scout2015`
- `id` (query, optional, string) — TikTok video numeric id, used together with username. Example: `6718335390845095173`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/media/download?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173&username=scout2015&id=6718335390845095173"
```

**Response:**
```json
{
    "data": {
        "id": "6718335390845095173",
        "post_url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
        "video_id": "6718335390845095173",
        "embed_html": "<blockquote class=\"tiktok-embed\" cite=\"https://www.tiktok.com/@scout2015/video/6718335390845095173\" data-video-id=\"6718335390845095173\" data-embed-from=\"oembed\" style=\"max-width:605px; min-width:325px;\"> <section> <a target=\"_blank\" title=\"@scout2015\" href=\"https://www.tiktok.com/@scout2015?refer=embed\">@scout2015</a> <p>Scramble up ur name & I’ll try to guess it😍❤️ <a title=\"foryoupage\" target=\"_blank\" href=\"https://www.tiktok.com/tag/foryoupage?refer=embed\">#foryoupage</a> <a title=\"petsoftiktok\" target=\"_blank\" href=\"https://www.tiktok.com/tag/petsoftiktok?refer=embed\">#petsoftiktok</a> <a title=\"aesthetic\" target=\"_blank\" href=\"https://www.tiktok.com/tag/aesthetic?refer=embed\">#aesthetic</a></p> <a target=\"_blank\" title=\"♬ original sound - tiff\" href=\"https://www.tiktok.com/music/original-sound-6689804660171082501?refer=embed\">♬ original sound - tiff</a> </section> </blockquote> <script async src=\"https://www.tiktok.com/embed.js\"></script>",
        "thumbnail_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-p-0068/2367c7d45cf54a1397abd0e72bf22eac~tplv-tiktokx-origin.image?dr=10395&x-expires=1779555600&x-signature=VHaGTbrhiEFdtHC0hJJBK2Z8v7s%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=no1a"
    },
…(truncated, see openapi.json for full schema)
```

### Utils

#### `GET /v1/utils/username-from-url` — Username from URL

Extrahiert den Username aus einer TikTok-URL.

**Parameters:**
- `url` (query, required, string) — TikTok URL Example: `https://www.tiktok.com/@scout2015/video/6718335390845095173`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/utils/username-from-url?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173"
```

**Response:**
```json
{
    "data": {
        "username": "scout2015"
    },
    "meta": {
        "timestamp": "2026-05-04T13:59:47.574Z",
        "request_id": "efa214d4-b6b7-47cf-b4bb-f6c58852fb99"
    },
    "status": "ok",
    "message": "Username retrieved successfully",
    "success": true
}
```

#### `GET /v1/utils/video-id-from-url` — Video ID from URL

Extrahiert die Video-ID aus einer TikTok-URL.

**Parameters:**
- `url` (query, required, string) — TikTok video URL Example: `https://www.tiktok.com/@scout2015/video/6718335390845095173`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/tiktok-api/v1/utils/video-id-from-url?url=https%3A%2F%2Fwww.tiktok.com%2F%40scout2015%2Fvideo%2F6718335390845095173"
```

**Response:**
```json
{
    "data": {
        "video_id": "6718335390845095173"
    },
    "meta": {
        "timestamp": "2026-05-04T13:59:47.661Z",
        "request_id": "d7fbce14-6815-4fb1-b3f8-9597abefecf4"
    },
    "status": "ok",
    "message": "Video ID retrieved successfully",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/tiktok-api
OpenAPI spec: https://www.oanor.com/api/tiktok-api/openapi.json
