서버는 Bull webhook-queue를 통해 외부 엔드포인트로 비동기 이벤트를 전달합니다. 모든 요청은 POST 메서드로 JSON Payload를 전송하며, Body에는 항상 eventType 필드가 포함됩니다.
| Header | 설명 |
|---|---|
Content-Type |
application/json |
x-webhook-event |
이벤트 이름 (deployment.success, mint.failed 등) |
x-webhook-secret |
WEBHOOK_SECRET가 설정된 경우 서명 토큰 전달 |
| Event Type (Header/Body) | 설명 | Payload 주요 필드 (항상 eventType 포함) |
|---|---|---|
deployment.success |
컨트랙트 배포 성공 | contractId, chainId, ercStandard, name, symbol, contractAddress, txHash, metadataBaseUri, contractType |
deployment.failed |
컨트랙트 배포 실패 | contractId, chainId, ercStandard, name, symbol, error, contractType |
mint.confirmed |
민팅 성공 | orderId, metadataId, chainId, contractAddress, receiverAddress, tokenId, amount, txHash, contractType, metadataHash, tokenUri |
mint.failed |
민팅 실패 | orderId, metadataId, chainId, contractAddress, receiverAddress, tokenId, amount, error, contractType, metadataHash, tokenUri |
transfer.success |
Transfer 성공 | orderId, chainId, contractAddress, from, to, tokenId, amount, txHash, ercStandard |
transfer.failed |
Transfer 실패 | orderId, chainId, contractAddress, from, to, tokenId, error |
ownership.transferred |
소유권 이전 성공 | contractId, chainId, contractAddress, previousOwner, newOwner, txHash, gasUsed |
ownership.failed |
소유권 이전 실패 | contractId, chainId, contractAddress, newOwner, error |
모든 이벤트는 동일한 형식의 헤더(x-webhook-event)와 Body(eventType)를 전달하므로 두 값이 서로 일치합니다.
transfer.success){
"eventType": "transfer.success",
"orderId": "692e84f3d3e3deac5d7f7ba6",
"chainId": "43113",
"contractAddress": "0x9e9b178cf24bd802dfbdd97435c94e9289f9a91e",
"from": "0x08a02c036fadcaf5c47a6b1a4a26a19bf71c18e7",
"to": "0x5a6be23be47d5dd4e1d3324a6b8c2975c910165f",
"tokenId": "111",
"amount": 1,
"txHash": "0x092d18e28cef3cb7a90fe2ae44164f6f2a2f8631639c6f3f37e1a9f72d31d7c1",
"ercStandard": "721"
}
응답이 2xx가 아닐 경우 Bull 기본 재시도 정책(최대 5회, 지수 백오프 10초 기준)이 적용됩니다. 재시도 상태는 MongoDB WebhookLog 컬렉션에서 확인할 수 있습니다.