> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sajuapi.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 웹훅 테스트

<Info>
  **v1 Enterprise API (Coming Soon)**

  이 엔드포인트는 Enterprise 버전에서 제공될 예정입니다.
  현재는 [v0 API](/api-reference/v0/overview)를 사용하세요.
</Info>

웹훅에 테스트 이벤트를 전송합니다. 웹훅 설정이 올바른지 확인하거나, 비활성화된 웹훅을 다시 활성화할 때 사용합니다.

<Note>
  테스트 이벤트의 `data` 필드에는 `test: true`가 포함됩니다. 이를 통해 실제 이벤트와 구분할 수 있습니다.
</Note>

***

## Path 파라미터

<ParamField path="id" type="string" required>
  테스트할 웹훅의 ID입니다. `whk_` 접두사로 시작합니다.
</ParamField>

***

## Request Body 파라미터

<ParamField body="event_type" type="string" default="test.ping">
  테스트할 이벤트 유형입니다. 웹훅에 등록된 이벤트 중 하나를 선택할 수 있습니다.
</ParamField>

<ParamField body="reactivate" type="boolean" default="false">
  비활성화된 웹훅을 다시 활성화할지 여부입니다. 테스트가 성공하면 웹훅이 활성화됩니다.
</ParamField>

***

## Response

### 성공

테스트 전송에 성공하면 전송 결과가 반환됩니다.

### 실패

| 상태 코드 | 에러 타입                  | 설명             |
| ----- | ---------------------- | -------------- |
| 401   | `authentication_error` | API 키가 유효하지 않음 |
| 404   | `not_found`            | 웹훅을 찾을 수 없음    |
| 429   | `rate_limited`         | 요청 한도 초과       |

***

## 요청 예시

<CodeGroup>
  ```bash cURL theme={null}
  # 기본 테스트
  curl -X POST https://api.sajuapi.dev/v1/webhooks/whk_abc123def456/test \
    -H "X-API-Key: bs_live_xxx" \
    -H "Content-Type: application/json" \
    -d '{
      "event_type": "fortune.generated"
    }'

  # 비활성화된 웹훅 재활성화
  curl -X POST https://api.sajuapi.dev/v1/webhooks/whk_abc123def456/test \
    -H "X-API-Key: bs_live_xxx" \
    -H "Content-Type: application/json" \
    -d '{
      "event_type": "test.ping",
      "reactivate": true
    }'
  ```

  ```javascript JavaScript theme={null}
  // 기본 테스트
  const response = await fetch(
    'https://api.sajuapi.dev/v1/webhooks/whk_abc123def456/test',
    {
      method: 'POST',
      headers: {
        'X-API-Key': 'bs_live_xxx',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        event_type: 'fortune.generated'
      })
    }
  );

  const result = await response.json();

  // 비활성화된 웹훅 재활성화
  const reactivateResponse = await fetch(
    'https://api.sajuapi.dev/v1/webhooks/whk_abc123def456/test',
    {
      method: 'POST',
      headers: {
        'X-API-Key': 'bs_live_xxx',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        event_type: 'test.ping',
        reactivate: true
      })
    }
  );
  ```

  ```python Python theme={null}
  import requests

  # 기본 테스트
  response = requests.post(
      'https://api.sajuapi.dev/v1/webhooks/whk_abc123def456/test',
      headers={'X-API-Key': 'bs_live_xxx'},
      json={
          'event_type': 'fortune.generated'
      }
  )

  result = response.json()

  # 비활성화된 웹훅 재활성화
  reactivate_response = requests.post(
      'https://api.sajuapi.dev/v1/webhooks/whk_abc123def456/test',
      headers={'X-API-Key': 'bs_live_xxx'},
      json={
          'event_type': 'test.ping',
          'reactivate': True
      }
  )
  ```
</CodeGroup>

***

## 응답 예시

### 성공

```json theme={null}
{
  "webhook_id": "whk_abc123def456",
  "event_type": "fortune.generated",
  "delivery": {
    "id": "dlv_test_xyz789",
    "status": "success",
    "response_code": 200,
    "response_time_ms": 145,
    "attempted_at": "2025-01-16T09:00:00Z"
  },
  "payload_sent": {
    "id": "evt_test_abc123",
    "type": "fortune.generated",
    "test": true,
    "created_at": "2025-01-16T09:00:00Z",
    "data": {
      "test": true,
      "message": "This is a test event"
    }
  },
  "reactivated": false
}
```

### 재활성화 성공

```json theme={null}
{
  "webhook_id": "whk_abc123def456",
  "event_type": "test.ping",
  "delivery": {
    "id": "dlv_test_xyz789",
    "status": "success",
    "response_code": 200,
    "response_time_ms": 89
  },
  "reactivated": true,
  "message": "웹훅이 성공적으로 재활성화되었습니다."
}
```

### 테스트 실패

```json theme={null}
{
  "webhook_id": "whk_abc123def456",
  "event_type": "fortune.generated",
  "delivery": {
    "id": "dlv_test_xyz789",
    "status": "failed",
    "response_code": 500,
    "error_message": "Internal Server Error",
    "response_time_ms": 5000
  },
  "reactivated": false
}
```

***

## 테스트 이벤트 페이로드

테스트 이벤트는 다음과 같은 형식으로 전송됩니다.

```json theme={null}
{
  "id": "evt_test_abc123",
  "type": "fortune.generated",
  "test": true,
  "created_at": "2025-01-16T09:00:00Z",
  "data": {
    "test": true,
    "message": "This is a test event",
    "fortune_id": "ftn_test_xxx",
    "profile_id": "prf_test_xxx",
    "score": 85
  }
}
```

<Note>
  테스트 이벤트는 `test: true` 필드를 포함합니다. 웹훅 핸들러에서 이 필드를 확인하여 실제 이벤트와 구분할 수 있습니다.
</Note>

***

## 재활성화 조건

비활성화된 웹훅을 재활성화하려면 다음 조건을 충족해야 합니다.

1. `reactivate: true` 파라미터를 전달해야 합니다.
2. 테스트 이벤트가 성공적으로 전달되어야 합니다 (HTTP 2xx 응답).
3. 응답 시간이 30초 이내여야 합니다.

재활성화에 성공하면 `failure_count`가 0으로 초기화됩니다.
