DevelopersAPIsSearch APIsCompany Search APIs

Company Search APIs

Company Search APIs allow you to discover and retrieve companies that match custom business criteria (such as industry, location, size, and intent signals) through AI-powered search and structured filtering.

Overview

The Company Search system runs asynchronous agent workflows so you can launch or refine searches, track progress, read results, manage tenant lists, run company enrichment, and query companies directly from MongoDB via Atlas Search.

The workflow includes:

  1. Start or Continue – Begin a new company search with a prompt, or extend an existing workflow by supplying its thread_id and a total_target
  2. Monitor status – Poll GET /status/{task_id} with the thread_id returned from start or continue to fetch the current workflow snapshot (criteria, table structure, rows, state)
  3. Get results & lists – Fetch search results for a thread_id and retrieve all lists for the current tenant
  4. Company enrichment – Start or stop asynchronous company enrichment workflows
  5. Search companies – Query companies from MongoDB using Atlas Search with structured filters
  6. Stop – Cancel an in-flight company search using the workflow thread_id

Base URL: https://chordian-core.chordian.ai

Authentication: Bearer token (HTTPBearer) or API key cookie (APIKeyCookie). Send your API key in the header: Authorization: Bearer <api-key>.


Start a company search workflow.

The body must include a string prompt. The API forwards {"prompt": ...} to the agent service via celery_task.execute_function with function_name="start_workflow". The workflow runs in the background; use the returned thread_id to poll status.

POST /company-search/start

Authentication: Authorization: Bearer <api-key>

Request Body

{
  "list_description": "Series B SaaS companies",
  "list_name": "Q3 prospects",
  "prompt": "Find Series B SaaS companies in the US",
  "search_mode": "fast"
}
FieldTypeRequiredDescription
promptstringNatural-language description of the companies you want to find.
list_descriptionstringHuman-readable description for the resulting list.
list_namestringName for the resulting list.
search_modestringSearch mode (e.g. fast).

Successful Response (200 OK)

{
  "success": true,
  "message": "string",
  "thread_id": "string",
  "status": "processing"
}
FieldTypeDescription
successbooleantrue when the workflow was started successfully.
messagestringHuman-readable status message.
thread_idstringWorkflow thread identifier. Pass this as task_id to Get Workflow Status (GET /company-search/status/{task_id}), or use with Continue / Stop.
statusstringWorkflow state (e.g. processing).

Validation Error (422)

{
  "status_code": 422,
  "message": "Request validation failed",
  "errors": [
    {
      "field": "body.prompt",
      "message": "Field required",
      "type": "missing"
    }
  ],
  "data": null
}

Example

curl -X POST "https://chordian-core.chordian.ai/company-search/start" \
  -H "Authorization: Bearer <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "list_description": "Series B SaaS companies",
    "list_name": "Q3 prospects",
    "prompt": "Find Series B SaaS companies in the US",
    "search_mode": "fast"
  }'

Continue an existing company search workflow.

The body must include thread_id and total_target. The API forwards that JSON to the agent service via celery_task.execute_function with function_name="continue_workflow".

POST /company-search/continue

Authentication: Authorization: Bearer <api-key>

Request Body

{
  "thread_id": "thread_abc123",
  "total_target": 200
}
FieldTypeRequiredDescription
thread_idstringIdentifier of the existing workflow thread to continue (the thread_id returned by Start Company Search).
total_targetintegerTarget total number of companies the workflow should aim to collect.

Successful Response (200 OK)

{
  "success": true,
  "thread_id": "string",
  "status": "continuing"
}
FieldTypeDescription
successbooleantrue when the continue request was accepted.
thread_idstringWorkflow thread identifier. Pass this as task_id to Get Workflow Status (GET /company-search/status/{task_id}).
statusstringWorkflow state (e.g. continuing).

Validation Error (422)

{
  "status_code": 422,
  "message": "Request validation failed",
  "errors": [
    {
      "field": "body.thread_id",
      "message": "Field required",
      "type": "missing"
    },
    {
      "field": "body.total_target",
      "message": "Field required",
      "type": "missing"
    }
  ],
  "data": null
}

Example

curl -X POST "https://chordian-core.chordian.ai/company-search/continue" \
  -H "Authorization: Bearer <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "thread_id": "thread_xyz789",
    "total_target": 200
  }'

Get Workflow Status

Poll the status of a previously started workflow. Returns a snapshot of the workflow (criteria, table structure, rows, etc.) for the given task_id — which is a workflow thread id (the thread_id returned by Start Company Search or Continue Company Search).

GET /company-search/status/{task_id}

Authentication: Authorization: Bearer <api-key>

Path Parameters

ParameterTypeRequiredDescription
task_idstringWorkflow task or thread id for status polling. Use the thread_id returned by Start or Continue.

Successful Response (200 OK)

A full snapshot of the workflow — overall status, search criteria, the result table (columns + rows), collected companies, and progress counters.

{
  "success": true,
  "thread_id": "string",
  "current_step": "string",
  "category": "string",
  "criteria": [
    {
      "name": "string",
      "value": "string",
      "column_name": "string",
      "columnType": "string",
      "description": "string",
      "type": "string",
      "width": 0,
      "maxWidth": 0,
      "minWidth": 0
    }
  ],
  "error_message": "string",
  "total_target": 0,
  "table_structure": {
    "columns": [
      {
        "id": "string",
        "header": "string",
        "type": "fixed",
        "width": 0,
        "required": true,
        "columnType": "string",
        "dataType": "string",
        "maxWidth": 0,
        "minWidth": 0
      }
    ],
    "rows": [
      {
        "id": "string",
        "cells": {
          "additionalProp1": {
            "row_id": "string",
            "column_id": "string",
            "value": "string",
            "status": "string",
            "metadata": {
              "additionalProp1": {}
            },
            "expandable": false
          }
        },
        "step_source": "string",
        "metadata": {
          "additionalProp1": {}
        }
      }
    ],
    "total_target": 0,
    "current_count": 0
  },
  "all_companies": [
    {
      "additionalProp1": {}
    }
  ],
  "step_companies": {
    "additionalProp1": {}
  },
  "title": "string",
  "description": "string",
  "goal": "string",
  "processed_companies": ["string"]
}
Top-level fields
FieldTypeDescription
successbooleantrue when the snapshot was produced successfully. Check error_message when false.
thread_idstringIdentifier of this workflow thread.
current_stepstringName of the step the workflow is currently executing.
categorystringWorkflow category / classification assigned by the agent.
criteriaarray<Criterion>Filtering / scoring criteria (see Criterion).
error_messagestringError description when the workflow fails; empty or null otherwise.
total_targetintegerTarget total number of records the workflow aims to collect.
table_structureobject<TableStructure>Schema and current contents of the result table (see TableStructure).
all_companiesarray<object>All companies discovered across the workflow.
step_companiesobjectMap of step name → companies surfaced in that step.
titlestringHuman-readable title for the workflow / result set.
descriptionstringHuman-readable description of the workflow / result set.
goalstringGoal statement for the workflow.
processed_companiesarray<string>Identifiers of companies the workflow has processed so far.
Criterion (item of criteria[])
FieldTypeDescription
namestringCriterion name.
valuestringCurrent value / target for the criterion.
column_namestringResult-table column this criterion maps to.
columnTypestringUI column-type hint.
descriptionstringHuman-readable description.
typestringInternal criterion type.
widthintegerDefault column width (pixels).
maxWidthintegerMaximum column width.
minWidthintegerMinimum column width.
TableStructure (table_structure)
FieldTypeDescription
columnsarray<Column>Column definitions (see Column).
rowsarray<Row>Rows collected so far (see Row).
total_targetintegerTarget row count for this table.
current_countintegerNumber of rows currently in the table.
Column (item of table_structure.columns[])
FieldTypeDescription
idstringStable column identifier (used as cells key on each row).
headerstringDisplay label for the column.
typestringColumn type — typically fixed or dynamic-criterion columns.
widthintegerDefault column width (pixels).
requiredbooleanWhether the column must be populated for a complete row.
columnTypestringUI column-type hint.
dataTypestringUnderlying data type for cell values.
maxWidthintegerMaximum column width.
minWidthintegerMinimum column width.
Row (item of table_structure.rows[])
FieldTypeDescription
idstringStable row identifier.
cellsobject<string, Cell>Map of column id → cell value (see Cell).
step_sourcestringWorkflow step that produced this row.
metadataobjectArbitrary per-row metadata.
Cell (value in Row.cells)
FieldTypeDescription
row_idstringParent row identifier.
column_idstringColumn this cell belongs to.
valuestringCell value, serialized as a string.
statusstringCell status (e.g. pending, loaded, error).
metadataobjectArbitrary per-cell metadata.
expandablebooleantrue when a drill-down view is available.

Validation Error (422)

{
  "status_code": 422,
  "message": "Validation Error",
  "errors": [
    {
      "field": "path.task_id",
      "message": "Field required",
      "type": "missing"
    }
  ],
  "data": null
}

Example

curl "https://chordian-core.chordian.ai/company-search/status/thread_xyz789" \
  -H "Authorization: Bearer <api-key>"

Stop a running company search workflow.

The path thread_id is forwarded to the agent service via celery_task.execute_function with function_name="stop_workflow".

POST /company-search/stop/{thread_id}

Authentication: Authorization: Bearer <api-key>

Path Parameters

ParameterTypeRequiredDescription
thread_idstringCompany workflow thread identifier (the thread_id returned by Start or Continue).

Successful Response (200 OK)

{
  "success": true,
  "thread_id": "string",
  "status": "stopping",
  "message": "string"
}
FieldTypeDescription
successbooleantrue when the stop request was accepted.
thread_idstringWorkflow thread identifier that is being stopped.
statusstringWorkflow state (e.g. stopping).
messagestringHuman-readable status message.

Validation Error (422)

{
  "status_code": 422,
  "message": "Validation Error",
  "errors": [
    {
      "field": "path.thread_id",
      "message": "Field required",
      "type": "missing"
    }
  ],
  "data": null
}

Example

curl -X POST "https://chordian-core.chordian.ai/company-search/stop/thread_abc123" \
  -H "Authorization: Bearer <api-key>"

Start Company Enrichment

Start a company enrichment workflow.

POST /company-search/start-enrichment

Authentication: Authorization: Bearer <api-key>

Request Body

Schema: CompanyEnrichmentStartRequest

{
  "thread_id": "thread_xyz",
  "column_name": "ceo_email",
  "instruction": "Find the CEO work email",
  "enrichment_type": "custom",
  "data_type": "company"
}
FieldTypeRequiredDescription
thread_idstringWorkflow thread identifier for the company search to enrich.
column_namestringTarget column name in the workflow result table to enrich.
instructionstringNatural-language instruction describing what to enrich (default: "").
enrichment_typestringEnrichment variant (e.g. custom, contacts; default: "").
data_typestringOptional data type hint (e.g. company).

Successful Response (200 OK)

Schema: CompanyEnrichmentTaskResponse

{}
FieldTypeDescription
(schema)objectEnrichment task details. Shape defined by CompanyEnrichmentTaskResponse.

Validation Error (422)

{
  "status_code": 422,
  "message": "Request validation failed",
  "errors": [
    {
      "field": "body.thread_id",
      "message": "Field required",
      "type": "missing"
    },
    {
      "field": "body.column_name",
      "message": "Field required",
      "type": "missing"
    }
  ],
  "data": null
}

Example

curl -X POST "https://chordian-core.chordian.ai/company-search/start-enrichment" \
  -H "Authorization: Bearer <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "thread_id": "thread_xyz",
    "column_name": "ceo_email",
    "instruction": "Find the CEO work email",
    "enrichment_type": "custom",
    "data_type": "company"
  }'

Stop Company Enrichment

Stop a running company enrichment workflow.

POST /company-search/stop-enrichment/{thread_id}

Authentication: Authorization: Bearer <api-key>

Path Parameters

ParameterTypeRequiredDescription
thread_idstring (1–512 chars)Company workflow thread identifier for the enrichment run to stop.

Successful Response (200 OK)

Schema: CompanyEnrichmentTaskResponse

{}
FieldTypeDescription
(schema)objectEnrichment task details. Shape defined by CompanyEnrichmentTaskResponse.

Validation Error (422)

{
  "status_code": 422,
  "message": "Validation Error",
  "errors": [],
  "data": null
}

Example

curl -X POST "https://chordian-core.chordian.ai/company-search/stop-enrichment/thread_abc123" \
  -H "Authorization: Bearer <api-key>"

Get Lists

Get all lists for the current tenant.

The request is forwarded to the agent service via celery_task.execute_function with function_name="get_lists".

GET /company-search/getLists

Authentication: Authorization: Bearer <api-key>

Successful Response (200 OK)

{
  "success": true,
  "data": [
    {
      "id": "string",
      "listLinkID": "string",
      "createdAt": "string",
      "listDescription": "string",
      "listName": "string",
      "listStatus": "string",
      "listType": "string",
      "noOfRecords": 0,
      "title": "string",
      "subtitle": "string",
      "author": 0,
      "type": "string"
    }
  ],
  "total": 0
}
FieldTypeDescription
successbooleantrue when lists were retrieved successfully.
dataarray<ListItem>List records for the current tenant (see ListItem).
totalintegerTotal number of lists returned.
ListItem (item of data[])
FieldTypeDescription
idstringList identifier.
listLinkIDstringLinked list ID.
createdAtstringISO timestamp when the list was created.
listDescriptionstringList description.
listNamestringList name.
listStatusstringCurrent list status.
listTypestringList type classification.
noOfRecordsintegerNumber of records in the list.
titlestringDisplay title.
subtitlestringDisplay subtitle.
authorintegerAuthor identifier.
typestringType label.

Validation Error (422)

{
  "status_code": 422,
  "message": "Validation Error",
  "errors": [],
  "data": null
}

Example

curl "https://chordian-core.chordian.ai/company-search/getLists" \
  -H "Authorization: Bearer <api-key>"

Get Search Result

Get the search result for a given thread.

GET /company-search/getSearchResult/{thread_id}

Authentication: Authorization: Bearer <api-key>

Path Parameters

ParameterTypeRequiredDescription
thread_idstringCompany workflow thread identifier

Successful Response (200 OK)

{
  "success": true,
  "thread_id": "string",
  "list_id": "string",
  "status": "string",
  "list_name": "string",
  "list_description": "string",
  "list_type": "string",
  "total_target": 0,
  "criteria": [
    {
      "name": "string",
      "value": "string",
      "column_name": "string",
      "type": "string"
    }
  ],
  "results": [
    {
      "additionalProp1": {}
    }
  ],
  "count": 0,
  "created_at": "string",
  "updated_at": "string"
}
FieldTypeDescription
successbooleantrue when the result was retrieved successfully.
thread_idstringWorkflow thread identifier.
list_idstringAssociated list identifier.
statusstringResult / workflow status.
list_namestringName of the list.
list_descriptionstringDescription of the list.
list_typestringList type classification.
total_targetintegerTarget number of records for this search.
criteriaarray<object>Criteria used for the search (each item has name, value, column_name, type).
resultsarray<object>Company result rows (open shape per item).
countintegerNumber of results returned.
created_atstringISO timestamp when the result was created.
updated_atstringISO timestamp when the result was last updated.

Validation Error (422)

{
  "status_code": 422,
  "message": "Validation Error",
  "errors": [],
  "data": null
}

Example

curl "https://chordian-core.chordian.ai/company-search/getSearchResult/thread_abc123" \
  -H "Authorization: Bearer <api-key>"

Search Companies

Search companies from MongoDB using Atlas Search. Pass one or more field name values in the path array to control which attributes are matched against your query.

For nested fields, use the full dot-notation name from the table below (for example, links.linkedin or address.city). Some shorthand values may also resolve automatically—for example, linkedin can map to links.linkedin.

Searchable attributes

Use the Name column values in your request path array.

NameLabelDescription
countryHQ (Country/City)Headquarters location of the company, typically including country and city information used to identify where the business is based.
phoneCompany PhoneThe company’s primary contact phone number used for business communication.
revenueRevenueThe total amount of money a company earns from its business activities over a given period.
descriptionDescriptionA brief summary of the company, its products, services, and overall business focus.
industriesIndustryThe sectors or fields in which the company operates, such as technology, healthcare, or finance.
tickerTickerThe stock symbol representing the company on a public stock exchange.
yearFoundedYear FoundedThe calendar year in which the company was officially established.
faxFaxThe company’s fax number used for sending documents and formal communications.
fundingInvestorsFunding InvestorsIndividuals or organizations that have provided financial investment to the company.
techstackTech StackThe set of technologies, platforms, and tools the company uses to build and deliver its products or services.
competitorsCompetitorsOther companies offering similar products or services in the same market.
totalEmployeesTotal EmployeesThe total number of people currently employed by the company.
links.linkedinLinkedInThe company’s official LinkedIn profile or company page URL.
links.twitterTwitterThe company’s official Twitter profile or handle.
links.facebookFacebookThe company’s official Facebook page or profile URL.
links.crunchbaseCrunchbase URLThe company’s Crunchbase profile URL, including funding history, investors, and key company details.
address.streetStreetThe street address of the company’s headquarters or primary business location.
address.cityCityThe city where the company is headquartered or primarily operates.
address.regionRegionThe state, province, or broader geographic region where the company is located.
address.postal_codePostal CodeThe ZIP or postal code for the company’s address.
address.country_codeCountry CodeThe ISO country code representing the country where the company is located.
departmentsDepartmentsThe functional units or teams within the company, such as sales, engineering, or marketing.
ownershipTypeOwnership TypeIndicates who owns and controls the company—for example, private individuals, public shareholders, or government entities.
tagsTagsShort keywords or labels describing key company attributes such as industry, size, ownership type, services, or business model.
googleReviewCountGoogle Review CountThe total number of customer reviews the company has received on Google.
emailCompany EmailThe official email address used for business communication with the company.
staffsStaffsThe total number of employees or staff members working at the company.
googleRatingGoogle RatingThe average customer rating (typically 1–5 stars) the company has received on Google.
noOfStoresNo of StoresThe number of physical retail locations or outlets the company operates.
yelpReviewCountYelp Review CountThe total number of customer reviews the company has received on Yelp.
links.googleMapGoogle MapThe company’s Google Maps listing, including address, directions, and location details.
priceTierPrice TierThe pricing level or category associated with the company’s products or services (for example, budget, mid-range, or premium).
openDateOpen DateThe date when the company, store, or branch officially began operations.
links.instagramInstagramThe company’s official Instagram account used for marketing and customer engagement.
links.xXThe company’s official X (formerly Twitter) account for updates and public engagement.
links.pinterestPinterestThe company’s official Pinterest account for sharing visual content and promotions.
links.tiktokTikTokThe company’s official TikTok account for short-form video content and audience engagement.
links.youtubeYouTubeThe company’s official YouTube channel for videos, promotions, tutorials, and viewer engagement.
businessSpecialtyBusiness SpecialtyThe main products, services, or areas of expertise the company is known for.
latitudeLatitudeThe geographic coordinate specifying the company’s north–south position on Earth’s surface.
longitudeLongitudeThe geographic coordinate specifying the company’s east–west position on Earth’s surface.
sectorFocusSector FocusThe key industry sectors the company targets with its products, services, and solutions.
timeZoneTime ZoneThe official local time zone used by the company for business operations and communication.
companyTypeCompany TypeThe legal form of the business—for example, corporation, partnership, private limited company, or government entity.
marketCapMarket CapThe total market value of the company’s outstanding shares, indicating its size in financial markets.
estimatedAnnualRevenueEstimated Annual RevenueA projected or approximate yearly income generated from the company’s core business operations.
fiscalYearEndFiscal Year EndThe last day of the company’s financial year, after which annual financial statements are prepared.
fundingRoundsFunding RoundsDetails of individual funding rounds the company has completed, including stage and amounts raised.
fundingTotalsFunding TotalsThe cumulative amount of investment the company has secured across all funding rounds.
lastFundingTypeLast Funding TypeThe type or stage of the company’s most recent funding round (for example, Seed, Series A, or Series B).
lastFundingAtLast Funding AtThe date of the company’s most recent investment or funding round.
numFundingRoundsNo of Funding RoundsThe total number of separate funding rounds the company has received from investors.
trafficRankHeadlineTraffic Rank HeadlineA summary headline describing the company’s website traffic rank and online visibility.
spentSummarySpent SummaryA concise overview of the total amount the company has spent over a period or on specific activities.
fundingStageFunding StageThe company’s current or latest stage in its fundraising journey (for example, Seed, Series A, or Series B).
trafficSummaryTraffic SummaryA concise overview of the company’s website traffic and online engagement metrics over time.
investorListInvestor ListA record of individuals or organizations that have invested capital in the company across its funding rounds.
acquiredCompaniesAcquired CompaniesCompanies that have been acquired or merged by this organization.
subOrganizationsListSub Organizations ListSubsidiary or affiliated organizations operating under the parent company.
traffic.trafficCountryTraffic CountryThe country or countries from which the company’s website receives the majority of its traffic.
traffic.trafficPercentageTraffic PercentageThe proportion of website traffic from a specific source, country, or segment, expressed as a percentage.
averageInvestmentTicketAverage Investment TicketThe average amount invested in a single funding round.
similarCompaniesInvestedInHistorical InvestmentsA record of previous investments the company or investor has made in other businesses.
investmentThesisInvestment ThesisThe primary reasoning, strategy, or criteria behind investment decisions.
traffic.monthlyWebsiteVisitorsMonthly Website VisitorsThe total number of unique users who visit the company’s website within a month.
itSpendIT SpendTotal expenditure on IT resources, infrastructure, software, and related services.
interestSignalsInterest SignalsIndicators of the company’s digital research behavior and topics they are actively exploring online.
totalIpTotal IPThe total number of unique IP addresses accessing the company’s website or network.
investorTypeInvestor TypeThe category of investor based on structure and strategy—for example, venture capital, angel, or corporate investor.
companyNameCompany NameThe legal or commonly used name of the company or organization.
websiteWebsiteThe company’s primary website URL or domain.
naics.naics_codeNAICS CodeA 6-digit North American Industry Classification System code identifying the company’s industry.
naics.sectorNAICS SectorThe highest-level NAICS grouping describing the broad sector the company belongs to.
naics.sub_sectorNAICS Sub SectorThe 3-digit NAICS sub-sector classification for the company.
naics.industry_groupNAICS Industry GroupThe 4-digit NAICS industry group classification for the company.
naics.naics_industryNAICS IndustryThe 5-digit NAICS industry classification for the company.
naics.national_industryNAICS National IndustryThe most detailed 6-digit NAICS classification for the company’s national industry.
sic.sic_codeSIC CodeA 4-digit Standard Industrial Classification code identifying the company’s industry.
sic.major_groupSIC Major GroupThe 2-digit SIC major group classification for the company.
sic.industry_groupSIC Industry GroupThe 3-digit SIC industry group classification for the company.
sic.industry_sectorSIC Industry SectorThe top-level SIC division or sector the company belongs to.
profilesCompany ProfilesOnline profile links and references related to the company across platforms and directories.
mic_exchangeMIC ExchangeThe Market Identifier Code (ISO 10383) for the stock exchange or trading venue where the company is listed.
POST /company-search/search

Authentication: Authorization: Bearer <api-key>

Request Body

{
  "fuzzy_max_edits": 2,
  "limit": 10,
  "path": ["website", "companyName"],
  "query": "amossoftware.com"
}
FieldTypeRequiredDescription
querystringSearch query string (e.g. domain, company name, or keyword).
limitintegerMaximum number of results to return.
patharray<string>One or more searchable field name values from the table above (e.g. website, companyName, links.linkedin).
fuzzy_max_editsintegerMaximum edit distance for fuzzy matching (e.g. 2).

Successful Response (200 OK)

{
  "results": [
    {
      "_id": "string",
      "website": "string",
      "country": "string",
      "headquarters": "string",
      "similarCompaniesInvestedIn": []
    }
  ],
  "count": 0
}
FieldTypeDescription
resultsarray<object>Matching company documents (open shape per item).
countintegerNumber of results returned.

Validation Error (422)

{
  "status_code": 422,
  "message": "Request validation failed",
  "errors": [
    {
      "field": "body.query",
      "message": "Field required",
      "type": "missing"
    }
  ],
  "data": null
}

Example

curl -X POST "https://chordian-core.chordian.ai/company-search/search" \
  -H "Authorization: Bearer <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "fuzzy_max_edits": 2,
    "limit": 10,
    "path": ["website", "companyName"],
    "query": "amossoftware.com"
  }'