Docs · agents & humans
Machine-readable listing API. Prefer these endpoints over the HTML form — the form at /submit stays for humans. OpenAPI: /openapi.json. Public MCP: /mcp (Streamable HTTP).
https://launchsignal.ai · JSON request/response · CORS: public GET (*); POST allows browser/agent Origins with Content-Type / Accept.
Submit a listing (pending review). Fields: name, url, description, category, email, optional logo_url. Categories: SaaS, AI, Developer Tools, Design, Marketing, Productivity, Other.
curl -sS -X POST https://launchsignal.ai/api/v1/products \
-H 'content-type: application/json' \
-H 'accept: application/json' \
-d '{
"name": "Acme",
"url": "https://example.com",
"description": "Does one useful thing.",
"category": "AI",
"email": "you@example.com"
}'
Pending is not live. After a 201 with status: "pending", GET /api/v1/products/:slug returns 404 not_found and MCP get_product returns not_found until a moderator approves the listing. That is expected; keep the slug and don't resubmit (a resubmit returns 409 duplicate_domain).
List approved products. Query: limit (1–100, default 50), cursor or offset, optional category.
curl -sS 'https://launchsignal.ai/api/v1/products?limit=10&category=AI'
Detail for an approved listing. 404 not_found if missing or not approved yet (pending listings included).
curl -sS https://launchsignal.ai/api/v1/products/acme
Boost an approved listing. Body: {"plan":"priority"|"featured"} (no amounts — server-side only). Submit stays free; boost after approve (or on an existing approved slug). Same logic as POST /api/checkout. Paid placement is not available yet: this endpoint and /api/checkout currently return 503 {"ok":false,"error":"payments_unavailable","message":"Paid placement is not available yet."} and change nothing.
curl -sS -X POST https://launchsignal.ai/api/v1/products/acme/boost -H 'content-type: application/json' -H 'accept: application/json' -d '{"plan":"priority"}'
Flow for agents: submit → wait for approved → add any <a href> to launchsignal.ai on the product homepage (plain text link is enough; image badge optional) → verify. First success grants 7 days of free Priority placement once; while verified the listing shows “Verified”. Snippets use rel="nofollow" (any rel passes verification); listing outbound links are always rel="ugc nofollow", or rel="sponsored" for paid boosts. Rechecked weekly; if the link disappears, verification is removed (Priority is kept). Submit responses include hint and next_steps.
Preferred text snippet:
<a href="https://launchsignal.ai/l/acme?utm_source=backlink" rel="nofollow">Listed on LaunchSignal</a>
Optional image badge: GET /badge/:slug.svg (light) · GET /badge/:slug.svg?theme=dark — approved slugs only.
<a href="https://launchsignal.ai/l/acme?utm_source=badge" rel="nofollow"><img src="https://launchsignal.ai/badge/acme.svg" alt="Listed on LaunchSignal" width="200" height="54"></a>
Fetches the listing url only (5s timeout, 512KB, text/html, ≤3 redirects, public hosts only) and looks for a link to launchsignal.ai / www.launchsignal.ai. Limit 3 checks per slug per UTC day.
curl -sS -X POST https://launchsignal.ai/api/v1/products/acme/verify-backlink -H 'accept: application/json'
POST /api/submit still works (form redirects or JSON). Prefer /api/v1/products.
missing_fields — required field emptyinvalid_url / invalid_logo_urlinvalid_email / invalid_categoryinvalid_cursor / invalid_limitinvalid_plan — plan must be priority or featuredrejected_policy (400, submit) — name, description, url or email matched the content policy; don't retryduplicate_domain (409, submit) — an approved or pending listing already uses this host (one per host; www. ignored)rate_limited (429) — submit: this email already has 3 pending submissions from the last 24h; verify-backlink: 3 checks per slug per UTC daynot_found (404) — missing or not approved yet (pending listings return this until approved)not_approved — boost requires approved statuspayments_unavailable (503, boost / checkout / MCP boost_product) — paid placement is not available yet; nothing was changedstripe_not_configured (503) — payments enabled but not configuredserver_errorPublic, authless Model Context Protocol server (Streamable HTTP, JSON). Same listing logic as the REST API — no OAuth this round. Tools: submit_product, list_products, get_product, boost_product (slug + plan; returns payments_unavailable — paid placement is not available yet), verify_backlink (slug — same as the verify-backlink endpoint).
{
"mcpServers": {
"launchsignal": {
"url": "https://launchsignal.ai/mcp"
}
}
}
Submit is always free and does not take boost fields (unknown fields are ignored). Paid Priority/Featured is not available yet. MCP OAuth deferred. See also /llms.txt and /openapi.json.