# TikTok Profile API

Beta

Returns a public TikTok account: user ID, username, display name, bio, bio link, avatar, verification badge, whether the account is private, its business category, join date and exact follower, following, video and total like counts. Accepts a username with or without the @, a tiktok.com profile URL, or a numeric user ID.

[Get 100 free credits](https://staging-fly.socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dtiktok.profile) · [API reference](https://staging-fly.socialtap.dev/docs/reference/tiktok/profile/index.md) · [Try it](https://staging-fly.socialtap.dev/playground/?endpoint=tiktok.profile)

- **Price**: From **1 credit** per request$0.75–$1.45 per 1,000 requests
- **Request**: `GET /v1/tiktok/profile`One API key, one JSON schema
- **Input**: `handle`e.g. `nasa`
- **Failed requests**: Free: 0 credits

Use cases

## What teams build with it. From one request.

- Track creator growth over time
- Vet influencers before a campaign
- Enrich CRM or lead lists with TikTok accounts
- Resolve a post author's ID to a full profile

What you get

## Profiles in one schema. The same on every platform.

- **`platform`string**: Platform ID (tiktok, youtube, …).
- **`id`string**: Platform-native account ID (string; YouTube UC…, Reddit without t2_).
- **`username`string**: Handle without the @; null when the account has none.
- **`display_name`string**: Display name, channel title or page name; null when empty or not exposed.
- **`url`string**: Canonical profile URL.
- **`type`string**: Coarse account kind, as the platform labels it; unknown when it does not (TikTok labels organizations only). New values may be added; treat unknown values as unknown.
- **`bio`string**: Profile bio, channel description or page about text; null when empty or not exposed.
- **`avatar_url`string**: Profile picture URL (largest available). Platform CDN URLs can expire within hours.

Every field, its type and when it is `null`: [the response reference](https://staging-fly.socialtap.dev/docs/reference/tiktok/profile/index.md#response) and the [profile schema](https://staging-fly.socialtap.dev/resources/profile/index.md).

## Example request

cURL:

```shell
curl -G 'https://staging-fly.socialtap.dev/v1/tiktok/profile' \
  --data-urlencode 'handle=https://www.tiktok.com/@nasa' \
  -H "x-api-key: $SOCIALTAP_API_KEY"
```

Node.js:

```javascript
const params = new URLSearchParams({
  handle: "https://www.tiktok.com/@nasa",
});
const res = await fetch(`https://staging-fly.socialtap.dev/v1/tiktok/profile?${params}`, {
  headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, meta } = body;
console.log(data, meta.credits_charged);
```

Python:

```python
import os

import requests

res = requests.get(
    "https://staging-fly.socialtap.dev/v1/tiktok/profile",
    params={"handle": "https://www.tiktok.com/@nasa"},
    headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
    raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, meta = body["data"], body["meta"]
print(data, meta["credits_charged"])
```

Go:

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("handle", "https://www.tiktok.com/@nasa")
	req, err := http.NewRequest("GET", "https://staging-fly.socialtap.dev/v1/tiktok/profile?"+q.Encode(), nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	var body struct {
		Data  json.RawMessage `json:"data"`
		Meta  map[string]any  `json:"meta"`
		Error *struct {
			Code    string `json:"code"`
			Message string `json:"message"`
		} `json:"error"`
	}
	if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
		log.Fatal(err)
	}
	if body.Error != nil {
		log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
	}
	fmt.Println(string(body.Data), body.Meta["credits_charged"])
}
```

200 OK:

```json
{
  "data": {
    "approximate_fields": [],
    "avatar_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/e5143212a59c09a008bf50f487d54d1f~tplv-tiktokx-cropcenter:1080:1080.jpeg?dr=9640&refresh_token=9341391e&x-expires=4070908800&x-signature=SCRUBBED&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=useast5",
    "banner_url": null,
    "bio": "Making the seemingly impossible, possible.✨",
    "category": null,
    "country_code": null,
    "created_at": "2026-07-20T15:55:49Z",
    "display_name": "NASA",
    "external_links": [
      {
        "title": null,
        "url": "https://science.nasa.gov/feature/artemis-ii-preliminary-lunar-science-report"
      }
    ],
    "id": "7664638705177150477",
    "is_private": false,
    "is_verified": true,
    "location": null,
    "metrics": {
      "follower_count": 2140425,
      "following_count": 23,
      "post_count": 60,
      "total_like_count": 11385816,
      "total_view_count": null
    },
    "platform": "tiktok",
    "platform_specific": {},
    "type": "organization",
    "unknown_fields": [],
    "url": "https://www.tiktok.com/@nasa",
    "username": "nasa"
  },
  "meta": {
    "request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
    "platform": "tiktok",
    "source": "page",
    "is_cached": false,
    "credits_charged": 1,
    "latency_ms": 0,
    "fetched_at": "2026-10-25T12:00:00Z",
    "input": {
      "kind": "profile",
      "id": "7664638705177150477",
      "url": "https://www.tiktok.com/@nasa"
    },
    "credits_remaining": 9999,
    "client_request_id": null,
    "warnings": [],
    "mode": "live"
  }
}
```

> [!NOTE]
>
> **Good to know**
>
> - Private accounts return their profile with is_private true; their videos are not public.
> - type is organization for accounts TikTok marks as organizations and unknown otherwise: TikTok does not label people.
> - category is set only for business accounts. location, country_code, banner_url and metrics.total_view_count are always null: public TikTok profiles do not show them.
> - When the profile page is unavailable the answer comes from TikTok's embed profile: follower and like counts are then rounded (listed in approximate_fields), the join date, category, type and video count are null, and external_links is \[\] listed in unknown_fields (the embed does not show the bio link).
> - Share links (vm.tiktok.com) are not accepted: pass the username or the profile URL.

Pricing

## Pay per request. Only when it succeeds.

| Source | Price per successful request | Per 1,000 requests |
| --- | --- | --- |
| Public page `page` | 1 credit | $0.75–$1.45 |

- Failed requests are free: errors cost 0 credits.
- Cache hits are free: responses served from the cache cost 0 credits.
- Credits never expire.
- One credit balance for every endpoint and platform.

[Credit packs](https://staging-fly.socialtap.dev/pricing/index.md) · [How this endpoint is priced](https://staging-fly.socialtap.dev/docs/reference/tiktok/profile/index.md#pricing) · [How credits work](https://staging-fly.socialtap.dev/docs/credits/index.md)

FAQ

## Questions, answered.

**How much does the TikTok Profile API cost?**

1 credit for public page results (meta.source = page), charged only for successful requests. SocialTap credits cost $0.75–$1.45 per 1,000 depending on the pack.

**Am I charged for failed requests?**

No. Requests that return an error cost 0 credits. Responses served from the cache are free too.

Same schema, other platforms

## Profiles everywhere. One parser.

[Instagram Profile APIBetaProfile`GET /v1/instagram/profile`1 credit](https://staging-fly.socialtap.dev/apis/instagram/profile/index.md) · [Rumble Channel APIBetaProfile`GET /v1/rumble/profile`1 credit](https://staging-fly.socialtap.dev/apis/rumble/profile/index.md) · [Threads Profile APIBetaProfile`GET /v1/threads/profile`1 credit](https://staging-fly.socialtap.dev/apis/threads/profile/index.md) · [YouTube Channel APIBetaProfile`GET /v1/youtube/profile`1 credit](https://staging-fly.socialtap.dev/apis/youtube/profile/index.md)

More TikTok

## TikTok API. 5 endpoints, one key.

[TikTok Comments APIBetaComment`GET /v1/tiktok/comments`1 credit / page](https://staging-fly.socialtap.dev/apis/tiktok/comments/index.md) · [TikTok Post APIBetaPost`GET /v1/tiktok/post`1 credit](https://staging-fly.socialtap.dev/apis/tiktok/post/index.md) · [TikTok Posts APIBetaPost`GET /v1/tiktok/posts`1 credit / page](https://staging-fly.socialtap.dev/apis/tiktok/posts/index.md) · [TikTok Transcript APIBetaTranscript`GET /v1/tiktok/transcript`From 1 credit](https://staging-fly.socialtap.dev/apis/tiktok/transcript/index.md)

## Start with 100 free credits. No card required.

Test keys answer every endpoint from recorded responses, free, so you can build before you spend. Failed requests are always free.

[Get your API key](https://staging-fly.socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dtiktok.profile) · [Read the API reference](https://staging-fly.socialtap.dev/docs/reference/tiktok/profile/index.md)

---

[HTML version](https://staging-fly.socialtap.dev/apis/tiktok/profile/) · [Docs index for AI agents](https://staging-fly.socialtap.dev/llms.txt) · [All docs in one file](https://staging-fly.socialtap.dev/llms-full.txt)
