API reference

Every public endpoint, generated from the API's own code. JSON in, JSON out.

Basics

  • Base URL: https://api.72-62-237-85.sslip.io. Every path starts with /v1.
  • Authentication: Authorization: Bearer fe_live_… (see Authentication).
  • Request bodies are JSON (Content-Type: application/json). Ids are UUIDs. Times are ISO 8601; responses are in UTC.
  • Some lists take a limit; posts can also be filtered by status and time range. There is no cursor pagination yet.
  • Dubbing and clips run in the background: create, then poll the GET endpoint until the status is ready or failed.
  • Rate limits: no request quota today. A workspace can have at most 40 clips processing at once (429 beyond that). Please poll background jobs every 10 seconds or more.
  • Interactive explorer generated from the same code: https://api.72-62-237-85.sslip.io/docs.
A few endpoints only accept a signed-in user in the app (workspaces, members, API keys). They are not part of the public API and are not listed here.

Accounts

Workspace settings, connected social accounts and brands.

GET/v1/accounts

List Accounts

Accounts of this workspace. `include_removed=true` also lists the ones removed from it (to restore them).

API keys: allowed. Signed-in users: any member.

Parameters

  • brand_iduuid | null

    Query string.

  • include_removedbooleandefault false

    Query string.

Response 200: AccountOut[]

POST/v1/accounts/connect

Connect Account

Returns an authorization URL. Open it in the browser of the account owner.

API keys: allowed. Signed-in users: owner, admin.

Request body: ConnectRequest

Response 200: ConnectOut

Errors

  • 402 Over the plan's accounts: confirm an extra account in the dashboard (Plan & credits) or upgrade.
  • 402 No active plan: choose a plan first (credits only add to a plan)
  • 403 Free early access is limited to its included accounts.

GET/v1/accounts/dub-targets

Dub Targets

Which accounts get each language version: linked accounts first, else every account in that language.

API keys: allowed. Signed-in users: any member.

Parameters

  • sourceuuid[]default []

    Query string. Accounts the original post goes to

  • languagesstring[]default []

    Query string. Languages to dub into

Response 200: map<string, string[]>

POST/v1/accounts/sync

Sync Accounts

API keys: allowed. Signed-in users: any member.

Parameters

  • brand_iduuid | null

    Query string.

Response 200: AccountOut[]

PATCH/v1/accounts/{account_id}

Update Account

API keys: allowed. Signed-in users: any member.

Parameters

  • account_iduuidrequired

    In the path.

Request body: AccountUpdate

Response 200: AccountOut

Errors

  • 404 Account not found
  • 422 Unknown timezone

DELETE/v1/accounts/{account_id}

Remove Account

Remove an account from this workspace. Accounts Fifty Eight connected are disconnected and no longer billed (their scheduled posts that only go to this account are cancelled: pass cancel_scheduled=true to confirm). Accounts shared with other tools are only hidden here and stay connected.

API keys: allowed. Signed-in users: any member.

Parameters

  • account_iduuidrequired

    In the path.

  • cancel_scheduledbooleandefault false

    Query string.

Response 200: AccountRemoved

GET/v1/accounts/{account_id}/pinterest-boards

Pinterest Boards

The boards of a Pinterest account, to pick where a pin goes (`pinterest.board_id` on a post target).

API keys: allowed. Signed-in users: any member.

Parameters

  • account_iduuidrequired

    In the path.

Response 200: PinterestBoardOut[]

GET/v1/accounts/{account_id}/removal

Removal Preview

What removing this account would do, before doing it.

API keys: allowed. Signed-in users: any member.

Parameters

  • account_iduuidrequired

    In the path.

Response 200: AccountRemovalPreview

POST/v1/accounts/{account_id}/restore

Restore Account

Show a hidden (shared) account again.

API keys: allowed. Signed-in users: any member.

Parameters

  • account_iduuidrequired

    In the path.

Response 200: AccountOut

GET/v1/brands

List Brands

API keys: allowed. Signed-in users: any member.

Response 200: BrandOut[]

POST/v1/brands

Create Brand

API keys: allowed. Signed-in users: owner, admin.

Request body: BrandCreate

Response 201: BrandOut

GET/v1/workspace

Get Workspace

The current workspace, its settings and the caller's role in it.

API keys: allowed. Signed-in users: any member.

Response 200: WorkspaceOut

PATCH/v1/workspace

Update Workspace

Change workspace settings (owner or admin). `dubbing_enabled: false` keeps the workspace to publishing and scheduling: dubbing requests are refused with 409 and the console hides dubbing.

API keys: allowed. Signed-in users: owner, admin.

Request body: WorkspaceUpdate

Response 200: OrgOut

Errors

  • 403 Only owners and admins change workspace settings

Media

Upload videos and images before you post or dub them.

POST/v1/media/uploads

Create Upload

Step 1: get an upload URL. Step 2: PUT the file to `upload_url`. Step 3: use `media_id` in a post.

API keys: allowed. Signed-in users: any member.

Request body: UploadRequest

Response 201: UploadOut

Posts

Publish now, schedule or save drafts to one or more accounts.

GET/v1/posts

List Posts

Every post of the workspace, including posts made in other tools on its accounts. The total matching count is returned in the `X-Total-Count` header, for paging with `offset`.

API keys: allowed. Signed-in users: any member.

Parameters

  • statusPostStatus[] | null

    Query string. One or more statuses (repeat the parameter).

  • startdatetime | null

    Query string. Post moment >= start (scheduled, else published, else created)

  • enddatetime | null

    Query string. Post moment < end

  • account_iduuid | null

    Query string.

  • platformstring | null

    Query string.

  • sourcestring | null

    Query string. fifty_eight: made in Fifty Eight. zernio: imported (made in another tool).

  • orderstringdefault "desc"

    Query string. asc/desc by moment, or created: newest first

  • limitintegerdefault 50

    Query string.

  • offsetintegerdefault 0

    Query string.

  • qstring | null

    Query string. Search in the caption

Response 200: PostOut[]

POST/v1/posts

Create Post

Publish now, schedule, or save a draft to one or more connected accounts. Send an `Idempotency-Key` header to safely retry: the same key never creates two posts. Keys starting with `zernio:` are reserved.

API keys: allowed. Signed-in users: any member. Accepts an Idempotency-Key header.

Idempotency-Key header (optional, up to 128 characters): the same key never creates two posts, so you can retry safely.

Request body: PostCreate

Response 201: PostOut

Errors

  • 402 No active plan: choose a plan first (credits only add to a plan)
  • 422 Choose exactly one of publish_now, scheduled_for or draft
  • 422 scheduled_for must be in the future, or has no UTC offset and no timezone
  • 422 An account is disconnected, needs media, or rejects this media or caption length
  • 422 TikTok requires tiktok.consent=true
  • 422 All targeted accounts must belong to the same brand
  • 422 Idempotency keys starting with 'zernio:' are reserved

POST/v1/posts/dubbed

Create Dubbed Post

Publish a video in its language and dub it into others: each language version goes to its own accounts as soon as it is ready (or at the post's time if ready by then). Drafts make the dubs without publishing them.

API keys: allowed. Signed-in users: any member.

Request body: DubbedPostCreate

Response 201: DubbedPostOut

POST/v1/posts/sync

Sync Posts

Import posts made in other tools on the workspace's accounts. Throttled per brand (about once a minute); `force` (owners and admins) shortens that to a few seconds. Runs on its own in the background too.

API keys: allowed. Signed-in users: any member.

Parameters

  • forcebooleandefault false

    Query string.

Response 200: PostSyncOut

Errors

  • 403 force is for owners and admins

GET/v1/posts/{post_id}

Get Post

API keys: allowed. Signed-in users: any member.

Parameters

  • post_iduuidrequired

    In the path.

  • refreshbooleandefault false

    Query string.

Response 200: PostOut

Errors

  • 404 Post not found

PATCH/v1/posts/{post_id}

Update Post

Edit a draft, scheduled, failed or cancelled post: caption (and per-account captions), media, accounts, time. Imported posts can be edited by owners and admins.

API keys: allowed. Signed-in users: any member.

Parameters

  • post_iduuidrequired

    In the path.

Request body: PostUpdate

Response 200: PostOut

Errors

  • 403 Imported posts can be edited by owners and admins only
  • 404 Post, account or media not found
  • 409 Published or publishing posts can't be edited
  • 409 Draft/schedule switch on a post that also goes to accounts outside this workspace
  • 422 A time in the past, a disconnected account, media or caption rejected by a platform
  • 422 Adding a TikTok account requires tiktok_consent=true

POST/v1/posts/{post_id}/cancel

Cancel Post

API keys: allowed. Signed-in users: any member.

Parameters

  • post_iduuidrequired

    In the path.

Response 200: PostOut

Errors

  • 403 Imported posts can be cancelled by owners and admins only
  • 409 Only draft or scheduled posts can be cancelled
  • 409 The post also goes to accounts outside this workspace

POST/v1/posts/{post_id}/duplicate

Duplicate Post

Copy a post (text, media, connected accounts) into a new draft.

API keys: allowed. Signed-in users: any member.

Parameters

  • post_iduuidrequired

    In the path.

Request body: PostDuplicate | null

Response 201: PostOut

Errors

  • 404 Post not found
  • 422 None of the post's accounts is connected, or TikTok needs tiktok_consent=true

POST/v1/posts/{post_id}/publish

Publish Post Now

Publish a draft or scheduled post right away.

API keys: allowed. Signed-in users: any member.

Parameters

  • post_iduuidrequired

    In the path.

Response 200: PostOut

Errors

  • 403 Imported posts can be published by owners and admins only
  • 409 Only draft, scheduled or cancelled posts can be published now
  • 409 The post also goes to accounts outside this workspace
  • 422 An account is disconnected or rejects this media or caption

POST/v1/posts/{post_id}/retry

Retry Post

Retries only the platforms that failed.

API keys: allowed. Signed-in users: any member.

Parameters

  • post_iduuidrequired

    In the path.

Response 200: PostOut

Errors

  • 403 Imported posts can be retried by owners and admins only
  • 409 Only failed or partially published posts can be retried

Dubbing

Dub a video into other languages and publish each version to the right accounts.

GET/v1/localizations

List Localizations

API keys: allowed. Signed-in users: any member.

Parameters

  • limitintegerdefault 50

    Query string.

Response 200: LocalizationOut[]

POST/v1/localizations

Create Localization

Dub a video into several languages. Runs in the background: poll GET /v1/localizations/{id}.

API keys: allowed. Signed-in users: any member.

Request body: LocalizationCreate

Response 201: LocalizationOut

Errors

  • 402 No active plan: choose a plan first (credits only add to a plan)
  • 402 Not enough credits (the message says how many are needed, and whether an automatic top-up started)
  • 404 Media not found
  • 409 Dubbing is turned off for this workspace (PATCH /v1/workspace to turn it on)
  • 422 Only videos can be dubbed; at most 16 languages; pick a language other than the source

GET/v1/localizations/{job_id}

Get Localization

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

Response 200: LocalizationOut

Errors

  • 404 Localization not found

POST/v1/localizations/{job_id}/lipsync

Lipsync Localization

Lip-sync ready languages of a dub (never included in a plan): +1.5 credits per second of video, per language (rounded up), taken now and refunded if it fails. The dubbed version stays available; poll the dub for the result.

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

Request body: LipsyncIn

Response 200: LocalizationOut

POST/v1/localizations/{job_id}/publish

Publish Localization

Publish each language version to the accounts whose publishing language matches.

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

Request body: LocalizationPublish

Response 201: PostOut[]

Errors

  • 422 No language is ready yet
  • 422 No connected account matches these languages: set each account's publishing language

POST/v1/localizations/{job_id}/subtitles

Restyle Localization

Re-render the burned subtitles of a ready dub with another style. Uses no credits; poll the dub until it's ready again.

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

Request body: SubtitleRestyle

Response 200: LocalizationOut

Errors

  • 404 Localization not found
  • 409 The dub isn't ready yet, or no language is ready
  • 422 Unknown preset, font, colour, position or size

PATCH/v1/localizations/{job_id}/variants/{language}

Update Caption

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

  • languagestringrequired

    In the path.

Request body: VariantCaptionUpdate

Response 200: LocalizationOut

Errors

  • 404 Localization or language not found

Clips

Cut extracts from a long video.

GET/v1/clips

List Clips

API keys: allowed. Signed-in users: any member.

Parameters

  • media_iduuid | null

    Query string.

  • limitintegerdefault 100

    Query string.

Response 200: ClipOut[]

POST/v1/clips

Create Clips

Cut extracts from an uploaded video. Processed in the background: poll GET /v1/clips.

API keys: allowed. Signed-in users: any member.

Request body: ClipsCreate

Response 201: ClipOut[]

Errors

  • 404 Media not found
  • 422 Only videos can be clipped; each clip is at most 180 s
  • 429 Too many clips in progress

Best times

What the best-time optimizer learned per account.

GET/v1/timing

Get Timing

What the best-time optimizer has learned per account, and its latest reschedules.

API keys: allowed. Signed-in users: any member.

Response 200: TimingInsights

Automations

Comment-to-DM automations: keyword comments answered by DM or public reply.

GET/v1/automations

List Automations

Comment-to-DM automations of the workspace, with their totals.

API keys: allowed. Signed-in users: any member.

Response 200: AutomationOut[]

POST/v1/automations

Create Automation

Reply to keyword comments with a DM (Instagram, Facebook) and/or a public reply. One reply per commenter. Write up to 3 public replies in `public_replies`: one is picked at random for each comment. Optional conversation steps before the DM with the link (Instagram, Facebook): `opening_dm` (a first DM with a button), `follow_gate` (Instagram: ask them to follow first), `email_capture` (ask for their email), and `follow_up` (one more DM if the link wasn't opened). `status: draft` saves it without going live; `post_scope: next_post` waits for the account's next post.

API keys: allowed. Signed-in users: any member.

Request body: AutomationCreate

Response 201: AutomationOut

Errors

  • 404 Account not found
  • 403 Story automations need the Creator plan or above, live automations the Pro plan or above
  • 409 Reconnect this account first
  • 422 Write a DM, a public reply, or both; DMs work on Instagram and Facebook only
  • 422 A link button needs a title, an http(s) URL and a DM

GET/v1/automations/native

List Native Automations

Imported automations that already run in another tool for this workspace's accounts (linked profiles). They are billed outside Fifty Eight and never count against the auto-DM quota.

API keys: allowed. Signed-in users: any member.

Response 200: NativeAutomationOut[]

PATCH/v1/automations/native/{native_id}

Update Native Automation

Pause, resume or edit an imported automation.

API keys: allowed. Signed-in users: any member.

Parameters

  • native_idstringrequired

    In the path.

Request body: NativeAutomationUpdate

Response 200: NativeAutomationOut

Errors

  • 404 Automation not found on this workspace's accounts
  • 422 A link button needs both a title and a URL

DELETE/v1/automations/native/{native_id}

Delete Native Automation

API keys: allowed. Signed-in users: any member.

Parameters

  • native_idstringrequired

    In the path.

Errors

  • 404 Automation not found on this workspace's accounts

GET/v1/automations/usage

Automation Usage

Replies used this month against the plan's quota, per-video limit and add-ons.

API keys: allowed. Signed-in users: any member.

Response 200: AutomationUsageOut

GET/v1/automations/{automation_id}

Get Automation

API keys: allowed. Signed-in users: any member.

Parameters

  • automation_iduuidrequired

    In the path.

Response 200: AutomationOut

Errors

  • 404 Automation not found

PATCH/v1/automations/{automation_id}

Update Automation

Change the texts, steps, keywords or post, or set the status (live, paused, draft). Only the fields sent change; a step set to null is removed.

API keys: allowed. Signed-in users: any member.

Parameters

  • automation_iduuidrequired

    In the path.

Request body: AutomationUpdate

Response 200: AutomationOut

Errors

  • 404 Automation not found
  • 422 Invalid combination

DELETE/v1/automations/{automation_id}

Delete Automation

API keys: allowed. Signed-in users: any member.

Parameters

  • automation_iduuidrequired

    In the path.

Errors

  • 404 Automation not found

GET/v1/automations/{automation_id}/emails

Automation Emails

Email addresses collected by this automation, oldest first.

API keys: allowed. Signed-in users: any member.

Parameters

  • automation_iduuidrequired

    In the path.

Response 200: AutomationEmailOut[]

GET/v1/automations/{automation_id}/emails.csv

Automation Emails Csv

The same, as a CSV file (email, name, username, collected_at).

API keys: allowed. Signed-in users: any member.

Parameters

  • automation_iduuidrequired

    In the path.

GET/v1/automations/{automation_id}/events

Automation Events

Latest comments this automation saw, and what it did (sent, skipped and why, failed).

API keys: allowed. Signed-in users: any member.

Parameters

  • automation_iduuidrequired

    In the path.

  • limitintegerdefault 50

    Query string.

Response 200: AutomationEventOut[]

Errors

  • 404 Automation not found

GET/v1/automations/{automation_id}/history

Automation History

Everything this automation did, newest first: comments answered or skipped, and each step of each conversation (opening DM, tap, follow check, email, link, click, follow-up).

API keys: allowed. Signed-in users: any member.

Parameters

  • automation_iduuidrequired

    In the path.

  • limitintegerdefault 100

    Query string.

  • beforedatetime | null

    Query string. Older than this time, to page back

Response 200: AutomationActivityOut[]

Credits & billing

Credits (the one currency), costs, estimates, history and plans. Buying happens in the dashboard.

GET/v1/account-groups

List Groups

Accounts linked as language versions of the same presence (e.g. @atlas FR, @atlas.en EN).

API keys: allowed. Signed-in users: any member.

Response 200: AccountGroupOut[]

POST/v1/account-groups

Create Group

Link accounts as language versions. An account linked elsewhere moves to this group.

API keys: allowed. Signed-in users: any member.

Request body: AccountGroupCreate

Response 201: AccountGroupOut

GET/v1/account-groups/suggestions

Group Suggestions

Unlinked accounts that look like language versions of each other (same platform, similar username).

API keys: allowed. Signed-in users: any member.

Response 200: AccountGroupSuggestion[]

PATCH/v1/account-groups/{group_id}

Rename Group

API keys: allowed. Signed-in users: any member.

Parameters

  • group_iduuidrequired

    In the path.

Request body: AccountGroupUpdate

Response 200: AccountGroupOut

DELETE/v1/account-groups/{group_id}

Delete Group

Unlink every account of the group. The accounts themselves are not touched.

API keys: allowed. Signed-in users: any member.

Parameters

  • group_iduuidrequired

    In the path.

POST/v1/account-groups/{group_id}/members

Add Member

API keys: allowed. Signed-in users: any member.

Parameters

  • group_iduuidrequired

    In the path.

Request body: AccountGroupMember

Response 200: AccountGroupOut

DELETE/v1/account-groups/{group_id}/members/{account_id}

Remove Member

Unlink one account. A group left with a single account is dissolved.

API keys: allowed. Signed-in users: any member.

Parameters

  • group_iduuidrequired

    In the path.

  • account_iduuidrequired

    In the path.

GET/v1/billing/packs

List Packs

API keys: allowed. Signed-in users: any member.

Response 200: Pack[]

GET/v1/billing/plans

List Plans

API keys: allowed. Signed-in users: any member.

Response 200: PlansOut

GET/v1/billing/wallet

Get Wallet

Deprecated: see /v1/credits and /v1/credits/history. Legacy USD ledger lines (before credits).

API keys: allowed. Signed-in users: any member.

Response 200: WalletDetailOut

GET/v1/credits

Get Credits

The credit balance, what the plan adds each month, what everything costs, and the automatic top-up settings with this month's budget.

API keys: allowed. Signed-in users: any member.

Response 200: CreditOut

GET/v1/credits/estimate

Credit Estimate

What a dub will cost before starting it ("This dub: N credits").

API keys: allowed. Signed-in users: any member.

Parameters

  • secondsintegerrequired

    Query string. Length of the video in seconds.

  • languagesintegerdefault 1

    Query string.

  • lipsyncbooleandefault false

    Query string.

  • previewbooleandefault false

    Query string.

Response 200: CreditEstimateOut

GET/v1/credits/history

Credit History

Every credit movement, newest first, with the balance right after it, why it happened and what it is linked to (a dub, a payment, an auto-DM, a day of account fees).

API keys: allowed. Signed-in users: any member.

Parameters

  • limitintegerdefault 25

    Query string.

  • offsetintegerdefault 0

    Query string.

Response 200: CreditHistoryOut

GET/v1/subtitles

List Subtitles

API keys: allowed. Signed-in users: any member.

Parameters

  • limitintegerdefault 50

    Query string.

Response 200: SubtitleOut[]

POST/v1/subtitles

Create Subtitles

Burn subtitles into a video (its own language, plus optional translations), without dubbing. Included in every plan (no credits). Runs in the background: poll GET /v1/subtitles/{id}. With `publish`, each version publishes itself once ready.

API keys: allowed. Signed-in users: any member.

Request body: SubtitleCreate

Response 201: SubtitleOut

GET/v1/subtitles/{job_id}

Get Subtitles

Status of each language, and while waiting: the queue position and an estimated time.

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

Response 200: SubtitleOut

POST/v1/subtitles/{job_id}/cancel

Cancel Subtitles

Stop subtitles that haven't started burning yet.

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

Response 200: SubtitleOut

POST/v1/subtitles/{job_id}/confirm

Confirm Subtitles

The transcript is right: translate it (if asked) and burn every language.

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

Request body: SubtitleConfirm

Response 200: SubtitleOut

GET/v1/subtitles/{job_id}/transcript

Get Transcript

The transcript as short timed lines (the original language by default).

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

  • languagestring | null

    Query string.

Response 200: TranscriptOut

PATCH/v1/subtitles/{job_id}/transcript

Edit Transcript

Correct lines while the job waits for review. A line keeping its number of words keeps their timings.

API keys: allowed. Signed-in users: any member.

Parameters

  • job_iduuidrequired

    In the path.

Request body: TranscriptEdit

Response 200: TranscriptOut

Support

Send a request to the Fifty Eight team and follow its status.

GET/v1/support/tickets

My Tickets

Your requests in this workspace, newest first.

API keys: allowed. Signed-in users: any member.

Response 200: TicketOut[]

POST/v1/support/tickets

Create Ticket

Send a request to the Fifty Eight team. Your workspace is attached automatically.

API keys: allowed. Signed-in users: any member.

Request body: TicketIn

Response 201: TicketOut

Errors

  • 404 The attached screenshot isn't in this workspace.
  • 422 Message too short, or no email to answer (API keys must send `email`).
  • 429 Too many requests in the last hour.

Objects

Request and response shapes used above.

AccountGroupCreate

  • namestringrequiredmin length 1, max length 120
  • account_idsuuid[]requiredmin items 2, max items 20

AccountGroupMember

  • account_iduuidrequired

AccountGroupOut

Accounts that are language versions of one presence (e.g. @atlas in French, @atlas.en in English).

  • iduuidrequired
  • namestringrequired
  • account_idsuuid[]required
  • created_atdatetimerequired

AccountGroupSuggestion

  • namestringrequired
  • platformstringrequired
  • account_idsuuid[]required

AccountGroupUpdate

  • namestringrequiredmin length 1, max length 120

AccountOut

  • iduuidrequired
  • brand_iduuidrequired
  • platformstringrequired
  • usernamestring | nullrequired
  • display_namestring | nullrequired
  • localestring | nullrequired
  • optimize_timingbooleanrequired
  • timezonestring | nullrequired
  • statusAccountStatusrequired
  • group_iduuid | null

    Language-version group this account belongs to.

  • removed_atdatetime | null

    Set when removed from this workspace.

AccountRemovalPreview

What removing an account does, so the confirmation can say it before anything happens.

  • managedbooleanrequired

    True: disconnected at the provider and no longer billed. False: only hidden here.

  • scheduled_posts_only_this_accountintegerrequired
  • scheduled_posts_sharedintegerrequired
  • in_groupbooleanrequired

AccountRemoved

  • removedbooleanrequired
  • managedbooleanrequired
  • cancelled_postsintegerrequired

AccountStatus

One of: connected, disconnected, paused

AccountUpdate

Only the fields you send are changed.

  • localestring | nullmax length 16

    BCP-47, e.g. es-ES

  • optimize_timingboolean | null

    Let Fifty Eight test and pick the best posting times for this account

  • timezonestring | nullmax length 64

    IANA zone of the audience, e.g. Europe/Paris

AutoTopupOut

  • enabledbooleanrequired
  • threshold_creditsintegerrequired

    A top-up starts when the balance falls below this.

  • amount_centsintegerrequired

    What each automatic top-up charges.

  • amount_creditsintegerrequired

    Credits each automatic top-up adds.

  • has_payment_methodbooleanrequired

    A card is saved (after a first top-up).

  • pendingbooleanrequired

    A top-up is being confirmed by the payment provider.

AutomationActivityOut

One step in an automation's history.

  • kindstringrequired

    comment_answered | comment_skipped | comment_failed | opening_sent | tapped | follow_asked | follow_confirmed | follow_unknown | email_asked | email_invalid | email_collected | link_sent | link_clicked | followup_sent | followup_skipped | expired | step_failed | bound_to_post

  • contact_namestring | null
  • detailstring | null
  • created_atdatetimerequired

AutomationCreate

  • account_iduuidrequired
  • namestringrequiredmin length 1, max length 120
  • trigger"comment" | "story" | "live"default "comment"

    comment (posts and reels), story (Instagram story replies), live (Instagram)

  • status"live" | "paused" | "draft" | null

    live: answers comments | paused: off | draft: saved, not live yet (incomplete texts allowed). Omitted: from `enabled`.

  • post_scope"any" | "post" | "next_post" | null

    any: every post of the account | post: the post in platform_post_id | next_post: the next post published on the account after the automation is created (bound when it goes out). Omitted: from platform_post_id.

  • platform_post_idstring | nullpattern ^[A-Za-z0-9_:-][A-Za-z0-9_:.-]{0,127}$

    Platform id of one post; omit for every post of the account

  • keywordsstring[]max items 20

    Empty: any comment triggers it

  • match_mode"word" | "contains"default "word"
  • dm_messagestring | nullmax length 640

    The DM with the link (Instagram, Facebook): the last DM of the conversation. {{first_name}}, {{name}}, {{username}}

  • button_titlestring | nullmax length 20
  • button_urlstring | nullmax length 2000
  • public_replystring | nullmax length 1000

    A single public reply under the comment (same as public_replies with one entry)

  • public_repliesstring[] | nullmax items 3

    Up to 3 different public replies under the comment: one is picked at random for each comment, so the replies under a post don't all look the same. Takes precedence over public_reply.

  • opening_dmOpeningDM | null
  • follow_gateFollowGate | null
  • email_captureEmailCapture | null
  • follow_upFollowUp | null
  • link_trackingbooleandefault true

    Count clicks on the link button (through our redirect)

  • enabledbooleandefault true

AutomationEmailOut

  • emailstringrequired
  • contact_namestring | nullrequired
  • contact_usernamestring | nullrequired
  • collected_atdatetimerequired

AutomationEventOut

  • comment_idstringrequired
  • platform_post_idstring | nullrequired
  • commenter_namestring | nullrequired
  • comment_textstring | nullrequired
  • outcomestringrequired
  • dm_sentbooleanrequired
  • repliedbooleanrequired
  • reply_variantinteger | null

    Which of public_replies was posted (0-based)

  • billedstring | nullrequired
  • errorstring | nullrequired
  • created_atdatetimerequired

AutomationOut

  • iduuidrequired
  • account_iduuidrequired
  • platformstringrequired
  • account_usernamestring | nullrequired
  • namestringrequired
  • triggerstringrequired
  • status"live" | "paused" | "draft"required
  • post_scope"any" | "post" | "next_post"required
  • platform_post_idstring | nullrequired

    The post it answers on (next_post: once bound)

  • bound_atdatetime | null

    next_post: when the next post was found

  • keywordsstring[]required
  • match_modestringrequired
  • dm_messagestring | nullrequired
  • button_titlestring | nullrequired
  • button_urlstring | nullrequired
  • public_replystring | nullrequired

    The first of public_replies

  • public_repliesstring[]required

    Public replies; one is picked at random for each comment

  • opening_dmOpeningDM | null
  • follow_gateFollowGate | null
  • email_captureEmailCapture | null
  • follow_upFollowUp | null
  • link_trackingbooleandefault false
  • enabledbooleanrequired

    status == live

  • created_atdatetimerequired
  • statsAutomationStatsrequired

AutomationStats

  • matchedintegerdefault 0

    Comments that matched

  • sentintegerdefault 0

    Comments answered (same as runs)

  • dmsintegerdefault 0

    Comments answered with a DM

  • public_repliesintegerdefault 0
  • skippedintegerdefault 0
  • failedintegerdefault 0
  • runsintegerdefault 0

    Comments answered: what counts against the quota

  • dms_sentintegerdefault 0

    Every DM sent, every step of every conversation

  • links_sentintegerdefault 0

    People who got the DM with the link

  • clicksintegerdefault 0

    People who opened the link (once per person)

  • ctrnumberdefault 0

    clicks / links_sent, 0 to 1

  • emailsintegerdefault 0

    Email addresses collected

  • followups_sentintegerdefault 0

AutomationUpdate

Only the fields sent change. A step set to null is removed.

  • namestring | nullmin length 1, max length 120
  • status"live" | "paused" | "draft" | null

    live: answers comments | paused: off | draft: saved, not live yet (incomplete texts allowed)

  • post_scope"any" | "post" | "next_post" | null

    any: every post of the account | post: the post in platform_post_id | next_post: the next post published on the account after the automation is created (bound when it goes out)

  • platform_post_idstring | nullpattern ^[A-Za-z0-9_:-][A-Za-z0-9_:.-]{0,127}$
  • keywordsstring[] | nullmax items 20
  • match_mode"word" | "contains" | null
  • dm_messagestring | nullmax length 640
  • button_titlestring | nullmax length 20
  • button_urlstring | nullmax length 2000
  • public_replystring | nullmax length 1000
  • public_repliesstring[] | nullmax items 3

    Up to 3 different public replies under the comment: one is picked at random for each comment, so the replies under a post don't all look the same. Takes precedence over public_reply.

  • opening_dmOpeningDM | null
  • follow_gateFollowGate | null
  • email_captureEmailCapture | null
  • follow_upFollowUp | null
  • link_trackingboolean | null
  • enabledboolean | null

    true: live, false: paused (status wins when both sent)

AutomationUsageOut

This month's auto-DM usage against the workspace's quota.

  • modestringrequired

    internal | plan | credits | free

  • usedintegerrequired
  • includedinteger | nullrequired

    Replies included this month; null = unlimited

  • per_videointeger | nullrequired

    Replies per video; null = no per-video limit

  • addonstring | null

    Legacy Auto-DM add-on still on the plan, if any.

  • addon_dmsintegerdefault 0
  • triggersstring[]required
  • skipped_this_monthintegerrequired
  • paid_dmsintegerdefault 0

    Replies past the quota this month, paid in credits.

  • dms_per_creditintegerdefault 20

    Replies past the quota paid by one credit.

  • credits_this_monthintegerdefault 0

    Credits used by auto-DMs this month.

BrandCreate

  • namestringrequiredmin length 1, max length 120
  • default_localestring | nullmax length 16

BrandOut

  • iduuidrequired
  • namestringrequired
  • default_localestring | nullrequired
  • created_atdatetimerequired

BudgetOut

Monthly budget: the most automatic top-ups may charge in a calendar month (UTC).

  • used_centsintegerrequired
  • limit_centsinteger | nullrequired

    Null = no limit.

  • reachedbooleanrequired

    The next automatic top-up would pass the budget.

ClipOut

  • iduuidrequired
  • source_media_iduuidrequired
  • start_secondsnumberrequired
  • end_secondsnumberrequired
  • verticalbooleanrequired
  • statusstringrequired
  • media_iduuid | nullrequired
  • media_urlstring | nullrequired
  • errorstring | nullrequired
  • created_atdatetimerequired

ClipRange

  • startnumberrequired≥ 0.0

    Seconds from the start of the video

  • endnumberrequired> 0.0

ClipsCreate

  • media_iduuidrequired
  • clipsClipRange[]requiredmin items 1, max items 20
  • verticalbooleandefault false

    Crop to 9:16 for Reels, TikTok and Shorts

ConnectOut

  • auth_urlstringrequired
  • brand_iduuidrequired

ConnectRequest

  • platform"instagram" | "tiktok" | "youtube" | "facebook" | "linkedin" | "twitter" | "threads" | "pinterest" | "bluesky" | "googlebusiness" | "telegram"required
  • brand_iduuid | null

CostsOut

What spends credits. 1 credit = 1 second of dubbed video in one language.

  • credit_price_centsintegerrequired

    Price of one credit in US cents (6 = $0.06).

  • dub_per_secondintegerrequired

    Credits per second of video, per language.

  • lipsync_per_secondnumberrequired

    Extra credits per second of lip-synced video, per language.

  • previewintegerrequired

    Credits for a 15-second voice preview.

  • subtitles_includedbooleandefault true

    Subtitles without dubbing (original or translated) are included in the plan.

  • dms_per_creditintegerrequired

    Auto-DMs past the monthly quota paid by one credit.

  • account_per_monthintegerrequired

    Credits a month for each account past the plan (taken daily).

  • topup_presetsinteger[]required

    Top-up sizes offered, in credits.

  • min_topup_centsintegerrequired
  • max_topup_centsintegerrequired

CreditEntryOut

  • iduuidrequired
  • created_atdatetimerequired
  • reasonstringrequired

    subscription | topup | purchase | grant | adjustment | conversion | dub_reserve | dub_refund | lipsync | lipsync_refund | autodm | accounts

  • labelstringrequired

    What it was, in words.

  • creditsintegerrequired

    Credits added (positive) or used (negative).

  • balance_afterintegerrequired
  • amount_centsinteger | null

    What a top-up charged, in US cents.

  • refstring | null

    Linked object: the dub id (dub_reserve/dub_refund), the auto-DM event id, lipsync:<variant>, the payment (dodo:<id>), or accounts:<workspace>:<day>.

CreditEstimateOut

  • secondsintegerrequired
  • languagesintegerrequired
  • dubbingintegerrequired

    Credits for the dub itself.

  • lipsyncintegerrequired

    Extra credits for lip sync.

  • totalintegerrequired
  • balanceintegerrequired
  • unlimitedbooleandefault false
  • enoughbooleanrequired

    The balance covers it (always true for an internal workspace).

CreditHistoryOut

CreditOut

  • credits_balanceintegerrequired

    Credits left: plan credits and bought credits in one balance. May be below zero after daily account fees.

  • dub_seconds_balanceintegerrequired

    Deprecated alias of credits_balance.

  • unlimitedbooleandefault false

    Internal workspace: never charged, never blocked.

  • plan_credits_per_monthintegerdefault 0

    Credits the current plan adds each paid month.

  • next_plan_credits_atdatetime | null

    When the plan adds its next credits.

  • accounts_past_planintegerdefault 0

    Connected accounts that cost credits.

  • accounts_pausedintegerdefault 0

    Accounts past the plan paused because the credits could not pay for them.

  • costsCostsOut | null
  • auto_topupAutoTopupOut | null
  • budgetBudgetOut | null
  • caption_translationbooleandefault false
  • limitsLimitsOut | null
  • modestringdefault "free"
  • walletWalletOut | null

    Deprecated: see auto_topup and budget.

  • dubbing_enabledbooleandefault true
  • activebooleandefault true
  • lipsyncLipsyncRatesOut | null

CurrentPlan

  • plan_idstring | nullrequired
  • statusstring | nullrequired
  • renews_atdatetime | nullrequired
  • can_managebooleanrequired
  • rolestringdefault "member"

DubPlanIn

  • media_iduuidrequired

    The video of the post.

  • source_languagestring | nullpattern ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})?$

    Omit to auto-detect.

  • languagesstring[]requiredmin items 1, max items 16
  • targetsmap<string, uuid[]>required

    For each language, the accounts that get that language version. Every language needs one.

  • subtitlesbooleandefault true
  • subtitle_styleSubtitleStyle | null
  • lipsyncbooleandefault false
  • duration_secondsinteger | null≥ 1.0, ≤ 36000.0

    The video's length as measured by the client (credits check).

  • tiktokTikTokOptions | null
  • youtube_titlestring | nullmax length 100

DubbedPostCreate

A post in its original language, plus its dubbed versions, each published to its own accounts as soon as it is ready (or at the post's time if it is ready by then).

DubbedPostOut

EmailCapture

Before the link, ask for the person's email address. The reply is checked; the address is kept for this automation and can be exported as CSV. On Facebook, needs an opening DM.

  • messagestringdefault "What's your email address, {{first_name}}? I'll send you the link right after."min length 1, max length 640
  • invalid_messagestringdefault "Hmm, that doesn't look like an email address. Could you send it again?"min length 1, max length 640

FacebookOptions

  • format"feed" | "reel" | "story"default "feed"

    reel: a single vertical video. story: one photo or video, 24 hours, no caption.

  • titlestring | nullmax length 255

    Reel title.

FollowGate

Instagram: before the link, check that the person follows the account. If not, this message asks them to, with a button that checks again. Needs an opening DM (Instagram only tells whether someone follows you once they have messaged you).

  • messagestringdefault "Almost there, {{first_name}}! Follow us first, then tap the button below."min length 1, max length 640
  • button_titlestringdefault "I'm following"min length 1, max length 20

FollowUp

If the link wasn't opened after `delay_hours`, one more DM with the same link. Sent only within 24 hours of the person's last message (Instagram and Facebook rule).

  • messagestringrequiredmin length 1, max length 640

    {{first_name}}, {{name}}, {{username}}

  • delay_hoursintegerdefault 4≥ 1.0, ≤ 23.0

InstagramOptions

  • format"auto" | "story"default "auto"

    auto: images go to the feed (several make a carousel), a single video is a Reel. story: a Story (one photo or video, 24 hours, no caption).

  • share_to_feedbooleandefault true

    Reels: also show it in the feed (false: Reels tab only).

  • collaboratorsstring[]max items 3

    Up to 3 @usernames of public creator or business accounts.

  • paid_partnershipbooleandefault false

    Show the 'Paid partnership' label.

LimitsOut

  • plan_idstring | nullrequired
  • accountsintegerrequired
  • languagesintegerrequired
  • accounts_usedintegerrequired
  • extra_accountsintegerdefault 0

LinkedInOptions

  • disable_link_previewbooleandefault false

LipsyncIn

  • languagesstring[] | nullmax items 16

    Languages to lip-sync. Omit for every ready language.

LipsyncRatesOut

Lip sync is never included in a plan: each second of lip-synced video uses `credit_multiplier` extra credits, per language (rounded up per job).

  • credit_multipliernumberrequired
  • max_secondsintegerrequired

LocalizationCreate

  • media_iduuidrequired

    An uploaded video (see POST /v1/media/uploads).

  • languagesstring[]requiredmin items 1, max items 16

    BCP-47 tags to dub into, e.g. es, pt-BR, ja

  • source_languagestring | nullpattern ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})?$

    Omit to auto-detect.

  • captionstringdefault ""max length 5000

    Caption to translate for each language.

  • subtitlesbooleandefault true

    Burn each language's subtitles into its dubbed video.

  • lipsyncbooleandefault false

    Also lip-sync each language once dubbed: +1.5 credits per second of video, per language (rounded up per job).

  • subtitle_styleSubtitleStyle | null

    Look of the burned subtitles. Omit for the workspace's last style (or Pop).

  • previewbooleandefault false

    Dub only the first 15 seconds into one language to hear the voice first (15 credits).

  • duration_secondsinteger | null≥ 1.0, ≤ 36000.0

    The video's length as the client measured it, so a dub the balance can't cover is refused up front. The exact cost is taken once the video is measured on our side.

LocalizationOut

  • iduuidrequired
  • source_media_iduuidrequired
  • source_languagestring | nullrequired
  • captionstringrequired
  • statusstringrequired
  • duration_secondsinteger | nullrequired
  • errorstring | nullrequired
  • sourcestringrequired
  • burn_subtitlesbooleandefault false
  • lipsyncbooleandefault false

    Lip sync was asked for at dub time.

  • subtitle_styleobject | null

    Style of the burned subtitles.

  • original_post_iduuid | null

    Post this dub was started from, if any.

  • previewbooleandefault false

    A 15-second sample, never published.

  • created_atdatetimerequired
  • updated_atdatetimerequired
  • variantsVariantOut[]required

LocalizationPublish

  • account_idsuuid[] | null

    Limit to these accounts. Default: every connected account.

  • include_originalbooleandefault true

    Also post the original video to accounts in the source language or with no language set.

  • publish_nowbooleandefault false
  • scheduled_fordatetime | null
  • timezonestring | null
  • draftbooleandefault false
  • tiktok_consentbooleandefault false
  • tiktok_privacy"PUBLIC_TO_EVERYONE" | "MUTUAL_FOLLOW_FRIENDS" | "FOLLOWER_OF_CREATOR" | "SELF_ONLY"default "PUBLIC_TO_EVERYONE"
  • youtube_titlestring | nullmax length 100
  • idempotency_keystring | nullmax length 64

MediaRef

  • media_iduuid | null
  • urlurl | nullmin length 1, max length 2083
  • type"video" | "image" | null

NativeAutomationOut

An imported automation: it runs in another tool (set up before the accounts were linked to Fifty Eight).

  • idstringrequired
  • account_iduuidrequired
  • platformstringrequired
  • account_usernamestring | nullrequired
  • namestringrequired
  • triggerstringrequired
  • platform_post_idstring | nullrequired
  • post_titlestring | nullrequired
  • keywordsstring[]required
  • match_modestringrequired
  • dm_messagestring | nullrequired
  • button_titlestring | nullrequired
  • button_urlstring | nullrequired
  • public_replystring | nullrequired
  • enabledbooleanrequired
  • created_atstring | nullrequired
  • runs_onstringdefault "zernio"

NativeAutomationStats

  • triggeredintegerdefault 0
  • dms_sentintegerdefault 0
  • dms_failedintegerdefault 0
  • unique_contactsintegerdefault 0
  • link_clicksintegerdefault 0
  • unique_clicksintegerdefault 0

NativeAutomationUpdate

  • namestring | nullmin length 1, max length 120
  • keywordsstring[] | nullmax items 20
  • match_mode"word" | "contains" | "exact" | null
  • dm_messagestring | nullmax length 640
  • button_titlestring | nullmax length 20
  • button_urlstring | nullmax length 2000
  • public_replystring | nullmax length 1000
  • enabledboolean | null

OpeningDM

Two-step DM: this message goes first, with a button. The DM with the link comes when the person taps it (or answers with any message).

  • messagestringrequiredmin length 1, max length 640

    {{first_name}}, {{name}}, {{username}}

  • button_titlestringdefault "Send me the link"min length 1, max length 20

OrgOut

  • iduuidrequired
  • namestringrequired
  • created_atdatetimerequired
  • dubbing_enabledbooleandefault true

Pack

  • idstringrequired
  • labelstringrequired
  • secondsintegerrequired
  • pricestringrequired

PinterestBoardOut

  • idstringrequired
  • namestringrequired

PinterestOptions

  • board_idstring | nullmax length 64

    Board to pin to (see pinterest-boards).

  • titlestring | nullmax length 100
  • linkurl | nullmin length 1, max length 2083

    Where a click on the pin goes.

Plan

  • idstringrequired
  • labelstringrequired
  • creditsintegerrequired

    Credits added each paid month (unused credits roll over).

  • secondsintegerrequired

    Deprecated alias of credits.

  • pricestringrequired
  • accountsintegerrequired
  • languagesintegerrequired
  • autodm_monthintegerdefault 0
  • autodm_per_videointeger | null
  • autodm_triggersstring[]default []

PlansOut

PostCreate

  • contentstringdefault ""max length 10000
  • mediaMediaRef[]max items 20
  • targetsTargetIn[]requiredmin items 1, max items 100
  • publish_nowbooleandefault false
  • scheduled_fordatetime | null

    ISO 8601 with offset, or naive local time interpreted in `timezone`.

  • timezonestring | null

    IANA zone, e.g. Europe/Paris

  • draftbooleandefault false
  • fixed_timebooleandefault false

    Never let the best-time optimizer move this post (e.g. a launch at a set hour)

PostDuplicate

  • tiktok_consentbooleandefault false

    Needed when the copy targets a TikTok account.

PostOut

  • iduuidrequired
  • brand_iduuidrequired
  • contentstringrequired
  • mediaany[]required
  • publish_nowbooleanrequired
  • scheduled_fordatetime | nullrequired
  • timezonestring | nullrequired
  • statusPostStatusrequired
  • errorstring | nullrequired
  • sourcestringrequired
  • fixed_timebooleanrequired
  • can_retrybooleanrequired
  • published_atdatetime | null
  • created_atdatetimerequired
  • updated_atdatetimerequired
  • targetsTargetOut[]required

PostStatus

One of: draft, scheduled, publishing, published, partially_published, failed, cancelled, held

PostSyncOut

  • importedintegerrequired
  • updatedintegerrequired
  • removedintegerrequired
  • brandsintegerrequired

PostUpdate

Edit a draft, scheduled, failed or cancelled post. Omitted fields stay as they are.

  • contentstring | nullmax length 10000
  • mediaMediaRef[] | nullmax items 20

    The full new media list, in order.

  • targetsTargetEdit[] | nullmin items 1, max items 100

    The full new set of accounts, with their captions.

  • scheduled_fordatetime | null

    New time: ISO 8601 with offset, or naive local time interpreted in `timezone`.

  • timezonestring | null
  • draftboolean | null

    true: keep or make it a draft. false: schedule it.

  • fixed_timeboolean | null

    Never let the best-time optimizer move this post.

SubtitleConfirm

  • subtitle_styleSubtitleStyle | null

    Change the look before burning.

SubtitleCreate

  • media_iduuidrequired

    An uploaded video (see POST /v1/media/uploads).

  • languagestring | nullpattern ^[a-z]{2,3}(-[A-Za-z0-9]{2,8})?$

    Spoken language. Omit to detect it.

  • translate_tostring[]max items 7

    Also burn subtitles translated into these languages (same audio).

  • subtitle_styleSubtitleStyle | null

    Look of the subtitles. Omit for the workspace's last style (or Pop).

  • reviewbooleandefault false

    Stop once the transcript is ready so it can be corrected (PATCH .../transcript), then POST .../confirm to burn it.

  • captionstringdefault ""max length 10000
  • duration_secondsinteger | null≥ 1.0, ≤ 36000.0

    The video's length as the client measured it (length check).

  • publishSubtitlePublishPlan | null

    Publish each version once it is ready.

SubtitleOut

  • iduuidrequired
  • source_media_iduuidrequired
  • languagestring | nullrequired
  • language_detectedbooleanrequired
  • statusstringrequired
  • errorstring | nullrequired
  • sourcestringrequired
  • captionstringrequired
  • reviewbooleanrequired
  • duration_secondsinteger | nullrequired
  • subtitle_styleobject | null
  • created_atdatetimerequired
  • updated_atdatetimerequired
  • finished_atdatetime | null
  • variantsSubtitleVariantOut[]required
  • queueSubtitleQueueOut | null

SubtitlePublishPlan

Where each subtitled version goes. `original`: the video with subtitles in its spoken language; each translated language: its own accounts (see list_language_versions). Each version publishes itself once ready.

  • contentstringdefault ""max length 10000

    Caption (translated for each other language).

  • originalTargetIn[]max items 100
  • languagesmap<string, TargetIn[]>

    Translated language -> its accounts (with their platform options).

  • publish_nowbooleandefault false
  • scheduled_fordatetime | null
  • timezonestring | null
  • draftbooleandefault false

    Make draft posts instead of publishing.

  • fixed_timebooleandefault false

SubtitleQueueOut

  • stage"transcribe" | "burn" | nullrequired

    Queue the job waits in (null: not waiting).

  • aheadintegerrequired

    Videos that will be handled before this one in that queue.

  • eta_secondsinteger | nullrequired

    Estimated seconds until this video is ready (recent averages).

SubtitleRestyle

SubtitleStyle

Look of the subtitles burned into each dubbed video. Every field is optional (preset defaults apply).

  • preset"pop" | "bold_box" | "clean" | "karaoke" | "minimal" | "classic"default "pop"

    pop: 2-3 big words, the spoken word pops in colour. bold_box: words on a solid colour box. clean: sentence case, soft fade. karaoke: words fill with colour as spoken. minimal: small lowercase. classic: plain line-level subtitles.

  • font"poppins" | "montserrat" | "anton" | "bebas" | "archivo" | "rounded" | "noto" | null

    Omit for the preset's font.

  • highlight"indigo" | "brand" | "yellow" | "green" | "red" | "pink" | "white" | "black"default "indigo"
  • text_color"indigo" | "brand" | "yellow" | "green" | "red" | "pink" | "white" | "black"default "white"
  • position"bottom" | "middle" | "top"default "bottom"
  • size"s" | "m" | "l"default "m"
  • uppercaseboolean | null

    Omit for the preset's default.

SubtitleVariantOut

  • languagestringrequired
  • originalbooleanrequired
  • statusstringrequired
  • media_iduuid | nullrequired
  • media_urlstring | null

    Subtitled video. Temporary link, kept 7 days.

  • captionstring | nullrequired
  • errorstring | nullrequired
  • post_iduuid | null
  • publish_notestring | null

TargetEdit

  • account_iduuidrequired
  • contentstring | null

    Caption for this account only (null: the main caption).

  • tiktok_consentbooleandefault false

    Required when adding a TikTok account: the creator reviewed and consents.

TargetIn

One account of a post. Platform options only apply to accounts of that platform (others ignore them).

TargetOut

  • iduuidrequired
  • social_account_iduuidrequired
  • platformstringrequired
  • custom_contentstring | nullrequired
  • platform_optionsobject

    The platform options sent for this account.

  • statusTargetStatusrequired
  • platform_post_urlstring | nullrequired
  • platform_post_idstring | null

    Published posts: the post's id on the platform (use it to bind an automation).

  • error_messagestring | nullrequired
  • error_categorystring | nullrequired
  • published_atdatetime | null
  • metricsobject | null

    Published posts: latest views, likes, comments, shares, saves, reach, impressions.

TargetStatus

One of: pending, publishing, published, failed, cancelled, held

ThreadsOptions

  • topic_tagstring | nullmin length 1, max length 50, pattern ^[^.&]+$

TicketIn

  • topicstringdefault "other"

    One of: billing, dubbing, publishing, automations, accounts, api, bug, privacy, other.

  • messagestringrequiredmin length 1, max length 5000
  • media_iduuid | null

    An uploaded screenshot (see POST /v1/media/uploads).

  • emailstring | null

    Where we answer. Defaults to your account email.

TicketOut

  • numberstringrequired
  • topicstringrequired
  • statusstringrequired
  • messagestringrequired
  • created_atdatetimerequired

TikTokOptions

  • privacy_level"PUBLIC_TO_EVERYONE" | "MUTUAL_FOLLOW_FRIENDS" | "FOLLOWER_OF_CREATOR" | "SELF_ONLY"default "PUBLIC_TO_EVERYONE"
  • allow_commentbooleandefault true
  • allow_duetbooleandefault true

    Videos only.

  • allow_stitchbooleandefault true

    Videos only.

  • commercial_content"none" | "brand_organic" | "brand_content"default "none"

    Disclose commercial content: brand_organic (promotes your own brand) or brand_content (a paid partnership). Not allowed with privacy SELF_ONLY.

  • draftbooleandefault false

    Send to the creator's TikTok inbox as a draft instead of publishing: the creator finishes and posts it in the TikTok app.

  • consentbooleandefault false

    Must be true: the creator reviewed the content and agrees to publish it.

TimingAccount

  • account_iduuidrequired
  • platformstringrequired
  • usernamestring | nullrequired
  • optimize_timingbooleanrequired
  • timezonestring | nullrequired

    Audience zone; slots are computed in UTC until it is set

  • posts_analyzedintegerrequired
  • confidencestringrequired

    learning (<15 posts), medium (<50) or high

  • best_slotsTimingSlot[]required
  • gridnumber[][]required

    Expected lift per weekday (rows, Monday first) and time block

TimingInsights

TimingMoveOut

  • post_iduuidrequired
  • original_atdatetimerequired
  • planned_atdatetimerequired
  • expected_gainnumberrequired
  • appliedbooleanrequired
  • errorstring | nullrequired
  • created_atdatetimerequired
  • previewstringrequired
  • timezonestring | null

TimingSlot

  • labelstringrequired
  • weekdayintegerrequired
  • blockintegerrequired
  • liftnumberrequired

    Expected performance vs the account's median, log scale (+0.3 ~ +35 %)

  • sdnumberrequired

TranscriptEdit

  • linesobject[]requiredmin items 1, max items 2000

    [{"index": 3, "text": "corrected words"}] (line indexes from GET).

TranscriptLine

  • indexintegerrequired
  • startnumberrequired
  • endnumberrequired
  • textstringrequired

TranscriptOut

  • languagestringrequired
  • editablebooleanrequired

    True while the job waits for review (original language only).

  • linesTranscriptLine[]required

UploadOut

  • media_iduuidrequired
  • upload_urlstringrequired

    PUT the file bytes here with the same Content-Type. Valid 1 hour.

  • public_urlstringrequired

UploadRequest

  • filenamestringrequiredmin length 1, max length 255
  • content_typestringrequiredpattern ^(video|image)/[\w.+-]+$
  • size_bytesinteger | null> 0.0, ≤ 5368709120.0

VariantCaptionUpdate

  • captionstringrequiredmax length 5000

VariantOut

  • languagestringrequired
  • statusstringrequired
  • media_iduuid | nullrequired
  • media_urlstring | null

    Dubbed video. Temporary link, kept 7 days.

  • captionstring | nullrequired
  • errorstring | nullrequired
  • lipsync_statusstring | null

    pending | running | ready | failed (null: none).

  • lipsync_errorstring | null
  • lipsync_cost_secondsintegerdefault 0

    Credit seconds the latest lip sync attempt took.

  • unsynced_media_urlstring | null

    The dubbed video before lip sync, kept to compare or go back.

  • post_iduuid | null

    Post made for this language (dubs started from a post).

  • publish_notestring | null

    Why this language wasn't published, or a heads-up.

WalletDetailOut

  • balance_centsintegerrequired
  • auto_topup_enabledbooleanrequired
  • auto_topup_threshold_centsintegerrequired
  • auto_topup_amount_centsintegerrequired
  • auto_topup_monthly_cap_centsinteger | null
  • auto_topup_month_centsintegerdefault 0
  • auto_topup_cappedbooleandefault false
  • has_payment_methodbooleanrequired
  • topup_pendingbooleanrequired
  • entriesWalletEntryOut[]required

WalletEntryOut

  • delta_centsintegerrequired
  • reasonstringrequired
  • created_atdatetimerequired

WalletOut

Deprecated: automatic top-up settings under their pre-credits names. Use `auto_topup` and `budget` on /v1/credits. `balance_cents` is the credit balance's value in US cents.

  • balance_centsintegerrequired
  • auto_topup_enabledbooleanrequired
  • auto_topup_threshold_centsintegerrequired
  • auto_topup_amount_centsintegerrequired
  • auto_topup_monthly_cap_centsinteger | null
  • auto_topup_month_centsintegerdefault 0
  • auto_topup_cappedbooleandefault false
  • has_payment_methodbooleanrequired
  • topup_pendingbooleanrequired

WorkspaceOut

  • iduuidrequired
  • namestringrequired
  • created_atdatetimerequired
  • dubbing_enabledbooleandefault true
  • rolestringdefault "member"

WorkspaceUpdate

  • dubbing_enabledboolean | null

    Turn dubbing on or off for this workspace.

XOptions

  • made_with_aibooleandefault false

    Label the post as containing AI-generated media.

YouTubeOptions

  • titlestring | nullmax length 100

    Video title (default: the caption's first line).

  • visibility"public" | "unlisted" | "private"default "public"
  • category_idstringdefault "22"

    YouTube category id, e.g. 22 People & Blogs, 27 Education.

  • tagsstring[]max items 50

    Up to 100 characters each, 500 in all.

  • made_for_kidsbooleandefault false
  • synthetic_mediabooleandefault false

    Discloses altered or synthetic content that looks real (YouTube may label it).

Example

Publish a public video URL to one account right now
curl -X POST https://api.72-62-237-85.sslip.io/v1/posts \
  -H "Authorization: Bearer $FIFTYEIGHT_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"content": "Hello", "media": [{"url": "https://example.com/v.mp4", "type": "video"}],
       "targets": [{"account_id": "ACCOUNT_ID"}], "publish_now": true}'