---
title: "Get the affiliate performance figures"
method: GET
path: "/affiliate/performance/"
tags: ["affiliate"]
---

# Get the affiliate performance figures

`GET /affiliate/performance/`

## Request

- Base URL: `https://api.getoneprofile.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getoneprofile.ai/affiliate/performance/`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

The overview's whole measurement surface in one read: the click, signup, conversion and earnings funnel over a window with each step against the equally long window before it; the rates over those steps; lifetime gross, clawed-back and net commission; where the referral roster stands; when pending commission matures; and what the next monthly payout run would send. A rate whose denominator is too small to state honestly comes back null rather than as a number nobody should act on.

## Query parameters

- `days` integer: The window these figures cover.

## Response `200`

Successful Response

- AffiliatePerformanceReadSchema: Everything the affiliate overview measures over one window.
  - `active_count` integer, required: Referrals still inside their commission window.
  - `average_commission_cents` integer, nullable, required: Lifetime gross commission per paying referral. Null with none yet.
  - `clears_minimum_on` string, date, nullable, required: The day the payable balance first clears the payout minimum on that schedule. Null when it already has, or when it never does.
  - `clicks` AffiliateTrendReadSchema, required: One metric over a window, against the window immediately before it.
    - `current` integer, required
    - `previous` integer, required
  - `conversion_rate` number, nullable, required: Paying referrals per signup, lifetime, 0-1. Null below the honesty floor.
  - `conversions` AffiliateTrendReadSchema, required: One metric over a window, against the window immediately before it.
    - `current` integer, required
    - `previous` integer, required
  - `days` integer, required: The window length these figures cover.
  - `earned_cents` AffiliateTrendReadSchema, required: One metric over a window, against the window immediately before it.
    - `current` integer, required
    - `previous` integer, required
  - `epc_cents` integer, nullable, required: Commission earned per click over the window. Null below the honesty floor.
  - `held_cents` integer, required: Money in a payout waiting on human review. Still counted in the available balance until it is released.
  - `last_commission_at` string, date-time, nullable, required
  - `last_conversion_at` string, date-time, nullable, required
  - `last_signup_at` string, date-time, nullable, required
  - `lifetime_clawed_back_cents` integer, required: What refunds and disputes took back, as a positive magnitude.
  - `lifetime_gross_cents` integer, required
  - `lifetime_net_cents` integer, required
  - `never_paid_count` integer, required: Referrals that have not started a paid plan.
  - `next_payout_blocker` string, nullable, required: When blocked, which gate: identity_not_verified, no_payout_email or destination_hold.
  - `next_payout_cents` integer, required: What that run would send on today's numbers plus what matures before it.
  - `next_payout_on` string, date, required: The date of the next monthly payout run.
  - `next_payout_status` 'paused' | 'unavailable' | 'under_review' | 'blocked' | 'below_minimum' | 'scheduled', required: What the next monthly run will do with this affiliate's balance. Derived from the same gates the payout engine applies, so the sentence the dashboard prints and the decision the run makes cannot disagree. Every "your payout goes out on the 1st" used to be unconditional, which made it false for a first payout (held for a human), a blocked affiliate (no identity check, no PayPal address, a fresh address inside its hold), a suspended or banned account, a balance under the minimum, and the whole period the program ships with payouts switched off.
  - `signup_rate` number, nullable, required: Signups per click over the window, 0-1. Null when there were too few clicks for the figure to mean anything.
  - `signups` AffiliateTrendReadSchema, required: One metric over a window, against the window immediately before it.
    - `current` integer, required
    - `previous` integer, required
  - `upcoming_maturities` AffiliateMaturityReadSchema[], required: The next days pending commission becomes payable on, soonest first.
    - `amount_cents` integer, required
    - `day` string, date, required
    - `running_available_cents` integer, required: The payable balance once this day has matured, absent clawbacks and payouts.
  - `window_closed_count` integer, required: Referrals whose commission window has ended.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `422`: Invalid request made to the API.
- `500`: Internal server error.
- `502`: Bad gateway error.
- `503`: Service unavailable.

---

[API](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile.md) · [All operations](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/llms.txt) · [OpenAPI document](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/revisions/4a6bd71e3f02?raw)
