> 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 terms or codes

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

Normalize a set of input terms or codes to IMO lexicals from any clinical domain. Supports custom lexical mappings and does not prioritize any particular code system. Accepts up to 300 records per request.

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

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

- `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 NormalizeRequestRequestsItems, 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). If AI Enhancement is enabled in your environment, then the context.source_text field is also strongly recommended when term-based matching. All other context fields are situationally dependent.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` (NormalizeRequestPreferences, 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` (NormalizeResponseSummary, 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 NormalizeResponseRequestsItems, 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` (NormalizeResponsePreferences, optional) — This object echoes back the same fields and values included in the request's preferences object, if applicable.If preferences was excluded from the request, this field is sent with an empty 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

### NormalizeRequestRequestsItems

- `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) — When term-based matching, this is the IMO content domain from which the API should match lexicals to the supplied input_term. If set to "Auto", the API attempts to match lexicals in each of the Problem, Procedure, Medication, and Lab domains and then returns lexicals from only the one domain in which the highest scoring match was found. If the input_code_system field is included, then this cross-domain search is limited to only those domains relevant to the identified system. The Allergen and Anatomical Site domains are always excluded from any operation with domain set to "Auto".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, including Allergen and Anatomical Site.In order to receive a valid response, the domain field must always be included and set to an allowed value, even when code-based matching.
  - Allowed values: `Problem`, `Procedure`, `Medication`, `Lab`, `Allergen`, `Anatomical Site`, `Auto`
- `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".
- `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".When domain is set to "Auto", this field also limits cross-domain lexical searching and you may even choose to supply an input_code_system without including the input_code field.
  - Allowed values: `ICD-10-CM`, `ICD-9-CM`, `SNOMED CT`, `ICD-10-PCS`, `LOINC`, `CPT`, `HCPCS`, `RXNORM`, `NDC`, `CVX`, `UMLS`, `IMO`
- `context` (NormalizeRequestRequestsItemsContext, optional) — This object provides additional context for the normalization record. These fields may be included for any of several purposes:Source Text analysis - When term-based matching, if AI Enhancement is enabled in your environment, then if the input term alone does not result in a high scoring lexical match, the API will analyze any supplied source_text in order to reinterpret the input term and seek better matches.Lab domain - When term-based matching in the Lab domain, the API considers association with the unit_of_measure, order_name, loinc_component, loinc_property, loinc_time, sample_type, loinc_scale, and loinc_method fields when evaluating lexicals as optimal matches for the input term.Allergen domain - For Allergen domain normalization records, when the reaction and severity fields are specified, each lexical returned in the response populates fields describing code mappings corresponding to the specified reaction (mappings.reaction_mappings) and/or severity (mappings.severity_mappings). These fields do not impact which lexicals are returned in the response.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.

### NormalizeRequestPreferences

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`
- `use_custom_maps` (boolean, optional, default: true) — When term-based matching, this preference determines whether the API compares the input_term against your organization's predefined custom lexical mappings.When set to "true", if the API finds an exact match between the input term and a custom lexical mapping, the response returns only that one mapped lexical. If no match is found in your custom lexical mappings, the API performs normal term-based matching against all IMO lexicals. When set to "false", the API disregards custom lexical mappings entirely and proceeds straight to normal term-based matching against all IMO lexicals.For the Lab domain, custom lexical mappings are checked against the combination of input_term, context.order_name, and context.unit_of_measure.When code-based matching, this preference is ignored.
- `use_domain_relevance_filter` (boolean, optional, default: false) — For Problem domain term-based matching only, this preference determines whether the API checks the input_term for basic domain relevance before returning any lexicals. When set to "true", if the input term is deemed irrelevant to the Problem domain, then no results are returned at all. When set to "false", the input term is not checked for basic domain relevance and the API may return even very low scoring lexicals based on superficial similarities to the input_term.For example, when set to "true", an input term of "misc:" would be discarded and return no results. When set to "false", the API would return low scoring lexicals that include the text "misc", such as "Miscellaneous certificate requested".This preference is ignored for domains other than Problem or when code-based matching.
- `use_semantic_match` (boolean, optional, default: false) — For Problem domain term-based matching only, this preference determines whether the API can optimize lexical matching by trying semantic variations of the input_term. When set to "true", the API may return lexicals that are conceptually similar to the input term, but use different wording or were matched after removing irrelevant input noise. When set to "false", lexical matches are more restricted to the exact wording of the input term. Set to "false" to improve performance.For example, when set to "false", an input term of "pelvic rim fracture" might be matched to a conceptually unrelated lexical like "Fracture of rim of glenoid fossa". When set to "true", it would instead be matched to "Pelvic ring fracture".This preference is ignored for domains other than Problem or when code-based matching.
- `threshold` (double, optional, default: 0) — 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: 1) — 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.

### NormalizeResponseSummary

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.

### NormalizeResponseRequestsItems

- `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`, `Procedure`, `Medication`, `Lab`, `Allergen`, `Anatomical Site`, `Auto`
- `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) — If included, this is the finalized input term used to match lexicals after any applicable transformations were made.This field is always included if the request preferences.transformation array was populated, whether or not the input term was transformed. If the requested transformation did not result in a transformed term, then this field simply repeats the initially supplied input_term.This field is also included if the API automatically transformed the input term to correct common spelling mistakes (e.g. "chast pain" to "chest pain"), or if AI Enhancement is enabled in your environment and the model opted to revise the input term to a more relevant clinical term (e.g. "busted clavicle" to "Clavicle Fracture").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 Enhancement
- `context` (NormalizeResponseRequestsItemsContext, 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` (NormalizeResponseRequestsItemsResponse, 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.

### NormalizeResponsePreferences

This object echoes back the same fields and values included in the request's preferences object, if applicable.If preferences was excluded from the request, this field is sent with an empty 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 applicable.If size was excluded from the request, this field is also excluded from 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.
- `use_domain_relevance_filter` (boolean, optional) — The same value echoed back from the request's use_domain_relevance_filter field, if applicable.If use_domain_relevance_filter was excluded from the request, this field is also excluded from the response.
- `use_semantic_match` (boolean, optional) — The same value echoed back from the request's use_semantic_match field, if applicable.If use_semantic_match 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.

### NormalizeRequestRequestsItemsContext

This object provides additional context for the normalization record. These fields may be included for any of several purposes:Source Text analysis - When term-based matching, if AI Enhancement is enabled in your environment, then if the input term alone does not result in a high scoring lexical match, the API will analyze any supplied source_text in order to reinterpret the input term and seek better matches.Lab domain - When term-based matching in the Lab domain, the API considers association with the unit_of_measure, order_name, loinc_component, loinc_property, loinc_time, sample_type, loinc_scale, and loinc_method fields when evaluating lexicals as optimal matches for the input term.Allergen domain - For Allergen domain normalization records, when the reaction and severity fields are specified, each lexical returned in the response populates fields describing code mappings corresponding to the specified reaction (mappings.reaction_mappings) and/or severity (mappings.severity_mappings). These fields do not impact which lexicals are returned in the response.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, if AI Enhancement is enabled in your environment, then when the input term alone does not result in a high scoring lexical match, the API may analyze any supplied source_text in order to reinterpret the input term and seek better matches.When code-based matching or if AI Enhancement is disabled, the source_text field is ignored.
- `unit_of_measure` (string, optional) — For Lab domain term-based matching only, this field defines one or more units of measurement used to report quantitative results, if applicable. For example, "mg/dL", "mmol/L", "%", and "#/mm3". These units translate to what LOINC refers to as a "Property" (e.g. "mass concentration", "#/volume").If included, the API considers association with the specified unit of measure when evaluating lexicals as optimal matches for the input term.This field is ignored for domains other than Lab or when code-based matching.
- `order_name` (string, optional) — For Lab domain term-based matching only, this is the name of the lab order that produced the result. This is sometimes called a "request" and for data in HL7 messages is found in the OBR segment. An order may be a panel that produces many results (e.g. a basic metabolic panel), but in cases where a lab order has only one result, the order name and result are the same.If included, the API considers association with the specified unit of measure when evaluating lexicals as optimal matches for the input term.This field is ignored for domains other than Lab or when code-based matching.
- `loinc_component` (string, optional) — For Lab domain term-based matching only, this is the "Component/Analyte" part of the LOINC code that you believe best maps to the input term.If included, the API considers association with the specified LOINC component when evaluating lexicals as optimal matches for the input term.This field is ignored for domains other than Lab or when code-based matching.
- `loinc_property` (string, optional) — For Lab domain term-based matching only, this is the "Property" part of the LOINC code that you believe best maps to the input term.If included, the API considers association with the specified LOINC property when evaluating lexicals as optimal matches for the input term.This field is ignored for domains other than Lab or when code-based matching.
- `loinc_time` (string, optional) — For Lab domain term-based matching only, this is the "Time Aspect" part of the LOINC code that you believe best maps to the input term.If included, the API considers association with the specified LOINC time aspect when evaluating lexicals as optimal matches for the input term.This field is ignored for domains other than Lab or when code-based matching.
- `sample_type` (string, optional) — For Lab domain term-based matching only, this is the "System" part of the LOINC code that you believe best maps to the input term. This identifies a type of sample or specimen.If included, the API considers association with the specified LOINC system when evaluating lexicals as optimal matches for the input term.This field is ignored for domains other than Lab or when code-based matching.
- `loinc_scale` (string, optional) — For Lab domain term-based matching only, this is the "Scale" part of the LOINC code that you believe best maps to the input term.If included, the API considers association with the specified LOINC scale when evaluating lexicals as optimal matches for the input term.This field is ignored for domains other than Lab or when code-based matching.
- `loinc_method` (string, optional) — For Lab domain term-based matching only, this is the "Method" part of the LOINC code that you believe best maps to the input term.If included, the API considers association with the specified LOINC method when evaluating lexicals as optimal matches for the input term.This field is ignored for domains other than Lab or when code-based matching.
- `reaction` (string, optional) — For Allergen domain normalization records only, this is a brief description of the type of allergic reaction applicable to the input term or code. For example, "Rash", "Hives", or "Anaphylaxis". This field is ignored for domains other than Allergen.If you specify a reaction, each returned lexical populates its mappings.reaction_mappings field with the code that best maps to the specified reaction. The reaction field does not impact which lexicals are returned in the response.The reaction field text is not limited to a fixed set of values, but is instead processed as an additional normalization term that the API attempts to map to a corresponding code, which is returned in the reaction_mappings field.
- `severity` (enum, optional) — For Allergen domain normalization records only, this is one of several supported values indicating the severity of the allergic reaction applicable to the input term or code. This field is ignored for domains other than Allergen.If you specify a severity, each returned lexical populates its mappings.severity_mappings field with the code that maps to the specified severity. The severity field does not impact which lexicals are returned in the response.
  - Allowed values: `Mild`, `Moderate`, `Severe`, `Unknown`
- `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

### NormalizeResponseRequestsItemsContext

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.

- `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.
- `loinc_component` (string, optional) — The same value echoed back from the request record's loinc_component field, if applicable.If loinc_component was excluded from the request, this field is also excluded from the response.
- `loinc_method` (string, optional) — The same value echoed back from the request record's loinc_method field, if applicable.If loinc_method was excluded from the request, this field is also excluded from the response.
- `loinc_property` (string, optional) — The same value echoed back from the request record's loinc_property field, if applicable.If loinc_property was excluded from the request, this field is also excluded from the response.
- `loinc_scale` (string, optional) — The same value echoed back from the request record's loinc_scale field, if applicable.If loinc_scale was excluded from the request, this field is also excluded from the response.
- `loinc_time` (string, optional) — The same value echoed back from the request record's loinc_time field, if applicable.If loinc_time was excluded from the request, this field is also excluded from the response.
- `order_name` (string, optional) — The same value echoed back from the request record's order_name field, if applicable.If order_name 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.
- `sample_type` (string, optional) — The same value echoed back from the request record's sample_type field, if applicable.If sample_type was excluded from the request, this field is also excluded from the response.
- `reaction` (string, optional) — The same value echoed back from the request record's reaction field, if applicable.If reaction was excluded from the request, this field is also excluded from the response.
- `severity` (enum, optional) — The same value echoed back from the request record's severity field, if applicable.If severity was excluded from the request, this field is also excluded from the response.
  - Allowed values: `Mild`, `Moderate`, `Severe`, `Unknown`
- `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.
- `unit_of_measure` (string, optional) — The same value echoed back from the request record's unit_of_measure field, if applicable.If unit_of_measure 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.

### NormalizeResponseRequestsItemsResponse

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. Resolved to a concrete domain even when the request specified `Auto`.
  - Allowed values: `Problem`, `Procedure`, `Medication`, `Lab`, `Allergen`, `Anatomical Site`
- `custom_mapped` (boolean, optional) — If the request's preferences.use_custom_maps field was set to "true", this field indicates whether a lexical was returned by an exact match between the input term and a custom lexical mapping. A vale of "true" indicates a match by custom mapping, whereas a value of "false" indicates that any returned lexicals were selected by some other means.The custom_mapped field is always set to false when preferences.use_custom_maps was set to false, or when a lexical was returned by code-based matching, or if no lexicals were returned in the response.
- `transformed_term` (string, optional) — If included, the response.transformed_term field contains the exact same value populated in the requests.transformed_term field.If no lexicals were returned in the response, 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, such as the correction of a common spelling mistake. When AI Enhancement is enabled in your environment, this includes decisions 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. For Problem domain matching, when preferences.use_domain_relevance_filter is set to "true", the explanation may also indicate when the input term was deemed irrelevant and discarded. The explanation does not describe preferences.transformation based transformations.The explanation field is sent with an empty string when code-based matching or if the error_message array reports a fatal error that prevented normalization entirely.
- `match_includes_assumptions` (boolean, optional) — For Lab domain normalization records only, this field is always included and indicates whether the returned lexical match includes assumptions by IMO.This field is excluded for domains other than Lab or if the error_message array reports a fatal error that prevented normalization entirely.
- `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 NormalizeResponseRequestsItemsResponseItemsItems, optional) — \<p>Each object in this array describes an IMO lexical that was matched to the normalization record based on either the supplied \<i>input\_term\</i> or \<i>input\_code\</i>, as indicated by the \<i>response.match\_field\</i> field:\</p>\<ul>\<li>When \<i>match\_field\</i> is set to \<b>"input\_term"\</b>, indicating term-based matches, the \<i>items\</i> array returns every lexical that was matched with a score equal to or greater than the request's \<i>preferences.threshold\</i> field, up to the maximum quantity of lexicals permitted by the request's \<i>preferences.size\</i> field. Lexicals are listed in descending order based their \<i>score\</i> field values. For equivalent lexical scores, more concise lexicals are ranked higher.\</p>\</li>\<li>When \<i>match\_field\</i> is set to \<b>"input\_code"\</b>, indicating a code-based match, the \<i>items\</i> array returns at most a single lexical match with a \<i>score\</i> of 1.\</li>\</ul>\<p>The \<i>items\</i> array is sent blank if the API was unable to find any lexical matches within the request \<i>threshold\</i> or if the \<i>error\_message\</i> array reports a fatal error that prevented normalization entirely.\</p>
- `loinc_parts` (NormalizeResponseRequestsItemsResponseLoincParts, optional) — For Lab domain lexicals only, this object identifies the resolved LOINC parts used for lexical matching. This object is only included when one or more of the listed LOINC parts are resolved and the normalization result is derived from them.This object is excluded for domains other than Lab.

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

### NormalizeResponseRequestsItemsResponseItemsItems

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

### NormalizeResponseRequestsItemsResponseLoincParts

For Lab domain lexicals only, this object identifies the resolved LOINC parts used for lexical matching. This object is only included when one or more of the listed LOINC parts are resolved and the normalization result is derived from them.This object is excluded for domains other than Lab.

- `component` (NormalizeResponseRequestsItemsResponseLoincPartsComponent, optional) — The LOINC component part
- `property` (NormalizeResponseRequestsItemsResponseLoincPartsProperty, optional) — The LOINC property part
- `sample_type` (NormalizeResponseRequestsItemsResponseLoincPartsSampleType, optional) — The LOINC system part
- `method` (NormalizeResponseRequestsItemsResponseLoincPartsMethod, optional) — The LOINC method part
- `scale` (NormalizeResponseRequestsItemsResponseLoincPartsScale, optional) — The LOINC scale part
- `time` (NormalizeResponseRequestsItemsResponseLoincPartsTime, optional) — The LOINC time part

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

### NormalizeResponseRequestsItemsResponseLoincPartsComponent

The LOINC component part

- `part_number` (string, optional) — The LOINC part number
- `part_name` (string, optional) — The human-readable name for the LOINC part

### NormalizeResponseRequestsItemsResponseLoincPartsProperty

The LOINC property part

- `part_number` (string, optional) — The LOINC part number
- `part_name` (string, optional) — The human-readable name for the LOINC part

### NormalizeResponseRequestsItemsResponseLoincPartsSampleType

The LOINC system part

- `part_number` (string, optional) — The LOINC part number
- `part_name` (string, optional) — The human-readable name for the LOINC part

### NormalizeResponseRequestsItemsResponseLoincPartsMethod

The LOINC method part

- `part_number` (string, optional) — The LOINC part number
- `part_name` (string, optional) — The human-readable name for the LOINC part

### NormalizeResponseRequestsItemsResponseLoincPartsScale

The LOINC scale part

- `part_number` (string, optional) — The LOINC part number
- `part_name` (string, optional) — The human-readable name for the LOINC part

### NormalizeResponseRequestsItemsResponseLoincPartsTime

The LOINC time part

- `part_number` (string, optional) — The LOINC part number
- `part_name` (string, optional) — The human-readable name for the LOINC part

### 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",
      "input_code": "R07.9",
      "input_code_system": "ICD-10-CM"
    }
  ],
  "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",
      "response": {
        "match_field": "input_term",
        "domain": "Problem",
        "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": {
                "age_indicator": "",
                "is_icd10cm_refinable": true,
                "sex_indicator": ""
              }
            }
          }
        ]
      }
    }
  ],
  "preferences": {
    "threshold": 0.5,
    "match_field_pref": "input_term"
  }
}
```

**SDK Code**

```python normalize_normalize_example
import requests

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

payload = {
    "client_request_id": "xxx",
    "requests": [
        {
            "record_id": "10001",
            "domain": "Problem",
            "input_term": "chest pain",
            "input_code": "R07.9",
            "input_code_system": "ICD-10-CM"
        }
    ],
    "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_normalize_example
const url = 'https://api-sandbox.imohealth.com/precision/normalize/v1';
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","input_code":"R07.9","input_code_system":"ICD-10-CM"}],"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_normalize_example
package main

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

func main() {

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

	payload := strings.NewReader("{\n  \"client_request_id\": \"xxx\",\n  \"requests\": [\n    {\n      \"record_id\": \"10001\",\n      \"domain\": \"Problem\",\n      \"input_term\": \"chest pain\",\n      \"input_code\": \"R07.9\",\n      \"input_code_system\": \"ICD-10-CM\"\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_normalize_example
require 'uri'
require 'net/http'

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

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      \"input_code\": \"R07.9\",\n      \"input_code_system\": \"ICD-10-CM\"\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_normalize_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/v1")
  .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      \"input_code\": \"R07.9\",\n      \"input_code_system\": \"ICD-10-CM\"\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_normalize_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api-sandbox.imohealth.com/precision/normalize/v1', [
  'body' => '{
  "client_request_id": "xxx",
  "requests": [
    {
      "record_id": "10001",
      "domain": "Problem",
      "input_term": "chest pain",
      "input_code": "R07.9",
      "input_code_system": "ICD-10-CM"
    }
  ],
  "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_normalize_example
using RestSharp;

var client = new RestClient("https://api-sandbox.imohealth.com/precision/normalize/v1");
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      \"input_code\": \"R07.9\",\n      \"input_code_system\": \"ICD-10-CM\"\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_normalize_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",
      "input_code": "R07.9",
      "input_code_system": "ICD-10-CM"
    ]
  ],
  "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/v1")! 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()
```