curl --request POST \
--url https://api.madiad.com/v1/posts/text \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"profile_id": "<string>",
"platforms": [],
"caption": "<string>",
"title": "<string>",
"scheduled_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"add_to_queue": true,
"facebook_page_id": "<string>",
"subreddit": "<string>",
"reddit_title": "<string>",
"youtube_title": "<string>",
"first_comment": "<string>"
}
'import requests
url = "https://api.madiad.com/v1/posts/text"
payload = {
"profile_id": "<string>",
"platforms": [],
"caption": "<string>",
"title": "<string>",
"scheduled_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"add_to_queue": True,
"facebook_page_id": "<string>",
"subreddit": "<string>",
"reddit_title": "<string>",
"youtube_title": "<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: [],
caption: '<string>',
title: '<string>',
scheduled_at: '2023-11-07T05:31:56Z',
timezone: '<string>',
add_to_queue: true,
facebook_page_id: '<string>',
subreddit: '<string>',
reddit_title: '<string>',
youtube_title: '<string>',
first_comment: '<string>'
})
};
fetch('https://api.madiad.com/v1/posts/text', 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/text",
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' => [
],
'caption' => '<string>',
'title' => '<string>',
'scheduled_at' => '2023-11-07T05:31:56Z',
'timezone' => '<string>',
'add_to_queue' => true,
'facebook_page_id' => '<string>',
'subreddit' => '<string>',
'reddit_title' => '<string>',
'youtube_title' => '<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/text"
payload := strings.NewReader("{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\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 \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"youtube_title\": \"<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/text")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\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 \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"youtube_title\": \"<string>\",\n \"first_comment\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.madiad.com/v1/posts/text")
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 \"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 \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"youtube_title\": \"<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>"
}
}Đăng bài chữ
Đăng phần chữ lên một hoặc nhiều kênh.
Có thể ghi đè cho riêng từng kênh bằng các trường gửi thêm, chúng được chuyển đi nguyên vẹn: <kênh>_caption ghi đè phần thân và <kênh>_title ghi đè tiêu đề, cho bất kỳ kênh nào có trong platforms.
Những kênh nhận bài chữ: linkedin, facebook, x, threads, reddit, bluesky, google_business, telegram, discord, slack, mastodon, nostr, lemmy, devto, hashnode, wordpress, whop, listmonk.
curl --request POST \
--url https://api.madiad.com/v1/posts/text \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"profile_id": "<string>",
"platforms": [],
"caption": "<string>",
"title": "<string>",
"scheduled_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"add_to_queue": true,
"facebook_page_id": "<string>",
"subreddit": "<string>",
"reddit_title": "<string>",
"youtube_title": "<string>",
"first_comment": "<string>"
}
'import requests
url = "https://api.madiad.com/v1/posts/text"
payload = {
"profile_id": "<string>",
"platforms": [],
"caption": "<string>",
"title": "<string>",
"scheduled_at": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"add_to_queue": True,
"facebook_page_id": "<string>",
"subreddit": "<string>",
"reddit_title": "<string>",
"youtube_title": "<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: [],
caption: '<string>',
title: '<string>',
scheduled_at: '2023-11-07T05:31:56Z',
timezone: '<string>',
add_to_queue: true,
facebook_page_id: '<string>',
subreddit: '<string>',
reddit_title: '<string>',
youtube_title: '<string>',
first_comment: '<string>'
})
};
fetch('https://api.madiad.com/v1/posts/text', 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/text",
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' => [
],
'caption' => '<string>',
'title' => '<string>',
'scheduled_at' => '2023-11-07T05:31:56Z',
'timezone' => '<string>',
'add_to_queue' => true,
'facebook_page_id' => '<string>',
'subreddit' => '<string>',
'reddit_title' => '<string>',
'youtube_title' => '<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/text"
payload := strings.NewReader("{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\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 \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"youtube_title\": \"<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/text")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"profile_id\": \"<string>\",\n \"platforms\": [],\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 \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"youtube_title\": \"<string>\",\n \"first_comment\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.madiad.com/v1/posts/text")
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 \"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 \"subreddit\": \"<string>\",\n \"reddit_title\": \"<string>\",\n \"youtube_title\": \"<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>"
}
}Ủy quyền
API key của bạn, gửi ở header Authorization: Bearer <key>. Một key quản lý mọi hồ sơ trong tài khoản.
Tiêu đề
Khoá bạn tự sinh cho TỪNG bài, ghi xuống TRƯỚC khi gọi. Dùng lại một khoá đã hoàn tất thì API trả về kết quả cũ chứ không đăng bài mới — nhìn từ ngoài giống hệt bị bỏ qua trong im lặng. Dùng lại cho một thân yêu cầu KHÁC thì nhận idempotency_conflict.
Nội dung
Id của hồ sơ thương hiệu cần thao tác. Lấy danh sách bằng GET /v1/profiles.
Các kênh cần đăng. Nhận cả chuỗi các mã cách nhau bằng dấu phẩy. Chỉ những kênh liệt kê ở đây nhận bài chữ; kênh khác bị từ chối bằng 400.
linkedin, facebook, x, threads, reddit, bluesky, google_business, telegram, discord, slack, mastodon, nostr, lemmy, devto, hashnode, wordpress, whop, listmonk PHẦN THÂN của bài. Đây KHÔNG phải tiêu đề: title (và <kênh>_title cho riêng từng kênh) là trường khác. Nhét thân bài vào title thì bài vẫn đăng được nên rất khó phát hiện, nhưng nó đi vòng qua phép kiểm độ dài thân bài.
TIÊU ĐỀ bài, dùng chung cho mọi kênh. YouTube, Reddit và Pinterest bắt buộc có; <kênh>_title ghi đè cho riêng một kênh.
Đăng vào thời điểm này thay vì đăng ngay (ISO 8601). Đi kèm timezone.
Múi giờ IANA cho scheduled_at, ví dụ Asia/Ho_Chi_Minh.
Đưa bài vào hàng chờ của hồ sơ thay vì đăng ngay.
Trang Facebook cần đăng lên. BỊ BỎ QUA khi hồ sơ đã ghim sẵn một Trang (ghim thắng), và bị BỎ HẲN ở các bài hẹn giờ.
BẮT BUỘC khi đăng lên Reddit. Subreddit đích, không kèm tiền tố r/.
BẮT BUỘC khi đăng lên Reddit. Tiêu đề bài trên Reddit. Thiếu thì lấy caption.
BẮT BUỘC khi đăng lên YouTube. Tiêu đề video trên YouTube. Thiếu thì lấy caption.
Đoạn chữ đăng làm bình luận đầu tiên. Chỉ Trang Facebook.
Phản hồi
Thành công.
processing và scheduled chưa phải kết quả — tra lại bằng GET /v1/posts/status.
completed, partial, failed, processing, scheduled Chỉ xuất hiện khi có ít nhất một kênh từ chối.
Khoá theo tên kênh.
Show child attributes
Show child attributes

