Biết ngay khi bài đăng lên, hoặc không lên
Đăng ký URL một lần và FoPost sẽ gọi nó mỗi khi một lượt gửi hoàn tất. Mỗi sự kiện mang theo post id, tài khoản, nền tảng, permalink hoặc nội dung lỗi, để hệ thống của bạn phản ứng mà không cần truy vấn liên tục.
curl -X POST https://api.fopost.com/v1/webhooks \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"workspaceId": "9b2f6c1e-...",
"url": "https://yourbrand.com/hooks/social",
"events": ["delivery.published", "delivery.failed", "post.published", "post.failed"]
}'Kích hoạt khi hoàn tất
Mỗi lượt gửi đến một tài khoản là một sự kiện, gửi đi ngay khi mạng xác nhận hoặc từ chối.
Có chữ ký
Mỗi yêu cầu đều có header chữ ký để bạn xác minh nó đến từ chúng tôi.
Có thử lại
Phản hồi không phải 2xx sẽ được thử lại với backoff trước khi sự kiện bị bỏ.
Sự kiện bao quát toàn bộ vòng đời đăng bài
delivery.published được kích hoạt khi một mạng chấp nhận lượt gửi của một tài khoản và kèm permalink. delivery.failed được kích hoạt khi bài không thể đăng và kèm nội dung lỗi của nền tảng. post.published và post.failed được kích hoạt một lần cho mỗi bài, sau khi mọi tài khoản đã hoàn tất.
Đọc tài liệu tham khảo về webhook{
"event": "delivery.published",
"data": {
"postId": "7d3e0a52-...",
"postAccountId": "a3c5e7f9-...",
"accountId": "4a71d80b-...",
"platform": "linkedin",
"externalUrl": "https://linkedin.com/feed/update/..."
},
"timestamp": "2026-09-01T09:00:07Z"
}delivery.published
Permalink, sẵn sàng để lưu hoặc liên kết ngược từ CMS của bạn.
delivery.failed
Thông báo lỗi gốc của mạng, để bạn sửa đúng nguyên nhân thay vì đoán.
Theo từng không gian làm việc
Mỗi webhook thuộc về một không gian làm việc và chỉ thấy bài đăng của không gian làm việc đó.
Tin tưởng payload trước khi xử lý
Mỗi yêu cầu được ký bằng secret trả về khi bạn tạo webhook. Tính chữ ký trên body gốc, so sánh với header, và từ chối mọi thứ không khớp. Phản hồi 2xx thật nhanh rồi xử lý sau.
Xem cách xác minh chữ kýapp.post('/hooks/social', async (req, res) => {
const signature = req.header(SIGNATURE_HEADER) // header name is in the docs;
if (!verify(req.rawBody, signature, process.env.WEBHOOK_SECRET)) {
return res.status(401).end();
}
const { event, data } = req.body;
await queue.add(event, data);
res.status(200).end();
});Header chữ ký
Xác minh bằng secret được cấp khi tạo. Muốn đổi thì tạo lại webhook.
Có dấu thời gian
timestamp giúp bạn bỏ qua các lần phát lại cũ và sắp xếp sự kiện đúng thứ tự.
Idempotent theo id
Các lần thử lại mang cùng event id, nên dễ dàng loại bỏ lượt gửi trùng.
Tạo, liệt kê và xóa endpoint bằng code
Webhook là các đối tượng API thông thường. Tạo một webhook cho mỗi môi trường, liệt kê để kiểm tra những gì đã đăng ký, và xóa những cái không còn cần. Trỏ chúng đến URL staging khi phát triển và chuyển sang production chỉ với một lệnh gọi.
Bắt đầu xây dựng
Liệt kê endpoint
GET /v1/webhooks hiển thị mọi URL và các sự kiện mà nó đăng ký.
Theo từng môi trường
Đăng ký URL riêng cho staging để bài thử nghiệm không bao giờ chạm đến production.
Phạm vi webhooks
Quản lý endpoint cần phạm vi riêng. Khóa chỉ có quyền publish không thể thêm endpoint.
Giải đáp câu hỏi về Webhook
Có những sự kiện nào?
Làm sao để xác minh webhook?
Nếu endpoint của tôi bị sập thì sao?
Tôi có thể chỉ nhận sự kiện của một tài khoản không?
Tôi có thể thử nghiệm mà không đăng thật không?
Tôi có thực sự cần webhook không?
Xây dựng trên Webhook ngay hôm nay
Bắt đầu miễn phí và đã bao gồm đầy đủ API. Tạo khóa và thực hiện lệnh gọi đầu tiên chỉ trong vài phút.
Lấy khóa API