웹훅

API를 폴링하는 대신 자체 URL에서 HTTP 이벤트를 수신합니다.

웹훅 생성

http
POST /v1/webhooks
json
{
  "url": "https://votre-app.exemple.com/webhooks/emini",
  "events": ["job.completed", "job.failed"]
}
json
{
  "webhook": { "id": "...", "url": "https://votre-app.exemple.com/webhooks/emini", "events": ["job.completed", "job.failed"], "status": "active" },
  "secret": "whsec_..."
}
secret은 생성 시 단 한 번만 반환됩니다. 전달 내용의 서명을 검증하기 위해 보관해 두세요.

이용 가능한 이벤트

  • job.completed — 비동기 작업(비디오)이 성공적으로 완료됨
  • job.failed — 비동기 작업이 실패함
  • budget.alert — 프로젝트 예산 경고 임계값을 초과함

서명 검증

각 전달에는 X-Emini-Signature 헤더가 포함됩니다: 사용자의 secret으로 계산된 원본 요청 본문의 HMAC-SHA256 값입니다.

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

function isValid(rawBody: string, signature: string, secret: string): boolean {
  const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}

웹훅 관리

bash
GET /v1/webhooks                              # lister
DELETE /v1/webhooks/{webhook_id}              # desactiver
GET /v1/webhooks/{webhook_id}/deliveries      # historique des livraisons

대안: 폴링

웹훅은 선택 사항입니다 — 작업 상태를 능동적으로 폴링하려면 언제든지 GET /v1/jobs/{job_id}를 사용할 수 있습니다(비디오 가이드 참고).