CollabFeed API
API Beta Docs
Pull CollabFeed partnership records, creator contact fields, brand contact enrichment and performance metrics into your own tools.
Authentication
Send your API key as a bearer token. X-API-Key also works.
Authorization: Bearer cf_live_xxxMint or rotate your key from Account Settings. The raw key is only shown once; store it somewhere safe.
Endpoint
GET https://collabfeed.io/api/v1/collabsExamples
Common recipes. All return the same response shape (see below).
Latest collabs across both platforms
curl "https://collabfeed.io/api/v1/collabs?limit=50" \
-H "Authorization: Bearer cf_live_xxx"Filter by platform and niche
curl "https://collabfeed.io/api/v1/collabs?platform=tiktok&niche=Gaming&limit=50" \
-H "Authorization: Bearer cf_live_xxx"High-performing posts only
curl "https://collabfeed.io/api/v1/collabs?min_views=10000&min_engagement_rate=3&sort=engagement_rate&order=desc" \
-H "Authorization: Bearer cf_live_xxx"Everything a single brand has done
curl "https://collabfeed.io/api/v1/collabs?brand=Gymshark&limit=100" \
-H "Authorization: Bearer cf_live_xxx"Incremental sync (recommended for ongoing pulls)
curl "https://collabfeed.io/api/v1/collabs?updated_since=2026-05-01T00:00:00Z&limit=200" \
-H "Authorization: Bearer cf_live_xxx" Store the highest updated_at from the response and pass it as updated_since on the next call. When updated_since is set, results default to oldest-updated first so that cursor never skips records. This is the only fully reliable way to paginate large pulls.
Filters
| Param | Description |
|---|---|
| platform | tiktok, instagram, or all (default all) |
| brand | Brand prefix search |
| creator | Creator username prefix search, @ optional |
| niche | Alias for niche_main |
| niche_main | Case-insensitive exact match (e.g. Fashion, Beauty, Gaming) |
| niche_sub | Case-insensitive exact match |
| date_from | Filter by post date (YYYY-MM-DD) |
| date_to | Filter by post date (YYYY-MM-DD) |
| updated_since | Incremental sync by updated_at (ISO 8601) |
| min_views | Minimum view count |
| min_engagement_rate | Minimum engagement rate percentage (e.g. 3 for 3%) |
| sort | posted_at (default), inserted_at, updated_at, views, likes, engagement_rate, brand, creator |
| order | asc or desc (default desc) |
| limit | Default 100, max 200 |
| page | Default 1, max 10. page * limit cannot exceed 1,000 - use updated_since beyond that. |
Response shape
Every response has a data array of collab records and a meta object with the applied filters and your usage counters.
{
"data": [
{
"id": "tiktok_7638682041013357855",
"source_id": "7638682041013357855",
"platform": "tiktok",
"brand": "Sony Electronics",
"creator": {
"username": "wisteriem",
"full_name": "Em | Cozy Games & Lifestyle",
"email": "em@hermanaagency.com",
"followers_count": 231339,
"follows_count": 261,
"profile_likes": 5022316,
"profile_url": "https://www.tiktok.com/@wisteriem",
"external_url": "https://beacons.ai/wisteriem",
"biography": "your introverted cozy lifestyle & gaming bestie",
"is_business_account": false,
"is_verified": false
},
"niche": {
"main": "Gaming",
"sub": "Gaming Accessories"
},
"post": {
"url": "https://www.tiktok.com/@wisteriem/video/7638682041013357855",
"caption": "#SponsoredbySony I love tuning out the world and immersing myself in my games...",
"cover_url": "https://p19-common-sign.tiktokcdn-eu.com/...",
"cached_cover_url": "https://ltiqztjqumeaakcsovjl.supabase.co/storage/v1/object/public/tiktok_covers/...",
"duration_seconds": 45,
"hashtags": ["sponsoredbysony", "sonyinzone"],
"posted_at": "2026-05-11T17:08:11+00:00"
},
"metrics": {
"views": 430,
"likes": 38,
"likes_hidden": false,
"comments": 3,
"shares": 0,
"engagement_rate": 9.5349
},
"estimated_post_rate": {
"low": 2086,
"high": 3823
},
"confidence": {
"brand": 1,
"niche_main": 1,
"niche_sub": 0.95
},
"is_ad": true,
"inserted_at": "2026-05-12T06:01:31.630941+00:00",
"updated_at": "2026-05-12T06:01:31.630941+00:00",
"brand_contact": {
"domain": "sony.com",
"partnership_email": "partnerships@sony.com",
"partnership_email_verified": true,
"partnership_email_result_type": "ok",
"fallback_emails": ["press@sony.com"],
"partnership_url": "https://creators.sony.com",
"social_links": {
"instagram": "sonyelectronics",
"tiktok": "sonyelectronics"
}
}
}
],
"meta": {
"page": 1,
"limit": 100,
"has_more": true,
"records_returned": 1,
"filters": {
"platform": "tiktok",
"niche_main": "Gaming",
"sort": "posted_at",
"order": "desc"
},
"usage": {
"month_start": "2026-05-01T00:00:00.000Z",
"month_end": "2026-06-01T00:00:00.000Z",
"requests_this_month": 1,
"rate_limit_per_minute": 120
}
}
}Response fields
All fields can be null unless noted otherwise. Below is what each block contains.
top-level
Identifiers and timestamps for the collab record itself.
- id - Stable ID prefixed by platform (e.g. tiktok_xxx, instagram_xxx).
- source_id - Raw platform-side ID without the prefix.
- platform - tiktok or instagram.
- brand - Brand name as labeled by the enrichment pipeline.
- is_ad - true when the post is labeled as a paid partnership or contains an ad hashtag.
- inserted_at - When CollabFeed first ingested this record.
- updated_at - Last time metrics or enrichment changed. Use for incremental syncs.
creator
Public profile fields plus extracted contact email when present.
- username - Platform handle.
- full_name - Display name.
- email - Email extracted from the creator bio. Null when none was found.
- followers_count - Follower count at last scrape.
- follows_count - Number of accounts the creator follows.
- profile_likes - Total likes across the profile (TikTok only).
- profile_url - Direct link to the creator profile.
- external_url - Single external link from the bio (linktr.ee, beacons, etc.).
- bio_links - Full list of bio links with titles (Instagram only).
- biography - Raw bio text.
- is_business_account - Whether the profile is marked as a business account.
- is_verified - Platform verification badge.
niche
Two-level niche classification from the enrichment pipeline.
- main - Primary niche, e.g. Fashion, Beauty, Gaming, Food & Beverage.
- sub - Subniche, e.g. Activewear, Skincare, Mobile Game. Free-form.
post
Post content and media URLs.
- url - Canonical post URL on the platform.
- caption - Full caption text including hashtags and mentions.
- cover_url - Original CDN cover image URL. May expire over time.
- cached_cover_url - CollabFeed-hosted cached cover. Stable, recommended for display.
- duration_seconds - Video duration (TikTok only).
- hashtags - Array of hashtags extracted from the caption (no leading #).
- posted_at - When the post was originally published.
metrics
Engagement counts. Instagram metrics freeze 3 days after posting; TikTok is a single snapshot at scrape time.
- views - View / play count.
- likes - Like count. Null when the creator has hidden likes (see likes_hidden).
- likes_hidden - true when the creator has chosen to hide like counts on the post.
- comments - Comment count.
- shares - Share count (TikTok only).
- engagement_rate - (likes + comments) / views * 100, as a percentage.
estimated_post_rate
Estimated USD rate range for a single sponsored post by this creator. Computed from follower count, platform, niche, and engagement rate. Null when followers are unknown. Treat as a starting point, not a quote.
- low, high - Lower and upper bound of the estimated rate, in USD.
confidence
Model confidence scores (0-1) for the enrichment classifications. Useful for filtering low-quality labels.
- brand - Confidence the labeled brand is correct.
- niche_main - Confidence the primary niche is correct.
- niche_sub - Confidence the subniche is correct.
brand_contact
Brand-side enrichment: domain, verified partnership email, and social links.
- domain - Brand website domain.
- partnership_email - Verified brand partnership email (when available).
- partnership_email_verified - true if the email was confirmed deliverable by the verifier.
- partnership_email_result_type - ok, catch_all, unknown, etc. Detail on the verification status.
- fallback_emails - Additional emails found on the brand site that may also work.
- partnership_url - Direct link to the brand collab/affiliate program when one was found.
- social_links - Object with the brand handles on Instagram, TikTok, etc.
meta
Per-response metadata: pagination state, applied filters, and your usage counters.
- page, limit, records_returned - Echo the pagination parameters and how many records this response contains.
- has_more - true if additional records exist past this page or window.
- filters - Normalized view of the filters the server applied.
- usage.requests_this_month - Running request count for the current calendar month (UTC).
- usage.rate_limit_per_minute - Configured rate limit on this key (default 120).
Pagination
Two ways to paginate. For ongoing data syncs, prefer updated_since.
- Incremental sync (recommended): pass
updated_since=<ISO timestamp>. Store the maximumupdated_atfrom the response and use it on the next request. Whenupdated_sinceis set, results default tosort=updated_at&order=ascso the cursor never skips records; keep that ordering if you override sort. This is the only fully reliable primitive for large pulls. - Offset pagination:
page(default 1, max 10) andlimit(default 100, max 200).page * limitcannot exceed 1,000 records per filter window; requests past either cap return a 400. Withplatform=all, deep pages can show approximate ordering because Instagram and TikTok are fetched independently then merged. For full snapshots, narrow byplatform,date_from/date_to, or abrand/nichefilter. - Has more:
meta.has_moreistrueif there are additional records past the current page or window.
Rate limits and errors
API keys are rate-limited to 120 requests per minute. No monthly usage cap.
| Status | Meaning |
|---|---|
| 200 | Success. |
| 400 | Malformed query parameter (e.g. invalid date format). |
| 401 | Missing, invalid, or revoked API key. Check that the bearer token starts with cf_live_. |
| 429 | Rate limit exceeded (more than 120 requests in the last 60 seconds). Back off and retry. |
| 5xx | Server-side error. Retry with exponential backoff. |
If your Polar subscription is canceled, the linked API key is deactivated automatically and subsequent requests will return 401.