---
title: "Get the conversion report"
method: GET
path: "/api/conversions"
tags: ["Conversion Tracking"]
---

# Get the conversion report

`GET /api/conversions`

## Request

- Base URL: `https://www.flyn.to`
- URL: `https://www.flyn.to/api/conversions`
- Auth: HTTP bearer

Summary, daily series, recent conversions and per-event totals for links in the caller's workspace.

**Auth:** API key (`Bearer flyn_sk_live_...`), or the signed-in dashboard session cookie when no API key header is sent. MCP OAuth access tokens are not accepted here and get 401.

**Plan:** Pro, Lifetime or Team (a member of a paying owner's workspace has the effective plan `team`) only; Free gets 403 `UPGRADE_REQUIRED`. Any team role, including viewer.

**Rate limit:** 60 requests per 60 s per client IP, fixed window, in memory per server instance, checked after authentication. The 429 has no Retry-After.

## Query parameters

- `days` integer
- `limit` integer
- `linkId` string, uuid

## Response `200`

The report. With no links in scope every list is empty; if the conversions store cannot be read the report is empty and carries `unavailable: true`. The example answers `days=2`, so the series has two entries.

- ConversionReport
  - `summary` object, required
    - `count` integer, required: Conversions net of refunds.
    - `valueCents` integer, required: Summed value in minor units (refunds subtract).
    - `currency` string, nullable, required: The single currency seen, "MIXED" when there were several, or null.
    - `days` integer, required
    - `truncated` boolean: True when the window hit the 5,000-row read cap, so the numbers are a floor.
  - `series` object[], required: One entry per day in the window, oldest first, including empty days.
    - `date` string, date, required
    - `count` integer, required
    - `valueCents` integer, required
  - `recent` object[], required
    - `id` string, uuid, required
    - `linkId` string, uuid, required
    - `slug` string, nullable, required
    - `domain` string, nullable, required
    - `title` string, nullable, required
    - `event` string, required
    - `txid` string, nullable, required
    - `valueCents` integer, required
    - `currency` string, nullable, required
    - `createdAt` string, date-time, required
  - `byEvent` object[], required: Per-event totals, highest count first.
    - `event` string, required
    - `count` integer, required
    - `valueCents` integer, required
  - `unavailable` boolean: Present and true when the conversions store could not be read; the numbers are then empty.

## Other responses

- `401`: No valid API key and no dashboard session. Messages: "Invalid or revoked API key", "API key has expired", "Unauthorized. Sign in to the dashboard, or pass a Bearer API key in the Authorization header.", or "Unauthorized" when the session lookup itself fails. An MCP OAuth token lands here too.
- `403`: Free plan (code `UPGRADE_REQUIRED`) or a suspended account.
- `429`: More than 60 requests in the window. Counted per client IP. This 429 carries no Retry-After header.
- `500`: The links lookup failed (for example a non-UUID linkId).

---

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