sayren Docs
웹훅

웹훅 전송 기록 상세

전송 기록 한 건의 진단 정보. 목록 항목에 보낸 요청 본문(`payload`)과 요청 헤더(`requestHeaders`)가 더해진다. `payload`는 수신 서버에 보낸 본문 문자열 그대로다 — 서명은 이 문자열을 대상으로 계산하므로 서명 검증이 실패할 때 이 값으로 맞춰 본다. 16KB를 넘으면 잘리고 `payloadTruncated`가 true다. 민감 키 마스킹이 본문을 바꿨으면 `payloadMasked`가 true이고 그 본문으로는 서명을 맞춰 볼 수 없다. 요청 헤더의 `Content-Length`는 가리거나 자르기 전, 실제로 보낸 본문의 바이트 수다. 서명 헤더(`Sayren-Signature`)는 이름만 주고 값은 null이다(시크릿에서 나온 값이라 내보내지 않는다). 재시도는 같은 기록에 누적되므로 응답 상태·본문·소요 시간·`failureReason`은 **마지막 시도**의 것이다.

GET
/v1/webhooks/{webhookId}/deliveries/{deliveryId}

전송 기록 한 건의 진단 정보. 목록 항목에 보낸 요청 본문(payload)과 요청 헤더(requestHeaders)가 더해진다.

payload는 수신 서버에 보낸 본문 문자열 그대로다 — 서명은 이 문자열을 대상으로 계산하므로 서명 검증이 실패할 때 이 값으로 맞춰 본다. 16KB를 넘으면 잘리고 payloadTruncated가 true다. 민감 키 마스킹이 본문을 바꿨으면 payloadMasked가 true이고 그 본문으로는 서명을 맞춰 볼 수 없다. 요청 헤더의 Content-Length는 가리거나 자르기 전, 실제로 보낸 본문의 바이트 수다. 서명 헤더(Sayren-Signature)는 이름만 주고 값은 null이다(시크릿에서 나온 값이라 내보내지 않는다). 재시도는 같은 기록에 누적되므로 응답 상태·본문·소요 시간·failureReason은 마지막 시도의 것이다.

Authorization

accessToken
headerAuthorizationBearer <token>

Sayren 계정 토큰(로그인 토큰 또는 개인 액세스 토큰, RFC 9068 JWT)

Path Parameters

webhookId*string
deliveryId*string

Header Parameters

X-Store-Id*string

대상 상점 id. 토큰의 상점 범위 밖이면 403 STORE_NOT_GRANTED, 없으면 400 STORE_ID_REQUIRED다

Response Body

성공

application/json
  1. response
meta*
data*
error*|null
curl -X GET 'https://api.sayren.io/v1/webhooks/string/deliveries/string' \  -H 'X-Store-Id: string'
{  "meta": {    "status": 200,    "code": "OK",    "message": "OK",    "isSuccess": true  },  "data": {    "deliveryId": "string",    "eventId": "string",    "eventType": "ORDER.PAID",    "url": "string",    "status": "PENDING",    "responseStatusCode": 0,    "responseTimeMs": 0,    "responseBodyExcerpt": "string",    "errorCode": "TIMEOUT",    "failureReason": "string",    "resource": {      "type": "string",      "id": "string"    },    "attemptCount": 0,    "createdAt": "string",    "attemptedAt": "string",    "nextAttemptAt": "string",    "redeliveryOf": "string",    "redeliveredAs": "string",    "payload": "string",    "payloadTruncated": true,    "payloadMasked": true,    "requestHeaders": [      {        "name": "string",        "value": "string"      }    ]  },  "error": null}