---
title: "Create a manual payout"
method: POST
path: "/payouts/manual"
tags: ["Payouts"]
---

# Create a manual payout

`POST /payouts/manual`

## Request

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

Creates a manual payout for a creator: an arbitrary `amount` (major units) outside campaign billing windows, such as a one-off bonus or a correction. Mint the `id` yourself (`orgpay_` plus 12 alphanumeric characters); it is the idempotency key, so a retry with the same `id` and the same details returns the original payout instead of paying twice, and the same `id` with different details is a 409. `campaignId` is optional and must be the campaign of the creator's current active assignment, in that campaign's currency — read it from `GET /payouts/manual/context`. `payoutProvider="manual"` (the default) records a payment you already made elsewhere; `payoutProvider="talentir"` creates a Talentir payout that waits for approval by a member of your Talentir team in the dashboard — this route never approves one. Creators hired through the marketplace must be paid with `payoutProvider="talentir"` in every currency Talentir supports.

## Request body

- object
  - `id` string, required: Payout id minted by the caller (orgpay_ plus 12 alphanumeric characters) — the idempotency key. Re-send the same id to retry: the same details return the original payout, different details are a 409.
  - `creatorId` string, required: Organization creator ID with orgcre_ prefix
  - `campaignId` string, nullable: Campaign ID with orgcamp_ prefix
  - `amount` number, required: Amount in major units of `currency`, e.g. 150.5 for 150.50.
  - `currency` 'USD' | 'EUR' | 'CHF' | 'GBP' | 'CNY' | 'JPY' | 'KRW' | 'THB' | 'IDR' | 'VND' | 'RUB', required
  - `description` string: Optional invoice description shown to the creator: the payout's single line-item title and quoted in their payout email. Defaults to "Manual Payout".
  - `reference` string: Optional payout reference for reconciliation, invoicing, or external bookkeeping.
  - `notes` string: Optional internal payout notes visible to organization members.
  - `payoutProvider` 'manual' | 'talentir': "manual" records a payment made outside viral.app; "talentir" creates a Talentir payout that waits for approval in the dashboard.

## Response `200`

OK

- object
  - `success` unknown, required
  - `payoutId` string, required: Payout ID with orgpay_ prefix
  - `providerPayoutId` string, nullable

## Other responses

- `400`: 400
- `401`: 401
- `402`: 402
- `404`: 404
- `408`: 408
- `409`: 409
- `412`: 412
- `422`: 422
- `429`: 429
- `500`: 500
- `502`: 502

---

[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)
