sangtao.ai
API key

Đăng bài

Đăng bài

Đăng video, ảnh hoặc chỉ chữ lên một hay nhiều nền tảng, ngay hoặc theo giờ hẹn.

POSThttps://api.sangtao.ai/v2/publishing/posts

Xác thực

  • X-Api-Keystring · headerbắt buộc

    API key của bạn, tạo ở trang API key trong tài khoản.

202 nghĩa là đã nhận, chưa đăng xong. Việc tải lên và đăng chạy nền — từ vài chục giây đến vài phút tuỳ nền tảng và video. Theo dõi bằng Lấy một bài đăng.

Body

  • teamIdstring (guid)bắt buộc

    Nhóm dùng để đăng — bài đi qua các tài khoản đã kết nối của nhóm

  • platformsobject[]bắt buộc

    Mỗi nền tảng cần đăng một phần tử, ít nhất một

    Hiện thuộc tính con
    • platformstringbắt buộc

      Nền tảng, không phân biệt hoa thường. Nhận X thay cho Twitter. Phải đã kết nối trong nhóm

      Giá trị có thể:TikTokYouTubeInstagramFacebookThreadsTwitter

    • captionstring

      Nội dung bài — TikTok, Facebook, Instagram, Threads, X. Bắt buộc cho mọi nền tảng của bài chỉ có chữ

    • titlestring

      Tiêu đề video — YouTube

    • descriptionstring

      Mô tả video — YouTube

    • typestring

      Loại bài, để thay loại mặc định (bảng Loại bài mặc định bên dưới)

      Giá trị có thể:POSTREELSTORYSHORTVIDEOIMAGE

    • privacystring

      TikTok: PUBLIC_TO_EVERYONE, SELF_ONLY, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR. YouTube: PUBLIC, PRIVATE, UNLISTED. Bỏ trống: công khai

      Giá trị có thể:PUBLIC_TO_EVERYONESELF_ONLYMUTUAL_FOLLOW_FRIENDSFOLLOWER_OF_CREATORPUBLICPRIVATEUNLISTED

    • textFormatPresetIdstring

      Bài chỉ có chữ trên Facebook (không có jobId, videoUrl, imageUrls): nền màu phía sau phần chữ. Bỏ trống: bài chữ thường. Có ảnh hoặc video thì Facebook bỏ nền; nền tảng khác bỏ qua. Lấy ID từ GET /publishing/facebook/text-presets (trang Nền chữ Facebook). ID không có thật vẫn được nhận và hỏng lúc đăng

    • musicSoundIdstring

      Bài ảnh TikTok: songClipId của một bản nhạc lấy từ GET /publishing/tiktok/music (trang Nhạc TikTok). Bỏ trống: TikTok tự chọn. Bài video và nền tảng khác bỏ qua

  • jobIdstring

    Một job video đã xong của bạn trên sangtao.ai: đăng video của job (và ảnh bìa, nếu bỏ trống thumbnailUrl). Được ưu tiên hơn videoUrl

  • videoUrlstring

    URL công khai của video — tải được không cần đăng nhập và còn hạn tới lúc đăng

  • imageUrlsstring[]

    URL ảnh công khai, tối đa 35; mỗi nền tảng chỉ lấy đến mức nó cho phép (TikTok 35, Instagram 20, Threads 20, Facebook 10, X 4)

  • thumbnailUrlstring

    Ảnh bìa cho YouTube, Facebook, Instagram. TikTok lấy một khung hình trong video — xem coverTimeMs

  • coverTimeMsnumber

    Video TikTok: thời điểm trong video làm ảnh bìa, tính bằng mili-giây, 0–600000. Bỏ trống: đầu video

  • scheduleAtstring

    Thời điểm đăng (ISO 8601, UTC). Bỏ trống: đăng ngay

  • firstCommentstring

    Bình luận tự động sau khi bài lên. Hiện chỉ áp dụng cho Facebook

  • idempotencyKeystring

    Gửi lại cùng khoá, cùng nội dung trong 24 giờ: nhận lại đúng bài cũ (idempotentReplay: true), không đăng và không trừ tiền lần hai. Cùng khoá mà nội dung khác: 422 IDEMPOTENCY_KEY_REUSED. Gửi qua header Idempotency-Key cũng được

  • webhookUrlstring

    URL https công khai (cổng 443) để nhận kết quả của bài này khi xong — xem Webhook. URL sai trả 422 INVALID_WEBHOOK_URL, trước khi tạo bài hay trừ tiền

  • webhookSecretstring

    Dùng để ký các lần giao đó (X-Sangtao-Signature). Tối đa 200 ký tự. Không gửi thì không có chữ ký

Gửi một trong jobId, videoUrl hoặc imageUrls — hoặc không gửi cái nào để đăng bài chỉ có chữ (chỉ Facebook, X, Threads, xem bên dưới).

ID cho textFormatPresetId: Nền chữ Facebook. Bản nhạc cho musicSoundId: Nhạc TikTok.

Bài chỉ có chữ

Bỏ jobId, videoUrl và imageUrls để đăng chỉ có chữ. Khi đó mọi nền tảng phải là Facebook, X (Twitter) hoặc Threads — TikTok, YouTube, Instagram cần video hoặc ảnh (400 VALIDATION_ERROR nêu tên các nền tảng đó). Mỗi nền tảng cần caption; type là POST hoặc bỏ trống. Với Facebook, textFormatPresetId thêm nền màu; không có thì là bài chữ thường. Giá như một lượt đăng bình thường.

json
{
  "teamId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "platforms": [
    { "platform": "Facebook", "type": "POST", "caption": "Nội dung bài", "textFormatPresetId": "249307305544279" },
    { "platform": "X", "caption": "Nội dung bài" }
  ]
}

Loại bài mặc định

Nền tảngVideoChỉ có ảnhChỉ có chữ
TikTokVIDEOIMAGE—
YouTubeVIDEO——
InstagramREELPOST—
FacebookREELPOSTPOST
ThreadsPOSTPOSTPOST
Twitter (X)POSTPOSTPOST

Mỗi nền tảng tự đặt giới hạn — độ dài video, tỉ lệ khung, độ dài caption. Không được kiểm trước khi đăng; bài vi phạm sẽ thất bại trên nền tảng đó, lý do ở platforms[].error.

Response

  • postIdstring (guid)bắt buộc

    ID bài đăng — theo dõi bằng Lấy một bài đăng

  • statusstringbắt buộc

    Pending: đã nhận, đang chờ xử lý

  • statusMessagestring | null

    Ghi chú ngắn về trạng thái

  • idempotentReplayboolean

    Chỉ có (true) khi đây là lần gọi lại cùng idempotencyKey: bài đã tạo từ trước

Chi phí một lượt đăng

Mỗi lần gọi endpoint này là một lượt đăng, dù đăng lên bao nhiêu nền tảng. Bài hẹn giờ được tính ngay lúc gọi.

Tính bằngCách tính
CreditsMột số credit cố định cho mỗi lượt được khoá khi lệnh gọi được nhận (thiếu thì 402 INSUFFICIENT_CREDITS). Credit bị trừ khi bài đã được gửi đi đăng — kể cả khi về sau một nền tảng từ chối — và được hoàn nếu hỏng trước bước đó, hoặc nếu bạn xoá bài khi còn Pending.
Gói thángMỗi lượt dùng một lượt trong hạn mức tháng của gói (cộng lượt mua thêm). Bài Failed và Cancelled không tính. Hết lượt: 400 QUOTA_EXCEEDED.

Mã lỗi

MãerrorCodeKhi nào
400VALIDATION_ERRORBody rỗng, thiếu platforms / platforms rỗng, tên nền tảng không hợp lệ, coverTimeMs ngoài khoảng cho phép — hoặc khi không có jobId / videoUrl / imageUrls: platforms có TikTok, YouTube hoặc Instagram (cần video hoặc ảnh; error nêu tên), một nền tảng thiếu caption, hoặc type khác POST
400JOB_NOT_READYVideo của job chưa render xong
400NO_CONNECTED_ACCOUNTMột nền tảng trong platforms chưa kết nối trong nhóm — kết nối trên sangtao.ai trước
400QUOTA_EXCEEDEDGói đăng bài theo tháng: đã hết lượt trong kỳ
402INSUFFICIENT_CREDITSKhông đủ credit cho lượt đăng
403NO_API_ACCESSGói đăng bài theo tháng không có quyền dùng API
404TEAM_NOT_FOUNDKhông có nhóm nào của bạn với teamId này
404JOB_NOT_FOUNDKhông có job nào của bạn với jobId này
409ACCOUNT_NEEDS_ATTENTIONTrang đăng bài của một nền tảng bị đổi hoặc mất quyền — chọn lại trang trên sangtao.ai; chưa đăng, chưa trừ tiền. details[0].params: platform, reason
422INVALID_WEBHOOK_URLwebhookUrl không phải URL https công khai cổng 443 — chưa đăng, chưa trừ tiền
422IDEMPOTENCY_KEY_REUSEDidempotencyKey này đã dùng cho nội dung khác — dùng khoá mới
500NO_SUBSCRIPTIONLỗi cấu hình phía sangtao.ai, không phải lỗi của bạn — liên hệ hỗ trợ
502PUBLISH_FAILEDGửi bài lên các nền tảng không được — thử lại
POST/publishing/posts
curl -X POST "https://api.sangtao.ai/v2/publishing/posts" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "teamId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "videoUrl": "https://cdn.example.com/video.mp4",
    "thumbnailUrl": "https://cdn.example.com/cover.jpg",
    "platforms": [
      {
        "platform": "TikTok",
        "caption": "Iced coffee in 3 steps #coffee",
        "privacy": "PUBLIC_TO_EVERYONE"
      },
      {
        "platform": "YouTube",
        "title": "How to make iced coffee at home",
        "description": "A three-step recipe.",
        "type": "SHORT"
      }
    ],
    "scheduleAt": "2026-11-09T02:00:00Z",
    "idempotencyKey": "550e8400-e29b-41d4-a716-446655440000"
  }'
{
  "success": true,
  "data": {
    "postId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "status": "Pending",
    "statusMessage": "Đang chờ xử lý..."
  }
}