Skip to main content
POST
Error

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

placementId
string<uuid>
required

Response

Success

id
string<uuid>
required
campaignId
string<uuid>
required
channelId
integer<int64>
required
avgReach
integer<int64>
required

Average views of an ordinary post on this channel

plannedDate
string<date>
required
approvalMode
enum<string>
required
Available options:
OPERATOR,
USER
status
enum<string>
required
Available options:
NEW,
AWAITING_CONTACT_VERIFICATION,
IN_PROGRESS,
AWAITING_CREATIVE_APPROVAL,
PENDING_APPROVAL,
APPROVED,
PAYMENT_PENDING,
PAYMENT_FAILED,
PAID,
AWAITING_POST,
PUBLISHED,
VERIFIED,
COMPLETED,
REJECTED,
ESCALATED,
CANCELLED,
BREACH
originalAdCopy
string
required

The campaign's own ad copy, carried here so the card can show the diff on its own

createdAt
string<date-time>
required
updatedAt
string<date-time>
required
channelUsername
string | null
channelTitle
string | null
subscribers
integer<int64> | null

The channel's subscriber count as measured by the matching parser

avgAdReach24h
integer<int64> | null

Average views an ad post collects in its first 24h; null for channels with no measured ad posts

expectedViews
integer<int64> | null

Views one ad post here is expected to reach — avgAdReach24h, or avgReach when it was never measured. The same number the campaign's expected-views total and the per-deal price cap are computed from. Null (never 0) when the channel carries no usable reach at all.

views
integer<int64> | null

Views this placement's own published post actually collected, as the parser measured it — the measured counterpart of expectedViews, which is only a forecast from the channel's statistics. Null until the post is published and the first snapshot arrives; it then grows towards the figure reached ~48h after publication and stops there.

reactions
integer<int64> | null

Reactions the same post collected, measured in the same snapshot. Null until the post is published and a snapshot arrives; there is no forecast counterpart for this one.

clicks
integer<int64> | null

Times a link in this placement's own post was followed. Every link in a published post is one of ours, so this is measured directly rather than forecast — there is no counterpart to expectedViews here. Read next to views: views are the people the post reached, clicks are the ones who acted. Null (never 0) while nothing has been clicked.

uniqueClicks
integer<int64> | null

The same clicks counted one per IP, so clicks minus uniqueClicks is the readers who came back. Null (never 0) while nothing has been clicked.

managerUsername
string | null
agreedCost
string | null
Pattern: ^-?\d+(\.\d{1,6})?$
Example:

"125.500000"

agreedDate
string<date> | null
agreedSummary
string | null
rejectionReason
string | null
escalationReason
string | null
escalationUrgency
string | null
proposedAdCopy
string | null

The manager's variant awaiting a decision; set only while AWAITING_CREATIVE_APPROVAL. Ad-copy markup, exactly like originalAdCopy: he types plain text into Telegram and the backend writes his formatting back into our syntax, so both texts render in the same editor and the diff is between two texts of one kind.

approvedAdCopy
string | null

The manager's variant once approved — the text actually published for this placement, in ad-copy markup like every other ad text