{"openapi":"3.1.0","info":{"title":"FundedAPI","version":"1.0.0","summary":"Fresh funding. Free API. Built for devs.","description":"Track **every newly funded startup** — founders, contacts, hiring signals, priority score —\nin one clean REST API. Scraped daily from curated public sources. Free forever tier.\n\n### Quick start\n1. Sign in at [/dashboard](/dashboard) with GitHub (no password, no card).\n2. Copy your API key (starts with `fapi_`).\n3. Call any endpoint: `curl -H \"Authorization: Bearer fapi_xxx\" http://fundedapi.com/v1/startups`\n\n### Rate limits\n- **Anonymous:** 60 calls/hour per IP.\n- **Free tier (signed in):** 100 calls/day.\n- **Pro / Scale:** 10K / 100K calls/day (coming soon).\n\n### Response headers\nEvery authenticated response includes `X-RateLimit-Limit`, `X-RateLimit-Remaining`,\nand `X-RateLimit-Reset` (unix epoch seconds).","contact":{"name":"FundedAPI","url":"http://fundedapi.com"},"termsOfService":"http://fundedapi.com/terms"},"servers":[{"url":"http://fundedapi.com","description":"Production"}],"tags":[{"name":"Startups","description":"Query funded startups and their contacts"},{"name":"AI Search","description":"Natural language search powered by Perplexity"},{"name":"Stats","description":"Aggregate platform statistics"},{"name":"Investors","description":"Aggregated VC directory computed from the startup feed"},{"name":"Webhooks","description":"Real-time delivery when new startups match your filters"},{"name":"Saved Searches","description":"Named filter presets with email/Slack/webhook alerts. Free: 3 searches, weekly email. Pro: 20 searches, instant delivery, Slack + webhook channels."},{"name":"ICP Scoring","description":"Pro-only. Describe your ideal customer profile in plain English — AI scores every startup 0-100 with a reason. Powered by Perplexity, deterministic temperature=0, cached per (ICP + startup) pair."},{"name":"Watchlist","description":"Bookmark startups with an optional personal note. Free-tier feature, no caps. Drives repeat dashboard visits."},{"name":"MCP","description":"Model Context Protocol endpoint for Claude Desktop / Cursor / MCP agents"},{"name":"Account","description":"Manage your API key and session"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"Your API key as `Authorization: Bearer fapi_xxx`. Get one at /dashboard."},"apiKeyQuery":{"type":"apiKey","in":"query","name":"api_key","description":"Alternative for clients that can't set headers. Prefer the header form."}},"schemas":{"Startup":{"type":"object","required":["id","name","niches","hiringSignal","scrapedAt"],"properties":{"id":{"type":"string","example":"clx1a2b3c4d5e6f7g8h9i0j1k"},"name":{"type":"string","example":"NovaLabs"},"website":{"type":"string","nullable":true,"format":"uri","example":"https://novalabs.io"},"linkedinUrl":{"type":"string","nullable":true,"format":"uri","example":"https://linkedin.com/company/novalabs"},"country":{"type":"string","nullable":true,"example":"United States"},"city":{"type":"string","nullable":true,"example":"San Francisco"},"niches":{"type":"array","items":{"type":"string"},"example":["AI","DevTools"]},"fundingRound":{"type":"string","nullable":true,"example":"Seed"},"fundingAmount":{"type":"integer","nullable":true,"description":"USD","example":5000000},"fundingDate":{"type":"string","format":"date-time","nullable":true,"example":"2026-04-12T00:00:00.000Z"},"hiringSignal":{"type":"boolean","example":true,"description":"We detected active hiring on their careers page"},"jobsPageUrl":{"type":"string","nullable":true,"format":"uri"},"priorityScore":{"type":"integer","minimum":0,"maximum":100,"nullable":true,"example":87,"description":"Composite score based on freshness, niche fit, hiring signals"},"confidenceScore":{"type":"integer","minimum":0,"maximum":100,"nullable":true,"example":92,"description":"Data accuracy score (URL liveness, source match, etc.)"},"sourceName":{"type":"string","nullable":true,"example":"fundraiseinsider"},"scrapedAt":{"type":"string","format":"date-time"},"contacts":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}}}},"Contact":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string","example":"Jane Doe"},"title":{"type":"string","nullable":true,"example":"Co-founder & CEO"},"role":{"type":"string","nullable":true,"enum":["founder","ceo","cto","recruiter","hiring_manager",null],"example":"ceo"},"email":{"type":"string","nullable":true,"format":"email","example":"jane@nova.io"},"linkedinUrl":{"type":"string","nullable":true,"format":"uri"}}},"Pagination":{"type":"object","required":["total","limit","offset","hasMore"],"properties":{"total":{"type":"integer","example":1247},"limit":{"type":"integer","example":50},"offset":{"type":"integer","example":0},"hasMore":{"type":"boolean","example":true}}},"StartupList":{"type":"object","properties":{"startups":{"type":"array","items":{"$ref":"#/components/schemas/Startup"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"Stats":{"type":"object","properties":{"total":{"type":"integer","example":1247},"last24h":{"type":"integer","example":32},"last7d":{"type":"integer","example":184},"hot":{"type":"integer","example":87,"description":"Startups with priorityScore ≥ 75"},"hiring":{"type":"integer","example":412},"rounds":{"type":"array","items":{"type":"object","properties":{"round":{"type":"string"},"count":{"type":"integer"}}}},"niches":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"}}}},"lastScrape":{"type":"object","nullable":true,"properties":{"startedAt":{"type":"string","format":"date-time"},"finishedAt":{"type":"string","format":"date-time","nullable":true},"status":{"type":"string","enum":["running","success","failed"]},"itemsNew":{"type":"integer"}}}}},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"active":{"type":"boolean"},"filters":{"type":"object","additionalProperties":true,"example":{"niche":"AI","hiring":true,"minAmount":1000000}},"lastFiredAt":{"type":"string","format":"date-time","nullable":true},"failCount":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"}}},"WebhookCreateInput":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https://your-app.com/webhook"},"filters":{"type":"object","description":"Optional. Match filters + delivery-mode toggles.","properties":{"niche":{"type":"string","example":"AI"},"round":{"type":"string","example":"Seed"},"hiring":{"type":"boolean"},"minAmount":{"type":"integer","description":"USD"},"country":{"type":"string"},"batch":{"type":"boolean","description":"When true and a single scrape run surfaces >1 matching startup, you receive ONE POST with `event: 'startup.batch'` and `data: [array]` instead of N separate per-row POSTs. Cuts outbound HTTP and receiver-side DB writes dramatically for high-match filters. Single-match runs still fire the standard `startup.created` event."}}}}},"WebhookCreateResponse":{"type":"object","properties":{"webhook":{"allOf":[{"$ref":"#/components/schemas/Webhook"},{"type":"object","required":["secret"],"properties":{"secret":{"type":"string","description":"**Shown once.** Use to verify HMAC-SHA256 signature on delivery."}}}]}}},"Error":{"type":"object","properties":{"error":{"type":"string"}}}},"parameters":{"Limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":50},"description":"Max results per page (1-500)"},"Offset":{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":100000,"default":0}},"Niche":{"name":"niche","in":"query","schema":{"type":"string","enum":["AI","SaaS","Crypto","Fintech","DevTools","HealthTech","Cybersecurity","Ecommerce","EdTech","CleanTech"]},"description":"Filter by industry niche"},"Round":{"name":"round","in":"query","schema":{"type":"string","example":"Seed"},"description":"Funding round (Seed, Series A, etc.)"},"Hiring":{"name":"hiring","in":"query","schema":{"type":"boolean"},"description":"Only return startups actively hiring"},"Country":{"name":"country","in":"query","schema":{"type":"string","example":"United States"}},"Investor":{"name":"investor","in":"query","schema":{"type":"string","example":"Sequoia Capital","maxLength":80},"description":"Filter to startups backed by a specific investor (exact match, case-sensitive)"},"Website":{"name":"website","in":"query","schema":{"type":"string","example":"acme.io","maxLength":200},"description":"Domain or URL to match (great for Clay / HubSpot / Salesforce enrichment). `acme.io` matches `https://acme.io/`, case-insensitive."},"MinAmount":{"name":"min_amount","in":"query","schema":{"type":"integer","minimum":0},"description":"Minimum funding amount in USD"},"Since":{"name":"since","in":"query","schema":{"type":"string","format":"date"},"description":"ISO date — only return startups scraped on or after this date"},"Sort":{"name":"sort","in":"query","schema":{"type":"string","enum":["priority","recent","amount","funded"],"default":"priority"}}},"responses":{"RateLimited":{"description":"Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"Daily rate limit exceeded (100/day on free plan)"}}}},"Unauthorized":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"Invalid API key"}}}},"BadRequest":{"description":"Invalid request parameters","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"error":"Invalid sort. Allowed: priority, recent, amount, funded"}}}}}},"paths":{"/v1/startups":{"get":{"tags":["Startups"],"summary":"List funded startups","description":"Paginated, filterable list of recently funded startups. Works with or without an API key (anonymous has a stricter IP rate limit).","security":[{"bearerAuth":[]},{}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Offset"},{"$ref":"#/components/parameters/Niche"},{"$ref":"#/components/parameters/Round"},{"$ref":"#/components/parameters/Hiring"},{"$ref":"#/components/parameters/Country"},{"$ref":"#/components/parameters/Investor"},{"$ref":"#/components/parameters/Website"},{"$ref":"#/components/parameters/MinAmount"},{"$ref":"#/components/parameters/Since"},{"$ref":"#/components/parameters/Sort"}],"responses":{"200":{"description":"Paginated list of startups","headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix epoch when quota resets"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartupList"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/startups/{id}":{"get":{"tags":["Startups"],"summary":"Get a single startup","description":"Full detail + all contacts for one startup.","security":[{"bearerAuth":[]},{}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","example":"clx1a2b3c4d5e6f7g8h9i0j1k"}}],"responses":{"200":{"description":"Single startup","content":{"application/json":{"schema":{"type":"object","properties":{"startup":{"$ref":"#/components/schemas/Startup"}}}}}},"404":{"description":"Startup not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/startups/export":{"get":{"tags":["Startups"],"summary":"Export as CSV","description":"CSV file download. Requires API key. Subject to daily rate limit.","security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Niche"},{"$ref":"#/components/parameters/Hiring"},{"$ref":"#/components/parameters/Investor"},{"$ref":"#/components/parameters/Website"},{"$ref":"#/components/parameters/MinAmount"},{"$ref":"#/components/parameters/Since"}],"responses":{"200":{"description":"CSV file","content":{"text/csv":{"schema":{"type":"string","format":"binary"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/stats":{"get":{"tags":["Stats"],"summary":"Aggregate platform stats","description":"Public endpoint. No auth required. Cached for 60s.","responses":{"200":{"description":"Stats snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stats"}}}}}}},"/v1/search/ai":{"post":{"tags":["AI Search"],"summary":"Natural-language search (AI-powered)","description":"Send a plain-English question; we translate it to structured filters via Perplexity and return matching startups. Example queries: `AI startups hiring in SF that raised Seed last month`, `Fintech series A Europe over $10M`. **Rate limits:** free 10/day · pro 200/day · scale unlimited (in addition to normal API quota).","security":[{"bearerAuth":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string","minLength":3,"maxLength":500,"example":"Seed-stage AI startups hiring in SF last month"}}}}}},"responses":{"200":{"description":"Interpreted filters + matching startups","content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"filters":{"type":"object","additionalProperties":true},"rationale":{"type":"string","description":"One-line explanation of the filter interpretation"},"confidence":{"type":"string","enum":["high","medium","low"]},"total":{"type":"integer"},"startups":{"type":"array","items":{"$ref":"#/components/schemas/Startup"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/investors":{"get":{"tags":["Investors"],"summary":"List active investors","description":"Aggregated directory of VCs in our funded-startup dataset. Default threshold: 2+ deals. Works with or without an API key (anonymous has a stricter IP rate limit). 30-min cache.","security":[{"bearerAuth":[]},{}],"parameters":[{"name":"min_deals","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000,"default":2},"description":"Minimum deals in dataset"},{"name":"hiring_only","in":"query","schema":{"type":"boolean"},"description":"Only investors with >=1 hiring portfolio co"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"Aggregated investor list","content":{"application/json":{"example":{"investors":[{"name":"Sequoia Capital","slug":"sequoia-capital","deals":18,"hiring":12,"niches":["AI","SaaS"],"topRound":"Series A","url":"/investors/sequoia-capital"}],"pagination":{"total":240,"returned":100,"limit":100,"minDeals":2},"sampledStartups":2843}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/v1/webhooks":{"get":{"tags":["Webhooks"],"summary":"List your webhooks","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"List of webhooks","content":{"application/json":{"schema":{"type":"object","properties":{"webhooks":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"tags":["Webhooks"],"summary":"Subscribe to real-time events","description":"Register a URL to receive HMAC-SHA256-signed POST requests when new startups match your filters. We send `X-FundedAPI-Signature: sha256=<hex>` and `X-FundedAPI-Timestamp: <unix-seconds>`. Verify by recomputing `HMAC_SHA256(secret, `${timestamp}.${rawBody}`)` and rejecting requests where the timestamp is more than 5 minutes off — this prevents replay attacks. See /docs for a Node verification snippet.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateInput"},"example":{"url":"https://your-app.com/webhook","filters":{"niche":"AI","hiring":true,"minAmount":1000000}}}}},"responses":{"201":{"description":"Webhook created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"description":"Plan limit reached"},"413":{"description":"Request body too large (>32KB)"}}}},"/v1/webhooks/{id}":{"delete":{"tags":["Webhooks"],"summary":"Delete a webhook","description":"Permanently removes a webhook subscription and its delivery log.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"id":{"type":"string"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Webhook not found"}}}},"/v1/webhooks/{id}/test":{"post":{"tags":["Webhooks"],"summary":"Fire a synthetic test event","description":"Sends a one-off HMAC-signed POST with `event: test` to your endpoint. Cooldown: one test / 60s per webhook.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Delivered (endpoint returned 2xx)","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"status":{"type":"integer","nullable":true},"latencyMs":{"type":"integer","nullable":true},"errorMessage":{"type":"string","nullable":true}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Webhook not found"},"429":{"description":"Cooldown — wait before testing again"},"502":{"description":"Endpoint returned non-2xx or timed out"}}}},"/v1/webhooks/{id}/rotate-secret":{"post":{"tags":["Webhooks"],"summary":"Rotate the HMAC signing secret","description":"Generates a new signing secret and invalidates the previous one immediately. The new secret is returned ONCE in this response — update your verifier before firing traffic.","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Rotated","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"secret":{"type":"string"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"Webhook not found"},"429":{"description":"Rotation cooldown — wait before retrying"}}}},"/mcp":{"get":{"tags":["MCP"],"summary":"Discovery document","description":"Returns a small JSON object identifying this URL as an MCP server (JSON-RPC 2.0 over HTTP, protocol version 2025-06-18). Use this to sanity-check the endpoint before wiring it into Claude Desktop / Cursor.","responses":{"200":{"description":"Discovery doc","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"FundedAPI MCP server"},"protocol":{"type":"string","example":"JSON-RPC 2.0 / MCP"},"protocolVersion":{"type":"string","example":"2025-06-18"},"usage":{"type":"string"},"docs":{"type":"string"}}}}}}}},"post":{"tags":["MCP"],"summary":"JSON-RPC 2.0 endpoint for MCP tools","description":"Accepts JSON-RPC 2.0 method calls: `initialize`, `tools/list`, `tools/call`, `ping`.\n\nAvailable tools via `tools/call`:\n  - `search_startups` — structured filters (niche, round, hiring, country, investor, amount, since)\n  - `get_startup` — full detail + contacts for one startup by ID\n  - `ai_search` — natural-language query → filters + matches\n  - `list_investors` — VC directory (deal count, hiring count, top niches)\n  - `stats` — dataset totals (total / last 24h / hiring)\n\nSetup guide at [/mcp/claude](/mcp/claude).","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"type":"string"},"method":{"type":"string","enum":["initialize","tools/list","tools/call","ping"]},"params":{"type":"object"}}},"examples":{"initialize":{"value":{"jsonrpc":"2.0","id":"1","method":"initialize"}},"toolsCall":{"value":{"jsonrpc":"2.0","id":"2","method":"tools/call","params":{"name":"search_startups","arguments":{"niche":"AI","hiring":true,"limit":5}}}}}}}},"responses":{"200":{"description":"JSON-RPC 2.0 response (result or rpc-level error)","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}}}}