Chuyển đến nội dung

Hướng dẫn dành cho nhà phát triển

Gửi bài viết đến Amaposta từ quy trình nội dung của bạn: tải nội dung đa phương tiện lên, tạo bài viết cho mọi kênh, lên lịch và nhận phản hồi khi bài được đăng.

Xác thực

Tạo khóa API trong bảng điều khiển tại Cài đặt, API và webhook. Khóa bắt đầu bằng ss_live_, thuộc một không gian làm việc và có thể giới hạn ở một số dự án. Gửi khóa dưới dạng bearer token trong mọi yêu cầu:

Kiểm tra khóa
curl https://www.amaposta.com/api/v1/me \
  -H "Authorization: Bearer ss_live_…"

Phản hồi cho biết tên khóa, các phạm vi và không gian làm việc. Mỗi khóa có một hoặc nhiều phạm vi:

Phạm viCho phép
content:readĐọc dự án, kênh, bài viết và nội dung đa phương tiện.
content:writeTải nội dung đa phương tiện lên và tạo hoặc sửa bài viết.
posts:publishLên lịch và đăng không cần xét duyệt. Không có quyền này, bài viết chuyển vào hộp thư xét duyệt trong dự án dùng phê duyệt và giữ ở dạng bản nháp tại các dự án khác.

Mỗi khóa có thể gửi 120 yêu cầu mỗi phút. Vượt giới hạn này, bạn nhận 429 với mã rate_limited; hãy đợi một lát rồi thử lại.

Dự án và kênh

Bài viết nằm trong dự án. Liệt kê các dự án khóa của bạn có thể thấy, rồi các kênh trong một dự án. Bạn cần ID kênh để nhắm đến kênh đó hoặc ghi đè văn bản của kênh.

Liệt kê dự án và kênh
curl https://www.amaposta.com/api/v1/projects \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/channels \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

Kênh có provider (youtube, instagram, tiktok, x, facebook, custom hoặc sandbox), status (active, expiring, needs_reconnect, error hoặc disabled) và các loại bài viết mà kênh supports.

Tải nội dung đa phương tiện lên

Ảnh và video được tải lên một lần cho mỗi dự án và có thể dùng trong số lượng bài viết không giới hạn. Có ba cách nhập.

Tải lên trực tiếp

Gửi tệp dưới dạng dữ liệu biểu mẫu multipart trong trường có tên file. Phù hợp nhất cho tệp tối đa vài trăm MB.

POST /api/v1/projects/{project_id}/media
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -F "[email protected]"

Tải lên có chữ ký sẵn cho tệp lớn

Yêu cầu URL tải lên, PUT dữ liệu trực tiếp vào bộ lưu trữ, sau đó báo cho Amaposta rằng bạn đã hoàn tất.

Ba yêu cầu
# 1. Ask for an upload URL. The response is {"media": { … }, "upload_url": "…"}
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media/uploads \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename": "batch-142.mp4", "content_type": "video/mp4", "size_bytes": 48213844}'

# 2. Upload the bytes to upload_url
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: video/mp4" \
  --upload-file batch-142.mp4

# 3. Finish the upload
curl -X POST https://www.amaposta.com/api/v1/media/$MEDIA_ID/complete \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

Nhập từ URL

Cung cấp URL công khai để Amaposta tải tệp xuống trong nền. Bạn cũng có thể bỏ qua bước này và truyền media_url khi tạo bài viết.

POST /api/v1/projects/{project_id}/media/import
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media/import \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://cdn.example.com/batch-142.mp4"}'

Mỗi lần tải lên trả về đối tượng đa phương tiện. status chuyển từ pending sang processing rồi ready (hoặc failed, kèm error). Sau khi xử lý, đối tượng có width, height, duration_ms và hình thu nhỏ. Thăm dò GET /api/v1/media/{id} hoặc lắng nghe webhook media.ready. url trả về có chữ ký và có hiệu lực trong 12 giờ.

Tạo bài viết

POST /api/v1/projects/{project_id}/posts tạo một bài viết với một lượt gửi cho mỗi kênh. Amaposta điều chỉnh cho từng nền tảng: tiêu đề chỉ được gửi đến nơi có trường tiêu đề, hashtag trở thành thẻ trên YouTube và văn bản trong bài ở nơi khác.

Tạo bài viết video và thêm vào hàng đợi
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/posts \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: episode-142" \
  -d @- <<'JSON'
{
  "kind": "video",
  "title": "How we roast a batch in 12 minutes",
  "description": "From green beans to first crack. We filmed one batch start to finish.",
  "hashtags": ["coffee", "behindthescenes"],
  "media_url": "https://cdn.example.com/batch-142.mp4",
  "cover_url": "https://cdn.example.com/batch-142-cover.jpg",
  "overrides": {
    "<x-channel-id>": {
      "description": "Batch 142 is out: green beans to first crack in 12 minutes."
    },
    "<youtube-channel-id>": {
      "options": { "privacy": "unlisted" }
    }
  },
  "schedule": { "mode": "queue" },
  "external_ref": "episode-142",
  "metadata": {
    "pipeline": { "name": "nightly-cut", "run": "2026-10-17" }
  }
}
JSON

Trường

TrườngChức năng
kindtext, image hoặc video. Bắt buộc.
titleĐược dùng trên nền tảng có trường tiêu đề: YouTube, bài viết ảnh TikTok, video Facebook.
descriptionChú thích, mô tả hoặc văn bản bài viết. Cũng chấp nhận dưới tên body, caption hoặc text.
hashtagsDanh sách có hoặc không có #.
media_id, media_urlID nội dung đa phương tiện đã tải lên hoặc URL công khai để Amaposta tải xuống giúp bạn. Cần cho bài viết có ảnh và video.
cover_media_id, cover_urlẢnh bìa cho video, nếu nền tảng hỗ trợ.
channelsID các kênh để đăng. Bỏ qua để dùng mọi kênh đang hoạt động trong dự án có hỗ trợ loại bài viết này.
overridesThay đổi riêng cho từng kênh, dùng ID kênh làm khóa: title, description, hashtags và options của nền tảng, như privacy trên YouTube.
schedulemode là at (kèm at theo ISO 8601), now hoặc queue để chọn khung giờ đăng trống tiếp theo. Bỏ qua trường này để tạo bản nháp.
external_refMã tham chiếu của bạn, được trả lại trên bài viết và trong lượt gửi API tùy chỉnh.
metadataJSON tự do được lưu cùng bài viết. Thêm "pipeline" để đánh dấu nội dung được tạo tự động; bảng điều khiển hiển thị và webhook báo nguồn là pipeline.

Phản hồi là bài viết, bao gồm một mục trong deliveries cho mỗi kênh.

Thử lại an toàn

Mạng có thể làm mất yêu cầu. Gửi tiêu đề Idempotency-Key khi tạo bài viết; lần thử lại với cùng khóa sẽ trả về bài viết từ lần thử đầu thay vì tạo bài thứ hai. Dùng giá trị ổn định từ phía bạn, như ID công việc hoặc tập. Khóa được cắt còn 200 ký tự.

Lên lịch và đăng

Lên lịch bản nháp, đăng ngay, thêm vào hàng đợi hoặc gỡ khỏi lịch bằng POST /api/v1/posts/{post_id}/schedule.

Lên lịch cho một thời điểm
curl https://www.amaposta.com/api/v1/posts/$POST_ID/schedule \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode": "at", "at": "2026-10-20T07:00:00Z"}'
  • atĐăng vào thời gian đã cho, tối đa hai năm tới.
  • nowĐăng ngay lập tức.
  • queueChọn khung giờ đăng trống tiếp theo cho các kênh của bài viết trong 12 tuần tới.
  • unscheduleChuyển bài viết về bản nháp.

Trước khi lên lịch, các bước kiểm tra tương tự như trong trình soạn thảo sẽ chạy. Nếu một bước thất bại, yêu cầu trả về 400 kèm thông báo như Khắc phục trước khi lên lịch: YouTube cần tiêu đề. Việc lên lịch cần phạm vi posts:publish hoặc dự án có bật phê duyệt; trong trường hợp đó, bài viết chờ trong hộp thư xét duyệt.

Đọc bài viết và lượt gửi

Liệt kê bài viết của dự án, lọc theo status (các trạng thái cách nhau bằng dấu phẩy, hoặc inbox, queue hay history), khoảng from/to, limit và offset. Phản hồi là {"items": […], "total": n}.

Nội dung sắp tới và chi tiết một bài viết
curl "https://www.amaposta.com/api/v1/projects/$PROJECT_ID/posts?status=queue" \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

curl https://www.amaposta.com/api/v1/posts/$POST_ID \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

Bài viết có status tổng thể (draft, in_review, changes_requested, ready, scheduled, publishing, published, partial hoặc failed) và một lượt gửi cho mỗi kênh:

deliveries[]
"deliveries": [
  {
    "id": "0192b7d4-…",
    "channel_id": "0192b7a1-…",
    "status": "published",
    "url": "https://www.youtube.com/watch?v=…",
    "error": null,
    "published_at": "2026-10-20T07:00:41Z"
  },
  {
    "id": "0192b7d4-…",
    "channel_id": "0192b7a9-…",
    "status": "failed",
    "url": null,
    "error": {
      "code": "endpoint_unavailable",
      "message": "Your endpoint returned 503 Service Unavailable",
      "hint": "Amaposta will retry with backoff."
    },
    "published_at": null
  }
]

Trạng thái lượt gửi là pending, scheduled, publishing, processing, published, failed và cancelled. DELETE /api/v1/posts/{post_id} xóa một bài viết.

Lỗi

Mọi lỗi có cùng cấu trúc: đối tượng error với code ổn định, message có thể hiển thị cho người dùng và đôi khi có fields (thông báo cho từng trường) cùng hint.

422 Unprocessable Entity
{
  "error": {
    "code": "validation",
    "message": "Please fix the highlighted fields.",
    "fields": {
      "kind": "Use text, image or video."
    }
  }
}
Trạng tháiMãÝ nghĩa
400bad_requestKhông thể thực hiện yêu cầu như đã gửi, chẳng hạn lên lịch bài viết không vượt qua các bước kiểm tra.
401unauthorizedKhóa API bị thiếu, sai hoặc đã bị thu hồi.
402plan_limitGói của không gian làm việc không cho phép thao tác này; limit cho biết giới hạn nào.
403forbiddenKhóa thiếu phạm vi hoặc quyền truy cập dự án.
404not_foundKhông có dự án, bài viết, nội dung đa phương tiện hoặc điểm cuối như vậy.
409conflictThay đổi xung đột với trạng thái hiện tại, chẳng hạn sửa bài viết đang được đăng.
422validationMột hoặc nhiều trường cần sửa; xem fields.
429rate_limitedHơn 120 yêu cầu mỗi phút trên khóa này.
502provider_errorNền tảng từ chối hoặc gặp lỗi; hint cho biết cách xử lý.

Webhook

Thêm điểm cuối trong Cài đặt, API và webhook, chọn sự kiện bạn muốn và sao chép bí mật ký. Amaposta gửi JSON bằng POST đến URL của bạn cho mỗi sự kiện. Mọi phản hồi ngoài 2xx hoặc không phản hồi trong vòng 15 giây đều được thử lại với thời gian chờ tăng dần; điểm cuối liên tục gặp lỗi sẽ bị tắt và quản trị viên được thông báo.

Sự kiệnĐược gửi khi
post.createdMột bài viết đã được tạo (bảng điều khiển hoặc API)
post.scheduledMột bài viết đã được lên lịch
post.approvedMột bài viết đã được phê duyệt
post.publishedMột bài viết đã được đăng trên một kênh
post.failedMột bài viết không đăng được trên một kênh
channel.connectedMột kênh đã được kết nối hoặc kết nối lại
channel.disconnectedMột kênh đã mất kết nối
media.readyMột tệp tải lên đã xử lý xong
media.failedMột tệp tải lên không xử lý được
post.published
POST /your/webhook HTTP/1.1
Content-Type: application/json
User-Agent: Amaposta-Webhooks/1.0
X-Amaposta-Event: post.published
X-Amaposta-Event-Id: 0192b7e0-…
X-Amaposta-Signature: t=1792479641,v1=5f2b0c…

{
  "id": "0192b7e0-…",
  "type": "post.published",
  "created_at": "2026-10-20T07:00:41Z",
  "project_id": "0192a3f1-…",
  "data": {
    "post_id": "0192b7c8-…",
    "delivery_id": "0192b7d4-…",
    "channel_id": "0192b7a1-…",
    "provider": "youtube",
    "external_id": "…",
    "url": "https://www.youtube.com/watch?v=…"
  }
}

Xác minh chữ ký

X-Amaposta-Signature là t=<unix seconds>,v1=<hex>, trong đó v1 là HMAC_SHA256(secret, t + "." + body) tính trên phần thân yêu cầu thô. Hãy tự tính, so sánh trong thời gian hằng định và từ chối dấu thời gian cũ để ngăn tấn công phát lại.

Node.js
import crypto from "node:crypto";

// rawBody: the request body exactly as received (string or Buffer).
export function verifySignature(rawBody, header, secret, toleranceSeconds = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${t}.${rawBody}`)
    .digest();
  const given = Buffer.from(parts.v1 ?? "", "hex");
  return given.length === expected.length && crypto.timingSafeEqual(given, expected);
}
Python
import hashlib
import hmac
import time


def verify_signature(raw_body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    t = int(parts.get("t", "0"))
    if abs(time.time() - t) > tolerance:
        return False
    expected = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))

Kênh API tùy chỉnh

Kênh API tùy chỉnh đăng đến một điểm cuối HTTPS do bạn vận hành: CMS, công cụ bản tin hoặc nền tảng Amaposta chưa hỗ trợ. Kênh xuất hiện trên lịch, được kiểm tra, phê duyệt và thử lại như mọi kênh khác. Khi đăng bài, Amaposta gửi một yêu cầu POST cho mỗi lượt gửi:

Nội dung điểm cuối của bạn nhận được
POST /amaposta/publish HTTP/1.1
Authorization: Bearer <your API key>
Content-Type: application/json
Idempotency-Key: 0192b7d4-…
X-Amaposta-Delivery: 0192b7d4-…
X-Amaposta-Signature: t=1792479600,v1=9ac41e…

{
  "id": "0192b7d4-…",
  "type": "post.publish",
  "created_at": "2026-10-20T07:00:00Z",
  "content": {
    "kind": "video",
    "title": "How we roast a batch in 12 minutes",
    "text": "From green beans to first crack. We filmed one batch start to finish.",
    "hashtags": ["coffee", "behindthescenes"],
    "media": {
      "url": "https://…",
      "content_type": "video/mp4",
      "size_bytes": 48213844,
      "width": 1080,
      "height": 1920,
      "duration_ms": 58000,
      "filename": "batch-142.mp4"
    },
    "cover": null,
    "options": {}
  },
  "post": {
    "id": "0192b7c8-…",
    "external_ref": "episode-142",
    "scheduled_at": "2026-10-20T07:00:00Z",
    "metadata": {
      "pipeline": { "name": "nightly-cut" }
    }
  },
  "project": { "id": "0192a3f1-…", "name": "Spring launch" },
  "channel": { "id": "0192b7a9-…", "name": "api.example.com" }
}

Cách phản hồi

  • 2xxĐã đăng. Có thể trả về {"id": "…", "url": "…"} để liên kết xuất hiện trên bài viết.
  • 401, 403Khóa bị từ chối. Kênh được đánh dấu cần kết nối lại và quản trị viên được thông báo. Không dùng các mã này cho chữ ký sai.
  • 5xx, 408, 429Tạm thời. Amaposta thử lại với thời gian chờ tăng dần.
  • 4xx khácBài viết được đánh dấu thất bại kèm thông báo của bạn, để ai đó có thể khắc phục và nhấn Thử lại.
Trình nhận trong Express
app.post("/amaposta/publish", express.raw({ type: "application/json" }), async (req, res) => {
  const signature = req.get("X-Amaposta-Signature") ?? "";
  if (!verifySignature(req.body, signature, process.env.AMAPOSTA_SIGNING_SECRET)) {
    return res.status(400).json({ message: "Bad signature" });
  }
  const delivery = JSON.parse(req.body);
  const item = await publishToYourSystem(delivery.content, req.get("Idempotency-Key"));
  res.json({ id: item.id, url: item.url });
});

Điểm cuối của bạn phải truy cập được từ internet; không theo chuyển hướng. Khi bạn kết nối kênh, Amaposta kiểm tra bằng GET đến URL tình trạng nếu bạn đã đặt, hoặc yêu cầu OPTIONS đến điểm cuối.

Kênh Sandbox

Kênh thử nghiệm hoạt động như kênh thật nhưng không có gì rời khỏi Amaposta. Dùng kênh này để xây dựng và kiểm thử toàn bộ tích hợp: bài viết được lên lịch, phát sóng, đăng hoặc thất bại và kích hoạt cùng các webhook. Kênh thử nghiệm miễn phí ở mọi gói và không tính vào giới hạn kênh.

Chọn cách hoạt động khi bạn thêm kênh:

  • Luôn thành côngMọi bài viết đều được đăng.
  • Thỉnh thoảng thất bạiXem lỗi và thử lại mà không phải chờ sự cố thật.
  • Luôn thất bạiKiểm thử cách xử lý post.failed của bạn.
  • Kết nối đã hết hạnXem cảnh báo và liên kết kết nối lại hiển thị thế nào khi quyền truy cập hết hạn.

Kết nối X qua ứng dụng riêng của bạn

X tính phí mỗi lệnh gọi API, bao gồm cả mỗi lần đăng bài, cho ứng dụng dành cho nhà phát triển thực hiện lệnh gọi đó và trừ phí từ tín dụng trả trước của ứng dụng. Vì vậy, bạn kết nối X qua ứng dụng dành cho nhà phát triển X của riêng mình: thiết lập một lần cho mỗi không gian làm việc, rồi kết nối bao nhiêu tài khoản X tùy thích. Mỗi tài khoản đăng nhập trên X và phí đăng bài được trừ từ tín dụng của ứng dụng của bạn.

Thông tin hữu ích

  • Ứng dụng được lưu cho toàn bộ không gian làm việc và mã bí mật được mã hóa. Mọi tài khoản X khác đều có thể kết nối chỉ bằng một lần nhấp từ bất kỳ dự án nào.
  • Các kênh tiếp tục dùng ứng dụng đã được dùng để kết nối ban đầu. Khi kết nối lại một kênh, kể cả qua liên kết kết nối lại dành cho khách hàng, ứng dụng đó sẽ được dùng lại; khách hàng của bạn không bao giờ nhìn thấy ứng dụng này.
  • Để đổi ứng dụng, chọn “Dùng ứng dụng khác” khi kết nối X. Nếu tạo lại Client Secret, hãy nhập giá trị mới tại đó rồi kết nối lại các kênh X của bạn.
  • Bảng điều khiển X chỉ cấp token cho tài khoản sở hữu ứng dụng. Để kết nối tài khoản của khách hàng, bạn cần đăng nhập qua ứng dụng của mình; với tài khoản của chính bạn, việc nhập token thủ công vẫn hoạt động.

Quy tắc nền tảng

Nội dung mỗi loại kênh chấp nhận. Các bước kiểm tra dùng cùng giới hạn nên phần lớn vấn đề xuất hiện trước khi lên lịch thay vì khi đăng.

Nền tảng Bài viết Tiêu đề Văn bản Hashtag Nội dung đa phương tiện
YouTube Video Tiêu đềBắt buộc, tối đa 100 ký tự Mô tảTối đa 5.000 ký tự Được gửi dưới dạng thẻ, tối đa 60 MP4, MOV, WebM, AVI, MKV; tối đa 256 GB; 1 giây đến 12 giờ
Tài khoản chưa xác minh số điện thoại có thể tải video dài tối đa 15 phút và không thể đặt hình thu nhỏ tùy chỉnh. Mỗi lần tải lên tiêu tốn hạn mức API; hạn mức mặc định của Google cho phép khoảng sáu lần tải lên mỗi ngày cho mỗi ứng dụng.
Instagram Ảnh Không có tiêu đề Chú thíchTối đa 2.200 ký tự Được thêm vào văn bản, tối đa 30 JPEG; tối đa 8 MB
Video Không có tiêu đề Chú thíchTối đa 2.200 ký tự Được thêm vào văn bản, tối đa 30 MP4, MOV; tối đa 300 MB; 3 giây đến 15 phút
Cần tài khoản Instagram Doanh nghiệp hoặc Người sáng tạo. Instagram cho phép 50 bài viết qua API cho mỗi tài khoản trong mỗi khoảng 24 giờ liên tục. Không thể đăng bài chỉ có văn bản trên Instagram.
TikTok Ảnh Tiêu đềTối đa 90 ký tự Mô tảTối đa 4.000 ký tự Được thêm vào văn bản JPEG, WebP; tối đa 20 MB
Video Không có tiêu đề Chú thíchTối đa 2.200 ký tự Được thêm vào văn bản MP4, MOV, WebM; tối đa 4 GB; 3 giây đến 10 phút
Bài viết từ ứng dụng chưa hoàn tất kiểm tra của TikTok chỉ hiển thị với người tạo. TikTok chọn ảnh bìa từ một khung hình video; không hỗ trợ ảnh bìa tùy chỉnh. Không thể đăng bài chỉ có văn bản trên TikTok.
X Văn bản Không có tiêu đề Bài viếtBắt buộc, tối đa 280 (liên kết tính là 23, emoji là 2) Được thêm vào văn bản Không có
Ảnh Không có tiêu đề Bài viếtTối đa 280 (liên kết tính là 23, emoji là 2) Được thêm vào văn bản JPEG, PNG, WebP, GIF; tối đa 5 MB
Video Không có tiêu đề Bài viếtTối đa 280 (liên kết tính là 23, emoji là 2) Được thêm vào văn bản MP4, MOV; tối đa 512 MB; 0,5 giây đến 2:20 phút
Với ứng dụng nhà phát triển X của bạn, bài viết sử dụng tín dụng API trả theo mức dùng của ứng dụng. Hashtag được tính vào giới hạn ký tự.
Facebook Văn bản Không có tiêu đề Bài viếtBắt buộc, tối đa 63.206 ký tự Được thêm vào văn bản Không có
Ảnh Không có tiêu đề Chú thíchTối đa 63.206 ký tự Được thêm vào văn bản JPEG, PNG, GIF, WebP; tối đa 10 MB
Video Tiêu đềTối đa 255 ký tự Mô tảTối đa 63.206 ký tự Được thêm vào văn bản MP4, MOV; tối đa 1 GB; 1 giây đến 20 phút
Chỉ đăng lên Trang; không thể đăng lên hồ sơ cá nhân qua API.
API tùy chỉnh Văn bản Tiêu đềKhông giới hạn độ dài Mô tảKhông giới hạn độ dài Được gửi dưới dạng thẻ Không có
Ảnh Tiêu đềKhông giới hạn độ dài Mô tảKhông giới hạn độ dài Được gửi dưới dạng thẻ JPEG, PNG, WebP, GIF
Video Tiêu đềKhông giới hạn độ dài Mô tảKhông giới hạn độ dài Được gửi dưới dạng thẻ MP4, MOV, WebM
Mỗi yêu cầu được ký bằng tiêu đề HMAC-SHA256 để bạn có thể xác minh yêu cầu đến từ Amaposta. Phản hồi bằng 2xx và JSON tùy chọn {"id": "…", "url": "…"}. Phản hồi 408, 429 và 5xx được thử lại với thời gian chờ tăng dần; 401/403 đánh dấu kênh cần kết nối lại; 4xx khác khiến lượt gửi thất bại để bạn khắc phục và thử lại.
Sandbox Văn bản Tiêu đềTối đa 200 ký tự Mô tảTối đa 5.000 ký tự Được thêm vào văn bản, tối đa 30 Không có
Ảnh Tiêu đềTối đa 200 ký tự Mô tảTối đa 5.000 ký tự Được thêm vào văn bản, tối đa 30 JPEG, PNG, WebP, GIF
Video Tiêu đềTối đa 200 ký tự Mô tảTối đa 5.000 ký tự Được thêm vào văn bản, tối đa 30 MP4, MOV, WebM
Việc đăng mất một chút thời gian để bạn theo dõi trạng thái thay đổi trực tiếp.