Introduction
The Big Brains Partner API lets approved partners list and display our internships, job postings and courses inside their own products. All endpoints are read-only and return JSON.
Base URL
https://api.bigbrainss.com/partner/v1To request access, email support@bigbrainslearning.com with your platform name, a short description of the integration, and your expected request volume.
Authentication
Every request needs an API key, sent in the X-API-Key header. A Bearer token in the Authorization header also works.
curl https://api.bigbrainss.com/partner/v1/ping \
-H "X-API-Key: bbl_live_your_key_here"
# Or with a Bearer token:
curl https://api.bigbrainss.com/partner/v1/ping \
-H "Authorization: Bearer bbl_live_your_key_here"Keep your key secret
Call this API from your server, never from browser or mobile client code — a key shipped to a client can be extracted. If a key is exposed, contact us and we will revoke it.
Rate limits
The default allowance is 60 requests per minute per key. Every response carries the current allowance:
X-RateLimit-Limit— your per-minute ceilingX-RateLimit-Remaining— requests left in the current windowRetry-After— seconds to wait (sent only with a 429)
Exceeding the limit returns 429. We recommend caching responses for 5–15 minutes: listings change slowly, and it keeps you well inside the limit. Need a higher ceiling? Just ask.
Endpoints
Internships
/internshipsLists all open internships, newest first.
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number. Defaults to 1. |
limit | integer | Items per page, 1–100. Defaults to 20. |
category | string | Frontend, Backend, FullStack, Mobile, AI/ML, Design, DevOps, QA or Other. |
paid | boolean | true for paid only, false for unpaid. |
search | string | Matches title and description. |
/internships/:idA single internship by id.
Job postings
/careersLists all open job postings, newest first.
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number. Defaults to 1. |
limit | integer | Items per page, 1–100. Defaults to 20. |
type | string | full-time, part-time, internship or contract. |
location | string | Partial match, e.g. “Lahore” or “Remote”. |
search | string | Matches title and description. |
/careers/:idA single job posting by id.
Courses
/coursesLists published courses, newest first.
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number. Defaults to 1. |
limit | integer | Items per page, 1–100. Defaults to 20. |
free | boolean | true for free courses only. |
search | string | Matches title and summary. |
/courses/:idA single published course by id.
Utility
/categoriesThe valid values for the category and type filters, so you can build filter UI without hardcoding them.
/pingConfirms your key works and reports your rate limit. Useful when wiring up the integration.
Response format
List endpoints return a data array plus a meta object for pagination. Single-item endpoints return one data object.
{
"data": [
{
"id": "68b3f2a1c4e5d6f7a8b9c0d1",
"title": "Frontend Development Intern",
"description": "Build responsive interfaces with React...",
"category": "Frontend",
"paid": true,
"stipend": {
"amount": 25000,
"min": 20000,
"max": 30000,
"type": "monthly",
"currency": "PKR"
},
"durationWeeks": 8,
"learningOutcomes": [
"Build production React components",
"Work with REST APIs"
],
"thumbnailUrl": "https://cdn.bigbrainss.com/internships/frontend.png",
"url": "https://www.bigbrainslearning.com/internships/68b3f2a1c4e5d6f7a8b9c0d1",
"postedAt": "2026-08-14T09:30:00.000Z"
}
],
"meta": {
"page": 1,
"limit": 20,
"total": 37,
"totalPages": 2,
"hasMore": true
}
}Errors
Errors use standard HTTP status codes and return an error slug with a human-readable message.
| Status | Error | Meaning |
|---|---|---|
400 | invalid_id | The id in the path is malformed. |
401 | missing_api_key | No API key was sent. |
401 | invalid_api_key | The key is unknown or revoked. |
401 | expired_api_key | The key passed its expiry date. |
404 | not_found | No such item, or it is no longer public. |
429 | rate_limit_exceeded | Too many requests — check Retry-After. |
500 | server_error | Something failed on our side. |
{
"error": "rate_limit_exceeded",
"message": "Rate limit of 60 requests per minute exceeded. Retry in 24s."
}Code examples
cURL
# Paid frontend internships, 10 per page
curl "https://api.bigbrainss.com/partner/v1/internships?category=Frontend&paid=true&limit=10" \
-H "X-API-Key: bbl_live_your_key_here"Node.js
const API_KEY = process.env.BIG_BRAINS_API_KEY;
const BASE = "https://api.bigbrainss.com/partner/v1";
async function getInternships({ category, page = 1 } = {}) {
const params = new URLSearchParams({ page, limit: 20 });
if (category) params.set("category", category);
const res = await fetch(`${BASE}/internships?${params}`, {
headers: { "X-API-Key": API_KEY },
});
if (!res.ok) {
const err = await res.json();
throw new Error(`${res.status} ${err.error}: ${err.message}`);
}
const { data, meta } = await res.json();
return { internships: data, meta };
}
const { internships, meta } = await getInternships({ category: "Backend" });
console.log(`${internships.length} of ${meta.total}`);Python
import os
import requests
API_KEY = os.environ["BIG_BRAINS_API_KEY"]
BASE = "https://api.bigbrainss.com/partner/v1"
def get_internships(category=None, page=1):
params = {"page": page, "limit": 20}
if category:
params["category"] = category
res = requests.get(
f"{BASE}/internships",
params=params,
headers={"X-API-Key": API_KEY},
timeout=10,
)
res.raise_for_status()
body = res.json()
return body["data"], body["meta"]
internships, meta = get_internships(category="AI/ML")
print(f"{len(internships)} of {meta['total']}")Usage terms
Attribution
Display “Powered by Big Brains Learning” alongside our content, linking back to the original listing on bigbrainslearning.com.
Link back
Every listing you display must link to its url from the API response, so applications complete on our platform.
No resale
Data from this API may not be resold, sublicensed, or redistributed as a dataset.
Caching
Cache responses for up to 24 hours. Do not store our content indefinitely — listings close and content changes.
Accuracy
Do not alter listing details (stipend, duration, requirements). Present them as returned.
Fair use
Stay within your rate limit. Do not scrape endpoints not documented here.
Revocation
We may revoke a key at any time for breach of these terms, with notice where practical.
These terms sit alongside our Privacy Policy. We may update them; material changes will be emailed to the address on your key.
Support
Questions about the API, a higher rate limit, or a bug to report? Email support@bigbrainslearning.com. Include your key prefix (the bbl_live_… part) — never the full key.