> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://imo.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://imo.ferndocs.com/_mcp/server.

# Introduction

Clinical data arrives messy. The same condition shows up as `chest pain`, `CP`,
`R07.9`, and `Thoracic pain` depending on which system produced it. Downstream
analytics, quality measures, and risk models all need one canonical answer.

**Precision Normalize** resolves input terms or codes to **IMO lexicals** —
common, clinically validated identifiers — and returns comprehensive mappings to
the standard industry code systems your other systems already speak.

## The two engines

#### [Normalize](/documentation/guides/normalize)

Works across **all six clinical domains**. Code-system agnostic and supports
your custom lexical maps. Use this as your default.

#### [Enrichment](/documentation/guides/enrichment)

**Problem domain only.** Uses enhanced AI models plus clinical context
(age, sex, existing ICD-10 codes) to pick the most clinically relevant match.

## Clinical domains

| Domain            | Typical input                           |
| ----------------- | --------------------------------------- |
| `Problem`         | Diagnoses, conditions, symptoms         |
| `Procedure`       | Surgical and diagnostic procedures      |
| `Medication`      | Drug names, formulations                |
| `Lab`             | Lab orders and results                  |
| `Allergen`        | Allergy substances and reactions        |
| `Anatomical Site` | Body structures and locations           |
| `Auto`            | Let IMO infer the domain from the input |

## How a request is shaped

Every call is a **batch**: one request carries up to **300 records**, each with
its own `record_id` so you can correlate results back to your rows.

```json
{
  "client_request_id": "batch-2026-08-31-001",
  "preferences": { "threshold": 0.5, "size": 5 },
  "requests": [
    { "record_id": "1", "domain": "Problem", "input_term": "chest pain" },
    { "record_id": "2", "domain": "Problem", "input_code": "R07.9",
      "input_code_system": "ICD-10-CM" }
  ]
}
```

* `client_request_id` — **required.** Your own identifier for the batch; echoed
  back in the response and useful when quoting a request to support.
* `preferences` — optional matching controls. See
  [Normalizing terms and codes](/documentation/guides/normalize).
* `requests[]` — the records. Supply `input_term` for term-based matching or
  `input_code` + `input_code_system` for code-based matching.

> **Note**
>
> Code-based matches always return a `score` of `1` and at most one lexical.
> Term-based matches return every lexical scoring at or above your `threshold`,
> ranked highest first.

## Next steps

#### [Quickstart](/documentation/getting-started/quickstart)

First call in five minutes.

#### [Authentication](/documentation/getting-started/authentication)

Client credentials and token refresh.

#### [API Reference](/api-reference)

Full schemas for every endpoint.