Zernio
APIFor you
Zernio
APIFor you
API Reference

Creator Campaigns

List campaign ledgerGETList campaign participantsGETList campaign payablesGETList payout batchesGETList campaign submissionsGETList creator campaignsGETCreate campaign adjustmentPOSTCreate campaign invite linkPOSTInvite campaign participantPOSTPay creators with one card paymentPOSTCreate creator campaignPOSTGet campaign participantGETGet campaign reportGETGet campaign submissionGETGet creator campaignGETUpdate creator campaignPATCHActivate creator campaignPOSTApprove campaign submissionPOSTClose creator campaignPOSTPause creator campaignPOSTRaise creator campaign budgetPOSTReinstate campaign participantPOSTReject campaign submissionPOSTRemove campaign participantPOSTReopen campaign submissionPOSTSettle campaign participantPOSTSuspend campaign participantPOST
Dashboard
OverviewPlatformsAPI ReferenceResources
Creator Campaigns

Settle campaign participant

Records a payout of the participant's payable balance and fires campaign_payout.settled. Omit amountCents to settle the whole payable balance; an amount above it answers 400, and nothing payable answers 409.

  • none settlement: records a payout you made elsewhere.
  • external settlement: pay from your own rails when campaign_payout.payable fires, then call this with your payout id in externalReference (required in this mode).
  • treasury settlement: transfers the amount from your Zernio balance to the creator's connected Stripe account, then records it with the Stripe transfer id as externalReference. The transfer fee (4%, $0.50 minimum) is added on top: the creator receives the full amount and your balance is debited totalCents. The creator must have finished payout setup from their campaign page (409 otherwise), and a balance that does not cover the amount plus the fee answers 402. While Stripe confirms the transfer the amount sits in the participant's settling balance: a reject in that window cannot reverse it. If Stripe refuses the transfer the amount returns to payable; if Stripe does not answer, the amount stays in settling and the next settle call for this participant finishes that payout first (even with nothing payable left). A retry asking for a different amountCents than the payout in progress answers 409 with the amount in progress, and a settle while another request is still waiting on Stripe for the same payout answers 409 ("This payout is being sent to Stripe right now. Try again in a minute."). A payout Stripe has not confirmed after 24 hours answers 409 ("This payout is being confirmed with Stripe. Try again after the next reconciliation (within 24 hours).") until the daily reconciliation finishes it: settled if Stripe made the transfer, returned to payable if it did not. Set recordOnly: true to record a payout you made yourself instead of moving money through the treasury (the webhook then carries recorded: true). A treasury payout needs an owner, admin or billing admin, signed in or through a full-access key they created (403 otherwise); recording with recordOnly does not. A creator held by an unfinished payout batch answers 409 ("This creator is in a card payout that is not finished yet.").

Send an Idempotency-Key so a retry never records the payout twice.


POST
/v1/creator-campaigns/{campaignId}/participants/{participantId}/settle

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Path Parameters

campaignId*string

Campaign ID.

participantId*string

Participant ID.

Header Parameters

Idempotency-Key?string

Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. A request cut off mid-handler (for example by a function timeout) can leave its key in progress, answering 409 until the key expires after 24 hours.

Lengthlength <= 255

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.creatorcampaigns.settleCampaignParticipant({  path: {    campaignId: 'campaign_abc123',    participantId: 'participant_abc123',  },  body: {    amountCents: 1,    externalReference: 'string',    recordOnly: false,  },});console.log(data);
{  "settlement": {    "entryId": "string",    "participantId": "string",    "amountCents": 0,    "externalReference": "string",    "payableCents": 0,    "settledAt": "2019-08-24T14:15:22Z",    "transferId": "string",    "feeCents": 0,    "totalCents": 0  }}
Was this page helpful?

Reopen campaign submission

Puts a rejected submission back to `pending_review` so it can be decided again. Its tracking window resumes, so it works only while that window has not ended; otherwise 409 `invalid_resource_state` ("This post's tracking window has ended."). A post that earned money which was already paid out cannot be reopened, and neither can a post of a closed campaign. Reopening a submission that is already `pending_review` returns it unchanged; any other status answers 409. No webhook fires.

Suspend campaign participant

Suspends an `active` participant: they can no longer submit posts. Any other status answers 409.

amountCents?integer

Defaults to the whole payable balance.

Range1 <= value
externalReference?string

Your payout id. Required when the campaign settles externally.

Length1 <= length <= 200
recordOnly?boolean

Treasury campaigns only: record a payout you already made outside Zernio, without moving money. Ignored on other settlement modes, which always record.