Social media scraping API. One POST request, clean JSON back.
Bridgly turns LinkedIn, X (Twitter), Reddit, GitHub, Instagram, TikTok and YouTube into plain HTTPS endpoints. Send a JSON body with a bearer token, get normalized JSON back in about a second. Proxies, browser sessions, logins and anti-bot handling run on our side, so your code stays a single fetch call in any language.
Get started with the REST API in 3 steps
- 1
Create an API key
Sign up, open API Keys in the dashboard and create a key. It starts with
bgly_and is shown once, so store it in an environment variable straight away..envBRIDGLY_API_KEY=bgly_YOUR_KEY - 2
Send a POST request
Every endpoint is
POST https://api.bridgly.app/<platform>/<action>with a JSON body. Put the key in theAuthorizationheader.terminalcurl -X POST https://api.bridgly.app/reddit/get-user \-H "Authorization: Bearer $BRIDGLY_API_KEY" \-H "Content-Type: application/json" \-d '{"username":"spez"}' - 3
Read the JSON envelope
A successful call returns the result in
data, plus what it cost and how long it took. Errors return an HTTP status and a message instead, and are never charged.response.json{"timeMs": 842,"creditsCost": 1,"data": { "username": "spez", "linkKarma": 182044, "isMod": true }}
What you get with the Bridgly REST API
One schema across platforms
Shared fields share one name on every platform: username, avatarUrl, createdAt, likeCount, viewCount. Learn one platform’s response and the next one reads the same.
Consistent inputs
Lists take count and cursor and return nextCursor. Lookups accept a handle or the full link: a LinkedIn slug or profile URL, an X handle with or without the @, any YouTube link.
One envelope, one error shape
Every success is { timeMs, creditsCost, data } and every failure is { status, message } with a meaningful HTTP code. One parser covers every endpoint.
Documented down to the field
Every endpoint has an OpenAPI schema with a description and example for each field, so your editor, your codegen and your AI agent all know the shape.
Try it before you write code
Run any endpoint from the dashboard playground, copy the request as cURL, Node.js or Python, and look back at every call you made in the request log.
Failed calls are free
Validation errors, not-found records, rate-limited and failed scrapes cost nothing. You pay only for data you receive.
How the Bridgly REST API works
The API has one shape for everything. You pick an endpoint, such as /linkedin/get-profile-from-url or /x/get-user-tweets, send its input as a JSON body, and receive the data. There is no OAuth app to register with LinkedIn, X or Reddit, no developer account approval and no per-platform rate card. One Bridgly key covers every platform.
| Platform | Example endpoints |
|---|---|
/linkedin/get-profile-from-url, /linkedin/get-company-from-url, /linkedin/search/jobs, /linkedin/search/people | |
| X (Twitter) | /x/get-user, /x/get-user-tweets, /x/get-followers, /x/search |
/reddit/get-post, /reddit/list-subreddit-posts, /reddit/search/comments | |
| GitHub | /github/get-profile, /github/search-repositories, /github/search-code |
/instagram/user, /instagram/user-posts, /instagram/post-comments | |
| TikTok | /tiktok/get-user, /tiktok/get-video-comments, /tiktok/search-videos |
| YouTube | /youtube/get-video (with transcript) |
Call the API from JavaScript
Any HTTP client works. This example uses the built-in fetch in Node.js to read a LinkedIn profile. Keep the key on the server: anyone holding it can spend your credits.
const res = await fetch( "https://api.bridgly.app/linkedin/get-profile-from-url", { method: "POST", headers: { Authorization: `Bearer ${process.env.BRIDGLY_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ memberIdentity: "satya-nadella" }), },);if (!res.ok) throw new Error(`Bridgly ${res.status}`);const { data, creditsCost } = await res.json();console.log(data.headline, creditsCost);Writing TypeScript? The TypeScript SDK wraps these same endpoints with typed inputs, typed results, automatic pagination and rate-limit retries.
Call the API from Python
There is nothing to install beyond an HTTP library. Here requests pulls the newest posts of a subreddit.
import osimport requestsr = requests.post( "https://api.bridgly.app/reddit/list-subreddit-posts", headers={"Authorization": f"Bearer {os.environ['BRIDGLY_API_KEY']}"}, json={"subreddit": "programming", "sort": "new", "count": 10}, timeout=60,)r.raise_for_status()for post in r.json()["data"]["posts"]: print(post["title"])Paginate through results
List endpoints return one page at a time. count sets the page size where an endpoint takes it, and nextCursor points at the next page. Loop until nextCursor is null: a page can hold fewer results than count and still have more after it.
let cursor;do { const res = await fetch("https://api.bridgly.app/x/get-followers", { method: "POST", headers: { Authorization: `Bearer ${process.env.BRIDGLY_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ userId: "44196397", cursor }), }); const { data } = await res.json(); console.log(data.users.length); cursor = data.nextCursor ?? undefined;} while (cursor);Errors and status codes
Errors use one body, { "status": "error", "message": "..." }, and the HTTP status tells you what happened. Branch on the status, not the message text.
| Status | Meaning | What to do |
|---|---|---|
400 | The JSON body failed validation. | Check the endpoint schema in the API reference. |
401 | Missing, malformed or revoked API key. | Check the Authorization header and that the key is active. |
402 | Out of credits. | Top up from Billing, or turn on auto top-up. |
404 | The profile, post or page does not exist or is not public. | Confirm the identifier. |
429 | Rate limit exceeded. | Wait for the Retry-After seconds, then retry. |
500 | The scrape failed unexpectedly. | Retry after a short delay. |
Rate limits
Limits apply per platform and are shared by every key on your account, so a LinkedIn burst never slows down your Reddit calls. The standard limit is 2 requests per second and 80 per minute per platform. Larger credit purchases raise it to 5 per second (Growth) or 25 per second (Scale). Every response carries X-RateLimit-Limit and X-RateLimit-Remaining, and a 429 carries Retry-After. Rejected requests cost no credits. See pricing for the tiers.
REST API questions
Is there a free tier for the Bridgly API?
Yes. Signing up with a business email gives you 100 free credits, which is about 100 calls. No credit card is required. After that you buy credits as you need them, and they never expire.
Which languages can call the REST API?
Any language with an HTTP client: JavaScript, TypeScript, Python, Go, Ruby, PHP, Java, C#, or plain cURL. TypeScript users can also use the official SDK for typed inputs and results.
Do I need a LinkedIn, X or Reddit developer account?
No. Bridgly handles access to each platform. You only need a Bridgly API key, and you never share your own social media logins.
How fast are responses?
Most single-record calls return in about a second. Every response includes timeMs so you can measure it for your own workload.
Can I call the API from the browser?
Do not put your API key in browser or mobile code, because anyone could read it and spend your credits. Call Bridgly from your server or a serverless function and pass the result to your frontend.
What happens when I run out of credits?
Requests return 402 Payment Required until you top up. You can turn on auto top-up in Billing to refill your balance when it falls below a threshold you set.
Further reading
Pull your first profile in minutes.
Start with 100 free credits on a business email. The same data flows through the API, MCP, SDK and CLI.