Skip to content

Validate API

Validate whether a list of companies match your Ideal Customer Profile. Provide your ICP description and domains. DiscoLike generates a validation prompt and evaluates each company, returning structured fit/confidence/reasoning results.

Built on the DiscoGen pipeline. Requires an LLM provider integration, unless you run it on DiscoLike’s own native ICP-fit model.

POST https://api.discolike.com/v1/validate/icp

Results are async. Poll GET /discogen/status/{task_id} for completion.

Validates domains against an ICP description. Returns a task ID immediately.

ParameterTypeRequiredDescription
icp_textStringYesYour ICP description (e.g., “B2B SaaS companies in HR and payroll with 50-500 employees”). Must be non-empty
domainsArrayYesList of domains to validate (1-10,000)
context_modeStringNoWhat data the LLM sees per domain: website (default, profile + homepage), profile (firmographics only), domain (name only)
integration_idStringNoLLM provider integration UUID. Uses your default if omitted. Pass native-icp to score with DiscoLike’s own model instead of an LLM (see Native ICP-Fit Model)
web_searchBooleanNoEnable web search enrichment (default: false)
search_provider_idStringNoSearch provider UUID for web search. Uses your default if omitted
{
"task_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"column_name": ["Fit", "Confidence", "Reasoning"],
"status": "in_progress",
"total_domains": 3
}

When the task completes (poll via GET /discogen/status/{task_id}), each domain returns:

ColumnValuesDescription
FitYes, NoWhether the company matches the ICP
Confidencehigh, medium, lowAssessment confidence level
ReasoningString1-2 sentence explanation

A native run returns a different set of columns. Read column_name from the task response rather than hardcoding either set.

Terminal window
curl -X POST https://api.discolike.com/v1/validate/icp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"icp_text": "B2B SaaS companies providing HR and payroll solutions with 50-500 employees",
"domains": ["gusto.com", "rippling.com", "stripe.com"]
}'

Then poll for results:

Terminal window
curl https://api.discolike.com/v1/discogen/status/TASK_ID \
-H "Authorization: Bearer YOUR_API_KEY"

Example completed result:

{
"task_id": "a1b2c3d4-...",
"status": "completed",
"results": {
"gusto.com": {"Fit": "Yes", "Confidence": "high", "Reasoning": "HR and payroll platform for SMBs, directly matches ICP"},
"rippling.com": {"Fit": "Yes", "Confidence": "high", "Reasoning": "HR, payroll, and IT platform for businesses, strong ICP match"},
"stripe.com": {"Fit": "No", "Confidence": "high", "Reasoning": "Payment processing infrastructure, not HR/payroll"}
}
}

The status response also carries estimated_cost, cost_metadata and warnings, described under Cost Metadata and Warnings. Validation runs at low search depth with two fixed queries per domain when web_search is enabled; for targeted lookups use DiscoGen with a prompt that names the source.

Pass integration_id: "native-icp" to score every domain with DiscoLike’s own ICP-fit model, a cross-encoder served on our GPUs, instead of your LLM provider. The run needs no LLM provider integration and makes no calls on your provider key, so it reports no LLM or search spend.

The model was trained on LLM validation verdicts, so a score is what an LLM validator would most likely have said about the company, at no LLM cost. It is not more accurate than an LLM.

Differences from an LLM run:

  • No web search is performed. web_search and search_provider_id are ignored.
  • context_mode is always website, the company profile plus homepage text the model was trained on. Passing profile or domain has no effect.
  • The columns differ, as below. Reasoning carries the confidence band rather than an explanation: the model returns a score, not text.
ColumnValuesDescription
ICP FitYes, NoWhether the company matches the ICP. Yes when ICP Score is 0.50 or above
ICP ScoreStringCalibrated probability that the company matches the ICP, "0.00" to "1.00", two decimals
ReasoningHigh confidence, Medium confidence, Low confidence - ...The confidence band, derived from how far ICP Score sits from the 0.50 cutoff: high when the score is 0.15 or below or 0.85 or above, medium between 0.15 and 0.35 or between 0.65 and 0.85, low between 0.35 and 0.65. This engine scores rather than explains, so the column carries the band instead of a rationale. A low-confidence verdict is close to a coin flip - measured at 0.598 accuracy on held-out data, against 0.943 for high - so treat it as unresolved rather than as a No
Terminal window
curl -X POST https://api.discolike.com/v1/validate/icp \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"icp_text": "B2B SaaS companies providing HR and payroll solutions with 50-500 employees",
"domains": ["gusto.com", "stripe.com"],
"integration_id": "native-icp"
}'
{
"task_id": "a1b2c3d4-...",
"status": "completed",
"results": {
"gusto.com": {"ICP Fit": "Yes", "ICP Score": "0.91", "Reasoning": "High confidence"},
"stripe.com": {"ICP Fit": "No", "ICP Score": "0.08", "Reasoning": "High confidence"}
}
}
StatusMeaning
400The validation prompt generated from your icp_text does not list its criteria under Mandatory:, Reject if: and Nice-to-have:. The native model only answers ICP validation prompts; rephrase the ICP text or pick an LLM integration for it
503Native ICP-fit validation is not available on this server right now. Retry shortly or pass an LLM integration_id