> 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.

# Normalize with enrichment

POST https://api-sandbox.imohealth.com/precision/normalize/enrichment
Content-Type: application/json

Normalize a set of input terms or codes to IMO lexicals from the Problem domain using enriched contextual analysis. Employs enhanced AI models to find the most relevant matches and prioritizes clinical context (age, sex, severity, existing ICD-10 codes) supplied with each record.

Reference: https://imo.ferndocs.com/api-reference/normalize/enrich

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects a NormalizeEnrichmentRequest.

- `client_request_id` (string, required) — A unique identifier for the request from the partner application. This may be any string value using any format.
- `requests` (list of NormalizeEnrichmentRequestRequestsItems, required) — Each object in this array represents a normalization record for a single clinical term or code that you want to match to an IMO lexical. At a minimum, each object must include the record_id and domain fields, as well as either the input_term (when term-based matching) or both of the input_code and input_code_system fields (when code-based matching). When term-based matching, the context fields are also strongly recommended to ensure the most relevant lexical matches, especially the source_text field.When working with large batches of normalization records, for optimal performance each payload should include 10 to 25 requests objects.
- `session_id` (string, optional) — A unique identifier for the session, used to correlate requests across endpoints for the term refinement workflow. This should be a value returned by the **GET /precision/normalize/session** operation.
- `preferences` (NormalizeEnrichmentRequestPreferences, optional) — In this object, the match_field_pref field determines whether the API performs term-based or code-based lexical matching. All other fields in this object define operation preferences only applicable to term-based matching.The preferences in this object apply to every normalization record included in the requests array.

## Response

### 200

successful operation

- `summary` (NormalizeEnrichmentResponseSummary, optional) — This object provides a summary of the normalization records returned in the *requests* array.
- `request_id` (string, optional) — A globally unique identifier automatically generated for the request by the API.
- `client_request_id` (string, optional) — The same value echoed back from the request's *client_request_id* field.
- `session_id` (string, optional) — The same value echoed back from the request's session_id field, if applicable.If session_id was excluded from the request, this field is also excluded from the response.
- `response_time` (integer, optional) — The time in milliseconds taken to process the entire request.
- `requests` (list of NormalizeEnrichmentResponseRequestsItems, optional) — Each object in this array corresponds to a normalization record supplied in the *requests* array of the request. This array lists each normalization record object in the same sequence as its corresponding record in the request. In each object, the *response* field describes the normalization outcome for the record.
- `preferences` (NormalizeEnrichmentResponsePreferences, optional) — This object echoes back the same fields and values included in the request's *preferences* object.

## Errors

### 400 Bad Request Error

The server could not understand the request due to invalid syntax or missing parameters.

- `error` (ApiErrorBody, optional) — The error detail.

### 401 Unauthorized Error

The request is unauthenticated. Provide authentication using the Authorization HTTP header.

- `error` (ApiErrorBody, optional) — The error detail.

### 403 Forbidden Error

The client does not have access rights to make this request.

- `error` (ApiErrorBody, optional) — The error detail.

### 413 Content Too Large Error

The response payload is larger than the limits. Consider reducing number of the items in the request

- `error` (ApiErrorBody, optional) — The error detail.

### 429 Too Many Requests Error

The client has sent too many requests in a given amount of time ("rate limiting").

- `error` (ApiErrorBody, optional) — The error detail.

### 500 Internal Server Error

The server has encountered a situation it doesn't know how to handle.

- `error` (ApiErrorBody, optional) — The error detail.

### 503 Service Unavailable Error

The server is not ready to handle the request. Common causes are a server that is down for maintenance or that is overloaded.

- `error` (ApiErrorBody, optional) — The error detail.

## Types

### NormalizeEnrichmentRequestRequestsItems

- `record_id` (string, optional) — A unique identifier for the normalization record. This may be any string value using any format, but typically corresponds to a record identifier from the partner application. In order to receive a valid response, the *record_id* field must always be included and contain a non-empty string.
- `domain` (enum, optional) — In order to receive a valid response, this field must always be included and set to "Problem".When term-based matching, the enrichment endpoint can only return lexicals from the IMO "Problem" content domain. When code-based matching, the domain field's value is ignored and the API searches for an exact lexical match from any IMO content domain, but the domain field must still be included.
  - Allowed values: `Problem`
- `input_term` (string, optional) — The title of a clinical term that you want to normalize to an IMO lexical. This value may include any number of words up to a total of 500 characters, but should be limited to a single clinical term without context.This field is needed to perform term-based matching and is always required when preferences.match_field_pref is set to "input_term". When code-based matching, the input_term field is ignored.Technically, the input_term field may contain up to 2000 characters without triggering a 400 Bad Request error, but exceeding the 500 character limit will disqualify a value for term-based matching. This extra character allowance prevents a mistakenly entered term in any one normalization record from discarding the entire request payload, and also allows for "input_term_first" fallback to any supplied input code.
- `input_code` (string, optional) — When code-based matching, this is a clinical code that you want to normalize to an IMO lexical. When term-based matching, this is the clinical code that you believe best maps to the input_term. When input_code is included, you must also include an input_code_system that corresponds to the supplied code. For an input_code_system of "IMO", the input_code should be the lexical_code or default_lexical_code of an IMO lexical.This field is needed to perform code-based matching and is always required when preferences.match_field_pref is set to "input_code". When term-based matching, the input_code field is ignored for lexical matching, but is still used for discrepancy checking if preferences.discrepancy_check is set to "true".Note: The input_code field is distinguished from the context.icd10_codes field, which is used for term-based matching.
- `input_code_system` (enum, optional) — The clinical code system to which the specified input_code belongs.This field is needed to perform code-based matching and is always required when preferences.match_field_pref is set to "input_code". When term-based matching, the input_code field is ignored for lexical matching, but is still used for discrepancy checking if preferences.discrepancy_check is set to "true".
  - Allowed values: `ICD-10-CM`, `ICD-9-CM`, `SNOMED CT`, `ICD-10-PCS`, `LOINC`, `CPT`, `HCPCS`, `RXNORM`, `NDC`, `CVX`, `UMLS`, `IMO`
- `context` (NormalizeEnrichmentRequestRequestsItemsContext, optional) — This object provides additional context for the normalization record. These fields may be included for either of the following purposes:Enriched contextual analysis - When term-based matching only, AI models analyze the source_text, icd10_codes, age, and sex fields to better understand the input term and find optimal lexical matches.Record tracking - For any normalization record, the use_count, application_id, facility_id, encounter_id, document_id, and project_id fields enable you to track record details from partner applications in the normalization record. These fields are not used for lexical matching, but they are always echoed back in the response.

### NormalizeEnrichmentRequestPreferences

In this object, the match_field_pref field determines whether the API performs term-based or code-based lexical matching. All other fields in this object define operation preferences only applicable to term-based matching.The preferences in this object apply to every normalization record included in the requests array.

- `match_field_pref` (enum, optional, default: input_term_first) — One of the following values determining whether the API should perform term-based or code-based lexical matching:input_term - The API will perform term-based matching. For this option, each normalization record must include the input_term field. The input_code field is ignored for lexical matching.input_code - The API will perform code-based matching. For this option, each normalization record must include the input_code and input_code_system fields. The input_term field is ignored for lexical matching.input_term_first - The API will first attempt term-based matching. If no term-based matches within the threshold are found or the request did not include a valid input term, the API will then attempt code-based matching. For this option, each normalization record must include either: input_term; both input_code and input_code_system; or all three fields.input_code_first - The API will first attempt code-based matching. If no code-based match is found or the request did not include a valid input code and system, the API will then attempt term-based matching. For this option, each normalization record must include either: input_term; both input_code and input_code_system; or all three fields.
  - Allowed values: `input_term`, `input_code`, `input_term_first`, `input_code_first`
- `threshold` (double, optional, default: 0.8) — When term-based matching, this is the minimum score that a lexical match must have in order to be returned in the results, specified using up to 3 decimal places. Lexical matches with a lower score than this value will not be returned. In the response, each returned lexical's score is reported in the score field.When code-based matching, this preference is irrelevant, as a lexical can only be matched to the input_code with a score of 1.
- `discrepancy_check` (boolean, optional, default: false) — When returning term-based matches for a normalization record, this preference determines whether the API compares the highest scoring lexical with the input_code supplied in the request. If set to "true", the first lexical returned for each normalization record includes a discrepancy object reporting whether the supplied input_code matches a code mapped to that lexical. Discrepancy checking can only be performed when a normalization record includes both the input_code and input_code_system fields.When returning a code-based match for a normalization record, discrepancy checking is not performed regardless of this preference, but the response still includes the discrepancy object.
- `size` (integer, optional, default: 3) — When term-based matching, this is the maximum number lexical matches that the API should return for each normalization record. When the available quantity of matched lexicals is greater than the specified size, the response returns only the highest scoring lexicals up to the size limit. For equivalent lexical scores, the response prioritizes more concise lexicals.When code-based matching, this preference is irrelevant, as only one lexical can ever be matched to the input_code.
- `distinct_field` (enum, optional, default: lexical_code) — When term-based matching, this preference defines which field should be used to determine whether a lexical match for a normalization record is unique. In effect, this setting determines whether the response is permitted to return multiple lexicals linked to the same default_lexical_code. The distinct_field preference is only applicable when multiple lexical matches are identified and the size preference is >1.The distinct_field preference may specify one of the following values:lexical_code - The operation uses the lexical_code field to determine whether a lexical match is unique. This option permits the response to return multiple lexicals that are linked to the same default_lexical_code.default_lexical_code - The operation uses the default_lexical_code field to determine whether a lexical match is unique. When multiple lexicals matches are linked to the same default_lexical_code, the response includes only the highest scoring match linked to that code. The response may still include other lexical matches linked to different default_lexical_code values.
  - Allowed values: `lexical_code`, `default_lexical_code`
- `transformations` (list of TransformationsRequestItems, optional) — Each object in this array defines a search and replace operation that should be performed on each input_term before attempting to match lexicals. When multiple objects are included, all specified operations are performed in order from top to bottom.If these operations result in changes to the input term, then lexical matching proceeds using the revised input term text, which is reported in a transformed_term field in the response. If no changes are made to the input term, then lexical matching proceeds using the initially supplied input term text.
- `filters` (list of FiltersRequestItems, optional) — When term-based matching, each object in this array defines a USCDI filter criterion that limits which lexicals that can be returned in the results. A maximum of 4 filter objects may be included, with each object typically filtering on a different USCDI field. Multiple filter objects are applied as AND statements, meaning the results will only include those lexicals that match all supplied USCDI filter criteria defined in every object.USCDI filters can only be supplied if your organization has confirmed your USCDI licensing with IMO Health. If you include USCDI filters without confirming your licensing, the response will return an error.When code-based matching, USCDI filter preferences are ignored.

### NormalizeEnrichmentResponseSummary

This object provides a summary of the normalization records returned in the *requests* array.

- `count` (integer, optional) — The total quantity of normalization records returned in the response. This is the same quantity of normalization records submitted in the request.
- `error_count` (integer, optional) — The quantity of normalization records returned in the response that include an *error_message* array. The presence of an *error_message* array for a record indicates that normalization encountered one or more errors that either prevented normalization entirely or impacted the result.

### NormalizeEnrichmentResponseRequestsItems

- `record_id` (string, optional) — The same value echoed back from the request record's record_id field.If the request incorrectly excluded the record_id, this field is sent with an empty string.
- `domain` (enum, optional) — The same value echoed back from the request record's domain field.If the request incorrectly excluded the domain, this field is sent as null.
  - Allowed values: `Problem`
- `input_code` (string, optional) — The same value echoed back from the request record's input_code field, if applicable.If input_code was excluded from the request, this field is also excluded from the response.
- `input_code_system` (enum, optional) — The same value echoed back from the request record's input_code_system field, if applicable.If input_code_system was excluded from the request, this field is also excluded from the response.
  - Allowed values: `ICD-10-CM`, `ICD-9-CM`, `SNOMED CT`, `ICD-10-PCS`, `LOINC`, `CPT`, `HCPCS`, `RXNORM`, `NDC`, `CVX`, `UMLS`, `IMO`
- `input_term` (string, optional) — \<p>The same value echoed back from the request record's \<i>input\_term\</i> field, if applicable. If present, this is always the initially supplied input term \<b>before\</b> any applicable transformations are made.\</p>\<p>If \<i>input\_term\</li> was excluded from the request, this field is also excluded from the response.\</p>
- `transformed_term` (string, optional) — The finalized input term used to match lexicals after any applicable transformations were made. If the input term was not transformed, then this field simply repeats the initially supplied input_term. If input_term was excluded from the request, this field is sent with an empty string.The API may transform the input term due to requested transformations specified in the preferences.transformation array; to correct common spelling mistakes (e.g. "chast pain" to "chest pain"; or if internal AI models opt to revise the input term to a more relevant clinical term (e.g. "busted clavicle" to "Clavicle Fracture"). These same models may also clean up the input term by stripping out special characters, punctuation, and irrelevant words.When the input term is transformed for multiple reasons, the transformed_term field reports only the final state of the term. The API applies input term transformations in the following sequence:1. Preference transformation; 2. Spelling mistakes; 3. AI Models
- `context` (NormalizeEnrichmentResponseRequestsItemsContext, optional) — This object echoes back the same fields and values sent for the record in the request's context object, if applicable.If context was excluded from the request, this field is also excluded from the response.
- `response` (NormalizeEnrichmentResponseRequestsItemsResponse, optional) — This object's fields describe the normalization outcome for the record. The *items* array lists each of the IMO lexicals that were matched to the supplied *input_term* or *input_code*. The presence of an *error_message* array indicates that the API encountered one or more errors that either prevented normalization entirely or impacted the result.

### NormalizeEnrichmentResponsePreferences

This object echoes back the same fields and values included in the request's *preferences* object.

- `threshold` (double, optional) — The minimum score a lexical match must have to be returned, echoed back from the request. Specified using up to 3 decimal places.
- `match_field_pref` (enum, optional) — The same value echoed back from the request's match_field_pref field, if applicable.If match_field_pref was excluded from the request, this field is also excluded from the response.
  - Allowed values: `input_term`, `input_code`, `input_term_first`, `input_code_first`
- `distinct_field` (enum, optional) — The same value echoed back from the request's distinct_field field, if applicable.If distinct_field was excluded from the request, this field is also excluded from the response.
  - Allowed values: `lexical_code`, `default_lexical_code`
- `discrepancy_check` (boolean, optional) — The same value echoed back from the request's discrepancy_check field, if applicable.If discrepancy_check was excluded from the request, this field is also excluded from the response.
- `size` (integer, optional) — The same value echoed back from the request's size field, if included with an allowable value.If size was excluded from the request, the response populates this field with the default value of 3. If the request size was sent with a value greater than the maximum limit of 5, the API automatically caps the size to 5 and returns that value back in the response.
- `transformations` (list of TransformationsResponseItems, optional) — The same values echoed back from the request's transformations array, if supplied. For each returned transformations object, all available fields are always included, even if excluded from the response. For any child field excluded from the request, the response supplies either an empty string, null, or the default value.If transformations was excluded from the request, this field is also excluded from the response.
- `filters` (list of FiltersResponseItems, optional) — The same values echoed back from the request's filters array, if applicable.If filters was excluded from the request, this field is also excluded from the response.

### ApiErrorBody

The error detail.

- `code` (string, optional) — A stable, machine-readable error code.
- `message` (string, optional) — A human-readable description of what went wrong.
- `details` (ApiErrorDetails, optional) — Additional context for debugging.

### NormalizeEnrichmentRequestRequestsItemsContext

This object provides additional context for the normalization record. These fields may be included for either of the following purposes:Enriched contextual analysis - When term-based matching only, AI models analyze the source_text, icd10_codes, age, and sex fields to better understand the input term and find optimal lexical matches.Record tracking - For any normalization record, the use_count, application_id, facility_id, encounter_id, document_id, and project_id fields enable you to track record details from partner applications in the normalization record. These fields are not used for lexical matching, but they are always echoed back in the response.

- `source_text` (string, optional) — The sentence or surrounding text in which the input_term was found.When term-based matching, the API uses this text to help interpret the input term in order to find optimal lexical matches. When code-based matching, the source_text field is ignored.
- `icd10_codes` (list of string, optional) — One or more ICD-10-CM codes that are believed to correspond to the input_term or its context. This field is most commonly used when normalizing entities and codes extracted from an external NER system.When term-based matching, the API considers association with any of these codes as one factor when evaluating lexicals as optimal matches for the input term. When code-based matching, the icd10_codes field is ignored.Note: The icd10_codes field is distinguished from the input_code field, which is used for code-based matching and also for discrepancy checking. The icd10_codes field is not used for discrepancy checking.
- `age` (integer, optional) — The patient's age as a whole number.When term-based matching, the API considers association with the specified age as one factor when evaluating lexicals as optimal matches for the input term. In the response, returned lexicals report any association with a particular age range in the flags.age_indicator field.When code-based matching, the age field is ignored.
- `sex` (enum, optional) — The patient's biological sex, either male ("M") or female ("F").When term-based matching, the API considers association with the specified sex as one factor when evaluating lexicals as optimal matches for the input term. In the response, returned lexicals report any association with a particular sex in the metadata.flags.sex_indicator field.When code-based matching, the age field is ignored.
  - Allowed values: `M`, `F`
- `use_count` (integer, optional) — The total number of occurrences of the term or normalization record in the partner application's data set.This field is primarily used to track record details from partner applications and is not used for lexical matching.
- `application_id` (string, optional) — The identifier for the sending application. This is equivalent to the HL7 MSH.3 field.This field is primarily used to track record details from partner applications and is not used for lexical matching.
- `facility_id` (string, optional) — The identifier for the sending facility. This is equivalent to the HL7 MSH.4 field.This field is primarily used to track record details from partner applications and is not used for lexical matching.
- `encounter_id` (string, optional) — The unique identifier for the patient encounter from the partner application.This field is primarily used to track record details from partner applications and is not used for lexical matching.
- `document_id` (string, optional) — The unique identifier for the document associated with the normalization record.This field is primarily used to track record details from partner applications and is not used for lexical matching.
- `project_id` (string, optional) — The unique identifier for the project associated with the normalization record.This field is primarily used to track record details from partner applications and is not used for lexical matching.

### TransformationsRequestItems

- `type` (enum, optional, default: multiple_string_replace) — One of the following values determining how many strings to search for:string_replace - Search for a single string in the input term. The from value must define a single string that will be transformed to the to value.multiple_string_replace - Search for multiple strings in the input term. The from value must define an array of one or more strings, any and all of which will be transformed to the to value.
  - Allowed values: `string_replace`, `multiple_string_replace`
- `location` (enum, optional, default: *) — One of the following values determining the portion of the input term that will be searched for any of the from strings:beginning - Search only at the beginning of the input term.end - Search only at the end of the input term.* - Search anywhere in the input term. This option may identify multiple string matches in the input term.
  - Allowed values: `beginning`, `end`, `*`
- `from` (map from string to TransformationsRequestItemsFrom, optional) — One or more strings to find in the input term. If type is set to "string_replace", this should be a single string value. If type is set to "multiple_string_replace", this should be an array of one or more strings.Only whole string matching is supported. For example, "blue" does not match "blueish". When the search location is "beginning" or "end", the API may find a match by parsing out any preceding or trailing space in the input term, but otherwise the beginning/end of the input term must match a from string exactly. When the search location is "*", the API may also find matches by parsing out any extraneous special characters not included in the from strings.
- `to` (string, optional, default: "") — The replacement string. Text matched to any of the *from* strings in the designated *location* will be replaced with this *to* string. Setting the *to* field to a blank string ("") deletes the matched text.
- `case_sensitive` (boolean, optional, default: false) — Determines whether *from* strings are matched to input term text on a case-sensitive basis. If set to "false", the search is not case-sensitive, meaning "blue" matches "Blue". If set to "true, the search is case-sensitive, meaning "blue" will **not** match "Blue". Regardless of this setting, the replacement *to* string is always applied using the supplied case.

### FiltersRequestItems

- `field` (enum, required) — The USCDI field for which you want to define a filter criterion.
  - Allowed values: `uscdi.profiles.valueset_oid`, `uscdi.profiles.hrsn_domain`, `uscdi.profiles.data_element`, `uscdi.profiles.data_class`
- `operator` (enum, required) — The comparison operator to apply to the *value* for the applicable *field*. Currently, only "eq" (equals) is supported, meaning the *field* must exactly match the *value*.
  - Allowed values: `eq`
- `value` (string, required) — A single, standard USCDI value for the specified field. The supplied value must correspond exactly to a supported field value documented in the official USCDI specification, including casing.For the uscdi.profiles.valueset_oid field, only the following values are supported:2.16.840.1.113762.1.4.1186.8 | 2.16.840.1.113762.1.4.1186.8 | 2.16.840.1.113883.4.642.3.208 | 2.16.840.1.113883.4.642.40.2.48.8 | 2.16.840.1.113883.4.642.40.2.48.21 | 2.16. | 40.1.113883.4.642.40.2.48.21 | 2.16.840.1.113883.4.642.40.2.48.26 | 2.16.840.1.113883.4.642.40.2.48.22 | 2.16.840.1.113883.4.642.40.2.48.24 | 2.16.840.1.113762.1.4. | 247.146 | 2.16.840.1.113762.1.4.1247.83 | 2.16.840.1.113762.1.4.1247.242 | 2.16.840.1.113762.1.4.1247.157 | 2.16.840.1.113762.1.4.1247.3 | 2.16.840.1.113762.1.4.1247.23 | 2.16.840.1.113762.1.4.1010.6 | 2.16.840.1.113762.1.4.1186.8 | 2.16.840.1.113883.4.642.3.232

### NormalizeEnrichmentResponseRequestsItemsContext

This object echoes back the same fields and values sent for the record in the request's context object, if applicable.If context was excluded from the request, this field is also excluded from the response.

- `age` (integer, optional) — The same value echoed back from the request record's age field, if applicable.If age was excluded from the request, this field is also excluded from the response.
- `application_id` (string, optional) — The same value echoed back from the request record's application_id field, if applicable.If application_id was excluded from the request, this field is also excluded from the response.
- `document_id` (string, optional) — The same value echoed back from the request record's document_id field, if applicable.If document_id was excluded from the request, this field is also excluded from the response.
- `encounter_id` (string, optional) — The same value echoed back from the request record's encounter_id field, if applicable.If encounter_id was excluded from the request, this field is also excluded from the response.
- `facility_id` (string, optional) — The same value echoed back from the request record's facility_id field, if applicable.If facility_id was excluded from the request, this field is also excluded from the response.
- `icd10_codes` (list of string, optional) — The same value echoed back from the request record's icd10_codes field, if applicable.If icd10_codes was excluded from the request, this field is also excluded from the response.
- `project_id` (string, optional) — The same value echoed back from the request record's project_id field, if applicable.If project_id was excluded from the request, this field is also excluded from the response.
- `sex` (enum, optional) — The same value echoed back from the request record's sex field, if applicable.If sex was excluded from the request, this field is also excluded from the response.
  - Allowed values: `M`, `F`
- `source_text` (string, optional) — The same value echoed back from the request record's source_text field, if applicable.If source_text was excluded from the request, this field is also excluded from the response.
- `use_count` (integer, optional) — The same value echoed back from the request record's use_count field, if applicable.If use_count was excluded from the request, this field is also excluded from the response.

### NormalizeEnrichmentResponseRequestsItemsResponse

This object's fields describe the normalization outcome for the record. The *items* array lists each of the IMO lexicals that were matched to the supplied *input_term* or *input_code*. The presence of an *error_message* array indicates that the API encountered one or more errors that either prevented normalization entirely or impacted the result.

- `match_field` (enum, optional) — Which input the lexical match was made against. `input_term` indicates scored term-based matching; `input_code` indicates a deterministic code-based match, which always scores 1.
  - Allowed values: `input_term`, `input_code`
- `domain` (enum, optional) — The clinical domain the matched lexical belongs to.
  - Allowed values: `Problem`
- `custom_mapped` (boolean, optional) — This field is not currently relevant to the enrichment endpoint and is always set to "false".
- `transformed_term` (string, optional) — If included, the response.transformed_term field contains the exact same value populated in the requests.transformed_term field.If the error_message array reports a fatal error that prevented normalization entirely, then the response.transformed_term field is excluded.
- `explanation` (string, optional) — One or more semi-colon separated explanations for decisions taken by the API to interpret or transform the input term when performing term-based matching. This may include the correction of common spelling mistakes, a decision to revise the input term to a more relevant clinical term, or an explanation for why it chose not to do so or failed to find any matches. The explanation may also indicate when the input term was deemed irrelevant to the Problem domain and discarded. The explanation does not describe preferences.transformation based transformations.If the request included the context.age or context.sex fields, the explanation may also describe how it used these factors to establish an optimal match, or if the request supplied an invalid age or sex value, it will explain why that value was discarded.If a lexical was returned by code-based matching or without needing any interpretation of the input_term, then the explanation field is typically sent with an empty string.
- `error_message` (list of string, optional) — This array is only included if the API encountered one or more errors when processing the normalization record. If included, each string in this array describes a distinct error, stated as an error code followed by a description. Error codes beginning with an "E", "N", or "R" indicate fatal errors that prevent normalization entirely and are always accompanied by a blank items array. Error codes beginning with a "W" indicate warnings that may impact the results, but do not in themselves prevent lexical matches from being returned.The error_message field does not appear in situations where the normalization record was valid, but the API was simply unable to find a lexical match within the request threshold.
- `items` (list of NormalizeEnrichmentResponseRequestsItemsResponseItemsItems, optional) — Each object in this array describes an IMO lexical that was matched to the normalization record based on either the supplied input_term or input_code, as indicated by the response.match_field field:When match_field is set to "input_term", indicating term-based matches, the items array returns every lexical that was matched with a score equal to or greater than the request's preferences.threshold field, up to the maximum quantity of lexicals permitted by the request's preferences.size field. Lexicals are listed in descending order based their score field values. For equivalent lexical scores, more concise lexicals are ranked higher.When match_field is set to "input_code", indicating a code-based match, the items array returns at most a single lexical match with a score of 1.The items array is sent blank if the API was unable to find any lexical matches within the request threshold or if the error_message array reports a fatal error that prevented normalization entirely.

### TransformationsResponseItems

- `type` (string, optional) — For each transformations object, this is the same value echoed back from the request's type field, if included.If type was excluded from the request, this field is sent back with an empty string.
- `location` (string, optional) — For each transformations object, this is the same value echoed back from the request's location field, if included.If location was excluded from the request, this field is sent back with an empty string.
- `from` (list of string, optional) — For each transformations object, this array contains the same string values as defined in the request's from field, if included. This field is always returned as an array of strings, even if the request only included a single string valueIf from was excluded from the request, this field is sent as null.
- `to` (string, optional) — For each transformations object, this is the same value echoed back from the request's to field, if included.If to was excluded from the request, this field is sent back with an empty string.
- `case_sensitive` (boolean, optional) — \<p>For each transformations object, this is the same value echoed back from the request's case\_sensitive field, if included.If case\_sensitive was excluded from the request, this field is sent back with a default value of false.

### FiltersResponseItems

- `field` (string, optional) — For each *filters* object, this is the same value echoed back from the request's *field* field.
- `operator` (string, optional) — For each *filters* object, this is the same value echoed back from the request's *operator* field.
- `value` (string, optional) — For each *filters* object, this is the same value echoed back from the request's *value* field.

### ApiErrorDetails

Additional context for debugging.

- `code` (string, optional) — A more specific sub-code for the failure.
- `message` (string, optional) — A more specific description of the failure.
- `traceId` (string, optional) — Correlation ID to quote when contacting IMO Health support.

### TransformationsRequestItemsFrom

- string
- list of string

### NormalizeEnrichmentResponseRequestsItemsResponseItemsItems

- `lexical_code` (string, optional) — The unique IMO identifier for the lexical that was directly matched to the normalization record.
- `lexical_title` (string, optional) — The IMO title for the lexical that was directly matched to the normalization record.
- `default_lexical_code` (string, optional) — The unique IMO identifier for the default variant of the lexical matched to the normalization record.If the normalization record directly matched to the default lexical, then this is identical to the lexical_code.
- `default_lexical_title` (string, optional) — The IMO title for the default variant of the lexical matched to the normalization record. The default variant title is the most accurate description of the clincical concept represented by the lexical and is typically treated as the normalized text for the input term or code.If the normalization record directly matched to the default lexical, then this is identical to the \<i>lexical\_title.
- `score` (double, optional) — A decimal value indicating the confidence of the lexical match to the normalization record. Higher scores indicate a better match, with a value of 1 representing an exact match. Scores can be assigned using up to 3 decimal places.Code-based matches are always assigned a value of 1.
- `certainty` (string, optional) — This is a deprecated field that is always sent with an empty string.
- `metadata` (Metadata, optional) — This object includes detailed metadata about the lexical matched to the normalization record.
- `discrepancy` (Discrepancy, optional) — If included, this object reports whether the input_code supplied in the request for the normalization record matches a code returned in the metadata.mappings object for the lexical. When term-based matching, the discpreancy object is intended to confirm whether there is a discrepancy between the normalized term returned in the result and the code that you believe best-mapped to the input term.If the request preferences.discrepancy field was set to "true", the discrepancy object is always present for the first lexical returned in the items array (i.e. the highest ranked match). This object is excluded for lower ranked lexicals returned in the items array. When a lexical is returned by code-based matching, the discrepancy object is still included in the response, but the discrepancy check is not performed.

### Metadata

This object includes detailed metadata about the lexical matched to the normalization record.

- `mappings` (MetadataMappings, optional) — This object lists each of the clinical codes mapped to the lexical. Each field in the *mappings* object corresponds to a code system supported by the applicable *domain*.
- `flags` (MetadataFlags, optional) — This object lists any attribute flags assigned to the lexical.The flags object is always excluded for Medication and Anatomical Site domain lexicals.
- `subdomains` (list of string, optional) — For Procedure domain lexicals only, this array specifies one or more clinically meaningful classifications for the procedure (e.g. "surgical procedure", "imaging procedure", etc). If no subdomains are associated with the procedure, this array is excluded from the response.This array is excluded for domains other than Procedure.Note: When a request specifies a domain of "Lab", as a last resort the API is permitted to match lexicals from the "Procedure" domain. If this occurs, the response.domain field will still report a value of "Lab" when the returned lexicals belong to the "Procedure" domain. In this situation, a Lab domain response may include the subdomains field.

### Discrepancy

If included, this object reports whether the input_code supplied in the request for the normalization record matches a code returned in the metadata.mappings object for the lexical. When term-based matching, the discpreancy object is intended to confirm whether there is a discrepancy between the normalized term returned in the result and the code that you believe best-mapped to the input term.If the request preferences.discrepancy field was set to "true", the discrepancy object is always present for the first lexical returned in the items array (i.e. the highest ranked match). This object is excluded for lower ranked lexicals returned in the items array. When a lexical is returned by code-based matching, the discrepancy object is still included in the response, but the discrepancy check is not performed.

- `checked` (boolean, optional) — Indicates whether a discrepancy check was performed for the lexical.This is always set to "true" if the lexical was returned by term-based matching and the request included both an input_code and input_code_system. This is set to "false" if the request was missing the input_code or input_code_system, or if the lexical was returned by code-based matching.
- `found` (boolean, optional) — When the checked field is "true", the found field indicates whether the API found a discrepancy between the returned lexical and the input_code supplied in the request.A found value of "true" indicates a discrepancy, meaning the request input_code does not appear in the metadata.mappings object for the lexical. A found value of "false" indicates no discrepancy, meaning the request input_code does appear in the mappings object.The found field is always set to "false" when the checked field is "false", or if the supplied input_code or input_code_system was invalid or excluded from the request.
- `type` (string, optional) — When the found field is "true", the type field is always set to "Coding".If the found field is set to "false", the type field is always sent with an empty string.
- `message` (string, optional) — When the found field is "true", the message field is always set to "Input code does not match with input term result".The message field may alternatively be set to any of the following values:If checked is "true" and found is "false", the message field is always sent with an empty string.If checked is "false", the message field may be sent with any of the following values:Blank - Indicates that the lexical was returned by code-based matching while the preferences.match_field_pref field was set to "input_code".Discrepancy check not performed: unable to normalize input_term - An edge case the occurs when the lexical was returned by code-based matching and the preferences.match_field_pref field was set to "input_code_first".Discrepancy check not performed: Missing {field} - Indicates that the lexical was returned by term-based matching and the request was missing the identified {field}, either input_code or input_code_system

### MetadataMappings

This object lists each of the clinical codes mapped to the lexical. Each field in the *mappings* object corresponds to a code system supported by the applicable *domain*.

- `icd10cm` (MetadataMappingsIcd10Cm, optional)
- `icd9cm` (MetadataMappingsIcd9Cm, optional)
- `icdo` (MetadataMappingsIcdo, optional)
- `snomedInternational` (MetadataMappingsSnomedInternational, optional)
- `snomedUSExtension` (MetadataMappingsSnomedUsExtension, optional)
- `dsm5tr` (MetadataMappingsDsm5Tr, optional)
- `icd10pcs` (MetadataMappingsIcd10Pcs, optional)
- `loinc` (MetadataMappingsLoinc, optional)
- `cpt` (MetadataMappingsCpt, optional)
- `umls` (MetadataMappingsUmls, optional)
- `uscdi` (MetadataMappingsUscdi, optional)
- `hcpcs` (MetadataMappingsHcpcs, optional)
- `rxnorm` (MetadataMappingsRxnorm, optional)
- `ndc` (MetadataMappingsNdc, optional) — NDC codes have two levels of specificity. A product code (9-10 digits, ndc_code) identifies the labeler, product, and strength. A package code (11 digits, ndc_package_codes) extends the product code with a 2-digit package identifier specifying the exact packaging.
- `cvx` (MetadataMappingsCvx, optional)
- `fda_biosimilar` (MetadataMappingsFdaBiosimilar, optional) — Indicates Biosimilar relationships of medications
- `severity_mappings` (MetadataMappingsSeverityMappings, optional)
- `reaction_mappings` (MetadataMappingsReactionMappings, optional)

### MetadataFlags

This object lists any attribute flags assigned to the lexical.The flags object is always excluded for Medication and Anatomical Site domain lexicals.

- `age_indicator` (enum, optional) — For Problem domain lexicals only, this field is populated if the clinical concept represented by the lexical is specific to a particular age range. If the lexical is not age-specific, this field is sent with an empty string.When term-based matching for the enrichment endpoint, the API compares this flag with the request's context.age value to help determine optimal lexical matches.The age_indicator flag is excluded for domains other than Problem.
  - Allowed values: ``, `Newborn (< 1)`, `Pediatric (0-17)`, `Adult (> 15)`, `Maternity (9-64)`, `Adolescent (10-19)`, `Geriatric (> 65)`
- `is_icd10cm_refinable` (boolean, optional) — For Problem domain lexicals only, this field is always included and indicates whether more specific lexicals and associated ICD-10-CM codes exist for the same clinical topic. When set to "true", more specific lexicals are available, which you can identify by sending additional requests to the IMO Precision Normalization API or the IMO Core Search API. When set to "false", the returned lexical already represents the most specific level of granularity available for a clinical topic.For example, if your request included an input term of "femur fracture", the API might return a "Fracture of Femur" lexical, which has an ICD-10-CM code of "S72.90XA" and an is_icd10cm_refinable flag of "true". Based on this response, you might decide to send a followup request using a more specific input term of "closed fracture, left femur, init", which would return a "Closed fracture of left femur, initial encounter" lexical with an ICD-10-CM code of "S72.92XA" and an is_icd10cm_refinable flag of "false". This process of identifying greater levels of lexical specificity is sometimes referred to as the term refinement workflow.The is_icd10cm_refinable flag is excluded for domains other than Problem.
- `sex_indicator` (enum, optional) — For Problem domain lexicals only, this field is populated if the clinical concept represented by the lexical is specific to a biological sex. If the lexical is not sex-specific, this field is sent with an empty string.When term-based matching for the enrichment endpoint, the API compares this flag with the request's context.sex value to help determine optimal lexical matches.The sex_indicator flag is excluded for domains other than Problem.
  - Allowed values: ``, `M`, `F`
- `is_chargeable` (boolean, optional) — For Procedure domain lexicals only, this field is always included and indicates whether the procedure is considered to be chargeable.This flag is excluded for domains other than Procedure.
- `is_historical` (boolean, optional) — For Procedure domain lexicals only, this field is always included and indicates whether the procedure is considered to be historical.This flag is excluded for domains other than Procedure.
- `is_orderable` (boolean, optional) — For Procedure domain lexicals only, this field is always included and indicates whether the procedure is considered to be orderable.This flag is excluded for domains other than Procedure.
- `is_performable` (boolean, optional) — For Procedure domain lexicals only, this field is always included and indicates whether the procedure is considered to be performable.This flag is excluded for domains other than Procedure.
- `is_resultable` (boolean, optional) — For Procedure domain lexicals only, this field is always included and indicates whether the procedure is considered to be resultable.This flag is excluded for domains other than Procedure.
- `allergen_categories` (list of string, optional) — For Allergen domain lexicals only, this array is always included and specifies one or more categories applicable to the allergen source, use, properties, etc. These values align with the 2023 HL7 categories in the "AllergyIntoleranceCategory" value set for HL7 FHIR version 5.0.0.This flag is excluded for domains other than Allergen.

### MetadataMappingsIcd10Cm

- `codes` (list of MetadataMappingsIcd10CmCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsIcd9Cm

- `codes` (list of MetadataMappingsIcd9CmCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsIcdo

- `codes` (list of MetadataMappingsIcdoCodesItems, optional)

### MetadataMappingsSnomedInternational

- `codes` (list of MetadataMappingsSnomedInternationalCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsSnomedUsExtension

- `codes` (list of MetadataMappingsSnomedUsExtensionCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsDsm5Tr

- `codes` (list of MetadataMappingsDsm5TrCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsIcd10Pcs

- `codes` (list of MetadataMappingsIcd10PcsCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsLoinc

- `codes` (list of MetadataMappingsLoincCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsCpt

- `codes` (list of MetadataMappingsCptCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsUmls

- `codes` (list of MetadataMappingsUmlsCodesItems, optional)

### MetadataMappingsUscdi

- `profiles` (list of MetadataMappingsUscdiProfilesItems, optional)

### MetadataMappingsHcpcs

- `codes` (list of MetadataMappingsHcpcsCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsRxnorm

- `codes` (list of MetadataMappingsRxnormCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsNdc

NDC codes have two levels of specificity. A product code (9-10 digits, ndc_code) identifies the labeler, product, and strength. A package code (11 digits, ndc_package_codes) extends the product code with a 2-digit package identifier specifying the exact packaging.

- `codes` (list of MetadataMappingsNdcCodesItems, optional)
- `map_context` (string, optional) — Provides additional context about the NDC mapping. Possible values are 'Maps to more than 25 NDC product codes.', 'Insufficient information or not codeable.', and 'The provided NDC package code is not valid for this product.'

### MetadataMappingsCvx

- `codes` (list of MetadataMappingsCvxCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible values are 'INSUFFICIENT INFORMATION' and 'NON-CODEABLE'.

### MetadataMappingsFdaBiosimilar

Indicates Biosimilar relationships of medications

- `bla_number` (string, optional) — The Biologics License Application number of the medication
- `ref_product_proper_name` (string, optional) — The non-trademarked, scientific name of the original biologic drug
- `ref_product_proprietary_name` (string, optional) — The trademarked, brand name assigned by the manufacturer of the original biologic drug

### MetadataMappingsSeverityMappings

- `snomedInternational` (MetadataMappingsSeverityMappingsSnomedInternational, optional)

### MetadataMappingsReactionMappings

- `snomedInternational` (MetadataMappingsReactionMappingsSnomedInternational, optional)

### MetadataMappingsIcd10CmCodesItems

- `code` (string, optional) — A ICD-10-CM code mapped to the IMO lexical
- `title` (string, optional) — The official description of the ICD-10-CM code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical
- `relationship_type` (string, optional) — Indicates the semantic relationship between IMO lexical and the code
- `code_metadata` (MetadataMappingsIcd10CmCodesItemsCodeMetadata, optional)

### MetadataMappingsIcd9CmCodesItems

- `code` (string, optional) — A ICD-9-CM code mapped to the IMO lexical
- `title` (string, optional) — The official description of the ICD-9-CM code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical

### MetadataMappingsIcdoCodesItems

- `relationship_group` (string, optional) — This group is used to identify ICD-O codes that are to be interpreted together to create a complete ICD-O code representation
- `topog_code` (string, optional) — The topography code indicates the site of the neoplasm
- `topog_desc` (string, optional) — This field provides the topography code description
- `morph_code` (string, optional) — The morphology code describes the cell type of the neoplasm and its behavior
- `morph_desc` (string, optional) — This field provides the morphology code description
- `hist_grad_code` (string, optional) — This code identifies the histological grading and differentiation of the neoplasm (i.e. grade I – well differentiated)
- `hist_grad_desc` (string, optional) — This field provides the histological grading and differentiation code description
- `immuno_desig_code` (string, optional) — This code identifies the immunophenotype designation for lymphomas and leukemias.
- `immuno_desig_desc` (string, optional) — This field provides the immunophenotype designation code description

### MetadataMappingsSnomedInternationalCodesItems

- `code` (string, optional) — A SNOMED CT code mapped to the IMO lexical
- `mesh_code` (string, optional) — A MeSH code that maps 1:1 to the given SNOMED International code.
- `title` (string, optional) — The official description of the SNOMED CT code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical
- `relationship_type` (string, optional) — Indicates the semantic relationship between IMO lexical and the code

### MetadataMappingsSnomedUsExtensionCodesItems

- `code` (string, optional) — A SNOMED CT US code mapped to the IMO lexical
- `mesh_code` (string, optional) — A MeSH code that maps 1:1 to the given SNOMED US Extension code.
- `title` (string, optional) — The official description of the SNOMED CT US code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical
- `relationship_type` (string, optional) — Indicates the semantic relationship between IMO lexical and the code

### MetadataMappingsDsm5TrCodesItems

- `dsm_icd_10_cm_code` (string, optional) — ICD-10-CM code per DSM-5-TR guidance
- `dsm_title` (string, optional) — Description using DSM diagnostic terms
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical

### MetadataMappingsIcd10PcsCodesItems

- `code` (string, optional) — A ICD-10-PCS code mapped to the IMO lexical
- `title` (string, optional) — The official description of the ICD-10-PCS code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical
- `long_title` (string, optional) — The long description of the ICD-10-PCS code for the Procedure domain
- `relationship_group` (string, optional) — Indicates a group number that each ICD-10-PCS code associates with
- `code_metadata` (MetadataMappingsIcd10PcsCodesItemsCodeMetadata, optional)

### MetadataMappingsLoincCodesItems

- `code` (string, optional) — A LOINC code mapped to the IMO lexical
- `title` (string, optional) — The official description of the LOINC code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical

### MetadataMappingsCptCodesItems

- `code` (string, optional) — A CPT code mapped to the IMO lexical
- `title` (string, optional) — The official description of the CPT code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical
- `long_title` (string, optional) — The long description of the CPT code for the Procedure domain

### MetadataMappingsUmlsCodesItems

- `code` (string, optional) — A UMLS Concept Unique identifier (CUI) mapped to the IMO lexical
- `title` (string, optional) — The designated preferred name of the UMLS concept.

### MetadataMappingsUscdiProfilesItems

- `data_class` (string, optional) — The USCDI-defined data class to which the mapped data element belongs
- `data_element` (string, optional) — The specific data element within the USCDI data class
- `valueset_oid` (string, optional) — The Object Identifier (OID) for the value set associated with the data element
- `hrsn_domain` (string, optional) — The Health-Related Social Needs (HRSN) domain associated with the data element
- `associated_codes` (list of MetadataMappingsUscdiProfilesItemsAssociatedCodesItems, optional)

### MetadataMappingsHcpcsCodesItems

- `code` (string, optional) — A HCPCS code mapped to the IMO lexical
- `title` (string, optional) — The official description of the HCPCS code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical
- `long_title` (string, optional) — The long description of the HCPCS code for the Procedure domain

### MetadataMappingsRxnormCodesItems

- `rxnorm_code` (string, optional) — An RxNorm code mapped to the IMO lexical
- `rxnorm_titles` (list of MetadataMappingsRxnormCodesItemsRxnormTitlesItems, optional)

### MetadataMappingsNdcCodesItems

- `ndc_code` (string, optional) — An NDC product code mapped to the IMO lexical
- `ndc_package_codes` (list of MetadataMappingsNdcCodesItemsNdcPackageCodesItems, optional) — An array of package configurations for this NDC product code
- `ndc_metadata` (list of MetadataMappingsNdcCodesItemsNdcMetadataItems, optional)

### MetadataMappingsCvxCodesItems

- `cvx_code` (string, optional) — An CVX code mapped to the IMO lexical
- `cvx_metadata` (list of MetadataMappingsCvxCodesItemsCvxMetadataItems, optional)
- `mvx_metadata` (list of MetadataMappingsCvxCodesItemsMvxMetadataItems, optional)

### MetadataMappingsSeverityMappingsSnomedInternational

- `codes` (list of MetadataMappingsSeverityMappingsSnomedInternationalCodesItems, optional)

### MetadataMappingsReactionMappingsSnomedInternational

- `codes` (list of MetadataMappingsReactionMappingsSnomedInternationalCodesItems, optional)
- `map_context` (string, optional) — Describes the reason no codes from this code system are mapped to the IMO lexical code. Possible value is 'NO MATCH'.

### MetadataMappingsIcd10CmCodesItemsCodeMetadata

- `ccsr` (list of MetadataMappingsIcd10CmCodesItemsCodeMetadataCcsrItems, optional) — Contains an array of CCSR objects. Each item in the array is a CCSR category associated with the code. If no categories are associated with the code from an applicable code system (ICD-10-CM or ICD-10-PCS) ccsr will be an empty array.
- `hcc` (list of MetadataMappingsIcd10CmCodesItemsCodeMetadataHccItems, optional) — Contains an array of HCC objects. Each item in the array is an HCC category associated with the code. If no categories are associated with the code from an applicable code system (ICD-10-CM) hcc will be an empty array.

### MetadataMappingsIcd10PcsCodesItemsCodeMetadata

- `ccsr` (list of MetadataMappingsIcd10PcsCodesItemsCodeMetadataCcsrItems, optional) — Contains an array of CCSR category objects. If no CCSR categories are associated with the code then the ccsr object will be an empty array.

### MetadataMappingsUscdiProfilesItemsAssociatedCodesItems

- `code` (string, optional) — A code from a standard terminology system (e.g., LOINC, SNOMED CT, CPT) that is associated with the USCDI profile
- `code_system` (string, optional) — The terminology system from which the associated code is derived (e.g., LOINC, SNOMED CT)

### MetadataMappingsRxnormCodesItemsRxnormTitlesItems

- `title` (string, optional) — An RxNorm title for rxnorm_code
- `title_type` (string, optional) — The RxNorm term type (TTY) for title

### MetadataMappingsNdcCodesItemsNdcPackageCodesItems

- `package_ndc` (string, optional) — The 11-digit NDC package code without hyphens
- `description` (string, optional) — A description of the package configuration

### MetadataMappingsNdcCodesItemsNdcMetadataItems

- `route` (list of string, optional) — An array of route(s) of administration of the medication (e.g. oral, intravenous)
- `strength` (string, optional) — Strength of the medication
- `dose_form` (string, optional) — Formulation of the medication (e.g. tablet, capsule, solution)
- `brand_name` (string, optional) — Brand name of the medication
- `generic_name` (string, optional) — Generic name of the medication
- `pharm_class` (list of string, optional, nullable) — An array of pharmacological class categories. If there is no official pharmacological class, such as with some herbal and OTC products, this will be null

### MetadataMappingsCvxCodesItemsCvxMetadataItems

- `full_title` (string, optional) — Full vaccine name for the cvx_code
- `short_title` (string, optional) — Short description for the cvx_code
- `vaccine_status` (string, optional) — Indicates the vaccine's availability in the United States (valid values are 'Active', 'Inactive', 'Pending', 'Never Active') or if it is for use outside of the US ('Non-US')
- `Notes` (string, optional) — Notes from the CDC about the cvx_code

### MetadataMappingsCvxCodesItemsMvxMetadataItems

- `code` (string, optional) — An alphabetic string that identifies the manufacturer of a vaccine
- `status` (string, optional) — Indicates the vaccine's availability in the United States (valid values are 'Active', 'Inactive', 'Pending', 'Never Active') or if it is for use outside of the US ('Non-US')

### MetadataMappingsSeverityMappingsSnomedInternationalCodesItems

- `code` (string, optional) — A SNOMED CT code mapped to the IMO lexical
- `title` (string, optional) — The official description of the SNOMED CT code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical

### MetadataMappingsReactionMappingsSnomedInternationalCodesItems

- `code` (string, optional) — A SNOMED CT code mapped to the IMO lexical
- `title` (string, optional) — The official description of the SNOMED CT code
- `map_type` (string, optional) — Indicates the preference relationship between the code and the IMO lexical

### MetadataMappingsIcd10CmCodesItemsCodeMetadataCcsrItems

- `ccsr_category` (string, optional) — A CCSR category code
- `ccsr_description` (string, optional) — The ccsr_category's description

### MetadataMappingsIcd10CmCodesItemsCodeMetadataHccItems

- `hcc_factors` (MetadataMappingsIcd10CmCodesItemsCodeMetadataHccItemsHccFactors, optional) — An HCC factor
- `hcc_model_category` (string, optional) — The HCC model category code
- `hcc_version` (string, optional) — The HCC model version

### MetadataMappingsIcd10PcsCodesItemsCodeMetadataCcsrItems

- `ccsr_category` (string, optional) — A CCSR category code
- `ccsr_description` (string, optional) — The ccsr_category's description

### MetadataMappingsIcd10CmCodesItemsCodeMetadataHccItemsHccFactors

An HCC factor

- `institutional` (string, optional) — HCC Institutional factor
- `community_fbdual_aged` (string, optional) — HCC Community FBDual Aged factor
- `community_pbdual_aged` (string, optional) — HCC Community PBDual Aged factor
- `community_nondual_aged` (string, optional) — HCC Community NonDual Aged factor
- `community_fbdual_disabled` (string, optional) — HCC Community FBDual Disabled factor
- `community_pbdual_disabled` (string, optional) — HCC Community PBDual Disabled factor
- `community_nondual_disabled` (string, optional) — HCC Community NonDual Disabled factor

## Examples

**Request**

```json
{
  "client_request_id": "xxx",
  "requests": [
    {
      "record_id": "10001",
      "domain": "Problem",
      "input_term": "chest pain",
      "context": {
        "source_text": "a crushing pressure in the chest that radiates to left arm"
      }
    }
  ],
  "session_id": "00000000-0000-0000-0000-000000000000",
  "preferences": {
    "match_field_pref": "input_term",
    "threshold": 0.5
  }
}
```

**Response**

```json
{
  "request_id": "a140f56f-939e-4456-be74-6ee492a07179",
  "client_request_id": "xxx",
  "session_id": "00000000-0000-0000-0000-000000000000",
  "response_time": 74,
  "requests": [
    {
      "record_id": "10001",
      "domain": "Problem",
      "input_code": "R07.9",
      "input_code_system": "ICD-10-CM",
      "input_term": "chest pain",
      "context": {
        "source_text": "a crushing pressure in the chest that radiates to left arm"
      },
      "response": {
        "explanation": "The input term 'chest pain' was matched to the IMO lexical 'Chest pain' with a score of 1.0.",
        "items": [
          {
            "lexical_code": "85191",
            "lexical_title": "Chest pain",
            "default_lexical_code": "85191",
            "default_lexical_title": "Chest pain",
            "score": 1,
            "certainty": "",
            "metadata": {
              "mappings": {
                "icd10cm": {
                  "codes": [
                    {
                      "code": "R07.9",
                      "title": "Chest pain, unspecified",
                      "map_type": "Preferred primary",
                      "relationship_type": "Same as",
                      "code_metadata": {
                        "ccsr": [
                          {
                            "ccsr_category": "CIR012",
                            "ccsr_description": "Nonspecific chest pain"
                          }
                        ],
                        "hcc": []
                      }
                    }
                  ]
                },
                "icd9cm": {
                  "codes": [
                    {
                      "code": "786.50",
                      "title": "Chest pain, unspecified",
                      "map_type": "Preferred primary"
                    }
                  ]
                },
                "icdo": {
                  "codes": [
                    {
                      "relationship_group": "0",
                      "topog_code": "C42.1",
                      "topog_desc": "Chest Pain",
                      "morph_code": "9835/3",
                      "morph_desc": "Chest Pain",
                      "hist_grad_code": "",
                      "hist_grad_desc": "",
                      "immuno_desig_code": "9",
                      "immuno_desig_desc": "Cell type not determined, not stated or not applicable"
                    }
                  ]
                },
                "snomedInternational": {
                  "codes": [
                    {
                      "code": "29857009",
                      "mesh_code": "D002637",
                      "title": "Chest pain (finding)",
                      "map_type": "Preferred primary",
                      "relationship_type": "Same as"
                    }
                  ]
                },
                "dsm5tr": {
                  "codes": [
                    {
                      "dsm_icd_10_cm_code": "R07.9",
                      "dsm_title": "Chest pain",
                      "map_type": "Preferred primary"
                    }
                  ]
                },
                "umls": {
                  "codes": [
                    {
                      "code": "C0008031",
                      "title": "Chest Pain"
                    }
                  ]
                },
                "uscdi": {
                  "profiles": [
                    {
                      "data_class": "Conditions and Problems",
                      "data_element": "Condition/Problem",
                      "valueset_oid": "2.16.840.1.113883.6.96",
                      "hrsn_domain": "Food Insecurity",
                      "associated_codes": [
                        {
                          "code": "R007.9",
                          "code_system": "icd10cm"
                        }
                      ]
                    }
                  ]
                }
              },
              "flags": {
                "is_icd10cm_refinable": true
              }
            },
            "domain": "Problem",
            "match_field": "input_term"
          }
        ]
      }
    }
  ],
  "preferences": {
    "threshold": 0.5,
    "match_field_pref": "input_term"
  }
}
```

**SDK Code**

```python normalize_enrich_example
import requests

url = "https://api-sandbox.imohealth.com/precision/normalize/enrichment"

payload = {
    "client_request_id": "xxx",
    "requests": [
        {
            "record_id": "10001",
            "domain": "Problem",
            "input_term": "chest pain",
            "context": { "source_text": "a crushing pressure in the chest that radiates to left arm" }
        }
    ],
    "session_id": "00000000-0000-0000-0000-000000000000",
    "preferences": {
        "match_field_pref": "input_term",
        "threshold": 0.5
    }
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript normalize_enrich_example
const url = 'https://api-sandbox.imohealth.com/precision/normalize/enrichment';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"client_request_id":"xxx","requests":[{"record_id":"10001","domain":"Problem","input_term":"chest pain","context":{"source_text":"a crushing pressure in the chest that radiates to left arm"}}],"session_id":"00000000-0000-0000-0000-000000000000","preferences":{"match_field_pref":"input_term","threshold":0.5}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go normalize_enrich_example
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api-sandbox.imohealth.com/precision/normalize/enrichment"

	payload := strings.NewReader("{\n  \"client_request_id\": \"xxx\",\n  \"requests\": [\n    {\n      \"record_id\": \"10001\",\n      \"domain\": \"Problem\",\n      \"input_term\": \"chest pain\",\n      \"context\": {\n        \"source_text\": \"a crushing pressure in the chest that radiates to left arm\"\n      }\n    }\n  ],\n  \"session_id\": \"00000000-0000-0000-0000-000000000000\",\n  \"preferences\": {\n    \"match_field_pref\": \"input_term\",\n    \"threshold\": 0.5\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby normalize_enrich_example
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.imohealth.com/precision/normalize/enrichment")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"client_request_id\": \"xxx\",\n  \"requests\": [\n    {\n      \"record_id\": \"10001\",\n      \"domain\": \"Problem\",\n      \"input_term\": \"chest pain\",\n      \"context\": {\n        \"source_text\": \"a crushing pressure in the chest that radiates to left arm\"\n      }\n    }\n  ],\n  \"session_id\": \"00000000-0000-0000-0000-000000000000\",\n  \"preferences\": {\n    \"match_field_pref\": \"input_term\",\n    \"threshold\": 0.5\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java normalize_enrich_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api-sandbox.imohealth.com/precision/normalize/enrichment")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"client_request_id\": \"xxx\",\n  \"requests\": [\n    {\n      \"record_id\": \"10001\",\n      \"domain\": \"Problem\",\n      \"input_term\": \"chest pain\",\n      \"context\": {\n        \"source_text\": \"a crushing pressure in the chest that radiates to left arm\"\n      }\n    }\n  ],\n  \"session_id\": \"00000000-0000-0000-0000-000000000000\",\n  \"preferences\": {\n    \"match_field_pref\": \"input_term\",\n    \"threshold\": 0.5\n  }\n}")
  .asString();
```

```php normalize_enrich_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api-sandbox.imohealth.com/precision/normalize/enrichment', [
  'body' => '{
  "client_request_id": "xxx",
  "requests": [
    {
      "record_id": "10001",
      "domain": "Problem",
      "input_term": "chest pain",
      "context": {
        "source_text": "a crushing pressure in the chest that radiates to left arm"
      }
    }
  ],
  "session_id": "00000000-0000-0000-0000-000000000000",
  "preferences": {
    "match_field_pref": "input_term",
    "threshold": 0.5
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp normalize_enrich_example
using RestSharp;

var client = new RestClient("https://api-sandbox.imohealth.com/precision/normalize/enrichment");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"client_request_id\": \"xxx\",\n  \"requests\": [\n    {\n      \"record_id\": \"10001\",\n      \"domain\": \"Problem\",\n      \"input_term\": \"chest pain\",\n      \"context\": {\n        \"source_text\": \"a crushing pressure in the chest that radiates to left arm\"\n      }\n    }\n  ],\n  \"session_id\": \"00000000-0000-0000-0000-000000000000\",\n  \"preferences\": {\n    \"match_field_pref\": \"input_term\",\n    \"threshold\": 0.5\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift normalize_enrich_example
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "client_request_id": "xxx",
  "requests": [
    [
      "record_id": "10001",
      "domain": "Problem",
      "input_term": "chest pain",
      "context": ["source_text": "a crushing pressure in the chest that radiates to left arm"]
    ]
  ],
  "session_id": "00000000-0000-0000-0000-000000000000",
  "preferences": [
    "match_field_pref": "input_term",
    "threshold": 0.5
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.imohealth.com/precision/normalize/enrichment")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```