{"openapi":"3.1.0","info":{"title":"DataForGTM API","version":"v1","description":"Agent-callable GitHub developer identity & intent: resolve a GitHub username to LinkedIn, find developers/companies showing GitHub intent, enrich them. Bearer API key, pay-per-resolve."},"servers":[{"url":"https://dataforgtm.ai","description":"Production"}],"paths":{"/api/v1/health":{"get":{"summary":"Check public API readiness","responses":{"200":{"description":"API is reachable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/api/v1/developer-intent":{"post":{"summary":"Find developers showing GitHub intent","description":"Requires an org API key with mcp:read.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"LeadCognition Discover session id."},"domain":{"type":"string","description":"Domain used to locate a recent Discover session."},"limit":{"type":"integer","minimum":1,"maximum":25,"default":10}}},"example":{"domain":"vercel.com","limit":10}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperIntentResponse"},"example":{"session":{"id":"ds_review_123","name":"Vercel developer intent","status":"ready","domain":"vercel.com"},"developers":[{"githubUser":"vercel-engineer","githubUrl":"https://github.com/vercel-engineer","displayName":null,"company":"Vercel","signalScore":72,"topSignal":"Starred and forked PostHog/posthog-js","qualityBucket":"evaluator","whyIncluded":"Recent GitHub activity in a relevant analytics repo with company match."}],"nextStep":"Prepare a Clay export when these developers are relevant to outreach."}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Request body is invalid.","requestId":"req_example_123"}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Missing or invalid API key.","requestId":"req_example_123"}}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"insufficient_scope","message":"API key is missing required scope: mcp:read","requestId":"req_example_123"}}}}}}}},"/api/v1/company-intent":{"post":{"summary":"Rank companies showing GitHub intent","description":"Requires an org API key with mcp:read.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string","description":"LeadCognition Discover session id."},"domain":{"type":"string","description":"Domain used to locate a recent Discover session."},"limit":{"type":"integer","minimum":1,"maximum":25,"default":10}}},"example":{"domain":"vercel.com","limit":10}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyIntentResponse"},"example":{"session":{"id":"ds_review_123","name":"Vercel developer intent","status":"ready","domain":"vercel.com"},"companies":[{"companyName":"Vercel","developerCount":2,"signalScore":72,"topDevelopers":["vercel-engineer"],"topRepos":["PostHog/posthog-js"],"evidence":["https://github.com/PostHog/posthog-js"],"recommendedAction":"Enrich in Clay and personalize outreach with GitHub evidence."}],"nextStep":"Use /api/v1/clay/export for flat rows."}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Request body is invalid.","requestId":"req_example_123"}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Missing or invalid API key.","requestId":"req_example_123"}}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"insufficient_scope","message":"API key is missing required scope: mcp:read","requestId":"req_example_123"}}}}}}}},"/api/v1/deanon":{"post":{"summary":"De-anon a GitHub username → LinkedIn (DataForGTM)","description":"Requires an org API key with mcp:read.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["githubUser"],"properties":{"githubUser":{"type":"string","description":"GitHub login/username (with or without leading @)."},"githubName":{"type":"string","description":"Optional display-name hint; otherwise fetched from the GitHub profile."},"githubCompany":{"type":"string","description":"Optional company hint; otherwise fetched from the GitHub profile."},"includeDossier":{"type":"boolean","description":"Add a deep developer dossier (+1 credit). Charged whenever the dossier is delivered, regardless of LinkedIn outcome."}}},"example":{"githubUser":"torvalds"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeanonResponse"},"example":{"githubUser":"torvalds","linkedin_url":"https://www.linkedin.com/in/linustorvalds","status":"found"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Request body is invalid.","requestId":"req_example_123"}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Missing or invalid API key.","requestId":"req_example_123"}}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"insufficient_scope","message":"API key is missing required scope: mcp:read","requestId":"req_example_123"}}}}}}}},"/api/v1/dossier":{"post":{"summary":"Deep developer dossier for a GitHub username (1 credit)","description":"Requires an org API key with mcp:read.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["githubUser"],"properties":{"githubUser":{"type":"string","description":"GitHub login/username (with or without leading @)."}}},"example":{"githubUser":"torvalds"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DossierResponse"},"example":{"github_user":"torvalds","dossier":{"github_login":"torvalds","influence_tier":"major"},"credits_charged":1}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Request body is invalid.","requestId":"req_example_123"}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Missing or invalid API key.","requestId":"req_example_123"}}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"insufficient_scope","message":"API key is missing required scope: mcp:read","requestId":"req_example_123"}}}}}}}},"/api/v1/deanon/batch":{"post":{"summary":"De-anon up to 50 GitHub usernames → LinkedIn (DataForGTM)","description":"Requires an org API key with mcp:read.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["githubUsers"],"properties":{"githubUsers":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":50,"description":"GitHub logins (max 50). Processed sequentially."},"includeDossier":{"type":"boolean","description":"Add a deep dossier per row (+1 credit each, charged on delivery regardless of LinkedIn outcome)."}}},"example":{"githubUsers":["torvalds","gaearon"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeanonBatchResponse"},"example":{"results":[{"githubUser":"torvalds","linkedin_url":"https://www.linkedin.com/in/linustorvalds","status":"found"}],"count":1}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Request body is invalid.","requestId":"req_example_123"}}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Missing or invalid API key.","requestId":"req_example_123"}}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"insufficient_scope","message":"API key is missing required scope: mcp:read","requestId":"req_example_123"}}}}}}}},"/api/v1/signup":{"post":{"summary":"Self-serve trial signup (LC-172)","description":"Public, no auth. Creates a pending trial signup and sends a magic-link email. Rate-limited 5/IP/hour and 3/email-domain/24h. One trial per workspace_domain. Disposable email domains are blocked.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"},"workspace_domain":{"type":"string","description":"Optional. Defaults to the email's domain. Used for trial-per-domain enforcement."},"signup_source":{"type":"string","description":"Channel attribution. e.g. clay_directory, mcp_claude, mcp_cursor, mcp_chatgpt, mcp_smithery, direct_api."},"intended_use":{"type":"string"}}},"example":{"email":"reviewer@example.com","workspace_domain":"example.com","signup_source":"mcp_chatgpt","intended_use":"clay_source"}}}},"responses":{"200":{"description":"Magic link sent (or trial_already_used status)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupResponse"},"example":{"status":"magic_link_sent","email":"reviewer@example.com","workspace_domain":"example.com","next_step":"Check your email for the activation link."}}}},"400":{"description":"Invalid request or rate-limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"example":{"error":{"code":"invalid_request","message":"Email is required.","requestId":"req_example_123"}}}}}}}},"/api/v1/signup/activate":{"get":{"summary":"Activate a trial via magic-link token (LC-172)","description":"Magic-link landing. Single-use, 24h TTL. **Requires a logged-in Better Auth session** — without one, returns a 302 redirect to /login?next=<this url>. After Google OAuth, the user lands back here and the activation completes. Verifies session.user.email matches the signup email before issuing the key. Returns an HTML page (not JSON) — this is a browser flow.","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"},"description":"64-char hex token from the magic-link email."}],"responses":{"200":{"description":"HTML page rendering the API key on success, or already-activated / expired / error state."},"302":{"description":"Redirect to /login?next=... when no Better Auth session is present."},"400":{"description":"Invalid or malformed token (only when token query param fails basic validation)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/company-signals/{domain}":{"get":{"summary":"List recent company signals — durable, paginated","description":"Returns developers at a company who have shown GitHub intent signals, ordered by most-recent first. Use the `since` cursor to poll continuously in Clay without creating a Discover session.","security":[{"apiKeyBearer":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Company domain (e.g. stripe.com)."},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"Opaque cursor returned as nextCursor from the previous page."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Paginated company signal rows","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanySignalsResponse"},"example":{"rows":[{"lead_id":"lead_example_123","github_user":"vercel-engineer","full_name":null,"job_title":null,"linkedin_url":null,"work_email":null,"company_name":"Vercel","company_domain":"vercel.com","signal_count":3,"unique_repo_count":2,"last_signal_date":"2026-05-01T09:15:22Z","engagement_score":72,"engagement_tier":"medium","top_repos":["PostHog/posthog-js"]}],"nextCursor":null}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/company-intel/{domain}":{"get":{"summary":"Get company-level intent rollup","description":"Returns a single aggregated rollup for a company domain: developer count, total signals, top repos, and engagement summary. Cached for 60s.","security":[{"apiKeyBearer":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Company domain (e.g. stripe.com)."}],"responses":{"200":{"description":"Company intel rollup","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyIntelResponse"},"example":{"domain":"vercel.com","company_name":"Vercel","developer_count":2,"total_signal_count":5,"avg_engagement_score":68,"top_developers":[],"top_repos":["PostHog/posthog-js","open-telemetry/opentelemetry-collector"],"last_signal_date":"2026-05-01T09:15:22Z","next_step":"Prepare Clay rows for the highest-scoring developers."}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/contributor-affiliation/{company}":{"get":{"summary":"List developers affiliated with a company or GitHub org","description":"Resolve which tracked developers are affiliated with a company. Pass a company domain (e.g. 'acme.com') or a GitHub org login (e.g. 'vercel'). Returns each affiliated developer with the repos they've signalled on as evidence, plus LinkedIn URL and engagement. Cached for 60s.","security":[{"apiKeyBearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"string"},"description":"Company domain ('acme.com') or GitHub org login ('vercel')."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"description":"Max contributors to return."}],"responses":{"200":{"description":"Contributor affiliation list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContributorAffiliationResponse"},"example":{"query":"vercel","affiliation_kind":"github_org","company_name":"Vercel","contributor_count":2,"total_signal_count":17,"contributors":[{"github_user":"jsmith-dev","full_name":"Jordan Smith","job_title":"Senior Backend Engineer","linkedin_url":"https://linkedin.com/in/jsmith-dev","company_name":"Vercel","company_domain":"vercel.com","affiliated_repos":["vercel/next.js"],"signal_count":12,"unique_repo_count":3,"engagement_score":0.82,"engagement_tier":"high","last_signal_date":"2026-05-01T09:15:22Z"}],"next_step":"Call discover_developer_intent on a github_user to resolve LinkedIn + intent."}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/webhooks/subscriptions":{"post":{"summary":"Create a webhook subscription","description":"Creates a new webhook subscription for the authenticated org. The secret is returned ONCE on creation only. Requires mcp:export scope.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url","eventTypes"],"properties":{"url":{"type":"string","format":"uri","description":"HTTPS URL that will receive webhook POSTs."},"eventTypes":{"type":"array","items":{"type":"string","enum":["signal.discovered","lead.identified","unlock.completed","subscription.upgraded"]},"minItems":1},"description":{"type":"string"}}},"example":{"url":"https://example.com/leadcognition/webhooks","eventTypes":["signal.discovered"],"description":"Reviewer sandbox webhook"}}}},"responses":{"201":{"description":"Subscription created (includes secret, shown once)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionSecret"},"example":{"id":"whsub_example_123","url":"https://example.com/leadcognition/webhooks","eventTypes":["signal.discovered"],"description":"Reviewer sandbox webhook","isActive":true,"createdAt":"2026-05-01T09:15:22Z","secret":"whsec_example_shown_once"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"get":{"summary":"List webhook subscriptions","description":"Returns all webhook subscriptions for the authenticated org. Secrets are never returned in list responses. Requires mcp:export scope.","security":[{"apiKeyBearer":[]}],"responses":{"200":{"description":"List of subscriptions (no secrets)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionsListResponse"},"example":{"total":1,"subscriptions":[{"id":"whsub_example_123","url":"https://example.com/leadcognition/webhooks","eventTypes":["signal.discovered"],"description":"Reviewer sandbox webhook","isActive":true,"createdAt":"2026-05-01T09:15:22Z","updatedAt":"2026-05-01T09:15:22Z"}]}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/webhooks/subscriptions/{id}":{"delete":{"summary":"Revoke a webhook subscription","description":"Sets is_active=false on the subscription. In-flight deliveries may still complete. Requires mcp:export scope.","security":[{"apiKeyBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Subscription UUID."}],"responses":{"200":{"description":"Subscription revoked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookRevokeResult"},"example":{"revoked":true,"id":"whsub_example_123"}}}},"400":{"description":"Not found or access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/webhooks/test/{id}":{"post":{"summary":"Send a test event to a webhook subscription","description":"Sends a sample signal.discovered event to the subscription URL. Returns the HTTP status received. Requires mcp:export scope.","security":[{"apiKeyBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Subscription UUID."}],"responses":{"200":{"description":"Delivery result (ok, status)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryResult"},"example":{"ok":true,"status":200}}}},"400":{"description":"Not found, revoked, or access denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/developer-signals":{"get":{"summary":"List developer signals for a repo or org","description":"Returns developers who have signalled activity on a specific GitHub repo (owner/repo) or org (owner). Paginate with `since` to poll for new signals continuously.","security":[{"apiKeyBearer":[]}],"parameters":[{"name":"repo_or_org","in":"query","required":true,"schema":{"type":"string"},"description":"GitHub repo ('owner/repo') or org ('owner'). Example: facebook/react or stripe."},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"Opaque cursor returned as nextCursor from the previous page."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Paginated developer signal rows","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperSignalsResponse"},"example":{"rows":[{"lead_id":"lead_example_123","github_user":"vercel-engineer","full_name":null,"job_title":null,"company_name":"Vercel","company_domain":"vercel.com","last_signal_date":"2026-05-01T09:15:22Z","signal_count":3,"engagement_score":72,"matching_repos":["PostHog/posthog-js"]}],"nextCursor":null}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"API key is missing the required scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/v1/credits/checkout":{"post":{"summary":"Create a Stripe Checkout link to top up prepaid credits","description":"Returns a Stripe Checkout URL for a credit pack. No subscription required. The webhook grants credits into the pool /api/v1/deanon debits.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["packId"],"properties":{"packId":{"type":"string","enum":["pack_500","pack_2500","pack_10000","pack_25000"]}}}}}},"responses":{"200":{"description":"Checkout link created","content":{"application/json":{"schema":{"type":"object","properties":{"checkout_url":{"type":"string"},"pack":{"type":"object"}}}}}}}}},"/api/v1/icp/score":{"post":{"summary":"Score a company against a caller-supplied ICP definition","description":"Pure, deterministic rule scorer. Pass company fields plus ICP criteria; returns a 0..1 score and a per-criterion pass/fail breakdown. Empty profile scores 1.0.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"industry":{"type":"string"},"countryCode":{"type":"string"},"employeeCount":{"type":"number"},"trackedDeveloperCount":{"type":"number"},"activeCommitterCount":{"type":"number"},"tags":{"type":"array","items":{"type":"string"}}}},"profile":{"type":"object","properties":{"industries":{"type":"array","items":{"type":"string"}},"countries":{"type":"array","items":{"type":"string"}},"excludeCountries":{"type":"array","items":{"type":"string"}},"employeeMin":{"type":"number"},"employeeMax":{"type":"number"},"devCountMin":{"type":"number"},"devCountMax":{"type":"number"},"activeCommitterMin":{"type":"number"},"requiredTech":{"type":"array","items":{"type":"string"}},"excludedTech":{"type":"array","items":{"type":"string"}}}}}}}}},"responses":{"200":{"description":"Score + breakdown","content":{"application/json":{"schema":{"type":"object","properties":{"score":{"type":"number"},"breakdown":{"type":"object"}}}}}}}}},"/api/v1/icp/profile":{"get":{"summary":"Get the saved default ICP profile","responses":{"200":{"description":"The saved profile, or { profile: null } if none set","content":{"application/json":{"schema":{"type":"object"}}}}}},"put":{"summary":"Create or replace the saved default ICP profile","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"industries":{"type":"array","items":{"type":"string"}},"countries":{"type":"array","items":{"type":"string"}},"excludeCountries":{"type":"array","items":{"type":"string"}},"employeeMin":{"type":"number"},"employeeMax":{"type":"number"},"devCountMin":{"type":"number"},"devCountMax":{"type":"number"},"activeCommitterMin":{"type":"number"},"requiredTech":{"type":"array","items":{"type":"string"}},"excludedTech":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"The saved profile","content":{"application/json":{"schema":{"type":"object","properties":{"industries":{"type":"array","items":{"type":"string"}},"countries":{"type":"array","items":{"type":"string"}},"excludeCountries":{"type":"array","items":{"type":"string"}},"employeeMin":{"type":"number"},"employeeMax":{"type":"number"},"devCountMin":{"type":"number"},"devCountMax":{"type":"number"},"activeCommitterMin":{"type":"number"},"requiredTech":{"type":"array","items":{"type":"string"}},"excludedTech":{"type":"array","items":{"type":"string"}}}}}}}}}},"/api/v1/watch":{"post":{"summary":"Watch a GitHub org for developer buying signals (metered add-on)","description":"Adds a GitHub org to the monitoring poller and deducts a flat credit cost. New signals then surface via /api/v1/developer-signals and webhook subscriptions.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["githubOrg"],"properties":{"githubOrg":{"type":"string"}}}}}},"responses":{"200":{"description":"Watch registered + charged"},"402":{"description":"Insufficient credits"}}},"get":{"summary":"List the org's active watches","responses":{"200":{"description":"Watches"}}}}}}