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

Approve campaign submission

Approves a tracking or pending_review submission of an active campaign and fires campaign_submission.approved. The Zernio dashboard offers Approve only on pending_review (a post that needs a decision) and waits for tracking posts to get there; the API accepts tracking so an integration can approve early. What the post earned so far moves to owed and is held for the campaign's holdDays; later earnings post straight to owed. A per-post campaign pays perApprovedPostCents here. Any other state answers 409. The same post approved in another of your campaigns also answers 409 (invalid_resource_state, "This post is already approved in another campaign of yours."), so one post never earns twice.


POST
/v1/creator-campaigns/{campaignId}/submissions/{submissionId}/approve

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.

submissionId*string

Submission 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

Response Body

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.approveCampaignSubmission({  path: {    campaignId: 'campaign_abc123',    submissionId: 'submission_abc123',  },});console.log(data);
{  "submission": {    "id": "string",    "campaignId": "string",    "participantId": "string",    "creatorId": "string",    "accountId": "string",    "platform": "tiktok",    "platformPostId": "string",    "platformPostUrl": "string",    "externalPostId": "string",    "trackingWindowId": "string",    "mediaHash": "string",    "submittedAt": "2019-08-24T14:15:22Z",    "postPublishedAt": "2019-08-24T14:15:22Z",    "status": "received",    "rejectReason": "string",    "reviewRound": 0,    "reviewedBy": "string",    "reviewedAt": "2019-08-24T14:15:22Z",    "viewsAtSubmission": 0,    "viewsLatest": 0,    "viewsEligible": 0,    "lastAccruedViews": 0,    "accruedCents": 0,    "approvedCents": 0,    "authenticityScore": 0,    "authenticityConfidence": 0,    "flags": [      {        "code": "duplicate_media",        "detail": "string",        "raisedAt": "2019-08-24T14:15:22Z"      }    ],    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z",    "creator": {      "id": "string",      "displayName": "string"    },    "authenticity": {      "score": 0,      "confidence": 0,      "reasons": [        null      ]    },    "earnedCents": 0,    "releasedCents": 0,    "paidOutCents": 0,    "window": {      "id": "string",      "endsAt": "2019-08-24T14:15:22Z",      "status": "string"    },    "post": {      "thumbnailUrl": "string",      "caption": "string",      "accountHandle": "string",      "publishedAt": "2019-08-24T14:15:22Z"    }  }}
Was this page helpful?

Activate creator campaign

Moves a `draft` or `paused` campaign to `active`, where creators can join and submit posts and tracked views accrue earnings. Needs at least one platform and a budget above zero; any other starting state answers 409.

Close creator campaign

Closes an `active` or `paused` campaign for good and fires `creator_campaign.closed`. Open tracking windows are cancelled. A pool campaign is split among participants at this moment by their approved eligible views, so closing a pool campaign answers 409 while any post still awaits review. A campaign also closes by itself once `endsAt` passed and every tracking window had its final read.