Get started
API & MCP
Search the Launch Llama catalog, audit a site before it launches, plan directory campaigns, and run founder ops (analytics, badge, changelog) — from an agent or from curl. MCP and REST share the same tools; signed-in site chat calls them too.
OpenAPI spec → Discovery JSON → llms.txt → MCP markdown →
MCP and REST share one backend — the same catalog search, readiness checks, and draft creation either way.
Claude.ai connectors / registry: Launch Llama is not listed there. Use Claude Code or Claude Desktop with the Streamable HTTP URL below, or call REST with curl (no API key for drafts).
What an agent can do
Reads are anonymous. Your agent can search the catalog, pull a full listing, and run a launch readiness audit against any URL without credentials.
Draft creation is also anonymous — pass a product URL and founder email to POST /submissions (or MCP submit_product). The response includes a review_url. The UUID in that link is the secret. Founders must sign in at /submit to finish.
What an agent cannot do
Anonymous agents open drafts only — they cannot publish, pay, or install the badge. MCP cannot publish.
Approved partners with an X-Partner-Key can publish live via publish: true, founder email, and marketing_consent: true. That path skips free upvote/badge gates. Partners must collect consent before calling publish. Keep the key on your server — never in a webpage or public repo.
Endpoints at a glance
| MCP | https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp |
| REST | https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1 |
| Submit | https://tools.launchllama.co/submit |
Preflight: launch readiness
Before submit_product, run check_launch_readiness on the product URL for duplicate checks, badge detection, and a suggested listing.
Quickstart
No API keys to create. Run a catalog search, audit the URL, then open a draft.
1. Search the catalog
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/products?q=ai&limit=5" \ -H "Accept: application/json"
2. Audit the URL
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/launch-readiness?url=https://yourproduct.com" \ -H "Accept: application/json"
3. Open a draft
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions" \
-H "Content-Type: application/json" \
-H "X-Partner-Source: your-agent" \
-d '{"url":"https://yourproduct.com","email":"founder@yourproduct.com"}'
Authentication
Public reads and drafts
Search, readiness, and draft creation need no key. The draft UUID is the secret. X-Partner-Source is attribution only.
Partner publish
Live publish needs an issued X-Partner-Key on your server — never in a browser. MCP cannot publish.
Founder tools
Authorization: Bearer <Supabase user JWT> for /me/* (same session as the dashboard).
Got a directory? Apply to use our API
If you run a startup or AI directory, you can publish listings live with a partner key. Agents and MCP still only open drafts. Approved partners skip the free badge, upvote, and wait gates.
Keep the key on your server. Collect founder email and newsletter consent before you publish.
REST API
Plain HTTP for scripts, CI, and partner integrations. The MCP server calls these same paths.
| Operation | Method | Path | Auth | Input |
|---|---|---|---|---|
search_productsKeyword search with optional category, type, and period filters. |
GET | /products | None | q, limit, offset, category, type, period |
get_top_productsTop N listings by upvotes — no keyword required. |
GET | /products/top | None | n, offset, category, type, period |
list_categoriesDistinct category labels for filter discovery. |
GET | /categories | None | — |
get_productThe full listing for one product. |
GET | /products/{slug} | None | slug |
list_launch_directoriesVetted directory submission catalog (~610) with filters. |
GET | /launch-directories | None | category, pricing, min_dr, launch_platform, q, limit, offset, sort |
plan_directory_campaignWeek-by-week Free→Freemium→Paid directory plan. |
POST | /directory-campaign/plan | None | url, category, budget, limit |
check_launch_readinessPreflight audit: duplicates, badge, listing quality, next free weeks. |
GET | /launch-readiness | None | url |
get_badge_snippetHTML + markdown badge snippets. |
GET | /badge | None | variant |
verify_badgeScrape badge; with JWT + ownership sets badge_added. |
POST | /badge/verify | None (JWT to persist) | url, tool_id? |
get_newsletter_ad_optionsNewsletter ad packages + checkout deep links (no Stripe session). |
GET | /newsletter-ads | None | tool_id? |
get_first_users_reportFirst Users ICP report from homepage scrape + AI. |
POST | /first-users | None (JWT for tool_id) | url | tool_id |
submit_productOpen a draft, or partner-publish a live listing with /submit fields (skips badge/upvote gates). |
POST | /submissions | None (draft) · X-Partner-Key (publish) | url, partner, email, marketing_consent, publish, categories, pricing_tier, … |
get_submissionFetch a draft you already created (resume in the browser). |
GET | /submissions/{id} | UUID secret | id |
get_my_launchesOwned launches with status, badge, go_live, weekly rank. |
GET | /me/launches | Bearer JWT | — |
get_launch_analyticsOwner analytics: impressions, clicks, outbound, newsletter opens. |
GET | /me/launches/{id}/analytics | Bearer JWT | tool id or slug |
get_directory_campaign_statusDirectory order + submission results for an owned tool. |
GET | /me/launches/{id}/directory-campaign | Bearer JWT | tool id or slug |
advise_growthStructured growth advice: quality, badge, plan, ads, Featured. |
GET | /me/launches/{id}/advise-growth | Bearer JWT | tool id or slug |
publish_changelogAppend a published changelog entry on the product page. |
POST | /me/launches/{id}/changelog | Bearer JWT | title, body |
Products
list_categories
Distinct category labels for filter discovery.
- Method:
- GET /categories
- Auth:
- None
- Input:
- —
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/categories" \ -H "Accept: application/json"
get_top_products
Top N listings by upvotes — no keyword required.
- Method:
- GET /products/top
- Auth:
- None
- Input:
- n, offset, category, type, period
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/products/top?n=10&category=AI&period=week" \ -H "Accept: application/json"
search_products
Keyword search with optional category, type, and period filters.
- Method:
- GET /products
- Auth:
- None
- Input:
- q, limit, offset, category, type, period
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/products?q=ai&limit=5" \ -H "Accept: application/json"
get_product
The full public listing for one product slug.
- Method:
- GET /products/{slug}
- Auth:
- None
- Input:
- slug
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/products/clawteams" \ -H "Accept: application/json"
Directories & badge
Plan backlink campaigns from the vetted directory catalog, grab the free badge snippet, and verify install.
list_launch_directories
Filter the ~610 vetted directories in the Launch Llama tracker.
- Method:
- GET /launch-directories
- Auth:
- None
- Input:
- category, pricing, min_dr, launch_platform, q, limit, offset, sort
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/launch-directories?pricing=Free&min_dr=40&limit=10" \ -H "Accept: application/json"
plan_directory_campaign
Week-by-week plan: Free by DR first, then Freemium, then Paid.
- Method:
- POST /directory-campaign/plan
- Auth:
- None
- Input:
- url, category, budget, limit
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/directory-campaign/plan" \
-H "Content-Type: application/json" \
-d '{"url":"https://yourproduct.com","category":"AI","budget":"mixed","limit":24}'
get_badge_snippet
HTML and markdown badge snippets plus docs links.
- Method:
- GET /badge
- Auth:
- None
- Input:
- variant=default|white
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/badge" -H "Accept: application/json"
verify_badge
Scrape the page for the badge. With Bearer JWT + owned tool_id, sets badge_added=true.
- Method:
- POST /badge/verify
- Auth:
- None (JWT to persist)
- Input:
- url, tool_id?
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/badge/verify" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \
-d '{"url":"https://yourproduct.com","tool_id":"YOUR_TOOL_UUID"}'
get_first_users_report
First Users ICP report: segments, pain points, subreddits, search queries.
- Method:
- POST /first-users
- Auth:
- None (JWT for tool_id)
- Input:
- url | tool_id
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/first-users" \
-H "Content-Type: application/json" \
-d '{"url":"https://yourproduct.com"}'
Launch readiness
check_launch_readiness
Preflight audit: duplicate check, free badge detection, listing quality hints, next free launch weeks, badge HTML snippet, suggested listing, and next steps. Run this before submit_product.
- Method:
- GET /launch-readiness
- Auth:
- None
- Input:
- url
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/launch-readiness?url=https://yourproduct.com" \ -H "Accept: application/json"
Submissions
submit_product
Anonymous draft, or partner publish with /submit fields (live, skips free gates).
- Method:
- POST /submissions
- Auth:
- None (draft) · X-Partner-Key (publish)
- Input:
- url, partner, email, marketing_consent, publish, categories, pricing_tier, …
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions" \
-H "Content-Type: application/json" \
-H "X-Partner-Source: your-agent" \
-d '{"url":"https://yourproduct.com","email":"founder@yourproduct.com"}'
Partner publish
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions" \
-H "Content-Type: application/json" \
-H "X-Partner-Key: YOUR_PARTNER_KEY" \
-d '{
"url":"https://yourproduct.com",
"publish":true,
"email":"founder@yourproduct.com",
"marketing_consent":true,
"partner":"your-partner-slug",
"product_name":"Your Product",
"short_description":"One-line tagline",
"long_description":"Optional longer description",
"creator_name":"Founder Name",
"categories":["Artificial Intelligence","SaaS"],
"pricing_tier":"freemium",
"twitter_handle":"founder",
"logo_url":"https://yourproduct.com/logo.png"
}'
get_submission
Fetch an open draft by UUID from POST /submissions (the id field). Placeholders like {draft-id} are not valid.
- Method:
- GET /submissions/{id}
- Auth:
- UUID secret
- Input:
- id
# 1) Open a draft (copy the "id" UUID from the JSON response)
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions" \
-H "Content-Type: application/json" \
-d '{"url":"https://yourproduct.com"}'
# 2) Fetch that draft — use the real UUID, not the literal text "{draft-id}"
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/submissions/00000000-0000-0000-0000-000000000000" \
-H "Accept: application/json"
Founder (/me)
Pass Authorization: Bearer <Supabase user JWT> (same session as the dashboard).
get_my_launches
Owned launches with status, badge, go_live_at, and current-week rank when available.
- Method:
- GET /me/launches
- Auth:
- Bearer JWT
- Input:
- —
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches" \ -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \ -H "Accept: application/json"
get_launch_analytics
Owner analytics: engagement, impressions/clicks, newsletter feature opens.
- Method:
- GET /me/launches/{id}/analytics
- Auth:
- Bearer JWT
- Input:
- tool id or slug
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches/YOUR_TOOL_UUID/analytics" \ -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \ -H "Accept: application/json"
get_directory_campaign_status
Directory backlink orders and submission results for an owned tool.
- Method:
- GET /me/launches/{id}/directory-campaign
- Auth:
- Bearer JWT
- Input:
- tool id or slug
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches/YOUR_TOOL_UUID/directory-campaign" \ -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \ -H "Accept: application/json"
advise_growth
Structured growth payload: page quality, badge, rank, directory plan, newsletter ads.
- Method:
- GET /me/launches/{id}/advise-growth
- Auth:
- Bearer JWT
- Input:
- tool id or slug
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches/YOUR_TOOL_UUID/advise-growth" \ -H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \ -H "Accept: application/json"
publish_changelog
Append a published changelog entry on the product page.
- Method:
- POST /me/launches/{id}/changelog
- Auth:
- Bearer JWT
- Input:
- title, body
curl -s -X POST "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/me/launches/YOUR_TOOL_UUID/changelog" \
-H "Authorization: Bearer YOUR_SUPABASE_USER_JWT" \
-H "Content-Type: application/json" \
-d '{"title":"Shipped dark mode","body":"- Dark theme\n- Faster cold start"}'
get_newsletter_ad_options
Newsletter ad packages + checkout deep links (no Stripe session from the API).
- Method:
- GET /newsletter-ads
- Auth:
- None
- Input:
- tool_id?
curl -s "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-v1/newsletter-ads" \ -H "Accept: application/json"
Recommended workflow
-
1. Discover categories
list_categories returns valid category labels — use them with get_top_products or search_products filters.
GET /categories -
2. Browse or search the catalog
get_top_products ranks the live catalog without a keyword (e.g. top 10 AI tools this week). search_products adds a text query on name and tagline.
GET /products/top?n=10&category=AI&period=week -
3. Look around by keyword
search_products tells you what already exists in the category you are launching into — the fastest way to write a tagline that is not a duplicate of three others.
GET /products?q=…&category=… -
4. Audit before you write anything
check_launch_readiness returns whether the URL is already listed, whether the free badge is installed, listing quality hints, next free launch weeks, a suggested listing, and the badge snippet if it is missing.
GET /launch-readiness?url=… -
5. Plan directory backlinks
list_launch_directories and plan_directory_campaign sequence Free→Freemium→Paid submissions by DR.
GET /launch-directories · POST /directory-campaign/plan -
6. Open the draft (or partner-publish)
Anonymous submit_product requires founder email, returns review_url, and emails them a finish-listing sequence. Approved partners can pass publish=true with X-Partner-Key, email, and marketing_consent=true to go live immediately (skips badge + upvote gates).
POST /submissions -
7. Founder finishes in the browser (draft path)
For drafts: edit copy, upload media, install the free badge or pick Instant Launch, and submit. Partner-published listings are already live.
/submit?draft=… -
8. Founder ops (signed in)
Pass Authorization: Bearer <Supabase user JWT> for get_my_launches, analytics, advise_growth, directory campaign status, and publish_changelog. Site chat uses the same tools when logged in.
GET /me/launches
Anonymous drafts need a human at /submit. Partner publish (X-Partner-Key) goes live immediately and skips free badge/upvote gates.
Install MCP
Streamable HTTP MCP — hosted, nothing to install from npm. Not available via the Claude.ai web connectors registry; use Claude Code, Claude Desktop, or Cursor.
https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcpClaude Code
claude mcp add --transport http launchllama https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp
Cursor / Claude Desktop
{
"mcpServers": {
"launchllama": {
"url": "https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp"
}
}
}
Verify it works
curl -i https://kxdushqmihjyuddcwkpw.supabase.co/functions/v1/api-mcp -X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
MCP tools
| Tool | Auth |
|---|---|
| search_products | None |
| get_top_products | None |
| list_categories | None |
| get_product | None |
| list_launch_directories | None |
| plan_directory_campaign | None |
| check_launch_readiness | None |
| get_badge_snippet | None |
| verify_badge | None (JWT to persist) |
| get_newsletter_ad_options | None |
| get_first_users_report | None (JWT for tool_id) |
| submit_product | None (draft) · X-Partner-Key (publish) |
| get_submission | UUID secret |
| get_my_launches | Bearer JWT |
| get_launch_analytics | Bearer JWT |
| get_directory_campaign_status | Bearer JWT |
| advise_growth | Bearer JWT |
| publish_changelog | Bearer JWT |
Rate limits
Public reads and draft creation are open today with no API keys. Rate limit headers are on the roadmap.
Errors
| 400 | Bad request — invalid JSON, missing url, or invalid draft UUID |
| 404 | Product or draft not found (or draft expired) |
| 401 | Missing/invalid partner key or founder JWT |
| 409 | Conflict (e.g. partner URL already listed) |
| 500 | Server error — retry or contact support |
Roadmap
| Item | Status |
|---|---|
| Pretty /api/mcp URL on tools.launchllama.co | Planned |
| Per-founder long-lived API keys / OAuth device flow | Planned |
| Stripe checkout confirm tool (opt-in) | Planned |
| Rate limit headers on public reads | Planned |
Ready to submit?
Start in the browser or call the API. Either way, you review before it ships.
Submit your tool →