> ## Documentation Index
> Fetch the complete documentation index at: https://docs.seamless.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Research without search

> Enrich companies and contacts by passing identifiers directly to the research endpoints — no searchResultId required.

You do not always need to call search first. The research endpoints accept direct identifiers so you can enrich records you already know.

## When to use this path

* You already have a company **domain** or **company name** from your CRM or spreadsheet.
* You already have a contact **name**, **company**, and optional **title** from another system.
* You want a shorter integration when search filters are unnecessary.

If you need to discover targets by filters (job title, industry, location), start with [Search companies](/searchcompanies) or [Search contacts](/searchcontacts), then pass the returned `searchResultId` to research. See [Understand identifiers and request flow](/understand-identifiers-and-request-flow).

## Research companies directly

POST [Research companies](/researchcompanies) with a `companies` array. Each item needs at least one of `domain` or `companyName`.

```bash theme={null}
curl -X POST https://api.seamless.ai/api/client/v1/companies/research \
  -H "Content-Type: application/json" \
  -H "Token: $SEAMLESS_API_KEY" \
  -d '{
    "companies": [
      { "domain": "seamless.ai", "companyName": "Seamless.AI" }
    ]
  }'
```

The response is **HTTP 202 Accepted** with `requestIds`. Poll with [Poll company research results](/pollcompanyresearchresults) or use [webhooks](/receive-research-results-with-webhooks).

You can also combine `searchResultIds` from a prior search with `companies` in the same request (up to 100 items total).

### Optional: skip deduplication

Set `skipDeduplicationCheck: true` to force a new research run even if Seamless recently researched the same company. This may consume additional credits. Default is `false`.

## Research contacts directly

POST [Research contacts](/researchcontacts) with a `contacts` array. Each item should include `contactName` and `companyName`; add `title` when you have it.

```bash theme={null}
curl -X POST https://api.seamless.ai/api/client/v1/contacts/research \
  -H "Content-Type: application/json" \
  -H "Token: $SEAMLESS_API_KEY" \
  -d '{
    "contacts": [
      { "contactName": "Jane Doe", "companyName": "Acme Corp", "title": "CTO" }
    ]
  }'
```

Poll with [Poll contact research results](/pollcontactsresearchresults). Terminal poll statuses for contacts include `done`, `error`, `missing`, and `duplicate`.

### Job-change research

Set `isJobChange: true` when researching contacts who recently changed roles. Pass the same `contacts` shape; see [Research contacts](/researchcontacts) in the API reference for examples.

## Retrieve results

Same as the search-then-research flow:

* [Webhooks](/receive-research-results-with-webhooks) — push delivery to your HTTPS endpoint.
* Polling — call the poll endpoint with each `requestId` until status is terminal.

## Related

* [Authenticate and make your first request](/authenticate-and-make-your-first-request) — search → research → poll walkthrough
* [Choose the right workflow](/choose-the-right-workflow) — compare webhooks, polling, and org data
* [Rate limits and credits](/rate-limits-and-credits) — credits and `duplicate` status
