curl --request POST \
--url https://api.madiad.com/v1/posts/video \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"profile_id": "<string>",
"platforms": [],
"video_url": "<string>",
"caption": "<string>",
"title": "<string>",
"scheduled_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"add_to_queue": true,
"facebook_page_id": "<string>",
"youtube_title": "<string>",
"subreddit": "<string>",
"reddit_title": "<string>",
"pinterest_board_id": "<string>",
"first_comment": "<string>"
}
'import requests
url = "https://api.madiad.com/v1/posts/video"
payload = {
"profile_id": "<string>",
"platforms": [],
"video_url": "<string>",
"caption": "<string>",
"title": "<string>",
"scheduled_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"add_to_queue": True,
"facebook_page_id": "<string>",
"youtube_title": "<string>",
"subreddit": "<string>",
"reddit_title": "<string>",
"pinterest_board_id": "<string>",
"first_comment": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
profile_id: '<string>',
platforms: [],
video_url: '<string>',
caption: '<string>',
title: '<string>',
scheduled_at: '2023-11-07T05:31:56Z',
timezone: '<string>',
add_to_queue: true,
facebook_page_id: '<string>',
youtube_title: '<string>',
subreddit: '<string>',
reddit_title: '<string>',
pinterest_board_id: '<string>',
first_comment: '<string>'
})
};
fetch('https://api.madiad.com/v1/posts/video', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.madiad.com/v1/posts/video",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'profile_id' => '<string>',
'platforms' => [
],
'video_url' => '<string>',
'caption' => '<string>',
'title' => '<string>',
'scheduled_at' => '2023-11-07T05:31:56Z',
'timezone' => '<string>',
'add_to_queue' => true,
'facebook_page_id' => '<string>',
'youtube_title' => '<string>',
'subreddit' => '<string>',
'reddit_title' => '<string>',
'pinterest_board_id' => '<string>',
'first_comment' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.madiad.com/v1/posts/video"
payload := strings.NewReader("{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\n \"video_url\": \"<string>\",\n \"caption\": \"<string>\",\n \"title\": \"<string>\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"add_to_queue\": true,\n \"facebook_page_id\": \"<string>\",\n \"youtube_title\": \"<string>\",\n \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"pinterest_board_id\": \"<string>\",\n \"first_comment\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.madiad.com/v1/posts/video")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\n \"video_url\": \"<string>\",\n \"caption\": \"<string>\",\n \"title\": \"<string>\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"add_to_queue\": true,\n \"facebook_page_id\": \"<string>\",\n \"youtube_title\": \"<string>\",\n \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"pinterest_board_id\": \"<string>\",\n \"first_comment\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.madiad.com/v1/posts/video")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\n \"video_url\": \"<string>\",\n \"caption\": \"<string>\",\n \"title\": \"<string>\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"add_to_queue\": true,\n \"facebook_page_id\": \"<string>\",\n \"youtube_title\": \"<string>\",\n \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"pinterest_board_id\": \"<string>\",\n \"first_comment\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "completed",
"profile_id": "<string>",
"platforms": [
"<string>"
],
"failed_platforms": [
"<string>"
],
"request_id": "<string>",
"job_id": "<string>",
"results": {}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}Publish a video post
Publish a video by URL.
Per-channel overrides are accepted as extra fields and forwarded verbatim: <channel>_caption overrides the body and <channel>_title the title, for any channel in platforms.
Channels that accept a video: tiktok, instagram, linkedin, youtube, facebook, x, threads, pinterest, reddit, bluesky, google_business, telegram, discord, mastodon, wordpress.
curl --request POST \
--url https://api.madiad.com/v1/posts/video \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"profile_id": "<string>",
"platforms": [],
"video_url": "<string>",
"caption": "<string>",
"title": "<string>",
"scheduled_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"add_to_queue": true,
"facebook_page_id": "<string>",
"youtube_title": "<string>",
"subreddit": "<string>",
"reddit_title": "<string>",
"pinterest_board_id": "<string>",
"first_comment": "<string>"
}
'import requests
url = "https://api.madiad.com/v1/posts/video"
payload = {
"profile_id": "<string>",
"platforms": [],
"video_url": "<string>",
"caption": "<string>",
"title": "<string>",
"scheduled_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"add_to_queue": True,
"facebook_page_id": "<string>",
"youtube_title": "<string>",
"subreddit": "<string>",
"reddit_title": "<string>",
"pinterest_board_id": "<string>",
"first_comment": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
profile_id: '<string>',
platforms: [],
video_url: '<string>',
caption: '<string>',
title: '<string>',
scheduled_at: '2023-11-07T05:31:56Z',
timezone: '<string>',
add_to_queue: true,
facebook_page_id: '<string>',
youtube_title: '<string>',
subreddit: '<string>',
reddit_title: '<string>',
pinterest_board_id: '<string>',
first_comment: '<string>'
})
};
fetch('https://api.madiad.com/v1/posts/video', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.madiad.com/v1/posts/video",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'profile_id' => '<string>',
'platforms' => [
],
'video_url' => '<string>',
'caption' => '<string>',
'title' => '<string>',
'scheduled_at' => '2023-11-07T05:31:56Z',
'timezone' => '<string>',
'add_to_queue' => true,
'facebook_page_id' => '<string>',
'youtube_title' => '<string>',
'subreddit' => '<string>',
'reddit_title' => '<string>',
'pinterest_board_id' => '<string>',
'first_comment' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.madiad.com/v1/posts/video"
payload := strings.NewReader("{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\n \"video_url\": \"<string>\",\n \"caption\": \"<string>\",\n \"title\": \"<string>\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"add_to_queue\": true,\n \"facebook_page_id\": \"<string>\",\n \"youtube_title\": \"<string>\",\n \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"pinterest_board_id\": \"<string>\",\n \"first_comment\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.madiad.com/v1/posts/video")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\n \"video_url\": \"<string>\",\n \"caption\": \"<string>\",\n \"title\": \"<string>\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"add_to_queue\": true,\n \"facebook_page_id\": \"<string>\",\n \"youtube_title\": \"<string>\",\n \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"pinterest_board_id\": \"<string>\",\n \"first_comment\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.madiad.com/v1/posts/video")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\n \"video_url\": \"<string>\",\n \"caption\": \"<string>\",\n \"title\": \"<string>\",\n \"scheduled_at\": \"2023-11-07T05:31:56Z\",\n \"timezone\": \"<string>\",\n \"add_to_queue\": true,\n \"facebook_page_id\": \"<string>\",\n \"youtube_title\": \"<string>\",\n \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"pinterest_board_id\": \"<string>\",\n \"first_comment\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "completed",
"profile_id": "<string>",
"platforms": [
"<string>"
],
"failed_platforms": [
"<string>"
],
"request_id": "<string>",
"job_id": "<string>",
"results": {}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}{
"error": {
"code": "unauthorized",
"message": "<string>"
}
}Authorizations
Your API key, sent as Authorization: Bearer <key>. One key manages every profile on the account.
Headers
A key you generate per post, written down BEFORE the call. Replaying a completed key returns the earlier result instead of publishing again — from outside that looks exactly like being ignored. Reusing one for a DIFFERENT body answers idempotency_conflict.
Body
Id of the brand profile to act on. List them with GET /v1/profiles.
Channels to publish to. A comma-separated string is accepted as well. Only the channels listed here accept a video; any other channel is refused with 400.
tiktok, instagram, linkedin, youtube, facebook, x, threads, pinterest, reddit, bluesky, google_business, telegram, discord, mastodon, wordpress https:// URL of the video to publish.
The post BODY. This is NOT the post title: title (and the per-channel <channel>_title) is a separate field, and putting the body in it skips the caption-length check.
The post TITLE, shared across channels. YouTube, Reddit and Pinterest need one; <channel>_title overrides it for a single channel.
Publish at this time instead of now (ISO 8601). Pair with timezone.
IANA timezone for scheduled_at, e.g. Asia/Ho_Chi_Minh.
Place the post in the profile's posting queue instead of publishing now.
Which Facebook Page to publish to. IGNORED when the profile has a Page pinned (the pin wins) and DROPPED entirely by scheduled jobs.
REQUIRED when posting to YouTube. Video title on YouTube. Falls back to caption when absent.
REQUIRED when posting to Reddit. Target subreddit, without the r/ prefix.
REQUIRED when posting to Reddit. Post title on Reddit. Falls back to caption when absent.
REQUIRED when posting to Pinterest. Target Pinterest board. List them with GET /v1/connections/pinterest/boards.
Text posted as the first comment. Facebook Pages only.
Response
Success.
processing and scheduled are not outcomes yet — poll GET /v1/posts/status.
completed, partial, failed, processing, scheduled Present only when at least one channel refused.
Keyed by channel.
Show child attributes
Show child attributes

