> ## Documentation Index
> Fetch the complete documentation index at: https://docs.minerva.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Resolve

> Match your records to a unique Minerva PID. Lighter and cheaper than enrich when all you need is identity.

```python theme={null}
match = mc.api.resolve([
    {"record_id": "1", "first_name": "Jane", "last_name": "Doe",
     "emails": ["jane.doe@example.com"]}
])

for r in match.results:
    print(r.record_id, r.is_match, r.minerva_pid, r.match_score)
```

## When to use resolve vs enrich

| You need                                                    | Use              |
| ----------------------------------------------------------- | ---------------- |
| Just the Minerva PID (dedupe, key lookup, ID-to-ID linking) | `mc.api.resolve` |
| The full person profile                                     | `mc.api.enrich`  |

`resolve` is cheaper than `enrich` per matched record. Both run the same matching logic — the difference is what comes back.

## Parameters

<ParamField path="records" type="list[dict]" required>
  Up to 500 per call. Each must have `record_id` + at least one matching field
  (LinkedIn URL, emails, name, etc.).
</ParamField>

<ParamField path="version" type="str" default="&#x22;v2&#x22;">
  API version.
</ParamField>

<ParamField path="match_condition_fields" type="list[str]">
  Quality gate. A record only counts as a match if the resolved person actually
  has these fields. Up to 3.
</ParamField>

<ParamField path="dry_run" type="bool" default="False">
  Validate input locally without sending. Returns the `ResolveRequest` that
  *would* be sent. See [Validation](/sdk/guides/validation-dry-run).
</ParamField>

## Response shape

```python theme={null}
match.to_dicts()
# [
#   {
#     "record_id": "1",
#     "is_match": True,
#     "minerva_pid": "p-abc123",
#     "match_score": 0.94,
#   },
#   ...
# ]
```

`match.results` is a list of `ResolveResult` objects with `record_id`,
`is_match`, `minerva_pid`, `match_score`. The response is typed end-to-end —
IDE autocomplete + `mypy` will check field access for you.

## Tabular output

```python theme={null}
match.to_dicts()        # list[dict]
match.to_df()           # pandas DataFrame   (needs [pandas])
match.to_csv("out.csv")
match.to_table()        # pretty terminal table   (needs [table])
```

See [Output formats](/sdk/guides/output-formats) for full conversion patterns.

## Limits

* Records per call: **500**
* Validation enforced locally before the call — over-limit records raise
  `MinervaValidationError` without a round-trip
* Billing: see your plan for per-resolve / per-match pricing
