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

# Quickstart

> Submit a packet, wait for it, and read the result.

The base URL is `https://api.parser-app.com`. The examples use these shell variables:

```bash theme={null}
API=https://api.parser-app.com
KEY=pk_live_...   # an API key with jobs:write and jobs:read
```

<Steps>
  <Step title="Get an API key">
    An administrator of your tenant creates one with `POST /v1/api-keys` (`keys:manage`). The key is shown once;
    store it as a secret. By default a key may submit and read jobs and run the underwriting calculator. See
    [Authentication](/authentication).
  </Step>

  <Step title="Register a webhook (optional, recommended)">
    ```bash theme={null}
    curl -sS -X POST "$API/v1/webhooks" -H "X-API-Key: $KEY" -H "Content-Type: application/json" \
         -d '{"url": "https://crm.example.com/hooks/parser", "topics": ["job.completed", "job.review_required", "job.failed"]}'
    ```

    The answer holds the signing `secret`, shown only now. Every finished job is then `POST`ed to your URL,
    signed. See [Webhooks](/guides/webhooks).
  </Step>

  <Step title="Submit a packet">
    Send every file of one merchant in one request. The metadata fields are optional.

    ```bash theme={null}
    curl -sS -X POST "$API/v1/parse" -H "X-API-Key: $KEY" -H "Idempotency-Key: deal-1042" \
         -F files=@application.pdf -F files=@march.pdf -F files=@april.pdf \
         -F broker_email=deals@iso.example -F business_name="Blue Fern Bakery LLC" \
         -F external_business_id=crm-42 -F requested_advance_amount=45000
    ```

    ```json Response (202) theme={null}
    {"job_id": "8f1c...", "status": "queued", "status_url": "https://api.parser-app.com/v1/jobs/8f1c...", "created": true}
    ```

    PDFs, PNGs and JPEGs are accepted, identified by their content, not their names. Photos and screenshots
    of pages work too.
  </Step>

  <Step title="Get the result">
    When the webhook arrives, or by polling (`?wait=` holds the request until the job finishes):

    ```bash theme={null}
    curl -sS "$API/v1/jobs/$JOB_ID?wait=60" -H "X-API-Key: $KEY" | jq '{status,
      review: .result.review_reasons, withhold: .result.underwriting.current_withhold_pct,
      documents: .result.submission_packet.document_count}'
    ```

    * `completed`: every check passed.
    * `review_required`: the result is usable; `review_reasons` name what a person should check.
    * `failed`: nothing could be processed; `error` says why.
  </Step>
</Steps>

<Tip>
  A packet of text-layer PDFs usually finishes in seconds; one of scanned or photographed pages can take
  minutes. Rely on the webhook rather than a long wait.
</Tip>

## Next

<CardGroup cols={2}>
  <Card title="Jobs" icon="list-check" href="/concepts/jobs">Statuses, idempotency, limits and erasure.</Card>
  <Card title="The submission packet" icon="box" href="/concepts/submission-packet">What the result says about the whole submission.</Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.