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_xxx

Mint 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/collabs

Examples

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

ParamDescription
platformtiktok, instagram, or all (default all)
brandBrand prefix search
creatorCreator username prefix search, @ optional
nicheAlias for niche_main
niche_mainCase-insensitive exact match (e.g. Fashion, Beauty, Gaming)
niche_subCase-insensitive exact match
date_fromFilter by post date (YYYY-MM-DD)
date_toFilter by post date (YYYY-MM-DD)
updated_sinceIncremental sync by updated_at (ISO 8601)
min_viewsMinimum view count
min_engagement_rateMinimum engagement rate percentage (e.g. 3 for 3%)
sortposted_at (default), inserted_at, updated_at, views, likes, engagement_rate, brand, creator
orderasc or desc (default desc)
limitDefault 100, max 200
pageDefault 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 maximum updated_at from the response and use it on the next request. When updated_since is set, results default to sort=updated_at&order=asc so 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) and limit (default 100, max 200). page * limit cannot exceed 1,000 records per filter window; requests past either cap return a 400. With platform=all, deep pages can show approximate ordering because Instagram and TikTok are fetched independently then merged. For full snapshots, narrow by platform, date_from / date_to, or a brand / niche filter.
  • Has more: meta.has_more is true if 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.

StatusMeaning
200Success.
400Malformed query parameter (e.g. invalid date format).
401Missing, invalid, or revoked API key. Check that the bearer token starts with cf_live_.
429Rate limit exceeded (more than 120 requests in the last 60 seconds). Back off and retry.
5xxServer-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.