웹훅API

게시물이 게시되는 순간, 또는 실패하는 순간을 바로 확인

URL을 한 번 등록하면 전송이 완료될 때마다 FoPost가 호출해요. 각 이벤트에는 게시물 id, 계정, 플랫폼, 퍼머링크 또는 오류 메시지가 담겨 있어 시스템이 폴링 없이 대응할 수 있어요.

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"]
  }'

완료 시 발생

계정별 전송마다 이벤트 하나가 네트워크가 승인하거나 거부하는 즉시 전송돼요.

서명

모든 요청에 서명 헤더가 포함되어 저희가 보낸 것인지 확인할 수 있어요.

재시도

2xx가 아닌 응답은 이벤트를 폐기하기 전에 백오프로 재시도해요.

이벤트

게시의 전체 수명 주기를 다루는 이벤트

delivery.published는 네트워크가 한 계정의 전송을 승인하면 퍼머링크와 함께 발생해요. delivery.failed는 게시되지 않을 때 플랫폼의 오류 메시지와 함께 발생해요. post.published와 post.failed는 모든 계정의 전송이 완료된 뒤 게시물당 한 번 발생해요.

웹훅 레퍼런스 읽기
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

저장하거나 CMS에서 다시 연결할 수 있는 퍼머링크.

delivery.failed

네트워크의 자체 오류 메시지를 받으므로 추측하지 않고 원인을 해결할 수 있어요.

워크스페이스별

웹훅은 하나의 워크스페이스에 속하며 그 워크스페이스의 게시물만 봐요.

확인

처리하기 전에 페이로드를 검증

각 요청은 웹훅을 만들 때 반환되는 시크릿으로 서명돼요. 원본 본문으로 서명을 계산해 헤더와 비교하고, 일치하지 않으면 거부하세요. 2xx로 빠르게 응답하고 실제 작업은 그 뒤에 처리하세요.

서명 검증 보기
핸들러
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();
});

서명 헤더

생성할 때 받은 시크릿으로 검증하세요. 교체하려면 다시 생성하면 돼요.

타임스탬프 포함

timestamp로 오래된 재전송을 무시하고 이벤트 순서를 올바르게 정할 수 있어요.

id 기반 멱등성

재시도에는 같은 이벤트 id가 담겨 있어 중복 전송을 쉽게 걸러낼 수 있어요.

관리

코드로 엔드포인트 생성, 조회, 삭제

웹훅은 일반적인 API 객체예요. 환경마다 하나씩 만들고, 목록을 조회해 등록 내역을 점검하고, 더 이상 필요 없는 것은 삭제하세요. 개발 중에는 스테이징 URL을 지정하고 호출 한 번으로 프로덕션으로 바꾸세요.

개발 시작하기
일정, 피드, 여러 네트워크에 걸쳐 실행되는 자동화

엔드포인트 목록

GET /v1/webhooks가 모든 URL과 각 URL이 구독하는 이벤트를 보여 줘요.

환경별 설정

스테이징용 URL을 따로 등록해 테스트 게시물이 프로덕션에 닿지 않게 하세요.

webhooks 범위

엔드포인트 관리에는 별도의 범위가 필요해요. 게시 전용 키로는 추가할 수 없어요.

웹훅에 대해 자주 묻는 질문

어떤 이벤트를 사용할 수 있나요?

게시물, 전송, 계정, 인박스, 자동화 이벤트가 있어요. delivery.published와 delivery.failed는 계정마다 한 번 발생하므로, 세 네트워크에 게시하면 최대 세 개가 발생해요. post.published와 post.failed는 게시물당 한 번 발생해요.

웹훅은 어떻게 검증하나요?

웹훅을 만들고 응답에 담긴 시크릿을 저장하세요. 모든 호출에서 그 시크릿으로 원본 요청 본문의 서명을 계산하고 서명 헤더와 비교하세요.

제 엔드포인트가 다운되면 어떻게 되나요?

2xx가 아닌 응답이나 시간 초과는 백오프로 재시도돼요. 2xx로 빠르게 응답하고 이벤트는 백그라운드에서 처리해 허용 시간 안에 여유 있게 들어오도록 하세요.

계정 하나의 이벤트만 받을 수 있나요?

전송 이벤트에는 accountId와 플랫폼이 담겨 있으니 받는 쪽에서 필터링하세요. 웹훅의 범위는 개별 계정이 아니라 워크스페이스예요.

실제로 게시하지 않고 테스트할 수 있나요?

웹훅을 요청 캡처 URL로 지정하고 테스트 계정에 게시물을 예약하세요. 이벤트는 어떤 환경에서든 똑같이 보여요.

웹훅이 꼭 필요한가요?

아니요. GET /v1/posts/:id/deliveries로 같은 상태를 필요할 때 조회할 수 있어요. 웹훅은 폴링 수고를 덜어 줄 뿐이에요.

오늘 바로 웹훅로 개발하세요

무료로 시작할 수 있고 전체 API가 포함돼요. 키를 만들고 몇 분 만에 첫 호출을 해 보세요.

API 키 받기