{"openapi":"3.1.0","info":{"title":"LeadCognition Public API","version":"v1","description":"REST mirrors for the LeadCognition MCP developer-intent workflow."},"servers":[{"url":"https://app.leadcognition.io","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/discovery-sessions":{"post":{"summary":"List recent Discover sessions","description":"Requires an org API key with mcp:read.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string","description":"Optional domain used to filter recent Discover sessions."},"limit":{"type":"integer","minimum":1,"maximum":20,"default":10}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverySessionsResponse"}}}},"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/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}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperIntentResponse"}}}},"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-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}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyIntentResponse"}}}},"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/clay/export":{"post":{"summary":"Prepare Clay-ready export rows","description":"Requires an org API key with mcp:export.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string"},"domain":{"type":"string"},"batchId":{"type":"string","description":"Optional Discover batch id for enriched batch rows."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":100}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClayExportResponse"}}}},"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/clay/send":{"post":{"summary":"Send Clay-ready rows to a webhook","description":"Requires an org API key with mcp:export.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sessionId":{"type":"string"},"domain":{"type":"string"},"batchId":{"type":"string","description":"Optional Discover batch id for enriched batch rows."},"limit":{"type":"integer","minimum":1,"maximum":1000,"default":100},"clayWebhookUrl":{"type":"string","format":"uri","description":"Clay or webhook.site URL that receives one JSON POST per row."},"clayWebhookAuthToken":{"type":"string","description":"Optional bearer token sent to the Clay webhook."}},"required":["clayWebhookUrl"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendToClayResponse"}}}},"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/clay/source":{"post":{"summary":"Clay Source — domain-driven cold-start of a Clay table","description":"Returns paginated Clay rows for a domain. Auto-resolves the most recent Discover session for that domain. Use this as the data source when adding a new HTTP integration in Clay. If no session exists yet, the response sets status=\"no_session\" with a recommendedAction string Clay can render — no error.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Target company domain (e.g. stripe.com or https://stripe.com — normalized server-side)."},"lookbackDays":{"type":"integer","minimum":1,"maximum":365,"default":90},"cursor":{"type":"string","description":"Pagination cursor returned in a previous response. Pass to continue paging."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":50}}}}}},"responses":{"200":{"description":"Source rows + cursor (or no_session status)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaySourceResponse"}}}},"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/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"}}}}}},"responses":{"200":{"description":"Magic link sent (or trial_already_used status)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupResponse"}}}},"400":{"description":"Invalid request or rate-limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/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/clay/enrich":{"post":{"summary":"Clay Action — column-level enrichment for a domain","description":"Returns a single Clay row aggregating all GitHub-signal evidence for a given company domain. Backed by the org_lead_data materialized view; instant and cheap. Use this as a Clay column-enrichment action against existing rows.","security":[{"apiKeyBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"Target company domain (e.g. stripe.com — normalized server-side)."}}}}}},"responses":{"200":{"description":"Enriched row (or not_found status)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClayEnrichResponse"}}}},"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-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"}}}},"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"}}}},"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"}}}}}},"responses":{"201":{"description":"Subscription created (includes secret, shown once)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSubscriptionSecret"}}}},"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"}}}},"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"}}}},"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"}}}},"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"}}}},"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"}}}}}}}},"components":{"securitySchemes":{"apiKeyBearer":{"type":"http","scheme":"bearer","bearerFormat":"LeadCognition API key"}},"schemas":{"ErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId"],"properties":{"code":{"type":"string","enum":["invalid_request","insufficient_scope"]},"message":{"type":"string"},"requestId":{"type":["string","null"]}}}}},"HealthResponse":{"type":"object","required":["ok","name","version"],"properties":{"ok":{"type":"boolean"},"name":{"type":"string"},"version":{"type":"string"}}},"SessionSummary":{"type":"object","required":["id","name","status","domain"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"domain":{"type":"string"}}},"DiscoverySessionSummary":{"type":"object","required":["id","name","domain","status","createdAt","recommendedNextAction"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"domain":{"type":"string"},"status":{"type":"string"},"totalLeads":{"type":["integer","null"]},"createdAt":{"type":"string","format":"date-time"},"recommendedNextAction":{"type":"string"}}},"DiscoverySessionsResponse":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/DiscoverySessionSummary"}},"nextStep":{"type":"string"}}},"DeveloperIntent":{"type":"object","properties":{"githubUser":{"type":"string"},"githubUrl":{"type":"string","format":"uri"},"displayName":{"type":["string","null"]},"company":{"type":["string","null"]},"signalScore":{"type":"number"},"topSignal":{"type":"string"},"qualityBucket":{"type":"string"},"whyIncluded":{"type":"string"}}},"CompanyIntent":{"type":"object","properties":{"companyName":{"type":"string"},"developerCount":{"type":"integer"},"signalScore":{"type":"number"},"topDevelopers":{"type":"array","items":{"type":"string"}},"topRepos":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"string"}},"recommendedAction":{"type":"string"}}},"ClayExportRow":{"type":"object","description":"One Clay-importable row. Flat scalars; non-null defaults so column mapping is trivial.","properties":{"company_name":{"type":"string"},"company_domain":{"type":"string"},"company_domain_status":{"type":"string","enum":["matched","inferred","missing"],"description":"matched=resolved against LC companies table, inferred=session-context guess, missing=run domain enrichment in Clay."},"github_signal_summary":{"type":"string"},"signal_evidence_url":{"type":"string"},"signal_evidence_repos":{"type":"string","description":"Pipe-delimited list of up to 3 evidence repos (CSV-friendly)."},"signal_score":{"type":"number","description":"Aggregate intent score for the developer."},"signal_count":{"type":"integer","description":"Number of distinct evidence repos for this developer."},"quality_bucket":{"type":"string","description":"builder | evaluator | watcher | discusser."},"last_signal_at":{"type":"string","description":"ISO-8601 timestamp of the most recent GitHub event."},"top_repo":{"type":"string"},"top_signal_type":{"type":"string"},"lead_name":{"type":"string"},"github_username":{"type":"string"},"github_url":{"type":"string"},"linkedin_url":{"type":"string"},"work_email":{"type":"string"},"recommended_action":{"type":"string","description":"Per-row routing recommendation. Use as a Clay routing column."}}},"DeveloperIntentResponse":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/SessionSummary"},"developers":{"type":"array","items":{"$ref":"#/components/schemas/DeveloperIntent"}},"nextStep":{"type":"string"}}},"CompanyIntentResponse":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/SessionSummary"},"companies":{"type":"array","items":{"$ref":"#/components/schemas/CompanyIntent"}},"nextStep":{"type":"string"}}},"ClayExportResponse":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/SessionSummary"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/ClayExportRow"}},"csv":{"type":"object","properties":{"fileName":{"type":"string"},"contentType":{"type":"string","const":"text/csv"},"content":{"type":"string"}}},"nextStep":{"type":"string"}}},"SignupResponse":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["magic_link_sent","trial_already_used"]},"email":{"type":"string"},"workspace_domain":{"type":"string"},"next_step":{"type":"string"}}},"SignupActivateResponse":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["activated","already_activated","pending_org_creation"]},"email":{"type":"string"},"workspace_domain":{"type":"string"},"api_key":{"type":"string","description":"Full API key, shown ONCE only at activation."},"scopes":{"type":"array","items":{"type":"string"}},"credits_remaining":{"type":"integer"},"next_step":{"type":"string"}}},"ClaySourceResponse":{"type":"object","required":["rows","status"],"properties":{"session":{"anyOf":[{"$ref":"#/components/schemas/SessionSummary"},{"type":"null"}]},"rows":{"type":"array","items":{"$ref":"#/components/schemas/ClayExportRow"}},"cursor":{"type":["string","null"],"description":"Pagination cursor; null when no further rows."},"rowCount":{"type":"integer"},"totalAvailable":{"type":"integer"},"status":{"type":"string","enum":["ready","empty","no_session"]},"recommendedAction":{"type":"string"},"nextStep":{"type":"string"}}},"ClayEnrichResponse":{"type":"object","required":["domain","status"],"properties":{"domain":{"type":"string"},"row":{"anyOf":[{"$ref":"#/components/schemas/ClayExportRow"},{"type":"null"}]},"status":{"type":"string","enum":["ready","not_found"]},"recommendedAction":{"type":"string"}}},"SendToClayResponse":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/SessionSummary"},"rowCount":{"type":"integer"},"acceptedCount":{"type":"integer"},"failedCount":{"type":"integer"},"rowsPreview":{"type":"array","items":{"$ref":"#/components/schemas/ClayExportRow"}},"nextStep":{"type":"string"}}},"CompanySignalRow":{"type":"object","properties":{"lead_id":{"type":"string"},"github_user":{"type":"string"},"full_name":{"type":["string","null"]},"job_title":{"type":["string","null"]},"linkedin_url":{"type":["string","null"]},"work_email":{"type":["string","null"]},"company_name":{"type":["string","null"]},"company_domain":{"type":["string","null"]},"signal_count":{"type":"integer"},"unique_repo_count":{"type":"integer"},"last_signal_date":{"type":"string","format":"date-time"},"engagement_score":{"type":["number","null"]},"engagement_tier":{"type":["string","null"]},"top_repos":{"type":"array","items":{"type":"string"}}}},"CompanySignalsResponse":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/CompanySignalRow"}},"nextCursor":{"type":["string","null"],"description":"Pass as `since` in the next request to continue paging."}}},"CompanyIntelResponse":{"type":"object","properties":{"domain":{"type":"string"},"company_name":{"type":["string","null"]},"developer_count":{"type":"integer"},"total_signal_count":{"type":"integer"},"avg_engagement_score":{"type":["number","null"]},"top_developers":{"type":"array","items":{"$ref":"#/components/schemas/CompanySignalRow"}},"top_repos":{"type":"array","items":{"type":"string"}},"last_signal_date":{"type":["string","null"],"format":"date-time"},"next_step":{"type":"string"}}},"DeveloperSignalRow":{"type":"object","properties":{"lead_id":{"type":"string"},"github_user":{"type":"string"},"full_name":{"type":["string","null"]},"job_title":{"type":["string","null"]},"company_name":{"type":["string","null"]},"company_domain":{"type":["string","null"]},"last_signal_date":{"type":"string","format":"date-time"},"signal_count":{"type":"integer"},"engagement_score":{"type":["number","null"]},"matching_repos":{"type":"array","items":{"type":"string"}}}},"DeveloperSignalsResponse":{"type":"object","properties":{"rows":{"type":"array","items":{"$ref":"#/components/schemas/DeveloperSignalRow"}},"nextCursor":{"type":["string","null"],"description":"Pass as `since` in the next request to continue paging."}}},"WebhookSubscription":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"eventTypes":{"type":"array","items":{"type":"string"}},"description":{"type":["string","null"]},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"WebhookSubscriptionSecret":{"type":"object","description":"Returned only on subscription creation. The secret field is shown exactly once.","properties":{"id":{"type":"string"},"url":{"type":"string","format":"uri"},"eventTypes":{"type":"array","items":{"type":"string"}},"description":{"type":["string","null"]},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"secret":{"type":"string","description":"HMAC signing secret (whsec_... prefix). Store securely — not returned after this."}}},"WebhookSubscriptionsListResponse":{"type":"object","properties":{"total":{"type":"integer"},"subscriptions":{"type":"array","items":{"$ref":"#/components/schemas/WebhookSubscription"}}}},"WebhookDeliveryResult":{"type":"object","properties":{"ok":{"type":"boolean"},"status":{"type":"integer","description":"HTTP status received from the target URL (0 = network error)."}}},"WebhookRevokeResult":{"type":"object","properties":{"revoked":{"type":"boolean"},"id":{"type":"string"}}}}}}