Skip to Content
API ReferenceDrafts & Approval

Drafts & Approval

A post can be created without being published: as a draft, or waiting for approval. Nothing publishes it — not its scheduled time, not a retry — until someone approves it. Approving schedules it at its date, or publishes it right away if it has none or the date has passed.

Statuses

StatusMeaning
draftSaved, still being worked on. Editable.
pending_approvalWaiting for an owner, an admin or a client to approve it. Editable.
scheduled / pendingApproved: it goes out at its date, or now.

Create a draft or a post to approve

Add status to POST /upload or POST /upload/bulk: "draft" or "pending_approval". The response carries the status of each post.

curl -X POST https://api.multi-upload-tool.com/api/v1/upload/bulk \ -H "x-api-key: YOUR_API_TOKEN" \ -F 'accounts=["cmf3k9x2a0001l408q7vbn2hd"]' \ -F "video=@/path/to/video.mp4" \ -F "description=Launch teaser" \ -F "schedule_date=2026-10-02T18:00:00+02:00" \ -F "status=pending_approval"

Over MCP, create_post takes the same status. An AI agent can prepare a week of posts this way; a human approves them.

Approve, send back, submit

EndpointWhoEffect
POST /upload/:id/submitAnyone who can see the postdraft → pending_approval
POST /upload/:id/approveOwner or adminScheduled at its date, or published now
POST /upload/:id/request-changes { "comment": "…" }Owner or adminBack to draft, with the note in reviewComment

A post that is approved is refused if its account is disconnected or has reached its daily limit (409, with a code). Edit a held post with PATCH /upload/:id (caption, title, date); its status can only change through the actions above.

POST /upload/review-links creates a link your client opens without an account to approve posts or ask for changes, with a note. Owners and admins only.

curl -X POST https://api.multi-upload-tool.com/api/v1/upload/review-links \ -H "x-api-key: YOUR_API_TOKEN" \ -H "Content-Type: application/json" \ -d '{"uploadIds": [456, 457]}'
{ "success": true, "data": { "url": "https://app.multi-upload-tool.com/review/…", "expiresAt": "2026-10-07T10:00:00.000Z", "uploadIds": [456, 457] } }
  • Without uploadIds: every post awaiting approval, up to 50. Drafts included are submitted.
  • The link lasts 14 days. The client sees the caption, the media, the account and the planned date — nothing else of your account.
  • Approving there schedules the post, exactly like approving it yourself. Asking for changes sends it back to draft with the client’s note.
  • The client sees everything that will be published: the account, the planned date, the media, the title and the description (each labelled), and the settings of that platform — visibility, category, tags, made-for-kids, comments, AI label… Settings of other platforms are not shown.
  • The page is not indexed by search engines.

Being told about the client’s decision

When a post is approved or sent back — by your client or by an owner/admin — the post’s author and the person who sent the link are notified: push, Telegram and email for a request for changes (with the note), push for an approval. Adjust it in Settings > Notifications. The same decisions fire the webhooks upload.changes_requested and upload.approved, with reviewedBy (client or team) and the comment.

Your brand on the client page

By default the page shows Powered by Multi Upload Tool. Under Customize page (next to any client link), set your brand name, a logo (PNG, JPEG, WebP or SVG, up to 150 KB) and the link they open. It is saved once for the workspace and used on every client link, including the ones already sent.

In the dashboard:

  • Have my client approve it in the composer: the post is created awaiting approval, and its client link is generated and shown right away.
  • Generate client link on a post in the calendar, or in the banner that lists the posts awaiting approval (one link for all of them).
  • The link stays shown, with a copy button, in the post’s details — including after it is approved. GET /upload/:id and the upload list return it as reviewLink: { url, expiresAt }.

Over MCP: create_review_link.

Require approval in a team

In the dashboard, the team owner turns on Members’ posts need approval on the team page. Then:

  • Every post a MEMBER creates — app, API or MCP — starts as pending_approval, whatever it asks for. It cannot publish directly.
  • Only owners and admins approve, and only they can create a client review link.
  • Members cannot add videos to a pool (a pool publishes on its own).
  • The rule follows the account’s team: a member’s personal API key does not get around it.