Publish a flow's draft
Make the draft live in one go: its tasks and settings, the draft of every form its tasks use (each renamed after its task) and of every agreement they use, each as a new version when it changed. goLive: true also activates a draft or paused flow, and gives a flow with no links its first one ("Main link", returned as link). Refused with 400 and details.problems (taskId, message) while anything isn't ready; an archived flow answers 409. Creators partway through move onto the new version for the tasks they haven't finished (updatedSubmissions); one whose remaining tasks were all removed finishes, joining or waiting for approval. Preview with dryRun: whether anything would change, what blocks it, and how many open submissions would move. A brand key can't take a flow with no links live (403): the first link records who made it.
bearerAuth onboarding:writeAuthorizationBearer <token>Personal access token. Scopes: account:read, creator:read, creator:earnings, managed:read, coach:read, brand:read, creators:read, videos:read, analytics:read, onboarding:read, onboarding:signatures, engagement:read, support:read, integrations:read, payouts:read, funds:read, billing:read, groups:write, videos:write, onboarding:write, sync:write, payouts:write.
Scope: onboarding:write
brandId*stringA brand id from GET /me or GET /creator/brands.
1 <= lengthflowId*stringA flow id from GET /brands/{brandId}/onboarding/flows.
1 <= lengthdryRun?string"true": run every check and return { dryRun: true, wouldChange } without changing anything.
"true""false"application/json- body
goLive?booleanAlso make the flow active, so its links take creators. Default false: publish only.
Success.
application/json- response
changed*booleanSomething creators see changed. False: the draft already matched the live flow.
status*stringThe flow's status after publishing.
link*|The link made for a flow that went live without one.
updatedSubmissions*numberOpen submissions moved onto the new version.
curl -X POST 'https://example.com/api/v1/brands/string/onboarding/flows/string/publish' \ -H 'Content-Type: application/json' \ -d '{}'{ "changed": true, "status": "string", "link": { "id": "string", "flowId": "string", "url": "string", "label": "string", "active": true, "uses": 0, "maxUses": 0, "expiresAt": "string", "defaultGroupId": "string", "createdAt": "string" }, "updatedSubmissions": 0}Set or clear the group a flow puts joiners in POST
Change the creator group a flow puts new joiners in, straight away, without editing the draft and publishing. The flow's group wins over a link's own group; null clears it, so each link's own group applies again. The live flow and its draft both change (the draft's revision goes up, so the next publish keeps the new group), and creators partway through move onto it as they would on publish (`updatedSubmissions`), so they join the new group too. Creators already waiting for approval keep the group of the version they finished, and creators who already joined stay where they are. The group must be one of the brand's (400 `bad_group`); an archived flow answers 409. Returns the flow's group and where each of its links now places joiners. With ?dryRun=true nothing is written: the answer shows the live and draft group before, the group after, each link's placement before and after, and how many creators are in progress or waiting for approval.
Activate, pause or archive a flow POST
Set a flow's status. "active": its links take new creators (refused with 400 and `details.problems` until the live version is complete: to launch a flow that was never published, use brand.onboarding.flow.publish with goLive). "paused": links stop taking new creators; creators partway through carry on. "archived": hidden, and it can't be edited or get links; set it active or paused to restore it. Preview with dryRun.