Command Reference
Every discolike command, grouped the way the CLI groups them. Each entry lists the exact usage line, every option, and a runnable example.
New here? Start with Getting Started for install, authentication, and output formats.
account
Section titled “account”Account usage and quota.
account usage
Section titled “account usage”Month-to-date usage: requests, records, and spend.
discolike account usage [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike account usage{ "requests_mtd": null, "records_mtd": null, "spend_mtd": null, "account_status": "active", "month_to_date_requests": 14, "month_to_date_records": 11794, "month_to_date_spend": 24.99, "max_spend": "unlimited", "total_available_spend": "unlimited", "carryover_credits": 0.0, "top_up_credits": 0.0, "usage_summary": { "2026-08": [ { "access_id": "••••••••isco", "description": "[API] Internal key", "requests": 13, "total_records": 11744, "monthly_spend": 24.79 } ], ... }, ...}REST endpoint: Usage API. SDK equivalent: client.account.usage().
append
Section titled “append”Enrich a CSV of domains with DiscoLike datasets. This command is synchronous and returns the enriched rows directly.
discolike append [OPTIONS] FILE| Flag | Type | Default | Description |
|---|---|---|---|
FILE (argument) | path | required | CSV of domains to enrich. |
--dataset | str | required | Dataset to append (repeatable): bizdata, redirects, domain_status, growth, vendors. Omitting it exits 2 before any request. |
--domain-column | str | none | Column in the CSV that holds domains. |
--csv / --no-csv | bool | unset | Request the enriched rows as CSV (written via --output). |
--output | path | none | File to write a CSV response to. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
Pass --output whenever the API returns CSV bytes; without it the command exits 2 with --output is required when the response is CSV bytes. With --output it writes the bytes verbatim and prints {"written": "<path>", "bytes": <count>}.
discolike append domains.csv --dataset bizdata --dataset growthdiscolike append domains.csv --domain-column website --csv --output enriched.csvREST endpoint: Append API. SDK equivalent: client.append().
Manage credentials: log in (browser or API key), check status, log out.
auth login and auth status honour the root --base-url: auth login logs in to that host’s authorization server and auth status verifies against it. A root --api-key passed explicitly on the command line switches auth login to the API-key flow with that key, and is the key auth status reports as "source": "option". Credential resolution, consent reuse, and the config file are covered in Getting Started.
auth login
Section titled “auth login”Log in via the browser (OAuth) or with an API key, verify, and save to the local config file.
discolike auth login [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--api-key | str | none | Log in with an API key instead of the browser. Create one at https://app.discolike.com/account/management/keys. |
--method | str | oauth | oauth (browser login, default) or api_key (prompts for a key unless --api-key is given). Any other value is a usage error, exit 2. |
--no-browser | flag | off | Print the login URL instead of opening a browser. |
--port | int | 0 | Fixed loopback port for the browser redirect (default: random; use with SSH). |
Browser flow (the default). The CLI fetches the authorization server’s metadata from the API host, registers itself as a public PKCE client or reuses the registration saved from an earlier login, starts a listener on http://127.0.0.1:<port>/callback, and prints the authorization URL to stderr before opening it. If no browser can be opened it says so and leaves the URL for you to open by hand. It then waits up to 180 seconds for the redirect, exchanges the code for tokens, verifies the session with a usage call, and saves it. On success the payload goes to stderr, not stdout:
{"logged_in": true, "method": "oauth", "expires_at": "2026-08-28T20:15:00+00:00"}discolike auth loginOn a remote machine, pin the port, forward it, and open the printed URL in a local browser:
ssh -L 51234:127.0.0.1:51234 build-hostdiscolike auth login --no-browser --port 51234API-key flow. --api-key KEY uses that key; --method api_key prompts for one with hidden input. The key is verified with a usage call before anything is written, and a bad key exits 3 and writes nothing. The success payload is {"logged_in": true, "source": "api_key"} on stderr.
discolike auth login --api-key dk-live-...discolike auth login --method api_keyFailures of the browser flow itself exit 1 with a single JSON line on stderr:
message | Cause |
|---|---|
Timed out after 180s waiting for the browser login | No redirect arrived within the wait |
Authorization failed: <error_description or error> | The authorization server redirected back with an error, such as access_denied when consent was refused |
Invalid OAuth callback (state mismatch or missing code) | The redirect did not carry the expected state and code |
Token exchange failed: <error> | The code could not be exchanged for tokens |
{"error": "LoginError", "message": "Authorization failed: access_denied"}A saved client registration the server no longer accepts (invalid_client or unauthorized_client) is discarded and replaced automatically, with the browser flow run once more; only a second rejection surfaces as a LoginError. Errors from the authorization server outside the browser round trip, such as unreachable metadata or a rejected registration, are AuthenticationError and exit 3 like any other API error.
auth status
Section titled “auth status”Show which credential is in use (option, env, or config) and verify it against the API. No options.
discolike auth status| Field | Present | Value |
|---|---|---|
source | always | option for a root --api-key, env for DISCOLIKE_API_KEY, config for the config file |
method | always | oauth or api_key |
api_key | API key only | The key masked to its last four characters |
expires_at | OAuth only | Access-token expiry as an ISO 8601 UTC timestamp |
expired | OAuth only | Whether the access token is past expires_at. The session is still refreshed on the next command, so this can be true while valid is true |
valid | always | true; an invalid credential raises instead |
The option is checked first, then the environment variable, then the config file. With no credential anywhere, it exits 3.
discolike auth status{ "source": "config", "method": "oauth", "expires_at": "2026-08-28T20:15:00+00:00", "expired": false, "valid": true}{ "source": "env", "method": "api_key", "api_key": "…isco", "valid": true}auth logout
Section titled “auth logout”Delete saved credentials from the local config file (the registered OAuth client is kept). No options. Idempotent - logging out twice is not an error.
discolike auth logoutdiscolike auth logoutPrints {"logged_out": true}. The OAuth session or API key is removed; the oauth_client registration stays so the next browser login does not ask for consent again.
company
Section titled “company”Company profiles by domain: firmographics, scores, growth, redirects, vendors, subsidiaries, and public links. Every subcommand takes a required DOMAIN argument and is synchronous.
SDK equivalents for this whole group live on client.companies.
company data
Section titled “company data”Full company profile (firmographics) for a domain.
discolike company data [OPTIONS] DOMAIN| Flag | Type | Default | Description |
|---|---|---|---|
DOMAIN (argument) | str | required | Company domain, e.g. stripe.com. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike company data stripe.com{ "domain": "stripe.com", "name": "Stripe", "status": { "status": "active", "confidence": 0.89 }, "score": 701, "start_date": "2011-01-04", "end_date": null, "address": { "street": "354 Oyster Point Blvd", "city": "South San Francisco", "state": "CA", "zip": "94080", "country": "US" }, "phones": [ "+16504279276", "+18889262289" ], ...}REST endpoint: BizData API. SDK: client.companies.data().
company score
Section titled “company score”Company score for a domain.
discolike company score [OPTIONS] DOMAIN| Flag | Type | Default | Description |
|---|---|---|---|
DOMAIN (argument) | str | required | Company domain, e.g. stripe.com. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike company score stripe.com{ "domain": "stripe.com", "score": 701, "parameters": { "base_score": 688.0, "recency_multiplier": 1.0, "growth_boost": 12.06, "lookback_360": 476, "lookback_720": 291, "expiration_penalty": 1.0 }, "first_event": "2011-01-04"}REST endpoint: Score API. SDK: client.companies.score().
company growth
Section titled “company growth”Growth signals for a domain.
discolike company growth [OPTIONS] DOMAIN| Flag | Type | Default | Description |
|---|---|---|---|
DOMAIN (argument) | str | required | Company domain, e.g. stripe.com. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike company growth stripe.comREST endpoint: Growth API. SDK: client.companies.growth().
company redirects
Section titled “company redirects”Domain redirects for a company domain.
discolike company redirects [OPTIONS] DOMAIN| Flag | Type | Default | Description |
|---|---|---|---|
DOMAIN (argument) | str | required | Company domain, e.g. stripe.com. |
--match | str | none | Domain match mode, e.g. loose. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike company redirects stripe.com --match looseREST endpoint: Redirects API. SDK: client.companies.redirects().
company vendors
Section titled “company vendors”Vendors associated with a company domain.
discolike company vendors [OPTIONS] DOMAIN| Flag | Type | Default | Description |
|---|---|---|---|
DOMAIN (argument) | str | required | Company domain, e.g. stripe.com. |
--match | str | none | Domain match mode, e.g. loose. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike company vendors stripe.comREST endpoint: Vendors API. SDK: client.companies.vendors().
company subsidiaries
Section titled “company subsidiaries”Subsidiaries of a company domain.
discolike company subsidiaries [OPTIONS] DOMAIN| Flag | Type | Default | Description |
|---|---|---|---|
DOMAIN (argument) | str | required | Company domain, e.g. stripe.com. |
--match | str | none | Domain match mode, e.g. loose. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike company subsidiaries stripe.com --match looseREST endpoint: Subsidiaries API. SDK: client.companies.subsidiaries().
company public-links
Section titled “company public-links”Public profile links for a domain from a given source. --source is required.
discolike company public-links [OPTIONS] DOMAIN| Flag | Type | Default | Description |
|---|---|---|---|
DOMAIN (argument) | str | required | Company domain, e.g. stripe.com. |
--source | str | required | Public link source, e.g. crunchbase. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike company public-links stripe.com --source crunchbaseOmitting --source is a usage error and exits 2.
REST endpoint: PublicLink API. SDK: client.companies.public_links().
contacts
Section titled “contacts”Find contacts: search and count by filters, look up or match individuals, and run bulk/generative discovery jobs. SDK equivalents live on client.contacts.
search, count and discover share one filter block, repeated in full in each table below.
contacts search
Section titled “contacts search”Search contacts matching the given filters.
discolike contacts search [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--icp-prompt | str | none | Natural-language ICP prompt used to derive contact filters. |
--seniority | str | none | Filter by seniority level (repeatable). |
--negate-seniority | str | none | Exclude seniority levels (repeatable). |
--department | str | none | Filter by department (repeatable). |
--negate-department | str | none | Exclude departments (repeatable). |
--title | str | none | Filter by job title (repeatable). |
--negate-title | str | none | Exclude job titles (repeatable). |
--domain | str | none | Filter by company domain (repeatable). |
--person-country | str | none | Filter by contact country (repeatable). |
--negate-person-country | str | none | Exclude contact countries (repeatable). |
--filter-industry | str | none | Filter by company industry (repeatable). |
--negate-filter-industry | str | none | Exclude company industries (repeatable). |
--filter-country | str | none | Filter by company country (repeatable). |
--negate-filter-country | str | none | Exclude company countries (repeatable). |
--employee-range | str | none | Company employee range, e.g. 50-200. |
--has-email / --no-has-email | bool | unset | Only contacts with (or without) an email address. |
--jobstart-date | str | none | Job start date filter: min date or ‘min,max’ range, e.g. 2025-01-01 or 2025-01-01,2025-06-30. |
--max-records | int | none | Maximum number of contacts to return. |
--offset | int | none | Number of records to skip for pagination. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
--param | str | none | Extra key=value query parameter forwarded to the SDK (repeatable). |
discolike contacts search --seniority vp --department marketing \ --domain stripe.com --has-email --max-records 5--icp-text is not accepted here; it exists only on contacts generate.
REST endpoint: Contacts API. SDK: client.contacts.search().
contacts count
Section titled “contacts count”Count contacts matching the given filters. Same filter block as search, without --max-records and --offset.
discolike contacts count [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--icp-prompt | str | none | Natural-language ICP prompt used to derive contact filters. |
--seniority | str | none | Filter by seniority level (repeatable). |
--negate-seniority | str | none | Exclude seniority levels (repeatable). |
--department | str | none | Filter by department (repeatable). |
--negate-department | str | none | Exclude departments (repeatable). |
--title | str | none | Filter by job title (repeatable). |
--negate-title | str | none | Exclude job titles (repeatable). |
--domain | str | none | Filter by company domain (repeatable). |
--person-country | str | none | Filter by contact country (repeatable). |
--negate-person-country | str | none | Exclude contact countries (repeatable). |
--filter-industry | str | none | Filter by company industry (repeatable). |
--negate-filter-industry | str | none | Exclude company industries (repeatable). |
--filter-country | str | none | Filter by company country (repeatable). |
--negate-filter-country | str | none | Exclude company countries (repeatable). |
--employee-range | str | none | Company employee range, e.g. 50-200. |
--has-email / --no-has-email | bool | unset | Only contacts with (or without) an email address. |
--jobstart-date | str | none | Job start date filter: min date or ‘min,max’ range, e.g. 2025-01-01 or 2025-01-01,2025-06-30. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
--param | str | none | Extra key=value query parameter forwarded to the SDK (repeatable). |
discolike contacts count --seniority vp --domain stripe.com{ "count": 56}REST endpoint: Contacts API. SDK: client.contacts.count().
contacts lookup
Section titled “contacts lookup”Look up a single contact by persona ID, LinkedIn URL, or email.
discolike contacts lookup [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--persona-id | int | none | Look up by persona ID. |
--linkedin | str | none | Look up by LinkedIn profile URL. |
--email | str | none | Look up by email address. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
All three identifiers are optional, and you can pass several at once - the API decides which to use.
discolike contacts lookup --email jane@example.comREST endpoint: Contacts API. SDK: client.contacts.lookup().
contacts match
Section titled “contacts match”Match a person name to contact records.
discolike contacts match [OPTIONS] NAME| Flag | Type | Default | Description |
|---|---|---|---|
NAME (argument) | str | required | Full name of the person to match. |
--company-name | str | none | Company name to narrow the match. |
--domain | str | none | Company domain to narrow the match. |
--person-country | str | none | Contact country to narrow the match. |
--limit | int | none | Maximum number of matches to return. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike contacts match "Jane Doe" --company-name "Acme Corp" --domain acme.com --limit 5REST endpoint: Contact Match API. SDK: client.contacts.match().
contacts bulk-match
Section titled “contacts bulk-match”Match many person queries in one async job. Task family contactmatch.
discolike contacts bulk-match [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--queries-file | path | required | Path to a JSON file with an array of match query objects. |
--enrich / --no-enrich | bool | unset | Enable or disable enrichment of matched contacts. |
--limit | int | none | Maximum number of matches per query. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
The file must parse as JSON and contain a top-level array; anything else exits 2.
discolike contacts bulk-match --queries-file queries.json --enrich --limit 5 --waitPoll a non-waiting run with discolike discogen status <task_id> --family contactmatch.
REST endpoint: Contact Bulk Match API. SDK: client.contacts.bulk_match().
contacts discover
Section titled “contacts discover”Discover contacts grouped by company for the given filters.
discolike contacts discover [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--icp-prompt | str | none | Natural-language ICP prompt used to derive contact filters. |
--seniority | str | none | Filter by seniority level (repeatable). |
--negate-seniority | str | none | Exclude seniority levels (repeatable). |
--department | str | none | Filter by department (repeatable). |
--negate-department | str | none | Exclude departments (repeatable). |
--title | str | none | Filter by job title (repeatable). |
--negate-title | str | none | Exclude job titles (repeatable). |
--domain | str | none | Filter by company domain (repeatable). |
--person-country | str | none | Filter by contact country (repeatable). |
--negate-person-country | str | none | Exclude contact countries (repeatable). |
--filter-industry | str | none | Filter by company industry (repeatable). |
--negate-filter-industry | str | none | Exclude company industries (repeatable). |
--filter-country | str | none | Filter by company country (repeatable). |
--negate-filter-country | str | none | Exclude company countries (repeatable). |
--employee-range | str | none | Company employee range, e.g. 50-200. |
--has-email / --no-has-email | bool | unset | Only contacts with (or without) an email address. |
--jobstart-date | str | none | Job start date filter: min date or ‘min,max’ range, e.g. 2025-01-01 or 2025-01-01,2025-06-30. |
--max-records | int | none | Maximum number of contacts to return. |
--offset | int | none | Number of records to skip for pagination. |
--results-by-company | int | none | Maximum contacts returned per company. |
--include-search-contacts / --no-include-search-contacts | bool | unset | Include or exclude contacts from contact search in the results. |
--consensus | int | none | Consensus threshold for discovered contacts. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
--param | str | none | Extra key=value query parameter forwarded to the SDK (repeatable). |
discolike contacts discover --domain stripe.com --seniority vp \ --results-by-company 5 --include-search-contacts --consensus 2REST endpoint: Contacts API. SDK: client.contacts.discover().
contacts generate
Section titled “contacts generate”Generate contacts for target domains from an ICP description (async job). The job is reported with task_family discogen, so poll it with --family discogen.
discolike contacts generate [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--icp-text | str | required | ICP description used to generate contacts. |
--domain | str | required | Target company domain (repeatable). |
--context-mode | str | none | Context mode for generation. |
--integration-id | str | none | Integration ID to use for generation. |
--search-provider-id | str | none | Search provider ID to use for generation. |
--search-context-size | str | none | Search context size for the search provider. |
--max-contacts-per-domain | int | none | Maximum contacts generated per domain. |
--max-company-records | int | none | Maximum company records to process. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike contacts generate --icp-text "Heads of RevOps" \ --domain acme.com --domain beta.com --max-contacts-per-domain 5 --waitREST endpoint: Contacts API. SDK: client.contacts.generate().
Count companies matching the given filters. Counting is the cheap way to size a query before you run discover.
discolike count [OPTIONS]The filter set is identical to discover minus --icp-prompt, --domain, --exclude-domain, --exclusion-query-id, --max-records and --offset.
| Flag | Type | Default | Description |
|---|---|---|---|
--phrase-match | str | none | Phrase the company website must contain (repeatable). |
--negate-phrase-match | str | none | Negate the --phrase-match filter (repeatable). |
--category | str | none | Industry category filter (repeatable). |
--negate-category | str | none | Negate the --category filter (repeatable). |
--country | str | none | ISO country code filter (repeatable). |
--negate-country | str | none | Negate the --country filter (repeatable). |
--state | str | none | State or region filter (repeatable). |
--negate-state | str | none | Negate the --state filter (repeatable). |
--employee-range | str | none | Employee count range filter. |
--revenue-range | str | none | Revenue range filter. |
--business-model | str | none | Business model filter (repeatable). |
--negate-business-model | str | none | Negate the --business-model filter (repeatable). |
--tech-stack | str | none | Technology stack filter (repeatable). |
--negate-tech-stack | str | none | Negate the --tech-stack filter (repeatable). |
--min-digital-footprint | int | none | Minimum digital footprint score. |
--max-digital-footprint | int | none | Maximum digital footprint score. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
--param | str | none | Extra API parameter as KEY=VALUE (comma-separates into a list); see the endpoint reference (repeatable). |
discolike count --category SOFTWARE --country US{ "count": 68900}discolike count --country DE --employee-range 50-200{ "count": 1510010}A malformed --param fails before any request is made:
discolike count --param bogusUsage: discolike count [OPTIONS]Try 'discolike count --help' for help.╭─ Error ──────────────────────────────────────────────────────────────────────╮│ Invalid value: --param must be in KEY=VALUE form, got 'bogus' │╰──────────────────────────────────────────────────────────────────────────────╯REST endpoint: Count API. SDK equivalent: client.count().
discogen
Section titled “discogen”Run DiscoGen research jobs and check status of or cancel any async task (see --family). SDK equivalents live on client.discogen; job handling is covered in Job.
discogen run
Section titled “discogen run”Run a DiscoGen research query across company domains (async job).
discolike discogen run [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--query | str | required | Research query to run. |
--domain | str | required | Company domain to research (repeatable). |
--integration-id | str | none | Integration ID to use for the run. |
--web-search / --no-web-search | bool | unset | Toggle web search during research. |
--context-mode | str | none | Context mode; see the endpoint reference. |
--include-x-search / --no-include-x-search | bool | unset | Toggle including X search in the research. |
--search-provider-id | str | none | Search provider ID to use for web search. |
--search-context-size | str | none | Search context size; see the endpoint reference. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike discogen run --query "Recent funding rounds" \ --domain stripe.com --domain adyen.com --web-search --wait --timeout 600REST endpoint: DiscoGen API. SDK: client.discogen.process().
discogen run-personas
Section titled “discogen run-personas”Run a DiscoGen research query across personas (async job). Identical to run except that --persona-id replaces --domain.
discolike discogen run-personas [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--query | str | required | Research query to run. |
--persona-id | int | required | Persona ID to research (repeatable). |
--integration-id | str | none | Integration ID to use for the run. |
--web-search / --no-web-search | bool | unset | Toggle web search during research. |
--context-mode | str | none | Context mode; see the endpoint reference. |
--include-x-search / --no-include-x-search | bool | unset | Toggle including X search in the research. |
--search-provider-id | str | none | Search provider ID to use for web search. |
--search-context-size | str | none | Search context size; see the endpoint reference. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike discogen run-personas --query "Career history" --persona-id 1 --persona-id 2REST endpoint: DiscoGen API. SDK: client.discogen.process_personas().
discogen models
Section titled “discogen models”List the models available for DiscoGen research.
discolike discogen models [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike discogen models{ "models": { "openai": [ { "name": "o4-mini", "supports_web_search": true }, { "name": "gpt-5-pro", "supports_web_search": true }, ... ], ... }}REST endpoint: DiscoGen API. SDK: client.discogen.models().
discogen status
Section titled “discogen status”Show the status and progress of an async task. This is the polling command for every async job in the CLI, not just DiscoGen.
discolike discogen status [OPTIONS] TASK_ID| Flag | Type | Default | Description |
|---|---|---|---|
TASK_ID (argument) | str | required | Task ID returned when the job was started. |
--family | discogen | bulkmatch | contactmatch | segment | discogen | Task family the task_id belongs to (bulk match jobs are ‘bulkmatch’, segment jobs ‘segment’, contact bulk-match ‘contactmatch’). |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike discogen status dg-4discolike discogen status seg-1 --family segmentAny other --family value is a usage error and exits 2.
SDK: Job.status().
discogen cancel
Section titled “discogen cancel”Cancel an async task. Output is always JSON: {"cancelled": "<task_id>"}.
discolike discogen cancel [OPTIONS] TASK_ID| Flag | Type | Default | Description |
|---|---|---|---|
TASK_ID (argument) | str | required | Task ID returned when the job was started. |
--family | discogen | bulkmatch | contactmatch | segment | discogen | Task family the task_id belongs to (bulk match jobs are ‘bulkmatch’, segment jobs ‘segment’, contact bulk-match ‘contactmatch’). |
discolike discogen cancel bm-1 --family bulkmatchSDK: Job.cancel().
discover
Section titled “discover”Discover companies matching your ICP and filters.
discolike discover [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--icp-prompt | str | none | Natural-language ideal customer profile description. |
--domain | str | none | Seed domain for lookalike matching (repeatable). |
--phrase-match | str | none | Phrase the company website must contain (repeatable). |
--negate-phrase-match | str | none | Negate the --phrase-match filter (repeatable). |
--category | str | none | Industry category filter (repeatable). |
--negate-category | str | none | Negate the --category filter (repeatable). |
--country | str | none | ISO country code filter (repeatable). |
--negate-country | str | none | Negate the --country filter (repeatable). |
--state | str | none | State or region filter (repeatable). |
--negate-state | str | none | Negate the --state filter (repeatable). |
--employee-range | str | none | Employee count range filter. |
--revenue-range | str | none | Revenue range filter. |
--business-model | str | none | Business model filter (repeatable). |
--negate-business-model | str | none | Negate the --business-model filter (repeatable). |
--tech-stack | str | none | Technology stack filter (repeatable). |
--negate-tech-stack | str | none | Negate the --tech-stack filter (repeatable). |
--min-digital-footprint | int | none | Minimum digital footprint score. |
--max-digital-footprint | int | none | Maximum digital footprint score. |
--exclude-domain | str | none | Domain to exclude from results (repeatable). |
--exclusion-query-id | str | none | Saved query ID whose results are excluded (repeatable). |
--max-records | int | none | Maximum number of companies to return. |
--offset | int | none | Number of records to skip for pagination. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
--param | str | none | Extra API parameter as KEY=VALUE (comma-separates into a list); see the endpoint reference (repeatable). |
Repeatable flags accumulate into a list, so --country US --country CA sends both values.
--param is the escape hatch for filters that have no dedicated flag. It splits on the first =, and a value containing a comma becomes a list - --param social=linkedin,youtube sends social=linkedin&social=youtube. A value with no = is a usage error (exit 2); a value the API schema rejects exits 2 before the request is sent. Named flags win over --param for the same key: --country DE --param country=US sends country=DE.
discolike discover --icp-prompt "B2B payments infrastructure" \ --country US --employee-range 50-200 --max-records 3discolike discover --domain stripe.com --domain adyen.com \ --negate-country RU --exclude-domain stripe.com --max-records 3REST endpoint: Discover API. SDK equivalent: client.discover().
Find work email addresses: submit single or batch find jobs, poll them, and fetch results. Only proven addresses bill; catch-all and pattern guesses are free.
Every submission is asynchronous. find and find-batch return an ID immediately; add --wait to block until the result is ready, or poll later with email job and email results. SDK equivalents live on client.email.
Email jobs use their own IDs and their own polling commands, separate from discogen status.
email find
Section titled “email find”Submit a single email find job (async); only a proven address bills.
discolike email find [OPTIONS] FIRST_NAME LAST_NAME DOMAIN| Flag | Type | Default | Description |
|---|---|---|---|
FIRST_NAME (argument) | str | required | First name of the person. |
LAST_NAME (argument) | str | required | Last name of the person. |
DOMAIN (argument) | str | required | Company domain to search, e.g. acme.com. |
--known-pattern | str | none | Known email local-part pattern for this domain, e.g. first.last. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
Without --wait the command prints the job ID and the command that polls it. The payload is a single object, so it always prints as JSON regardless of --format.
discolike email find Patrick Collison stripe.com{ "job_id": "98e10684-a270-4167-85a6-dc638bcf3791", "hint": "poll with: discolike email job 98e10684-a270-4167-85a6-dc638bcf3791"}With --wait the command blocks and prints the enumeration result instead, writing status: <value> lines to stderr on each poll.
discolike email find Patrick Collison stripe.com --wait --timeout 120Pass --known-pattern when you already know how a domain builds its addresses; it is omitted from the request entirely when you leave it off.
discolike email find Ada Lovelace acme.com --known-pattern first.last --waitREST endpoint: Email Find API. SDK: client.email.find().
email find-batch
Section titled “email find-batch”Submit an email find batch from a CSV file and/or inline contacts (async).
discolike email find-batch [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--contacts-file | path | none | Path to a CSV file with first_name,last_name,domain columns (max 500 contacts per batch). |
--contact | str | none | Inline contact as “first_name,last_name,domain” (repeatable). |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
Provide --contacts-file, one or more --contact, or both; the two sources are concatenated, file rows first. Supplying neither exits 2, and so does a total above 500 contacts or a CSV missing any of the three required columns.
discolike email find-batch --contacts-file people.csv \ --contact "Ada,Lovelace,acme.com" --wait --timeout 600Without --wait you get the batch ID and the command that fetches it:
{ "batch_id": "7f6f0a4e-52f7-4f3e-9c2d-0b8d3f1c9a11", "hint": "fetch with: discolike email results 7f6f0a4e-52f7-4f3e-9c2d-0b8d3f1c9a11"}With --wait the progress lines on stderr read progress: <completed>/<total> completed, <failed> failed.
REST endpoint: Email Find API. SDK: client.email.find_batch().
email results
Section titled “email results”Fetch results for an email find or verify batch.
discolike email results [OPTIONS] BATCH_ID| Flag | Type | Default | Description |
|---|---|---|---|
BATCH_ID (argument) | str | required | Batch ID returned by discolike email find-batch. |
--kind | find | verify | find | Batch kind: find or verify (verify batches are created by the DiscoLike app). |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
Without --wait the command fetches one snapshot and prints it even if the batch is still running, so completed and total can disagree. Any other --kind value is a usage error and exits 2.
--kind selects how each result is decoded: find reads them as enumeration results, verify as validation results. Pass the --kind that matches the batch.
discolike email results 7f6f0a4e-52f7-4f3e-9c2d-0b8d3f1c9a11 --waitdiscolike email results <batch_id> --kind verifyREST endpoint: Email Find API. SDK: client.email.batch().
email job
Section titled “email job”Poll a single email find job: print its current status, or block with --wait. The command is find-only and has no --kind flag; rehydrating a verify job needs the SDK’s client.email.job(job_id, kind="verify").
discolike email job [OPTIONS] JOB_ID| Flag | Type | Default | Description |
|---|---|---|---|
JOB_ID (argument) | str | required | Job ID returned by discolike email find. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
Without --wait you get the job wrapper: lifecycle status on the outside, the enumeration result nested under result:
discolike email job 98e10684-a270-4167-85a6-dc638bcf3791{ "job_id": "98e10684-a270-4167-85a6-dc638bcf3791", "status": "completed", "result": { "first_name": "patrick", "last_name": "collison", "domain": "stripe.com", "status": "catch_all_pattern", "result": { "email": "patrick.collison@stripe.com", "pattern": "first.last", "tier": 1, "smtp_code": 0, "valid": false }, "is_catch_all": true, "mx_host": "aspmx3.googlemail.com", "provider": "Everything Else", "attempts": 0, "duration_ms": 1473, "error": null }, "error": null}With --wait the wrapper is stripped and only the enumeration result is printed:
discolike email job 98e10684-a270-4167-85a6-dc638bcf3791 --wait --timeout 120{ "first_name": "patrick", "last_name": "collison", "domain": "stripe.com", "status": "catch_all_pattern", "result": { "email": "patrick.collison@stripe.com", "pattern": "first.last", "tier": 1, "smtp_code": 0, "valid": false }, "is_catch_all": true, "mx_host": "aspmx3.googlemail.com", "provider": "Everything Else", "attempts": 0, "duration_ms": 1473, "error": null}Polling is free; only the original find can bill, and only when it proves an address. The two status fields mean different things: the outer one is the job lifecycle, the inner one is the enumeration outcome. See Email Find for every value the inner status can take.
REST endpoint: Email Find API. SDK: client.email.job().
extract
Section titled “extract”Extract page content from a URL.
discolike extract [OPTIONS] URL| Flag | Type | Default | Description |
|---|---|---|---|
URL (argument) | str | required | Page URL to extract content from. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike extract https://stripe.com/about{ "text": "Stripe | Financial Infrastructure to Grow Your Revenue Products Solutions Developers Resources Pricing Sign in Start now Contact sales ...", "language": "en"}REST endpoint: Extract API. SDK equivalent: client.companies.extract().
llm-providers
Section titled “llm-providers”Manage BYOK LLM provider integrations (OpenAI, Anthropic, custom endpoints). SDK equivalents live on client.llm_providers; the REST surface is the LLM Providers API.
llm-providers list
Section titled “llm-providers list”List LLM provider integrations for the organization.
discolike llm-providers list [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike llm-providers list{ "providers": [ { "integration_id": "1f5e8466-fda4-4d4e-88eb-4b0886c37003", "integration_name": "grok-4.5-latest", "provider": "xai", "api_key": "*****", "model_name": "xai/grok-4.5-latest", "base_url": null, "supports_web_search": true, "input_cost_per_token": 2e-06, "output_cost_per_token": 6e-06, "is_default": true, "model_deprecated": false }, ... ]}llm-providers create
Section titled “llm-providers create”Create an LLM provider integration. No --format flag.
discolike llm-providers create [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--name | str | required | User-friendly name for the integration. |
--provider | str | required | LLM provider name: openai, anthropic, or custom. Free-form text - not validated against a list. |
--api-key | str | required | API key for the provider. |
--model-name | str | required | Default model name for this integration. |
--base-url | str | none | Endpoint URL (required for the custom provider). |
discolike llm-providers create --name OpenAI --provider openai \ --api-key sk-... --model-name gpt-4ollm-providers get
Section titled “llm-providers get”Get a single LLM provider integration by ID.
discolike llm-providers get [OPTIONS] INTEGRATION_ID| Flag | Type | Default | Description |
|---|---|---|---|
INTEGRATION_ID (argument) | str | required | ID of the LLM provider integration to fetch. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike llm-providers get 1f5e8466-fda4-4d4e-88eb-4b0886c37003{ "integration_id": "1f5e8466-fda4-4d4e-88eb-4b0886c37003", "integration_name": "grok-4.5-latest", "provider": "xai", "api_key": "*****", "model_name": "xai/grok-4.5-latest", "base_url": null, "supports_web_search": true, "input_cost_per_token": 2e-06, "output_cost_per_token": 6e-06, "is_default": true, "model_deprecated": false}llm-providers update
Section titled “llm-providers update”Update an LLM provider integration. --name, --provider and --model-name are required on every update. Omitting --api-key keeps the stored key. No --format flag.
discolike llm-providers update [OPTIONS] INTEGRATION_ID| Flag | Type | Default | Description |
|---|---|---|---|
INTEGRATION_ID (argument) | str | required | ID of the LLM provider integration to update. |
--name | str | required | User-friendly name for the integration. |
--provider | str | required | LLM provider name: openai, anthropic, or custom. |
--model-name | str | required | Default model name for this integration. |
--api-key | str | none | New API key (omit to keep the stored key). |
--base-url | str | none | Endpoint URL (required for the custom provider). |
discolike llm-providers update 1f5e8466-fda4-4d4e-88eb-4b0886c37003 \ --name Anthropic --provider anthropic --model-name claude-sonnet-4-5llm-providers delete
Section titled “llm-providers delete”Delete an LLM provider integration (admin only). Prints {"deleted": "<integration_id>"}.
discolike llm-providers delete [OPTIONS] INTEGRATION_ID| Flag | Type | Default | Description |
|---|---|---|---|
INTEGRATION_ID (argument) | str | required | ID of the LLM provider integration to delete. |
discolike llm-providers delete 1f5e8466-fda4-4d4e-88eb-4b0886c37003llm-providers set-default
Section titled “llm-providers set-default”Set an LLM provider integration as the organization default (admin only). The default is used whenever a command omits --integration-id.
discolike llm-providers set-default [OPTIONS] INTEGRATION_ID| Flag | Type | Default | Description |
|---|---|---|---|
INTEGRATION_ID (argument) | str | required | ID of the integration to make the organization default. |
discolike llm-providers set-default 1f5e8466-fda4-4d4e-88eb-4b0886c37003llm-providers test-connection
Section titled “llm-providers test-connection”Test a provider configuration before saving it. Nothing is persisted. No --format flag.
discolike llm-providers test-connection [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--name | str | cli-test | Name to label the test configuration. |
--provider | str | required | LLM provider name: openai, anthropic, or custom. |
--api-key | str | required | API key for the provider. |
--model-name | str | required | Model name to test against. |
--base-url | str | none | Endpoint URL (required for the custom provider). |
discolike llm-providers test-connection --provider openai \ --api-key sk-... --model-name gpt-4oMatch a company name to a domain, or bulk-match a CSV of names.
discolike match [OPTIONS] [NAME]| Flag | Type | Default | Description |
|---|---|---|---|
NAME (argument) | str | none | Company name to match to a domain. Optional, but exactly one of NAME or --file is required. |
--phone | str | none | Phone number to disambiguate the match. |
--city | str | none | City to disambiguate the match. |
--state | str | none | State or region to disambiguate the match. |
--country | str | none | Country to disambiguate the match. |
--zip-code | str | none | ZIP or postal code to disambiguate the match. |
--strict / --no-strict | bool | unset | Toggle strict matching. Omitted from the request entirely when neither form is passed. |
--local-mode / --no-local-mode | bool | unset | Toggle local matching mode. Omitted from the request entirely when neither form is passed. |
--file | path | none | CSV of company names to bulk-match as an async job (instead of NAME). |
--name-column | str | name | Column in --file that holds company names. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
Passing both NAME and --file, or neither, is a usage error (exit 2). With NAME the call is synchronous; with --file it starts a bulkmatch job.
discolike match "Stripe Inc"{ "query": { "name": "Stripe Inc", "country": null, "state": null, "city": null, "zip": null, "phones": null }, "matches": [ { "domain": "stripe.com", "name": "Stripe", "status": { "status": "active", "confidence": 0.89 }, "score": 701, "start_date": "2011-01-04", "end_date": null, "address": { "street": "354 Oyster Point Blvd", "city": "South San Francisco", "state": "CA", "zip": "94080", "country": "US" }, "phones": [ "+16504279276", "+18889262289" ], ... } ]}Disambiguate with location fields when the name is ambiguous:
discolike match "Acme" --city Boston --state MA --country US --strictBulk-match a CSV and wait for the job to finish:
discolike match --file names.csv --name-column company --wait --timeout 600REST endpoints: Match API for a single name, Bulk Match API for --file. SDK equivalents: client.match.company() and client.match.bulk().
queries
Section titled “queries”Manage saved queries and exclusion lists for reusable targeting. SDK equivalents live on client.queries; the REST surface is the Queries API.
queries list
Section titled “queries list”List saved queries.
discolike queries list [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--max-records | int | none | Maximum number of saved queries to return. |
--offset | int | none | Number of records to skip for pagination. |
--action | str | none | Filter by query action, e.g. discover. Free-form text - not validated against a list. |
--tag | str | none | Filter by tag (repeatable). |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike queries list --max-records 1 --action discover{ "results": [ { "query_id": "e15abe19-a8dc-41ca-8c79-38047ede6450", "query_name": "USA law firms in United States", "action": "discover", "user_name": "George Rekouts", "mtime": "2026-08-19T20:25:35.912744", "domains": [ "legalpages.co.uk", "myfamilyattorneys.com", ... ], ... } ]}queries create-exclusion-list
Section titled “queries create-exclusion-list”Create a named exclusion list of domains and/or persona IDs. No --format flag.
discolike queries create-exclusion-list [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--name | str | required | Name for the new exclusion list. |
--domain | str | none | Domain to exclude (repeatable). |
--persona-id | int | none | Persona ID to exclude (repeatable). |
--tag | str | none | Tag to attach to the list (repeatable). |
discolike queries create-exclusion-list --name "Current customers" \ --domain acme.com --domain beta.com --tag crmFeed the resulting query ID back into discovery with discolike discover --exclusion-query-id <id>.
queries save-results
Section titled “queries save-results”Save result rows from a file as a reusable saved query. No --format flag.
discolike queries save-results [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--input | path | required | Path to a .json (list of row objects) or .csv (header row) file. |
--name | str | required | Name for the saved query. |
--action | discover | segment | contacts | append | match | required | Underlying action: discover, segment, contacts, append, or match. |
--domain-column | str | domain | Column holding domains. |
--tag | str | none | Tag to attach (repeatable). |
The file suffix decides the parser: .csv (case-insensitive) is read with a CSV reader and every value stays a string; anything else is parsed as JSON. A missing file or invalid JSON is a usage error (exit 2), as is an --action outside the five choices.
discolike queries save-results --input rows.json --name "Q3 targets" --action discoverdiscolike queries save-results --input rows.csv --name "Q3 targets" \ --action discover --domain-column website --tag q3queries update
Section titled “queries update”Rename a saved query and/or update its tags. No --format flag.
discolike queries update [OPTIONS] QUERY_ID| Flag | Type | Default | Description |
|---|---|---|---|
QUERY_ID (argument) | str | required | ID of the saved query to update. |
--name | str | none | New name for the saved query. |
--tag | str | none | Tag to set on the query (repeatable). |
discolike queries update e15abe19-a8dc-41ca-8c79-38047ede6450 --name "Renamed" --tag hotqueries delete
Section titled “queries delete”Delete a saved query. No options beyond the argument; prints {"deleted": "<query_id>"}.
discolike queries delete [OPTIONS] QUERY_ID| Flag | Type | Default | Description |
|---|---|---|---|
QUERY_ID (argument) | str | required | ID of the saved query to delete. |
discolike queries delete e15abe19-a8dc-41ca-8c79-38047ede6450search-providers
Section titled “search-providers”Manage BYOK web search provider integrations (Tavily, Serper, etc.). SDK equivalents live on client.search_providers; the REST surface is the Search Providers API.
search-providers list
Section titled “search-providers list”List search provider integrations for the organization.
discolike search-providers list [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike search-providers list{ "providers": [ { "integration_id": "fd467f7f-11c1-4475-923a-f2c3341e41bb", "integration_name": "Serper", "provider": "serper", "search_model": "serper/search", "encrypted_api_key": null, "api_key": "*****", "base_url": null, "is_default": true, "cost_per_query": 0.001 }, ... ]}search-providers create
Section titled “search-providers create”Create a search provider integration (connectivity is validated first). No --format flag.
discolike search-providers create [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--name | str | required | User-friendly name for the integration. |
--provider | str | required | Search provider key, e.g. tavily or serper. |
--search-model | str | required | Search model key, e.g. tavily/search. |
--api-key | str | none | Provider API key (omit for free providers). |
--base-url | str | none | Custom endpoint URL for a LiteLLM proxy. |
discolike search-providers create --name Tavily --provider tavily \ --search-model tavily/search --api-key tvly-...search-providers update
Section titled “search-providers update”Update a search provider integration. --name, --provider and --search-model are required on every update - this is a full replace, not a patch. No --format flag.
discolike search-providers update [OPTIONS] INTEGRATION_ID| Flag | Type | Default | Description |
|---|---|---|---|
INTEGRATION_ID (argument) | str | required | ID of the search provider integration to update. |
--name | str | required | User-friendly name for the integration. |
--provider | str | required | Search provider key, e.g. tavily or serper. |
--search-model | str | required | Search model key, e.g. tavily/search. |
--api-key | str | none | New provider API key (omit to keep the stored key). |
--base-url | str | none | Custom endpoint URL for a LiteLLM proxy. |
discolike search-providers update fd467f7f-11c1-4475-923a-f2c3341e41bb \ --name Serper --provider serper --search-model serper/searchsearch-providers delete
Section titled “search-providers delete”Delete a search provider integration (admin only). Prints {"deleted": "<integration_id>"}.
discolike search-providers delete [OPTIONS] INTEGRATION_ID| Flag | Type | Default | Description |
|---|---|---|---|
INTEGRATION_ID (argument) | str | required | ID of the search provider integration to delete. |
discolike search-providers delete fd467f7f-11c1-4475-923a-f2c3341e41bbsearch-providers set-default
Section titled “search-providers set-default”Set a search provider integration as the organization default (admin only).
discolike search-providers set-default [OPTIONS] INTEGRATION_ID| Flag | Type | Default | Description |
|---|---|---|---|
INTEGRATION_ID (argument) | str | required | ID of the integration to make the organization default. |
discolike search-providers set-default fd467f7f-11c1-4475-923a-f2c3341e41bbsearch-providers clear-default
Section titled “search-providers clear-default”Remove the default flag from a search provider integration (admin only).
discolike search-providers clear-default [OPTIONS] INTEGRATION_ID| Flag | Type | Default | Description |
|---|---|---|---|
INTEGRATION_ID (argument) | str | required | ID of the integration currently set as default. |
discolike search-providers clear-default fd467f7f-11c1-4475-923a-f2c3341e41bbsearch-providers models
Section titled “search-providers models”List available search models grouped by provider, with cost per query. Use this to find the exact --search-model value for create and update.
discolike search-providers models [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike search-providers models{ "models": { "apiserpent": [ { "name": "apiserpent/search/google", "cost_per_query": 0.0006 }, { "name": "apiserpent/search/bing", "cost_per_query": 0.0006 }, ... ], ... }}segment
Section titled “segment”Auto-segment a list of domains (async job). The task family is segment.
discolike segment [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--domain | str | none | Domain to segment (repeatable). |
--file | path | none | CSV of domains to segment (instead of --domain). |
--domain-column | str | none | Column in --file that holds domains. |
--max-segments | int | none | Maximum number of segments to produce. 2-20 with --domain, 2-100 with --file. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
Pass exactly one of --domain or --file; both or neither is a usage error (exit 2).
discolike segment --domain acme.com --domain beta.com --max-segments 3Without --wait the command prints a job handle - task_id, task_family (segment), and a hint string with the exact discolike discogen status command to poll it - and exits immediately.
discolike segment --file domains.csv --domain-column domain --wait --timeout 600REST endpoint: Segment API. SDK equivalent: client.segment() for --domain, client.segment_file() for --file.
signup
Section titled “signup”Create a DiscoLike account for a person. No login needed; they confirm by email. This is the one command that works before discolike auth login.
discolike signup [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--email | str | required | The person’s work email. Becomes the login. |
--first-name | str | required | 1-40 characters. Must contain a letter and no angle brackets or control characters. |
--last-name | str | required | Same rules as --first-name. |
--agent | str | none | Agent or framework name to record with the signup. Defaults to discolike-cli/<version>. |
--yes, -y | flag | off | Skip the confirmation when signing up a different email than last time. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
discolike signup --email jane@acme.com --first-name Jane --last-name Doe{ "status": "created", "email": "jane@acme.com", "org_domain": "acme.com", "org_status": "created", "next_step": "A confirmation email was sent to jane@acme.com. Log in at https://app.discolike.com. Google or Microsoft sign-in with this email also works, no password needed."}Relay next_step to the person: they confirm by email, log in at app.discolike.com, pick a plan, and issue an API key for discolike auth login.
The command remembers the email it signed up. Running it again with a different email asks for confirmation first, and on a non-TTY exits 1 telling you to re-run with --yes, so an agent cannot quietly create a second account.
REST endpoint: Signup API. SDK equivalent: signup(). Per-agent instructions: Agent signup guide.
validate-icp
Section titled “validate-icp”Validate a list of domains against an ICP definition (async job).
discolike validate-icp [OPTIONS]| Flag | Type | Default | Description |
|---|---|---|---|
--icp | str | required | ICP definition text to validate the domains against. |
--domain | str | none | Domain to validate (repeatable). |
--file | path | none | Text file with one domain per line (instead of --domain). |
--context-mode | str | none | Context mode; see the endpoint reference. |
--integration-id | str | none | Integration ID to use for the validation. |
--web-search / --no-web-search | bool | unset | Toggle web search during validation. |
--search-provider-id | str | none | Search provider ID to use for web search. |
--wait | flag | off | Block until the job finishes, streaming progress to stderr. |
--timeout | float | 900.0 | Max seconds to wait with --wait. |
--format | str | none | Output format: json or table (table auto-selected on a TTY; falls back to JSON for non-tabular data). |
Pass exactly one of --domain or --file; both or neither is a usage error (exit 2). A --file is read as plain text, one domain per line, with blank lines skipped.
discolike validate-icp --icp "Mid-market SaaS selling to finance teams" \ --domain acme.com --domain beta.comdiscolike validate-icp --icp "Mid-market SaaS" --file domains.txt \ --web-search --wait --timeout 600REST endpoint: Validate API. SDK equivalent: client.validate_icp().