---
title: "Download a PDF report for one area"
method: GET
path: "/api/v1/postal-codes/{postalCode}/report.pdf"
tags: ["Areas"]
---

# Download a PDF report for one area

`GET /api/v1/postal-codes/{postalCode}/report.pdf`

## Request

- Base URL: `https://suomiatlas.com`
- URL: `https://suomiatlas.com/api/v1/postal-codes/{postalCode}/report.pdf`
- Auth: one of:
  - none
  - HTTP bearer

A rendered PDF summary of one area, returned as an attachment.

**Paid outright:** 402 without Pro or an Area Pass for this exact area. Unlike `/derived-history`, validation runs *first* here — a malformed code is a 400 and an unknown one a 404 for everybody, so a 402 does imply the area exists.

Rate-limited far more tightly than the rest of the API: **6 requests per minute**, burst 3. Rendering is synchronous, so expect seconds, not milliseconds, and a 503 if the renderer is unavailable.

Example request: https://suomiatlas.com/api/v1/postal-codes/00120/report.pdf?lang=en

## Path parameters

- `postalCode` string, required

## Query parameters

- `year` integer
- `lang` 'fi' | 'sv' | 'en'

## Response `200`

The PDF, as an attachment.

## Other responses

- `400`: A parameter was missing, malformed, or outside what this operation accepts. The message names the parameter.
- `402`: This data needs a paid entitlement. **Note the different body shape** — `error`, not `code`/`message`. There is no 401 or 403 anywhere in this API: an anonymous caller is a valid caller with fewer entitlements.
- `404`: No such place, or no data for it. Also what a non-numeric `year` produces, because query-parameter conversion fails before the operation runs.
- `503`: The PDF renderer is unavailable.

---

[API](https://skmtc.dev/suomiatlas/apis/suomiatlas-read-api.md) · [All operations](https://skmtc.dev/suomiatlas/apis/suomiatlas-read-api/llms.txt) · [OpenAPI document](https://skmtc.dev/suomiatlas/apis/suomiatlas-read-api/revisions/b2627414938d?raw)
