> For the complete documentation index, see [llms.txt](https://developer.parvenu.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.parvenu.io/enrichments/normalize-contact-names/individual-lookup.md).

# Individual Lookup

Repair one contact name and get it back directly. Synchronous and free.

<mark style="color:green;">`POST`</mark> `/normalize_contact_names`

{% hint style="info" %}
**Free.** No provider call, no model call, so nothing is charged and nothing is stored. Returns the cleaned name directly in the response.
{% endhint %}

Send `person_name` wherever you have it. The first/last split is rebuilt from the full name rather than trusted, because a wrong split is part of what this fixes — real rows carry a `first_name` of `Dr.` with the whole name pushed into `last_name`. `first_name` and `last_name` are used only when `person_name` is absent, and to recognise a split that already agrees with the full name.

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**Body**

| Name          | Type   | Description                                                                                  |
| ------------- | ------ | -------------------------------------------------------------------------------------------- |
| `api_key`     | string | Your API Key.                                                                                |
| `person_name` | string | Optional. Full name. Prefer this — the split is rebuilt from it.                             |
| `first_name`  | string | Optional. Used when `person_name` is absent, and to keep a stored split that already agrees. |
| `last_name`   | string | Optional. Same as above.                                                                     |

**What it repairs**

| Input                              | Output            | Why                            |
| ---------------------------------- | ----------------- | ------------------------------ |
| `Dr. Linda Silbert`                | Linda / Silbert   | Honorific removed              |
| `Emily Kapit, Ms, Mrw, Acrw, Cprw` | Emily / Kapit     | Trailing credentials removed   |
| `Mary (Kathy) Mcdaniel`            | Kathy / McDaniel  | Bracketed nickname is the name |
| `Talyson O?Mahoney`                | Talyson O'Mahoney | Lost apostrophe repaired       |
| `barbara mclean`                   | Barbara McLean    | Capitalisation                 |

**What it leaves alone**

A name it cannot resolve comes back **unchanged**, with the reason in `reasons`. Nothing is ever blanked — an empty first name does not stop an export, it sends "Hi ,".

Values that are not people (`hiring@acme.com`, `Acme Roofing LLC`, `Sarah Jones | We're hiring!`, `John Smith (He/Him)`) are recognised and returned untouched.

Correct names are also left byte-identical. `Dean Foster` does not become `DeAn Foster` and `Macy Gray` does not become `MacY Gray` — the Mc/Mac and De rules run off closed lists of known surnames for exactly this reason.

**Example**

{% tabs %}
{% tab title="Input" %}

```json
{
  "api_key": "your_api_key",
  "person_name": "Dr. Linda Silbert"
}
```

{% endtab %}

{% tab title="Output" %}

```json
{
  "status": "success",
  "data": {
    "person_name": "Linda Silbert",
    "first_name": "Linda",
    "last_name": "Silbert",
    "reasons": ["removed a title or qualification"]
  },
  "credits_used": 0.0,
  "success": true
}
```

{% endtab %}

{% tab title="Left alone" %}

```json
{
  "status": "success",
  "data": {
    "person_name": "Acme Roofing LLC",
    "first_name": "Acme",
    "last_name": "Roofing LLC",
    "reasons": ["not a person name, left as it is"]
  },
  "credits_used": 0.0,
  "success": true
}
```

{% endtab %}
{% endtabs %}

**Response**

| Field         | Type   | Description                                                        |
| ------------- | ------ | ------------------------------------------------------------------ |
| `person_name` | string | The repaired full name, or the original when no rule applied.      |
| `first_name`  | string | Greeting name, rebuilt from the full name.                         |
| `last_name`   | string | Surname, rebuilt from the full name.                               |
| `reasons`     | array  | One short line per rule that fired, or the reason nothing changed. |

The record is under `data`. See [Response Format](/getting-started/response-format.md) for the fields every endpoint returns.

Use this to see what the rules would do before running them over a whole list. To repair a list instead, use [List Lookup](/enrichments/normalize-contact-names/list-lookup.md).
