---
title: "List paid creator payouts"
method: GET
path: "/payouts/paid"
tags: ["Payouts"]
---

# List paid creator payouts

`GET /payouts/paid`

## Request

- Base URL: `https://viral.app/api/v1`
- URL: `https://viral.app/api/v1/payouts/paid`
- Auth: API key in header `x-api-key`

Returns completed payout records for finished billing windows.

## Query parameters

- `page` number: Page number (1-based index)
- `perPage` number: Number of items per page (1-100)
- `sortCol` string: Sort column
- `sortDir` 'asc' | 'desc': Sort direction
- `campaignIds` string[]
- `creatorIds` string[]
- `payoutIds` string[]
- `providerPayoutStatus` 'created' | 'approved' | 'completed' | 'deleted' | 'requested' | 'expired'
- `manualOnly` boolean
- `mode` 'data' | 'count' | 'totals'
- `queue` 'paid' | 'awaitingApproval'

## Response `200`

OK

- object
  - `page` integer, required
  - `perPage` integer, required
  - `total` integer, required
  - `data` object[], required
    - `id` string, required
    - `type` 'campaign' | 'manual' | 'partial' | 'video', required
    - `videoCount` integer
    - `windowClosure` object, nullable
      - `kind` 'covered' | 'written_off', required
      - `overpaidAmount` number, required
      - `writtenOffAmount` number, required
    - `campaignId` string, nullable, required: Campaign ID with orgcamp_ prefix
    - `campaignName` string, nullable, required
    - `creatorId` string, required: Organization creator ID with orgcre_ prefix
    - `creatorUserId` string, required
    - `creatorName` string, nullable, required
    - `creatorEmail` string, required
    - `creatorImage` string, nullable, required
    - `accounts` object[]
      - `id` string, required
      - `platform` 'facebook' | 'instagram' | 'tiktok' | 'youtube' | 'snapchat', required
      - `platformAccountId` string, required
      - `isCompetitor` boolean
      - `username` string, nullable, required
      - `displayName` string, nullable
      - `analyticsDataRefreshedAt` string, nullable
    - `campaignStatus` 'upcoming' | 'active' | 'closing' | 'ended': Campaign lifecycle status derived from validity window. upcoming: validFrom in the future; active: started with no end date; closing: started and has an end date in the present/future; ended: end date is in the past.
    - `campaignValidFrom` string, nullable
    - `campaignValidUntil` string, nullable
    - `billingPeriodStart` string, date-time, required
    - `billingPeriodEnd` string, date-time, required
    - `interval` 'day' | 'week' | 'month', required
    - `intervalCount` integer, required
    - `billingAnchor` 'fixed' | 'rolling', required
    - `timeZone` string, required: IANA time zone the campaign's periods and dates follow (a period ends at midnight in this zone). Views are still counted per UTC day.
    - `endedEarly` boolean
    - `startedMidPeriod` boolean
    - `finalPeriod` boolean
    - `amount` number, required
    - `precision` integer, required
    - `currency` 'USD' | 'EUR' | 'CHF' | 'GBP' | 'CNY' | 'JPY' | 'KRW' | 'THB' | 'IDR' | 'VND' | 'RUB', required
    - `lineItems` object[]
      - `title` string, required
      - `amount` number, required
      - `kind` 'adjustment'
      - `percent` number
    - `provider` 'talentir', nullable, required
    - `providerPayoutId` string, nullable, required
    - `providerState` object, nullable, required
    - `providerPayoutStatus` 'created' | 'approved' | 'completed' | 'deleted' | 'requested' | 'expired', nullable, required
    - `reissuedFromPayoutId` string, nullable: Payout ID with orgpay_ prefix
    - `reissuedByPayoutId` string, nullable: Payout ID with orgpay_ prefix
    - `unapprovedAt` string, nullable
    - `withdrawnAt` string, nullable
    - `reference` string, nullable, required
    - `notes` string, nullable, required
    - `paidAt` string, required
    - `paidByUserId` string, nullable, required
    - `paidByUser` object, nullable, required
      - `id` string, required
      - `name` string, nullable, required
      - `email` string, required
      - `image` string, nullable, required
    - `startsAt` string, date-time: The exact instant the period starts: midnight of its first day in the campaign's time zone, with that zone's offset.
    - `endsAt` string, date-time: The exact instant the period ends (exclusive): midnight after its last day in the campaign's time zone.
  - `totalsByCurrency` object[]
    - `currency` string, required
    - `amount` number, required

## Other responses

- `400`: 400
- `401`: 401
- `402`: 402
- `404`: 404
- `408`: 408
- `429`: 429
- `500`: 500

---

[API](https://skmtc.dev/viral/apis/viral-app-api.md) · [All operations](https://skmtc.dev/viral/apis/viral-app-api/llms.txt) · [OpenAPI document](https://skmtc.dev/viral/apis/viral-app-api/revisions/31e97fa79ef1?raw)
