Skip to main content
Một bài đăng xuất bản nội dung lên một hoặc nhiều nền tảng được kết nối với Profile. Bạn gửi một request, MADIAD Hub phân phối nội dung đến từng nền tảng bạn liệt kê và trả về kết quả theo từng nền tảng.
Đăng bài không giới hạn trên mọi gói trả phí, không có hạn mức số bài đăng hằng tháng. Mức sử dụng vẫn được ghi nhận, và mỗi request được tính là một lượt đăng bất kể nhắm tới bao nhiêu nền tảng: đăng lên TikTok, Instagram và Facebook trong một lần gọi được ghi nhận 1 lượt đăng, không phải 3. Xem Mức sử dụng để đọc số liệu hiện tại.

Chọn endpoint theo loại media

Endpoint ảnh dùng multipart/form-data khi tải file lên, hoặc JSON thuần khi ảnh đến từ URL (photo_urls[], xem Đăng ảnh bằng URL). Văn bản và video dùng JSON.

Số ảnh mỗi bài

MADIAD Hub không tự đặt giới hạn số ảnh bạn đính kèm vào photos[], ảnh được chuyển thẳng qua nền tảng. Mỗi nền tảng tự áp giới hạn tối đa riêng, nên giới hạn thực tế cho một bài fan-out là giới hạn nhỏ nhất trong số các nền tảng bạn nhắm tới:
Đây là giới hạn do chính các nền tảng công bố, không phải giới hạn MADIAD Hub áp đặt, các con số này có thể thay đổi phía nền tảng mà không báo trước. Nếu chưa chắc, hãy thử với một batch nhỏ trước.

Phân phối với platforms[]

Liệt kê tất cả nền tảng đích. Nội dung giống nhau được gửi đến từng nền tảng, trừ khi bạn ghi đè theo từng nền tảng.
Một request dùng chung phần media cho tất cả nền tảng được liệt kê. Bạn có thể ghi đè phần chữ theo từng nền tảng (caption<platform>_caption, xem bên dưới) và truyền tuỳ chọn riêng của nền tảng, nhưng photos[] / photo_urls[] / video bạn đính kèm sẽ đi tới mọi nền tảng trong request đó, không có field media riêng cho từng nền tảng. Muốn đăng ảnh hoặc video khác nhau cho mỗi nền tảng, hãy gửi một request riêng cho từng nền tảng (mỗi request kèm photos[]/video của riêng nó).

Đăng ảnh bằng URL

Thay vì tải file lên, bạn có thể truyền link công khai qua photo_urls[]. MADIAD Hub sẽ tự tải từng ảnh về phía máy chủ và đăng y hệt như khi bạn gửi file trực tiếp. Nên dùng cách này cho ảnh dung lượng lớn hoặc nhiều ảnh một lúc: phần truyền tải nặng diễn ra ở phía chúng tôi, request của bạn luôn gọn nhẹ và không bao giờ gặp lỗi vượt kích thước request.
  • Mỗi URL phải là link ảnh trực tiếp, công khai, dùng https:// (hostname, không dùng địa chỉ IP). Link trang chia sẻ mở ra một trang web (ví dụ trang xem của drive) sẽ bị từ chối kèm thông báo lỗi rõ ràng. Hãy dùng URL file trực tiếp. Redirect được theo tối đa 5 bước, nhưng mọi bước đều phải là https://.
  • Tối đa 40 URL mỗi request, 30 MB mỗi ảnhtổng 120 MB.
  • Cũng dùng được trong multipart: gửi photo_urls[] dưới dạng field text, và trộn thoải mái với photos[] dạng file trong cùng một request. Với carousel, file tải lên đứng trước, rồi tới ảnh từ URL, mỗi nhóm theo thứ tự gửi.

Ghi đè theo từng nền tảng

caption là chú thích chung mặc định. Ghi đè cho một nền tảng cụ thể bằng field <platform>_caption, tiện lợi cho hashtag, mention hoặc giới hạn độ dài.
Cùng kiểu tiền tố này áp dụng cho các tùy chọn theo nền tảng khác, chẳng hạn instagram_first_comment.
Ghi đè cho Instagram được đăng thành một job riêng. Khi instagram_caption khác với caption chung và request còn nhắm tới nền tảng khác, MADIAD Hub gửi Instagram tách riêng để nó nhận đúng nội dung bạn viết. Với bài đăng thường, bạn không thấy gì khác biệt: vẫn một lượt đăng tính vào hạn mức, một request_id, một trạng thái để theo dõi. Với bài hẹn giờ thì có một điểm nhìn thấy được: danh sách lịch đăng hiển thị Instagram thành một mục riêng, nên huỷ hoặc sửa nó là thao tác tách khỏi các nền tảng còn lại.Có một tổ hợp bị từ chối: add_to_queue đi kèm instagram_caption khác với caption chung. Khi đó Instagram sẽ chiếm một slot hàng đợi riêng và lên vào thời điểm khác với phần còn lại, nên request bị từ chối thay vì đăng lệch giờ. Hãy đưa Instagram vào hàng đợi bằng một request riêng, hoặc dùng caption chung.

Giới hạn ký tự

caption ánh xạ vào trường văn bản chính của mỗi nền tảng. Giới hạn khác nhau theo nền tảng, và ở một vài nền tảng trường đó là tiêu đề ngắn, còn nội dung dài nằm ở description riêng: Một số quy tắc rút ra từ bảng trên:
  • Đăng nhiều nền tảng cùng lúc? caption chỉ bị từ chối ngay khi nó dài hơn giới hạn của mọi nền tảng được chọn. Nếu vừa với ít nhất một nền tảng, request vẫn chạy và mỗi nền tảng trả kết quả riêng, nên hãy đặt <platform>_caption cho nền tảng có giới hạn chặt hơn.
  • Phần ghi đè theo từng nền tảng cũng được kiểm tra, với những nền tảng có giới hạn cứng: Instagram, LinkedIn, TikTok, YouTube, Reddit, Pinterest và Google Business. Một <platform>_title (hoặc <platform>_caption) vượt giới hạn (ví dụ tiktok_title > 90 cho bài ảnh, reddit_title > 300, hay instagram_caption > 2.200) sẽ bị báo lỗi rõ ràng trước khi đăng. X, Threads và Bluesky không kiểm trước vì chúng tự tách thành chuỗi bài thay vì từ chối; Telegram và Discord thì cắt bớt; còn ghi đè cho Facebook chỉ bị giới hạn ở Reels. Những trường hợp này được gửi thẳng tới nền tảng và tự báo kết quả riêng.
  • Link trên X. Mọi URL mà X biến thành liên kết bấm được sẽ bị gỡ khỏi bài X trước khi đăng. Hãy để link trong hồ sơ hoặc trong ảnh/video.

Tùy chọn nâng cao theo nền tảng

Bất kỳ tùy chọn nào một nền tảng hỗ trợ đều có thể truyền qua, MADIAD Hub chuyển tiếp nguyên vẹn, nên bạn không bị giới hạn ở các field liệt kê ở đây. Thêm tiền tố tên nền tảng khi tùy chọn đó đặc thù cho nền tảng. Một vài ví dụ phổ biến: Các field dạng mảng dùng quy ước field[], lặp lại key một lần cho mỗi giá trị. Để xem toàn bộ các tùy chọn theo từng nền tảng (mức độ riêng tư, loại video, poll, CTA, tải phụ đề và nhiều hơn nữa), xem Tùy chọn theo nền tảng.

Bình luận đầu tiên (first comment)

Tự động đăng một bình luận ngay khi bài vừa xuất bản, tiện để gắn link, hashtag hoặc lời kêu gọi hành động mà bạn không muốn nhét vào caption chính. Đặt first_comment làm giá trị chung, và ghi đè theo từng nền tảng bằng <platform>_first_comment (giá trị riêng từng nền tảng được ưu tiên khi có cả hai).
Hỗ trợ trên Instagram, Facebook, Threads, Bluesky, Reddit, X, YouTube và LinkedIn. Một vài hành vi riêng theo nền tảng:
  • X và Threads: đăng dưới dạng reply cho bài. Với bài X tự tách chuỗi, nó reply vào tweet cuối của chuỗi.
  • YouTube: đăng thành bình luận cấp cao nhất dưới video.
  • Instagram: chỉ áp dụng cho bài ảnh và video (Instagram không có bài chỉ văn bản).
Để đính ảnh vào bình luận, gửi first_comment_media[] dạng file nhị phân, y hệt photos[]. Hiện chỉ hỗ trợ Reddit, và không dùng được cho bài đã lên lịch hoặc đang trong hàng đợi.

Caption sinh bằng AI

Để MADIAD Hub tự viết caption thay vì bạn cung cấp. Hữu ích nhất với bài ảnh và video:

Yêu cầu của từng nền tảng

Bài đăng Facebook đi đến một Page, không phải Profile cá nhân. Nếu Profile chỉ có một Page thì tự động dùng Page đó; nếu có nhiều Page, truyền facebook_page_id để chọn. Để liệt kê các Page của một Profile và lấy ID của chúng, dùng GET /v1/connections/facebook/pages, xem Tìm ID của Page & board.
Gửi ảnh dưới dạng file nhị phân (photos[]=@file) hoặc link công khai (photo_urls[]), xem Đăng ảnh bằng URL. Với video, truyền một video_url công khai.
Bài đăng Reddit luôn có tiêu đề. Mặc định caption được dùng làm tiêu đề; truyền reddit_title nếu muốn đặt tiêu đề riêng.

Đọc response

Lệnh đăng trả về status của bài, các nền tảng đã nhắm tới, và các id để bạn poll:
  • completed: đã xuất bản đồng bộ, results chứa kết quả theo từng nền tảng.
  • processing: đang tải lên (thường gặp với video). Poll bằng request_id, hoặc đăng ký webhooks.
  • scheduled: đã lên lịch cho thời điểm tương lai, poll bằng job_id.
  • partial: một số nền tảng đã đăng thành công và ít nhất một nền tảng bị từ chối, kiểm tra từng mục trong results.
  • failed: tất cả nền tảng nhắm tới đều từ chối bài đăng. Mã HTTP vẫn là 200, lý do theo từng nền tảng nằm trong results.
  • unknown: chưa xác định được kết quả trong thời gian chờ (trả về HTTP 502 với mã upstream_timeout). Bài có thể đã lên, đừng retry ngay; xem LỗiIdempotency.
Poll trạng thái (GET /v1/posts/status) dùng cùng bộ giá trị này. Khi có results, nó được phân theo từng nền tảng. Mỗi mục có success, kèm publish_idurl khi bài đã lên, hoặc errorerror_code khi nền tảng từ chối:
error_code là mã lý do ngắn gọn dành cho máy đọc (ví dụ account_restricted, daily_cap_reached, media_invalid_format), hãy phân nhánh theo mã này thay vì theo câu chữ của error. Mã chỉ xuất hiện khi nền tảng có trả về. Response của lệnh đăng và kết quả poll trạng thái dùng đúng cùng một cấu trúc này. Khi một số (nhưng không phải tất cả) nền tảng thất bại, status cấp cao là partial và mảng failed_platforms liệt kê các nền tảng đã thất bại.
Một bài đăng có thể thành công một phần, khi một nền tảng xuất bản được còn nền tảng khác thất bại. Hãy kiểm tra results theo từng nền tảng thay vì chỉ dựa vào status ở cấp cao nhất.

Kiểm tra trạng thái sau

Poll một bài bất đồng bộ hoặc đã lên lịch bằng request_id hoặc job_id từ response của lệnh đăng:
Để nhận cập nhật chủ động thay vì kiểm tra định kỳ, xem Webhooks.