Bluesky

3 endpoints.

GET /v1/bluesky/post

Post

Fetches a single Bluesky post by URL, returning the post's record text, author info, embed content, replyCount, repostCount, likeCount, and quoteCount. Also includes a replies array with threaded reply posts.

Parameters

NameInTypeDescription
url requiredquerystringBluesky post URL

Request

curl "https://api.scrapall.bipsport.com/scapi/v1/bluesky/post?url=https://bsky.app/profile/espn.com/post/3lqdfq7fkvm2g" \
  -H "X-Scapi-Key: YOUR_API_KEY"
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/bluesky/post?url=https://bsky.app/profile/espn.com/post/3lqdfq7fkvm2g", {
  headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();
import requests

r = requests.get(
    "https://api.scrapall.bipsport.com/scapi/v1/bluesky/post?url=https://bsky.app/profile/espn.com/post/3lqdfq7fkvm2g",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())

Response 200 (sample)

{
  "post": {
    "uri": "at://did:plc:x7d6j54pm22ufehkes6jo4jf/app.bsky.feed.post/3lqdfq7fkvm2g",
    "cid": "bafyreibams5wyqdpg2cmmks7lhf5ccxu7hbu24sfatgc53jmb2nun5k5dm",
    "author": {
      "did": "did:plc:x7d6j54pm22ufehkes6jo4jf",
      "handle": "espn.com",
      "display_name": "ESPN",
      "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreie4oxawqqsfzvk47ysr3unsnmviedzpylxmwxnpa534to2bzas4ie@jpeg",
      "labels": [],
      "created_at": "2024-11-25T21:49:49.345Z",
      "verification": {
        "verifications": [
          {
            "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
            "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndppjqgb72f",
            "is_valid": true,
            "created_at": "2025-04-21T10:44:20.398Z"
          }
        ],
        "verified_status": "valid",
        "trusted_verifier_status": "none"
      }
    },
    "record": {
      "type": "app.bsky.feed.post",
      "created_at": "2025-05-29T19:01:20.743Z",
      "embed": {
        "type": "app.bsky.embed.external",
        "card": {
          "description": "The Oilers apparently will have defenseman Mattias Ekholm back in their lineup for Game 5 of the Western Conference finals against the Stars.",
          "thumb": {
            "type": "blob",
            "ref": "{...}",
            "mime_type": "image/jpeg",
            "size": 158648
          },
          "title": "Oilers' Ekholm set for return in Game 5 vs. Stars",
          "uri": "http://spr.ly/63320N4OEy"
        },
        "external": {
          "description": "The Oilers apparently will have defenseman Mattias Ekholm back in their lineup for Game 5 of the Western Conference finals against the Stars.",
          "thumb": {
            "type": "blob",
            "ref": "{...}",
            "mime_type": "image/jpeg",
            "size": 158648
          },
          "title": "Oilers' Ekholm set for return in Game 5 vs. Stars",
          "uri": "http://spr.ly/63320N4OEy"
        }
      },
      "facets": [],
      "text": "Oilers' defenseman Mattias Ekholm is set to return to action Thursday for Game 5 of the Western Conference finals against the Stars.\n\nEkholm has been out of ..."
    },
    "embed": {
      "type": "app.bsky.embed.external#view",
      "external": {
        "uri": "http://spr.ly/63320N4OEy",
        "title": "Oilers' Ekholm set for return in Game 5 vs. Stars",
        "description": "The Oilers apparently will have defenseman Mattias Ekholm back in their lineup for Game 5 of the Western Conference finals against the Stars.",
        "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreihhffgngv4thcnw7sh7o43qnwwyjvfemdlccwalu76r3vnhlbssle@jpeg"
      }
    },
    "reply_count": 1,
    "repost_count": 0,
    "like_count": 24,
    "quote_count": 1,
    "indexed_at": "2025-05-29T19:01:21.645Z",
    "labels": []
  },
  "replies": [
    {
      "type": "app.bsky.feed.defs#threadViewPost",
      "post": {
        "uri": "at://did:plc:dzsbhwnnvblrpyy2fpnmaih3/app.bsky.feed.post/3lqdii5jmmc2p",
        "cid": "bafyreicrfgr5rge655xy6wsgmdiexanr2vhwib7fkjbgu4kku3gzjzwowu",
        "author": {
          "did": "did:plc:dzsbhwnnvblrpyy2fpnmaih3",
          "handle": "thinkasaurus.bsky.social",
          "display_name": "Doris the Thinkasaurus",
          "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:dzsbhwnnvblrpyy2fpnmaih3/bafkreielkwohfe37wdka5336fl2sxijxur242dhovdb2edkk56yuzl4fyu@jpeg",
          "labels": [
            "{...}"
          ],
          "created_at": "2024-10-21T17:22:27.408Z"
        },
        "record": {
          "type": "app.bsky.feed.post",
          "created_at": "2025-05-29T19:50:31.613Z",
          "langs": [
            "en"
          ],
          "reply": {
            "parent": "{...}",
            "root": "{...}"
          },
          "text": "Alright! Now I have a reason to root for Edmonton aside from my burning hatred of Dallas!"
        },
        "reply_count": 0,
        "repost_count": 0,
        "like_count": 0,
        "quote_count": 0,
        "indexed_at": "2025-05-29T19:50:32.451Z",
        "labels": []
      },
      "replies": [],
      "thread_context": {}
    }
  ]
}

GET /v1/bluesky/user

Profile

Retrieves a Bluesky user's public profile including handle, displayName, avatar, description, followersCount, followsCount, postsCount, createdAt, and verification status. The associated field shows counts for lists, feed generators, and starter packs.

Parameters

NameInTypeDescription
handle requiredquerystringBluesky handle

Request

curl "https://api.scrapall.bipsport.com/scapi/v1/bluesky/user?handle=espn.com" \
  -H "X-Scapi-Key: YOUR_API_KEY"
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/bluesky/user?handle=espn.com", {
  headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();
import requests

r = requests.get(
    "https://api.scrapall.bipsport.com/scapi/v1/bluesky/user?handle=espn.com",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())

Response 200 (sample)

{
  "did": "did:plc:x7d6j54pm22ufehkes6jo4jf",
  "handle": "espn.com",
  "display_name": "ESPN",
  "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreie4oxawqqsfzvk47ysr3unsnmviedzpylxmwxnpa534to2bzas4ie@jpeg",
  "associated": {
    "lists": 0,
    "feedgens": 0,
    "starter_packs": 0,
    "labeler": false
  },
  "labels": [],
  "created_at": "2024-11-25T21:49:49.345Z",
  "verification": {
    "verifications": [
      {
        "issuer": "did:plc:z72i7hdynmk6r22z27h6tvur",
        "uri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.graph.verification/3lndppjqgb72f",
        "is_valid": true,
        "created_at": "2025-04-21T10:44:20.398Z"
      }
    ],
    "verified_status": "valid",
    "trusted_verifier_status": "none"
  },
  "description": "Serving sports fans. Anytime. Anywhere.",
  "indexed_at": "2024-12-19T20:49:48.843Z",
  "followers_count": 198477,
  "follows_count": 32,
  "posts_count": 659
}

GET /v1/bluesky/user_posts

Posts

Fetches a paginated feed of posts from a Bluesky user, returning each post's uri, record text, author info, embed content, replyCount, repostCount, likeCount, quoteCount, and indexedAt. Supports pagination via cursor. Use user_id (the 'did') instead of handle for faster response times.

Parameters

NameInTypeDescription
handlequerystringBluesky handle
user_idquerystringBluesky 'did'. (For some reason Bluesky calls their user ids, 'did' for whatever reason)

Request

curl "https://api.scrapall.bipsport.com/scapi/v1/bluesky/user_posts" \
  -H "X-Scapi-Key: YOUR_API_KEY"
const res = await fetch("https://api.scrapall.bipsport.com/scapi/v1/bluesky/user_posts", {
  headers: { "X-Scapi-Key": "YOUR_API_KEY" }
});
const data = await res.json();
import requests

r = requests.get(
    "https://api.scrapall.bipsport.com/scapi/v1/bluesky/user_posts",
    headers={"X-Scapi-Key": "YOUR_API_KEY"},
)
print(r.json())

Response 200 (sample)

{
  "feed": [
    {
      "uri": "at://did:plc:x7d6j54pm22ufehkes6jo4jf/app.bsky.feed.post/3lqdfq7fkvm2g",
      "cid": "bafyreibams5wyqdpg2cmmks7lhf5ccxu7hbu24sfatgc53jmb2nun5k5dm",
      "author": {
        "did": "did:plc:x7d6j54pm22ufehkes6jo4jf",
        "handle": "espn.com",
        "display_name": "ESPN",
        "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:x7d6j54pm22ufehkes6jo4jf/bafkreie4oxawqqsfzvk47ysr3unsnmviedzpylxmwxnpa534to2bzas4ie@jpeg",
        "labels": [],
        "created_at": "2024-11-25T21:49:49.345Z",
        "verification": {
          "verifications": [
            "{...}"
          ],
          "verified_status": "valid",
          "trusted_verifier_status": "none"
        }
      },
      "record": {
        "type": "app.bsky.feed.post",
        "created_at": "2025-05-29T19:01:20.743Z",
        "embed": {
          "type": "app.bsky.embed.external",
          "card": {
            "description": "The Oilers apparently will have defenseman Mattias Ekholm back in their lineup for Game 5 of the Western Conference finals against the Stars.",
            "thumb": "{...}",
            "title": "Oilers' Ekholm set for return in Game 5 vs. Stars",
            "uri": "http://spr.ly/63320N4OEy"
          },
          "external": {
            "description": "The Oilers apparently will have defenseman Mattias Ekholm back in their lineup for Game 5 of the Western Conference finals against the Stars.",
            "thumb": "{...}",
            "title": "Oilers' Ekholm set for return in Game 5 vs. Stars",
            "uri": "http://spr.ly/63320N4OEy"
          }
        },
        "facets": [],
        "text": "Oilers' defenseman Mattias Ekholm is set to return to action Thursday for Game 5 of the Western Conference finals against the Stars.\n\nEkholm has been out of ..."
      },
      "embed": {},
      "reply_count": 1,
      "repost_count": 0,
      "like_count": 24,
      "quote_count": 1,
      "indexed_at": "2025-05-29T19:01:21.645Z",
      "labels": []
    }
  ],
  "next_cursor": "2025-05-22T17:02:02.847Z"
}