Build with Top10Grid
Embed ranked lists anywhere, fetch curated data via our REST API, and integrate community rankings into your app, blog, or newsletter.
Embed a Top 10 list in one line of HTML
Copy this snippet into any blog, newsletter, or website. Responsive, styled, and dark-mode ready.
Recommended: iframe embed
Self-contained, responsive, works everywhere. Best for blogs, news sites, and newsletters.
Alternative: script embed
Lightweight, integrates with your page styling. Use for custom themes or page builders.
<iframe
src="https://top10grid.com/embed/YOUR-LIST-SLUG"
width="480" height="520"
frameborder="0"
style="border:none;border-radius:12px;overflow:hidden;max-width:100%"
title="Top 10 List"
loading="lazy"
></iframe>Replace YOUR-LIST-SLUG with any list slug from Top10Grid. Every list page has an "Embed" button that copies this code for you.
Why developers love Top10Grid
Fast REST API
JSON responses with Fastify, sub-50ms latency, open CORS. Fetch any list, search, or trending data — no key required for public endpoints.
Embeddable widgets
Zero-config iframe embeds. Responsive, styled, dark-mode ready. Works on any blog, Notion page, or newsletter.
Structured data
Every list includes entity metadata, categories, tags, and source citations. Build rich integrations with typed data.
API key auth
Simple API key authentication for server-to-server integrations. Rate-limited and audited per key.
CORS & security
Proper CORS headers, rate limiting, and input validation on every endpoint. No surprises.
Webhook support
Automation-ready API. Publish lists, sync content, and trigger actions via webhooks from any workflow tool.
Quick start: fetch a list in 3 lines
const res = await fetch(
"https://top10grid.com/api/v1/lists/YOUR-SLUG"
);
const list = await res.json();
console.log(list.title, list.items);const res = await fetch(
"https://top10grid.com/api/v1/search?q=best+albums"
);
const { data } = await res.json();
data.forEach(list =>
console.log(list.title, list.category)
);Public API — no key required
Every endpoint under /api/v1/public/ is open: no API key, no sign-up, CORS enabled for any origin, responses cached for 5 minutes, and a limit of 60 requests per minute per IP. Start here — the key-authenticated endpoints below are only needed for writing.
Sending a scripted request? Set a descriptive User-Agent. Requests whose user-agent contains curl/, wget/ or python-requests are refused with 429 bot_blocked on the authenticated routes. The public routes above are always exempt.
/api/v1/public/listsPublished public lists, newest first. Query: ?skip (default 0), ?take (1-100, default 20), ?category. Returns { data: [...], meta: { total, skip, take } }.
/api/v1/public/lists/:slugOne list in full — description, cover image, author, and every item with its title, rank, description and imageUrl. 404 if the list is not published or not public.
/api/v1/public/categoriesEvery category with its published list count. Cached 1 hour.
/api/v1/public/trendingLists ranked by a time-decayed vote score. Query: ?take (1-100, default 10). Cached 2 minutes.
curl -H 'User-Agent: MyApp/1.0' \
'https://top10grid.com/api/v1/public/lists/top-10-greatest-rappers-of-all-time'{
"data": {
"title": "Top 10 Greatest Rappers of All Time",
"slug": "top-10-greatest-rappers-of-all-time",
"category": "MUSIC",
"itemCount": 10,
"items": [
{ "rank": 1, "title": "...", "description": "...", "imageUrl": "..." }
]
}
}API reference
Base URL: https://top10grid.com/api/v1 | No-auth public endpoints
Lists
/listsBrowse all published lists. Supports ?category, ?locale, ?trending, ?page, ?pageSize filters.
/lists/:slugFetch a single list with all items, sources, tags, and metadata.
/listsCreate a new list. Requires authentication.
/lists/:slug/twitter-threadGenerate a shareable Twitter thread for any list.
Search
/searchFull-text search across all lists and items. Supports ?q query parameter.
/search/suggestionsAutocomplete suggestions for search queries.
Trending & Discovery
/trendsTrending lists across all categories.
/daily/listThe featured list of the day.
/recommendationsPersonalized list recommendations (auth optional).
Users & Social
/users/:usernameFetch a public user profile with stats and badges.
/users/:username/listsLists by a specific curator.
Entities
/entities/:idFetch an entity with cross-list appearances.
/peopleBrowse people rankings across categories.
/servicesBrowse service/product rankings.
Getting Started
Generate an API key
Go to Settings → API Keys and create a new key. Choose only the scopes you need. The raw key is shown once — store it securely.
Make your first request
Include your key in the Authorization header:
curl https://top10grid.com/api/v1/lists?category=technology \
-H "Authorization: Bearer t10_YOUR_API_KEY"Understand authentication
API keys use the Authorization: Bearer t10_… header format. Public read endpoints (lists, search, trending) work without a key, but are rate-limited to 60 req/min per IP. Authenticated endpoints require a key with the appropriate scope.
Rate limits
Each API key has its own rate limit (default 60 req/min). You can adjust this in Settings → API Keys. When you exceed the limit the API returns 429 Too Many Requests.
Authentication
Public endpoints
Most read endpoints (lists, search, trending) are public and require no authentication. Rate limited to 100 requests per minute per IP.
API key authentication
For server-to-server integrations, use an API key in the Authorization: Bearer t10_YOUR_KEY header. Manage your keys →
API Key Scopes
Each API key carries one or more scopes that control which endpoints it can call. Grant only the scopes your integration actually needs.
| Scope | Allows | Endpoints |
|---|---|---|
| READ_LIST | Read and search lists | GET /lists/search, GET /lists/:id |
| CREATE_LIST | Create new lists | POST /lists |
| CREATE_ITEMS | Add items to lists | POST /lists/:id/items |
| UPDATE_LIST | Edit list metadata | PATCH /lists/:id |
| PUBLISH_LIST | Publish lists | POST /lists/:id/publish |
| FULL_ACCESS | All of the above | All API endpoints |
Rate limits
| Tier | Rate limit | Notes |
|---|---|---|
| Anonymous | 100 req/min | Per IP address |
| Authenticated | 100 req/min | Per user ID |
| API key | Custom | Configured per key |
Ready to build?
Start with the embed widget for instant integration, or explore the full API for custom builds.