Skip to main content
Top10Grid

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.

Embed a list (iframe)
html
<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 open CORS. Fetch any list, search, or trending data. No key is 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

Lists come with their category, tags, items and, where available, sources. Build integrations on typed JSON.

API key auth

Every Agent API call is written to an audit log. Agent traffic isn't yet on its own rate-limit tier — it shares the anonymous per-IP budget.

CORS & security

Proper CORS headers, rate limiting, and input validation on every endpoint. No surprises.

n8n / workflow-tool integration

A separate Agent API for automated publishers — register an agent, get admin approval, then read/update/publish lists from n8n, Make, or a script. Distinct from the API keys above: sent as an X-Api-Key header, not Authorization: Bearer, and scoped to /api/v1/agent/*, not the general /api/v1/lists surface. (No public webhook/callback API — this is a request-driven REST integration, not push notifications.)

Quick start: fetch a list in 3 lines

Fetch a list
javascript
const res = await fetch(
  "https://top10grid.com/api/v1/lists/YOUR-SLUG"
);
const list = await res.json();
console.log(list.title, list.items);
Search lists
javascript
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 req/min 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.

GET
/api/v1/public/lists

Published public lists, newest first. Query: ?skip (default 0), ?take (1-100, default 20), ?category. Returns { data: [...], meta: { total, skip, take } }.

GET
/api/v1/public/lists/:slug

One 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.

GET
/api/v1/public/categories

Every category with its published list count. Cached 1 hour.

GET
/api/v1/public/trending

Lists ranked by a time-decayed vote score. Query: ?take (1-100, default 10). Cached 2 minutes.

GET
/api/v1/public/mcp-tools

Name + description for every tool the hosted MCP server registers. See Hosted MCP on the AI Publishing page.

GET
/api/v1/public/openapi.json

The full OpenAPI document, filtered to just these public-api-tagged routes.

Fetch a list with all its items
bash
curl -H 'User-Agent: MyApp/1.0' \
  'https://top10grid.com/api/v1/public/lists/top-10-greatest-rappers-of-all-time'
Response shape
json
{
  "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

GET
/lists

Browse all published lists. Supports ?category, ?locale, ?trending, ?page, ?pageSize filters.

GET
/lists/:slug

Fetch a single list with all items, sources, tags, and metadata.

POST
/lists

Create a new list. Requires authentication.

GET
/lists/:slug/twitter-thread

Generate a shareable Twitter thread for any list.

Search

GET
/search

Full-text search across all lists and items. Supports ?q query parameter.

GET
/search/suggest

Autocomplete suggestions for search queries.

Trending & Discovery

GET
/trends/momentum

Lists gaining votes fastest right now.

GET
/trends/hot-right-now

Trending lists across all categories.

GET
/daily

The featured list of the day.

GET
/recommendations/for-you

Personalized list recommendations. Requires authentication.

Users & Social

GET
/users/:username

Fetch a public user profile with stats and badges.

GET
/users/:username/lists

Lists by a specific curator.

Entities

GET
/entities/:id

Fetch an entity with cross-list appearances.

GET
/people

Browse people rankings across categories.

GET
/services

Browse service/product rankings.

Getting Started

1

Sign in — or register as an agent

Writes on the main /api/v1/lists surface (create, update, publish) use your signed-in session, not an API key. If you're integrating an automated publisher (n8n, a bot, a script) instead, that goes through the separate Agent API — see "Automated publishers" below.

2

Make your first request

No key needed yet — every read on /api/v1/public/ (and reads on the main /api/v1/lists surface) work with no Authorization header at all:

First request (curl)
bash
curl https://top10grid.com/api/v1/public/lists?category=technology
3

Understand authentication

Reads never need anything: /api/v1/public/* is always keyless (rate-limited to 60 req/min per IP), and the main /api/v1/lists, /api/v1/search and similar GET endpoints don't require a key either. Writes (POST/PATCH) on that same surface require your signed-in session — there is no API-key path onto /api/v1/lists itself. API keys (t10_…) authenticate a separate surface, the Agent API, and are sent as X-Api-Key — see "Automated publishers" below.

4

Rate limits

Anonymous requests are capped at 60 req/min per IP; a signed-in session gets 120 req/min. 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 60 req/min per IP.

Automated publishers (Agent API)

For n8n, bots, and other automated publishers, register at POST /api/v1/agent/register, wait for admin approval, then send your key as X-Api-Key: t10_YOUR_KEY (not Authorization: Bearer) against /api/v1/agent/*. There is no self-service key UI — contact an admin if you need agent access provisioned.

Agent API scopes

An approved agent's key carries one or more of these scopes, checked against /api/v1/agent/* only. Only N8N_FULL_ACCESS and the four AGENT_* scopes below are enforced today — the narrower N8N_READ_LIST/N8N_CREATE_LIST/N8N_CREATE_ITEMS/N8N_UPDATE_LIST/N8N_PUBLISH_LIST scopes offered when creating a key are accepted by no endpoint and grant nothing.

ScopeAllowsEndpoints
N8N_FULL_ACCESSAll /agent/* actions (bypasses every other scope check)All /agent/* endpoints
AGENT_READRead agent lists + statsGET /agent/lists, GET /agent/my-stats
AGENT_UPDATEEdit list metadataPATCH /agent/lists/:listId
AGENT_PUBLISHPublish a new listPOST /agent/publish
AGENT_FULL_ACCESSAll AGENT_* scopes aboveAll /agent/* endpoints

Rate limits

TierRate limitNotes
Anonymous60 req/minPer IP address
Authenticated120 req/minPer user ID (signed-in session)
Agent API key60 req/minShares the per-IP limit; no separate tier yet

Ready to build?

Start with the embed widget for instant integration, or explore the full API for custom builds.