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

# Quickstart

Get a license, run FineParser with Docker, and parse your first document into DocLang in under five minutes.

## Before you begin

* [Docker](https://docs.docker.com/get-docker/) installed and running
* A PDF or image file to parse
* A FineParser license file. Sign up for a plan at [fineparser.ai](https://www.fineparser.ai/#pricing) and you receive a `.fineparserlicense` file. See [Licenses and plans](/fine-parser/basics/licenses-and-plans).
* Outbound access to ABBYY's license server. If your network restricts egress, allow the ranges listed under [Network requirements](/fine-parser/reference/data-privacy#network-requirements) first.

<Steps>
  <Step title="Get a license">
    Sign up for a plan at [fineparser.ai](https://www.fineparser.ai/#pricing). The Free plan gives you 1,000 pages per month. You receive one `.fineparserlicense` file for your account.
  </Step>

  <Step title="Start FineParser">
    Pass the contents of your license file in the `FINEPARSER_LICENSE_DATA` environment variable and publish port 8080:

    ```bash theme={null}
    docker run -d --name fineparser -p 8080:8080 \
      -e FINEPARSER_LICENSE_DATA="$(cat acme.fineparserlicense)" \
      -v fineparser-output:/app/output \
      fineparser
    ```

    The volume holds parsed results. Without it they vanish when the container does.

    Then confirm the license was accepted:

    ```bash theme={null}
    curl -s localhost:8080/healthz
    # {"code":"ok","ready":true,"telemetry":true}
    ```

    If `ready` is `false`, the response's `detail` field says why. See [Confirming the license](/fine-parser/basics/configuration#confirming-the-license).
  </Step>

  <Step title="Submit a document">
    ```bash theme={null}
    curl -s -X POST http://localhost:8080/parse \
      -F "file=@invoice.pdf" \
      -F "outputType=doclang"
    ```

    FineParser accepts the document and returns a job ID right away:

    ```json theme={null}
    {"jobId":"6c4f1f0e-...","file":"invoice.pdf"}
    ```
  </Step>

  <Step title="Wait for it to finish">
    Poll the job with its ID until `status` is `successful`:

    ```bash theme={null}
    curl -s http://localhost:8080/jobs/6c4f1f0e-...
    ```

    ```json theme={null}
    {"status":"successful","file":"6c4f1f0e-.../invoice.pdf.doclang"}
    ```

    A one-page invoice takes a few seconds. If `status` is `failed`, the response includes an `error` explaining why.
  </Step>

  <Step title="Download the result">
    Append the `file` value to `/jobs/`:

    ```bash theme={null}
    curl -OJ http://localhost:8080/jobs/6c4f1f0e-.../invoice.pdf.doclang
    ```

    The file is the document's structure and text in DocLang:

    ```xml theme={null}
    <doclang>
      <heading level="1">Invoice 4471</heading>
      <table>
        <ched/>Item<ched/>Qty<ched/>Amount<nl/>
        <fcel/>Consulting<fcel/>12<fcel/>$4,800.00<nl/>
      </table>
    </doclang>
    ```

    Swap `doclang` for `json` or `txt` in the submit step to change the format.
  </Step>
</Steps>

## Next steps

<CardGroup cols={2}>
  <Card title="REST API" icon="code" href="/fine-parser/concepts/rest-api">
    Submit, poll, download, and every response code.
  </Card>

  <Card title="Output formats" icon="file-code" href="/fine-parser/basics/output-formats">
    DocLang, JSON, or plain text.
  </Card>

  <Card title="Configuration" icon="sliders" href="/fine-parser/basics/configuration">
    Recognition mode, languages, and ports.
  </Card>

  <Card title="AI coding agents" icon="robot" href="/fine-parser/getting-started/ai-agents">
    Give Claude Code or Codex access to these docs.
  </Card>
</CardGroup>
