Gary Club
Docs API

Read our docs and changelog programmatically

A no-auth, IP-rate-limited surface so any client β€” LLM agent, MCP server, n8n flow, or your own service β€” can pull product docs and changelog without first having an API key. The chicken-and-egg problem solved.

MCP-friendly by design
These endpoints are exposed as MCP tools too: docs.products, docs.list, docs.get, docs.search, docs.changelog. A Claude Desktop / Code client connected to our MCP server can learn the platform before it has a key.

Auth + rate limit#

No bearer required. We rate-limit per source IP at 120 requests / 60-second sliding window β€” twice the per-key default. Same X-RateLimit-Limit / Remaining / Reset headers as authenticated routes. Permissive CORS (*) so any browser or non-browser client can fetch.

Products#

List documented products

GET/v1/docs/products
Returns the products gary.club ships docs for. Use this to discover slugs you'll pass to /docs/pages and /docs/changelog.
Request
curl https://agency.gary.club/api/public/v1/docs/products
200 OK
{
  "data": [
    {
      "id": "11111111-1111-1111-1111-111111111111",
      "slug": "ai-agency-unlocked",
      "name": "AI Agency Unlocked",
      "description": "Documentation for the agency portal at agency.gary.club",
      "icon": "πŸ€–"
    },
    {
      "id": "22222222-2222-2222-2222-222222222222",
      "slug": "gary-club-ecosystem",
      "name": "Gary Club Ecosystem",
      "description": "Documentation for gary.club/dashboard and the member experience",
      "icon": "πŸ¦’"
    }
  ]
}

List doc pages#

List published pages by product (titles + slugs only)

GET/v1/docs/pages
Returns titles + descriptions + slugs β€” no body. Use this to enumerate available pages and pick a slug, then fetch the body via /v1/docs/pages/{slug}.

Query parameters

productstringrequired
Product slug. ai-agency-unlocked or gary-club-ecosystem.
categorystring
Optional category slug filter.
limitintegerdefault: 50
1–200.
Request
curl "https://agency.gary.club/api/public/v1/docs/pages?product=gary-club-ecosystem&category=games"

Get one page#

Fetch a doc page (full body, both HTML and plaintext)

GET/v1/docs/pages/{slug}
Returns content_html (sanitized for safe embedding) and content_text (plaintext mirror).

Path parameters

slugstringrequired
Page slug, e.g. buy-a-giraffe.

Query parameters

productstring
Optional. Disambiguate when the same slug exists across products.
Request
curl "https://agency.gary.club/api/public/v1/docs/pages/buy-a-giraffe?product=gary-club-ecosystem"

Full-text search across published pages

GET/v1/docs/search
ILIKE search across title, description, and content_text. Results include a snippet so consumers can render preview cards without fetching the full body.

Query parameters

qstringrequired
Search query (1–200 chars).
productstring
Optional. Restrict to one product.
limitintegerdefault: 10
1–50.
Request
curl "https://agency.gary.club/api/public/v1/docs/search?q=how+to+buy+gary"
200 OK β€” search response
{
  "data": [
    {
      "slug": "how-to-buy-gary",
      "title": "How to buy $GARY",
      "description": "Three paths β€” Jupiter (best), Coinbase / centralized exchanges, or any Solana DEX...",
      "snippet": "...$GARY trades on Solana. The token is the same wherever you buy β€” what differs is convenience...",
      "product": { "slug": "gary-club-ecosystem", "name": "Gary Club Ecosystem" },
      "category": { "slug": "tokens", "name": "Tokens & Wallets" },
      "url": "https://docs.gary.club/gary-club-ecosystem/how-to-buy-gary"
    }
  ],
  "count": 1,
  "query": "how to buy gary"
}

Changelog#

Recent changelog entries (newest first)

GET/v1/docs/changelog
Use this to surface recent platform changes to your end users, or to detect that a new feature shipped that you want to integrate against.

Query parameters

productstring
Optional product filter.
typestring
One of feature, improvement, fix, breaking, deprecation.
sincestring
ISO-8601 timestamp. Only entries published at-or-after this time.
limitintegerdefault: 25
1–100.
Request
curl "https://agency.gary.club/api/public/v1/docs/changelog?product=ai-agency-unlocked&type=breaking&limit=10"

Common patterns#

β€œHas anything new shipped since I last connected?”

Persist the last poll timestamp; on each run, ask /v1/docs/changelog?since=<your-timestamp>. New entries == platform changes worth surfacing.

β€œUser asked how to do X β€” what page should I open?”

Search first, fetch second. /v1/docs/search?q=<ask> returns ranked snippets; show the top result, or fetch the full body with /v1/docs/pages/{slug} when you want to quote it.

β€œI'm an LLM and I have no key yet”

Read /v1/docs/pages?product=ai-agency-unlocked&category=getting-started to find the onboarding pages. Read /v1/docs/pages/api-keys for instructions on minting a key. Then come back authenticated.

The MCP angle
These same endpoints are wired into the public MCP server as native tools. A Claude session connected to our MCP β€” even without an API key β€” can call docs.search and docs.get to read the platform's own documentation, then guide the user through key minting before any authenticated tool is invoked.