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

# Quickstart

> Install, set your API key, run your first enrichment.

<Steps>
  <Step title="Install">
    ```bash theme={null}
    pip install minerva-sdk
    ```

    Python 3.11+ (tested through 3.14).
  </Step>

  <Step title="Set your API key">
    ```bash theme={null}
    export MINERVA_API_KEY=mk_live_...
    ```

    The SDK reads `MINERVA_API_KEY` from the environment by default. You can
    also pass it as a constructor arg (handy in tests / notebooks):

    ```python theme={null}
    mc = Minerva(api_key="mk_live_...")
    ```
  </Step>

  <Step title="Resolve, enrich">
    ```python theme={null}
    from minerva import Minerva

    mc = Minerva()

    # Resolve — match records to a Minerva PID (lighter / cheaper than enrich)
    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)

    # Enrich — full person profiles (up to 500 records per call)
    people = mc.api.enrich([
        {"record_id": "1", "linkedin_url": "https://www.linkedin.com/in/example"}
    ])
    people.to_df()          # straight to a pandas DataFrame (needs [pandas])
    people.to_csv("out.csv")
    ```
  </Step>

  <Step title="Explore from the terminal">
    ```bash theme={null}
    python -m minerva         # banner + cheat-sheet of every namespace
    python -m minerva --help  # argparse help with usage epilog
    ```

    From a REPL:

    ```python theme={null}
    >>> from minerva import Minerva
    >>> help(Minerva)               # full class docstring
    >>> help(Minerva.api)           # the data-API namespace
    ```
  </Step>
</Steps>

## What you get

<CardGroup cols={2}>
  <Card title="`mc.api`" href="/sdk/guides/enrich">
    `resolve` · `enrich` · `get_li_contact_info` · `validate_emails` · `infer_record_country` · `call`
  </Card>

  <Card title="`mc.usage`" href="/sdk/guides/usage">
    `tallies()` — your per-endpoint API usage
  </Card>

  <Card title="`mc.status`" href="/sdk/guides/health">
    `health()` — unauthenticated liveness probe
  </Card>

  <Card title="`mc.io`" href="/sdk/guides/spreadsheets">
    `enrich_from_sheet` / `_excel` — run the Data API directly off spreadsheets
  </Card>
</CardGroup>

## Validate before you call

Every input-bearing method accepts `dry_run=True` — validates input locally
and returns the exact request that *would* be sent, without spending a credit:

```python theme={null}
req = mc.api.enrich(records, dry_run=True)
# -> EnrichRequest (nothing sent); inspect req.model_dump()
```

See [Validation & dry\_run](/sdk/guides/validation-dry-run) for the full pattern.
