This guide assumes you already have an API key and at least one connected profile. If not, do the Quickstart first (5 minutes).
1. The building block: HTTP → Make a request
Every call below uses one module: HTTP → Make a request. The common settings:2. Publish a text post
Add HTTP → Make a request:- URL —
https://api.madiad.com/v1/posts/text - Method —
POST - Headers — add
Authorization=Bearer mdc_live_… - Body type —
Raw - Content type —
application/json - Request content:
3. Make retries safe with an Idempotency-Key
Make re-runs a module on error or when you replay a scenario. To avoid a duplicate post, add a header whose value is stable per item — the Hub treats a repeat of the same key as the same request. Add a header:
Use a value that is unique per intended post and constant across retries of that same post. Good choices: a UUID you generate once and write back to the row, or a hash of the content itself.
4. Publish photos or video
Photos —POST /v1/posts/photos. Set Body type to Multipart/form-data, repeat platforms[] once per platform, and attach the image through a file field mapped from a previous module (e.g. Google Drive → Download a file, or HTTP → Get a file):
Already have a public image URL instead of a file? Skip the upload and send
photo_urls[] as Raw JSON instead — see Send photos by URL.
Video — POST /v1/posts/video takes JSON only, not a file upload. Set Body type to Raw / application/json and pass a public video_url:
5. Handle the async response
A text or photo post to fast platforms usually returns"status": "completed". Video is asynchronous — it returns "status": "processing" and a request_id. Two ways to finish:
Poll — add a Sleep module, then another HTTP → Make a request:
status is completed, partial, or failed.
Webhook (recommended) — add a Custom webhook module in Make, copy its address, and register it in your dashboard at hub.madiad.com/dashboard/webhooks for the post.completed event. The Hub signs each delivery with HMAC-SHA256; verify it before trusting the payload. See Webhooks.
6. Read per-platform results
With Parse response on, map the reply directly. A post can partially succeed — branch on each platform’ssuccess, not just the top-level status:
success to send failures to an alert.
Example scenario: Google Sheets → all platforms
- Google Sheets → Watch rows (or a scheduled Search rows where
status = ready). - HTTP → Make a request →
POST /v1/posts/photoswithprofile_id,platforms[], andcaptionmapped from the row;Idempotency-Key= a UUID column on the row (not the row number — see the warning above). - Router on the response → on success, Google Sheets → Update a row to
published; on failure, send an alert.
Next steps
Per-platform fields
Override captions, titles, and options per platform.
Scheduling
Let the Hub publish at a future time for you.
Idempotency
Safe retries from any automation.
Webhooks
Get a signed callback when a post finishes.

