---
title: "Schedule different variations across accounts"
method: POST
path: "/cloning/jobs/{jobId}/distribute"
tags: ["Cloning"]
---

# Schedule different variations across accounts

`POST /cloning/jobs/{jobId}/distribute`

## Request

- Base URL: `https://app.getprolifik.com/api/v1`
- URL: `https://app.getprolifik.com/api/v1/cloning/jobs/{jobId}/distribute`
- Auth: HTTP bearer

Spreads DIFFERENT variations of one cloning job across the brand's social accounts at staggered times. Every account gets its own variation and the same variation is never posted to two accounts: a variation that already has a live or published post is refused (409) unless the entry is identical to it, in which case it is reported as alreadyScheduled and nothing is sent again. Surplus variations go out on the next day(s), one per account per day, and an account-day that already has a post from this job (an earlier distribute, a retry after a partial failure) is skipped — an entry landing on one is refused with 409 unless it is that identical post. Originals are handed out before translated variations; languages narrows a server plan to some of them. Send either an explicit plan, or socialAccountIds + startAt (+ spacingMinutes, jitterMinutes, languages) for the server to plan with the same rules the dashboard previews (seeded on the job, UTC days unless timeZone is given); accounts that cannot take any variation (a carousel to YouTube, a locked or disconnected account) are returned under excluded. The whole plan is validated before anything is scheduled — ownership, the job's brand (a plan-locked brand is a 402), rendering, platform compatibility, duplicates, one post per account per day, the time window and the monthly video quota. One distribute per job runs at a time (409 in_progress). Each post uses the variation's own caption and hashtags. A dispatch failure after validation is reported per entry. Requires publish:write and an Idempotency-Key.

## Path parameters

- `jobId` string, uuid, required

## Headers

- `Idempotency-Key` string, required

## Request body

- DistributeCloningJobRequest: Either plan, or socialAccountIds + startAt. Not both.
  - `plan` DistributeEntry[]
    - `pieceId` string, uuid, required: A rendered variation of this job (CloningVariation.pieceId).
    - `socialAccountId` string, uuid, required: An active destination on the job's brand (/publish-destinations).
    - `scheduledAt` string, date-time, required: Between one minute and one year in the future.
  - `socialAccountIds` string[]: Server-planned mode, in stagger order.
  - `startAt` string, date-time: Server-planned mode: when the first account posts.
  - `spacingMinutes` integer
  - `jitterMinutes` integer: Each time moves by up to ± this many minutes, deterministically per job and account.
  - `languages` string[]: Server-planned mode only: which variations to hand out — "original" for the untranslated ones, or translation language codes. Omitted: originals first, translations only once the originals run out.
  - `timeZone` string: IANA time zone the one-post-per-account-per-day rule (and a server plan's next-day surplus) is counted in, e.g. Europe/Vilnius. Default UTC.

## Response `200`

Per-entry results

- DistributeCloningJobResult
  - `results` object[], required
    - `pieceId` string, uuid, required: A rendered variation of this job (CloningVariation.pieceId).
    - `socialAccountId` string, uuid, required: An active destination on the job's brand (/publish-destinations).
    - `scheduledAt` string, date-time, required: Between one minute and one year in the future.
    - `status` 'scheduled' | 'failed', required
    - `postId` string, uuid: The content publish (/content/publishes/{publishId}).
    - `alreadyScheduled` boolean: An identical post already existed; nothing was sent again.
    - `reason` string
  - `scheduled` integer, required
  - `failed` integer, required
  - `accounts` integer, required: Distinct accounts with a post from this request.
  - `excluded` object[]: Server-planned mode: accounts that could take no variation, and why.
    - `accountId` string, uuid
    - `reason` string
  - `accountsWithoutVariation` string[]: Server-planned mode: accounts left over because the variations ran out.

## Other responses

- `400`: Request failed
- `401`: Request failed
- `402`: Payment required. error.code is subscription_required (the plan does not include this feature, or the key's account no longer has a plan: API keys are paid-only, so every write from a key whose account has none is refused; see error.upgradeUrl), insufficient_credits (the AI-credit balance is short; see error.needed, error.balance, error.upgradeUrl), or quota_exceeded (a plan quota such as monthly videos or clip minutes).
- `403`: Request failed
- `404`: Request failed
- `409`: Request failed
- `429`: Request failed

---

[API](https://skmtc.dev/getprolifik/apis/prolifik-public-api.md) · [All operations](https://skmtc.dev/getprolifik/apis/prolifik-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getprolifik/apis/prolifik-public-api/revisions/301e79c5763c?raw)
