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

# Downloadable PDF report

This page explains how to generate a downloadable **PDF report** for a submission using the Documents API.

<Note>
  This guide uses the default EU base URL (`https://api.documents.resistant.ai`).\
  If your tenant is in another cell (e.g., `us-1`, `ca-1`, `ap-2`, `ap-3`), use the corresponding base URL described in [Concepts](/getting-started/concepts).
</Note>

## What it does

The report endpoint returns a JSON response containing a `download_url`. Your system can then download the PDF from that URL.

* Endpoint: `GET /v2/submission/{submission_id}/report`
* Output: `{ "download_url": "..." }`
* Auth: OAuth2 access token (`Authorization: Bearer <access_token>`)

## When to use it

Use the PDF report when you need:

* a human-readable artifact for case handling
* audit / record-keeping workflows
* sharing results with internal reviewers (without building your own UI)

<Tip>
  If you need interactive review (indicators, visualization), use the **Web UI** or **Offline iFrame viewer** instead of relying only on the report.
</Tip>

***

## Request

### Endpoint

```http theme={null}
GET https://api.documents.resistant.ai/v2/submission/{submission_id}/report
Authorization: Bearer <access_token>
```

### Query parameters

| Parameter          |    Type | Default | Description                                     |
| ------------------ | ------: | ------: | ----------------------------------------------- |
| `include_decision` | boolean | `false` | Include Adaptive Decision result in the report. |

Example:

```http theme={null}
GET https://api.documents.resistant.ai/v2/submission/{submission_id}/report?include_decision=true
Authorization: Bearer <access_token>
```

***

## Responses (per OpenAPI)

### 200 OK — report available

```json theme={null}
{
  "download_url": "https://.../signed-url-to-pdf..."
}
```

### 409 Conflict — report cannot be downloaded

The API returns `409 Conflict` when the report cannot be downloaded because the fraud analysis (or Adaptive Decision, if requested) **was not completed successfully or was skipped**.

<Warning>
  Best practice: call the report endpoint only after the relevant analysis endpoints have reached a terminal status (e.g., poll `/fraud` until it returns `200` with a terminal `status`).
</Warning>

### 404 Not Found

The API specification defines `404` as “requested resource was not found”. If you get `404`:

* verify the `submission_id`
* verify you are calling the correct **stage/cell base URL** (same one where the submission was created)

***

## Download the PDF

The `download_url` points to a downloadable PDF file. Download it with any standard HTTP client.

### cURL example

```bash theme={null}
DOWNLOAD_URL="<download_url_from_report_response>"

curl --location "$DOWNLOAD_URL" --output report.pdf
```

### Recommended handling

* Treat the `download_url` as **temporary** (download promptly).
* Store the PDF in your own storage if you need long-term retention.
* Apply your organization’s access controls if you re-host the PDF.

***

## Common issues

<AccordionGroup>
  <Accordion title="I get 409 Conflict">
    Wait for the underlying analysis to complete and confirm it completed successfully (or reached a terminal status). If you request <code>include\_decision=true</code>

    , ensure Adaptive Decision was enabled for the submission.
  </Accordion>

  <Accordion title="I get 404 Not Found">
    Confirm the submission exists and that you are calling the correct base URL for the same stage/cell where the submission was created.
  </Accordion>

  <Accordion title="The downloaded file is empty or corrupted">
    Ensure you are downloading the PDF from <code>download\_url</code>

    (not from the API endpoint directly), and that your HTTP client follows redirects if present.
  </Accordion>
</AccordionGroup>

***

## Next steps

* [Adaptive Decision](/integrate/adaptive-decision)
* [Core Integration Mechanics](/integrate/core-integration)
* [Polling for results](/receiving-results/polling)
