WebhookAPI

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.

POST /v1/webhooks
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

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
delivery.published
{
  "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 đó.

Xác minh

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ý
Handler
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.

Quản lý

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
Tự động hóa chạy theo lịch, theo nguồn cấp và trên nhiều mạ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?

Sự kiện về bài đăng, lượt gửi, tài khoản, hộp thư và tự động hóa. delivery.published và delivery.failed được kích hoạt một lần cho mỗi tài khoản, nên một bài đăng lên ba mạng tạo ra tối đa ba sự kiện; post.published và post.failed được kích hoạt một lần cho mỗi bài.

Làm sao để xác minh webhook?

Tạo webhook và lưu secret từ phản hồi. Tính chữ ký trên body gốc của yêu cầu bằng secret đó và so sánh với header chữ ký ở mỗi lệnh gọi.

Nếu endpoint của tôi bị sập thì sao?

Mọi phản hồi không phải 2xx hoặc hết thời gian chờ đều được thử lại với backoff. Hãy phản hồi 2xx thật nhanh và xử lý sự kiện ở nền để luôn nằm trong khung thời gian.

Tôi có thể chỉ nhận sự kiện của một tài khoản không?

Sự kiện lượt gửi mang theo accountId và platform, nên hãy lọc ở phía bạn. Webhook có phạm vi theo không gian làm việc, không theo từng tài khoản.

Tôi có thể thử nghiệm mà không đăng thật không?

Trỏ webhook đến một URL ghi nhận yêu cầu và lên lịch bài đăng cho một tài khoản thử nghiệm. Sự kiện trông giống hệt nhau ở mọi môi trường.

Tôi có thực sự cần webhook không?

Không. GET /v1/posts/:id/deliveries trả về cùng trạng thái khi bạn cần. Webhook chỉ giúp bạn khỏi phải truy vấn liên tục.

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