Prism Creator Card API
Returns one profile card per platform for a single handle: followers, verified status, bio, and ids, with null on platforms where the handle does not exist.
GET /v1/prism/creator-cardLast updated October 2026Maintained by the SocialCrawl team
When to use the Prism Creator Card API
Use it to look up the same handle everywhere at once; handle-audit adds scoring and collection estimates, this just returns the profiles.
From the API reference
Looks up a single handle across multiple platforms in parallel and returns one unified author card per platform (followers, verified flag, bio, ids) with null for the platforms the handle isn't found on, plus combined follower totals and an any-verified flag. The default set is TikTok, Instagram, YouTube, and Twitter; Threads, Bluesky, and Truth Social can be added via platforms. A handle existing on only some platforms is a successful, complete answer (the nulls are the product); only an all-platform miss refunds. Flat 5 credits for up to 4 platforms, +1 credit per extra platform. legs[] reports each platform leg's status, cost, and latency. A handle existing on a platform does not mean it is the same creator there: send verify=true to get an identity verdict per platform (same, possible, different) with the evidence, at the same price.
Searching 69 platforms in parallel
What can you do with the Creator Card API?
The Creator Card endpoint gives you structured Prism data with computed fields in a single request. No scraping infrastructure to build or maintain.
Example Request
# GET /v1/prism/creator-card: Metered: holds 5 credits per call up front and refunds what the call does not use. Cache hits are free and failed calls are refunded.
# Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
# --max-time 60: the API's own time limit for this endpoint.
# --retry 3: retries timeouts, 429 and 5xx, honoring Retry-After.
# -o response.json keeps only the final attempt's body.
# One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
IDEMPOTENCY_KEY=$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n')
curl -sS --max-time 60 --retry 3 -o response.json \
-H "x-api-key: YOUR_API_KEY" \
-H "Idempotency-Key: $IDEMPOTENCY_KEY" \
"https://www.socialcrawl.dev/v1/prism/creator-card?handle=mrbeast&platforms=tiktok%2Cinstagram%2Cyoutube%2Ctwitter" && cat response.json# GET /v1/prism/creator-card: Metered: holds 5 credits per call up front and refunds what the call does not use. Cache hits are free and failed calls are refunded.
# Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
import os
import random
import time
import uuid
import requests
API_KEY = os.environ.get("SOCIALCRAWL_API_KEY", "YOUR_API_KEY")
TIMEOUT_S = 60 # the API's own time limit for this endpoint.
MAX_RETRIES = 3
URL = "https://www.socialcrawl.dev/v1/prism/creator-card"
def backoff(attempt):
# Exponential backoff with jitter: about 1 s, 2 s, then 4 s.
return 2 ** attempt * (0.5 + random.random() / 2)
def socialcrawl(params):
# One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
idempotency_key = str(uuid.uuid4())
for attempt in range(MAX_RETRIES + 1):
try:
res = requests.get(
URL,
params=params,
headers={"x-api-key": API_KEY, "Idempotency-Key": idempotency_key},
timeout=TIMEOUT_S,
)
body = res.json()
except (requests.RequestException, ValueError):
# A timeout, a dropped connection or a non-JSON gateway page: retry with the same key.
if attempt == MAX_RETRIES:
raise
time.sleep(backoff(attempt))
continue
if body["success"]:
return body
error = body["error"]
# Branch on error["type"], never on the message text.
if error["type"] == "RESOURCE_NOT_FOUND":
return None # refunded: nothing to read
retry_after = res.headers.get("Retry-After")
# SERVICE_UNAVAILABLE without Retry-After is a withdrawn endpoint: permanent.
permanent = error["type"] == "SERVICE_UNAVAILABLE" and retry_after is None
if not error.get("retryable") or permanent or attempt == MAX_RETRIES:
raise RuntimeError(f"{error['type']}: {error['message']} (request_id {body['request_id']})")
# Retry-After (seconds) wins; otherwise back off.
time.sleep(float(retry_after) if retry_after else backoff(attempt))
params = {
"handle": "mrbeast",
"platforms": "tiktok,instagram,youtube,twitter",
}
body = socialcrawl(params)
if body is not None:
print(body["data"])// GET /v1/prism/creator-card: Metered: holds 5 credits per call up front and refunds what the call does not use. Cache hits are free and failed calls are refunded.
// Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
const API_KEY = process.env.SOCIALCRAWL_API_KEY ?? "YOUR_API_KEY";
const TIMEOUT_MS = 60_000; // the API's own time limit for this endpoint.
const MAX_RETRIES = 3;
type Page = { next_cursor: string | null; has_more: boolean };
type SocialCrawlResponse =
| { success: true; data: any; pagination?: Page; credits_used: number; request_id: string }
| { success: false; error: { type: string; message: string; retryable: boolean }; request_id: string };
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
// Exponential backoff with jitter: about 1 s, 2 s, then 4 s.
const backoffMs = (attempt: number) => 2 ** attempt * 1000 * (0.5 + Math.random() / 2);
async function socialcrawl(url: URL) {
// One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
const idempotencyKey = crypto.randomUUID();
for (let attempt = 0; ; attempt++) {
let res: Response;
let body: SocialCrawlResponse;
try {
res = await fetch(url, {
headers: {
"x-api-key": API_KEY,
"Idempotency-Key": idempotencyKey,
},
signal: AbortSignal.timeout(TIMEOUT_MS),
});
body = (await res.json()) as SocialCrawlResponse;
} catch (error) {
// A timeout, a dropped connection or a non-JSON gateway page: retry with the same key.
if (attempt >= MAX_RETRIES) throw error;
await sleep(backoffMs(attempt));
continue;
}
if (body.success) return body;
// Branch on error.type, never on the message text.
if (body.error.type === "RESOURCE_NOT_FOUND") return null; // refunded: nothing to read
const retryAfter = res.headers.get("Retry-After");
// SERVICE_UNAVAILABLE without Retry-After is a withdrawn endpoint: permanent.
const permanent = body.error.type === "SERVICE_UNAVAILABLE" && retryAfter === null;
if (!body.error.retryable || permanent || attempt >= MAX_RETRIES) {
throw new Error(`${body.error.type}: ${body.error.message} (request_id ${body.request_id})`);
}
// Retry-After (seconds) wins; otherwise back off.
await sleep(retryAfter ? Number(retryAfter) * 1000 : backoffMs(attempt));
}
}
const url = new URL("https://www.socialcrawl.dev/v1/prism/creator-card");
url.searchParams.set("handle", "mrbeast");
url.searchParams.set("platforms", "tiktok,instagram,youtube,twitter");
const body = await socialcrawl(url);
if (body) console.log(body.data);Parameters
| Parameter | Required | Description |
|---|---|---|
| handle | Yes | The handle to look up across every requested platform (a single leading @ is stripped). |
| platforms | No | CSV subset of tiktok,instagram,youtube,twitter,threads,bluesky,truthsocial (default the first four). Unknown platforms are ignored. |
| include | No | CSV subset of cards,totals to trim the payload (cards is always returned). |
| verify | No | Send `true` to add an `identity` block that says whether each found profile is the same person or organisation as the anchor profile, not only that the handle exists there. Each platform gets a verdict with `level` (`same`, `possible`, `different`, or `uncertain` when the answer is not confident), a `score`, a `confidence` and the `evidence` behind it (`cross_link`, `bio_consistent`, `fan_or_parody`, `website_match`). A `null` verdict means that profile was not judged, not that it is different. `identity.verified_on` lists the anchor plus every `same` platform. Public profile text only, no image comparison. Same price; adds well under a second. |
| anchor | No | With `verify=true`, the platform whose profile you already trust; every other found profile is compared against it. Omit it and the anchor is the platform-verified profile with the largest audience. If the chosen platform has no card in the response the anchor is picked automatically and `_warnings` says so. (tiktok | instagram | youtube | twitter | threads | bluesky | truthsocial) |
What does the Prism Creator Card API return?
Every response follows one unified schema. Here is a real, unmodified response body, so you can see the exact fields you get back before spending a credit.
Example response
{
"success": true,
"platform": "prism",
"endpoint": "/v1/prism/creator-card",
"data": {
"cards": {
"tiktok": {
"id": "6614519312189947909",
"username": "mrbeast",
"display_name": "MrBeast",
"avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:1080:1080.webp?dr=10399&refresh_token=edf3920c&x-expires=1791126000&x-signature=v05PO7QEgiKkepmwILijyLseNak%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=2472a6c6&idc=no1a",
"bio": "Checkout My New Book!👇",
"verified": true,
"followers": 142664217,
"following": 355,
"posts_count": 481,
"likes_count": 1505785882,
"url": "https://www.tiktok.com/@mrbeast",
"private": false,
"joined_at": null,
"ext": {
"business_category": "Public Figure",
"bio_link": "http://themostdangerousgames.com"
},
"location": "GB"
},
"instagram": {
"id": "2278169415",
"username": "mrbeast",
"display_name": "MrBeast",
"avatar_url": "https://scontent.cdninstagram.com/v/t51.2885-19/31077884_211593632905749_1394765701385814016_n.jpg?_nc_cat=1&ccb=7-5&_nc_sid=bf7eb4&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy41MDAuQzMifQ%3D%3D&_nc_ohc=xQAB0Z8ixJwQ7kNvwGFp1dT&_nc_oc=Adp4BqQ82VQw7WUlJ8akMBoDn_20uKts_pjowYdn67ruVrpJWU0pu8fHnDAc4G6l4js&_nc_zt=24&_nc_ht=scontent.cdninstagram.com&_nc_ss=78a8c&oh=00_AQNlmF0xvN241xl_vRSTnjzxoDmefHkU9zDCwECxykaf0g&oe=6AC5BBCF",
"bio": "Watch my latest video!! 👇",
"verified": true,
"followers": 90044454,
"following": 1008,
"posts_count": 515,
"likes_count": null,
"url": "https://youtu.be/v9QtM6qnG50?is=3OMbMzzRVSGxQTcy",
"private": false,
"joined_at": null,
"last_post_at": "2026-09-24T16:00:27.000Z",
"ext": {
"business_category": null
}
},
"youtube": {
"id": "UCX6OQ3DkcsbYNE6H8uQQuVA",
"username": "@mrbeast",
"display_name": "MrBeast",
"avatar_url": "https://yt3.ggpht.com/nxYrc_1_2f77DoBadyxMTmv7ZpRZapHR5jbuYe7PlPd5cIRJxtNNEYyOC0ZsxaDyJJzXrnJiuDE=s800-c-k-c0x00ffffff-no-rj",
"bio": "SUBSCRIBE FOR A COOKIE!\nNew MrBeast or MrBeast Gaming video every single Saturday at noon eastern time!\nAccomplishments:\n- Raised $20,000,000 To Plant 20,000,000 Trees\n- Removed 30,000,000 pounds of trash from the ocean\n- Helped 2,000 people walk again\n- Helped 1,000 blind people see\n- Helped 1,000 deaf people hear\n- Built wells in Africa\n- Built and gave away 100 houses\n- Adopted every dog in a shelter (twice)\n- Given millions to charity\n- Started my own snack company Feastables\n- Started my own software company Viewstats\n- Gave away a private island (twice)\n- Gave away 1 million meals\n- I counted to 100k\n- Ran a marathon in the world's largest shoes\n- Survived 50 hours in Antarctica\n- Recreated Squid Game in real life\n- Created the largest competition show with 1000 people (Beast Games)\n- Gave $5,000,000 to one person\n- Raised $40,000,000 To Bring Clean Water To Millions Of People\n- Granted 100+ Dream Wishes for Kids Fighting Cancer\n- Gave Away Another $5,000,000 On Beast Games S2\n",
"verified": null,
"followers": 519000000,
"following": null,
"posts_count": 1004,
"likes_count": null,
"url": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA",
"private": null,
"joined_at": "2012-02-20",
"ext": {
"country": "US",
"public_email": null,
"followers_approximate": true,
"keywords": "mrbeast6000 beast mrbeast Mr.Beast mr",
"total_views": 141401695682,
"joined_at_timestamp": "2012-02-20T00:43:50Z",
"topicCategories": [
"https://en.wikipedia.org/wiki/Entertainment",
"https://en.wikipedia.org/wiki/Lifestyle_(sociology)"
],
"bannerExternalUrl": "https://yt3.googleusercontent.com/mHMO_eEMp0dPvh0ADwXhPXNYb_GnjSVsLI8biqF1CpxT8OPl7izhNQsDPD3JHhd5y5Mg9GrP",
"madeForKids": false,
"hiddenSubscriberCount": false,
"related_playlists": {
"likes": "",
"uploads": "UUX6OQ3DkcsbYNE6H8uQQuVA"
},
"topic_ids": [
"/m/02jjt",
"/m/019_rr"
],
"unsubscribed_trailer": "v9QtM6qnG50"
}
},
"twitter": {
"id": "2455740283",
"username": "MrBeast",
"display_name": "MrBeast",
"avatar_url": "https://pbs.twimg.com/profile_images/2008838029776158720/oDvxIJ1X_normal.jpg",
"bio": "I want to make the world a better place",
"verified": true,
"followers": 35000475,
"following": 2312,
"posts_count": 8027,
"likes_count": null,
"url": "https://x.com/MrBeast",
"location": "Follow me for a cookie",
"private": false,
"joined_at": "2014-04-21",
"ext": {
"cover_url": "https://pbs.twimg.com/profile_banners/2455740283/1767807630",
"bio_link": "https://linktr.ee/beastgames"
}
}
},
"found_on": [
"tiktok",
"instagram"
],
"totals": {
"platforms_found": 4,
"combined_followers": 786709146,
"any_verified": true
},
"legs": [
{
"endpoint": "/v1/tiktok/profile",
"status": 200,
"credits_used": 1,
"latency_ms": 1662,
"error": null
},
{
"endpoint": "/v1/instagram/profile",
"status": 200,
"credits_used": 1,
"latency_ms": 3178,
"error": null
}
]
},
"credits_used": 5,
"request_id": "req_example000000",
"cached": false,
"credits_remaining": 9999,
"source": "captured",
"captured_at": "2026-10-02T15:38:53.908Z",
"redacted": true
}Live sample illustrating the unified response shape. Field values reflect the record you query.
How does the Prism Creator Card API work?
Send a GET request with your API key and get back clean, structured JSON in our unified schema. Supported computed fields are populated when the source provides the required inputs.
Method
GET
Response
JSON
How do you scrape social media data in seconds?
The fastest social media scraping API for developers. Scrape profiles, posts, comments, and analytics from 69 platforms covering 10B+ monthly active users.
One schema, every platform
Query 69 platforms with identical response structures. Write your integration once.
Computed fields, not just scraped
When an endpoint supports these metrics and the source provides the required inputs, the normalized record includes engagement_rate, estimated_reach, content_category, and language. Ready to use.
See your data before you code
Visual Data Explorer. Paste any URL, get rich result cards, sortable tables, CSV export.
import requests
response = requests.get(
'https://www.socialcrawl.dev/v1/tiktok/profile',
params={'handle': 'charlidamelio'},
headers={'x-api-key': 'sc_YOUR_API_KEY'}
)
data = response.json(){
"success": true,
"platform": "tiktok",
"data": {
"author": {
"username": "charlidamelio",
"followers": 152400000
},
"engagement": {
"likes": 12400000000,
"engagement_rate": 0.087
},
"metadata": {
"language": "en",
"content_category": "lifestyle"
}
}
}Have a question? We got answers
Find answers to frequently asked questions about SocialCrawl's API, pricing, and capabilities.
Contact usHow do I look up a creator across multiple platforms at once?
What if the handle only exists on some platforms?
Which platforms can the creator profile API check?
How is the creator profile API priced?
What's in each author card?
Ask AI about SocialCrawl
Guides that use this endpoint
Each guide walks through one job from start to finish, with the calls in order and what one run costs.
Ready to scrape Prism Creator Card data?
Get your API key and start pulling Prism data in under 60 seconds.
