# Greenhouse 422 "first_name can't be blank" on parsed LinkedIn profile

## TL;DR
Greenhouse requires first_name on candidate create, and the parser produced nothing usable for it, so the create is rejected. Fix: validate parsed names before the API call, handle single-token and empty names explicitly, and route unresolvable names to human review instead of submitting. Never invent a first name.

## Error
```text
422 Unprocessable Entity
"first_name can't be blank"
```

## Steps
1. Log the raw parsed name for the failing candidate.
   Expected: you see the actual input, e.g. a single token, a title like "Dr.", or an empty string.
2. Add a pre-submit name check: if first_name is blank or the full name is a single token, do not call the create endpoint.
   Expected: the 422 never fires; the candidate is held instead.
3. Handle the cases explicitly: a single token goes to last_name with first_name held for review; titles and suffixes are stripped before splitting; empty names go straight to the review queue.
   Expected: deterministic behavior per case, no guessing.
4. Route held candidates to a human review queue with the source profile link attached.
   Expected: a recruiter fills in the name in seconds.
5. Test with the failing profiles plus edge inputs (mononyms, initials, non-Latin scripts).
   Expected: all resolve to either a valid create or the review queue.

## Use this when
- pushing parsed LinkedIn profiles to Greenhouse
- resume parsing yields odd names
- candidate creates 422 on name fields
- profiles with mononyms, titles, or missing names

## Not for this skill when
- the 422 names email (that is the email-taken problem)
- the name is present but the create still 422s (check for other blank required fields)
- the parse itself is wrong (fix the parser, not the submitter)

## Variant phrasings
- "Greenhouse first_name blank 422"
- "candidate create missing first name"
- "LinkedIn parse no first name Greenhouse"
- "single name candidate Greenhouse API"

## Why it happens
Parsers assume Western two-part names, but profiles carry mononyms, titles, company names in the name field, or nothing at all. Greenhouse's candidate model requires first_name, so the API rejects what the parser could not produce. The gap is between the parser's optimism and the API's required fields.

## Edge cases
- Some cultures put the family name first; do not assume token order.
- A placeholder first name like "Unknown" pollutes the ATS and confuses recruiters; prefer the review queue.
- If the source profile definitely has a name and the parser dropped it, fix the parser's name extraction.
- Keep the raw name string on the held record so reviewers do not re-parse.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_YqtMn7u30Wy2hMkBiqWd5g
