---
title: "Submit a post"
method: POST
path: "/public/creator-campaigns/{token}/submissions"
tags: ["Creator Portal"]
---

# Submit a post

`POST /public/creator-campaigns/{token}/submissions`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/public/creator-campaigns/{token}/submissions`
- Auth: none required

Submits the link to a post the creator published from a connected account. The post opens
a tracking window and fires `campaign_submission.received` to the operator. About 30
attempts and 10 accepted posts per participant every 10 minutes.

## Request body

- object
  - `url` string, required: The public link to the post.

## Response `201`

Submitted.

- object
  - `submission` CreatorPortalSubmission, required
    - `id` string, required
    - `platform` string, required
    - `postId` string, required
    - `url` string, nullable, required
    - `status` 'received' | 'tracking' | 'pending_review' | 'approved' | 'rejected' | 'expired' | 'withdrawn', required
    - `submittedAt` string, date-time, required
    - `publishedAt` string, date-time, nullable, required
    - `views` integer, required: Latest view count read for the post.
    - `engagements` integer, nullable, required: The campaign engagement types summed at the latest read. Null until the post is read.
    - `viewsFromAds` integer, nullable, required: Views that came from ads the creator ran, on YouTube and X. Null where the platform does not report them or before the first read.
    - `earnedCents` integer, required
    - `rejectReason` string, nullable, required
    - `flags` string[], required: Creator-safe flags only. Every other review flag shows as `under_review`.
    - `trackingEndsAt` string, date-time, nullable, required

## Other responses

- `400`: The post cannot be submitted: 400 `invalid_field_value`. - `param: url`: the link is not a post of an accepted platform, or the post was published before the campaign started or longer ago than the campaign accepts. - The post is from an account past the campaign's `caps.maxAccountsPerParticipant` ("This campaign allows 2 connected accounts."). Only the first accounts the creator connected, up to that count, can submit.
- `403`: The creator has not connected an account on that platform yet (`insufficient_permissions`, "Connect your TikTok account first, then submit the post again").
- `404`: The link is invalid or expired, or the post is not from an account the creator connected (`resource_not_found`).
- `409`: The invite is not accepted yet, the campaign is not accepting posts (not started, paused or ended), the post was already submitted, today's per-participant post limit is reached, or the participation was suspended or removed (`invalid_resource_state`; the message says which).
- `429`: Too many attempts from this link or IP address (`rate_limited`). Wait a few minutes and try again.

## Changes

- **2026-10-30** `c319eb5d95b6`: 1 info
  - added the required property `submission/viewsFromAds` to the response with the `201` status
- **2026-10-30** `172499a6a5e9`: 1 info
  - added the required property `submission/engagements` to the response with the `201` status
- **2026-10-28** `174ae3ba4b13`: 2 info
  - api tag `Creator Portal` added
  - api tag `Creator Portal (public)` removed
- **2026-10-28** `8f2c44dd7550`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/public/creator-campaigns/:token/submissions/post.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) - [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/c319eb5d95b6?raw)
