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

# webhook 대상 실패 활동 API

> Didit webhook 대상의 실패 알림을 타임스탬프 및 실패 횟수와 함께 조회합니다. 읽기 권한과 limit/offset 페이지네이션을 사용합니다.

Didit의 webhook 대상 활동 API는 기록된 실패 알림을 최신순으로 반환합니다. 각 항목에는 `id`, `type`(`failure_alert`), `occurred_at`, `failure_count`가 포함됩니다.

`limit`과 `offset`으로 페이지를 나누고, `next`가 null이 될 때까지 따라가면 됩니다. `count`는 상한이 적용되거나 추정값일 수 있습니다. 존재하지 않는 대상을 요청하면 `404`가 반환됩니다.

이 알림은 [전송 시도](https://docs.didit.me/ko/management-api/webhook/list-deliveries.md)와 다릅니다. [webhook 실패 활동](https://docs.didit.me/ko/integration/webhooks.md#재시도-정책)과 [대상 분석](https://docs.didit.me/ko/management-api/webhook/destination-analytics.md)도 참고하세요.


## OpenAPI

````yaml ko/openapi-25.json GET /v3/organization/{organization_id}/application/{application_id}/webhook/destinations/{destination_uuid}/activity/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: 신분증 인증 API입니다. x-api-key 헤더로 인증합니다.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/organization/{organization_id}/application/{application_id}/webhook/destinations/{destination_uuid}/activity/:
    get:
      tags:
        - Webhook
      summary: webhook 대상 활동 목록 조회
      description: >-
        하나의 대상에 대해 기록된 실패 알림을 최신순으로 나열합니다. read:webhooks 권한이 필요합니다. 애플리케이션/API 키
        자격 증명은 경로에 있는 애플리케이션에 속해야 하며, 멤버 Bearer 토큰은 해당 애플리케이션에 대한 액세스 권한이 있어야
        합니다. 이는 개별 전송 시도나 아웃바운드 webhook 이벤트 유형이 아닌 실패 알림 이벤트입니다.
        [Webhooks](https://docs.didit.me/ko/integration/webhooks#재시도-정책)를
        참조하십시오.
      operationId: list_activity_webhooks_destinations
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: 조직 ID입니다.
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: 애플리케이션 ID입니다.
        - name: destination_uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: 대상 UUID입니다.
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
            minimum: 1
          description: 페이지당 최대 결과 수입니다.
        - name: offset
          in: query
          schema:
            type: integer
            default: 0
            minimum: 0
          description: 건너뛸 결과 수입니다.
      responses:
        '200':
          description: webhook 대상 활동 목록을 조회합니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookDestinationActivityList'
        '401':
          description: 자격 증명이 없거나, 유효하지 않거나, 만료되었습니다.
        '403':
          description: 호출자에게 이 애플리케이션에 대한 액세스 권한이나 필요한 권한이 없습니다.
        '404':
          description: webhook 대상을 찾을 수 없습니다.
        '429':
          $ref: '#/components/responses/RateLimitedRead'
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID
            # and DIDIT_APPLICATION_ID.
            client = Didit()

            for item in client.webhooks.destinations.list_activity(
                "11111111-2222-3333-4444-555555555555",
            ):
                print(item)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID

            // and DIDIT_APPLICATION_ID.

            const didit = new Didit();


            for await (const item of
            didit.webhooks.destinations.listActivity("11111111-2222-3333-4444-555555555555"))
            {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID\n// and DIDIT_APPLICATION_ID.\nclient := didit.NewClient()\n\niter := client.Webhooks.Destinations.ListActivityAutoPaging(ctx, \"11111111-2222-3333-4444-555555555555\", didit.WebhooksDestinationsListActivityParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID

            // and DIDIT_APPLICATION_ID.

            Didit client = new Didit();


            for (var item :
            client.webhooks().destinations().listActivity("11111111-2222-3333-4444-555555555555"))
            {
                System.out.println(item);
            }
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID

            // and DIDIT_APPLICATION_ID.

            $didit = new DiditClient();


            foreach
            ($didit->webhooks->destinations->listActivity('11111111-2222-3333-4444-555555555555')
            as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID

            # and DIDIT_APPLICATION_ID.

            didit = Didit::Client.new


            didit.webhooks.destinations.list_activity("11111111-2222-3333-4444-555555555555").auto_paging_each
            do |item|
              puts item.to_h
            end
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID

            // and DIDIT_APPLICATION_ID.

            using var client = new DiditClient();


            await foreach (var item in await
            client.Webhooks.Destinations.ListActivityAsync("11111111-2222-3333-4444-555555555555"))

            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    WebhookDestinationActivityList:
      type: object
      required:
        - count
        - next
        - previous
        - results
      properties:
        count:
          type: integer
          description: >-
            결과 개수이며 일반적으로 100으로 제한되고 추정값일 수 있습니다. 페이지네이션을 중단할 때는 count 대신 next를
            따르세요.
        next:
          type: string
          description: 다음 페이지 URL이며, 없으면 null입니다.
          nullable: true
        previous:
          type: string
          description: 이전 페이지 URL이며, 없으면 null입니다.
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/WebhookDestinationActivity'
      example:
        count: 1
        next: null
        previous: null
        results:
          - id: 00000000-0000-4000-8000-000000000003
            type: failure_alert
            occurred_at: '2026-11-11T01:00:00Z'
            failure_count: 3
    WebhookDestinationActivity:
      type: object
      required:
        - id
        - type
        - occurred_at
        - failure_count
      properties:
        id:
          type: string
          description: 실패 알림 식별자입니다.
          format: uuid
        type:
          type: string
          description: 활동 유형입니다.
          enum:
            - failure_alert
        occurred_at:
          type: string
          description: 실패 알림의 발생 시각입니다.
          format: date-time
        failure_count:
          type: integer
          description: 이 알림과 함께 기록된 실패 횟수입니다.
          minimum: 0
    RateLimitBudgetError:
      type: object
      description: >-
        속도 제한 미들웨어 예산 거부 응답에만 반환됩니다. 멱등성 충돌과 엔드포인트별 상한을 포함한 다른 429 오류는 이 메타데이터
        필드를 보장하지 않습니다.
      required:
        - detail
        - reference
        - limit
        - remaining
        - reset
        - window_seconds
      properties:
        detail:
          type: string
          description: 기존의 사람이 읽을 수 있는 예산 거부 메시지입니다.
        reference:
          type: string
          pattern: ^RL-[0-9a-f]{32}$
          description: 불투명한 지원 참조 번호입니다. RL- 뒤에 소문자 UUID 16진수 문자 32자가 이어집니다.
        limit:
          type: integer
          description: 초과된 범위의 예산입니다. X-RateLimit-Limit 값과 같습니다.
        remaining:
          type: integer
          minimum: 0
          description: 남은 예산이며 0 미만으로 내려가지 않습니다. X-RateLimit-Remaining과 같습니다.
        reset:
          type: integer
          format: int64
          description: Unix 초 단위의 윈도우 재설정 시간이며 X-RateLimit-Reset 값과 같습니다.
        window_seconds:
          type: integer
          description: 고정 윈도우 기간(초 단위)이며, 남은 대기 시간이 아닙니다. 재시도하기 전에 Retry-After 값을 준수해야 합니다.
      example:
        detail: >-
          Write request rate limit exceeded. You can make up to 300 requests per
          minute.
        reference: RL-00000000000040008000000000000001
        limit: 300
        remaining: 0
        reset: 1794358860
        window_seconds: 60
  responses:
    RateLimitedRead:
      description: 미들웨어 읽기 예산을 초과했습니다. 재시도하기 전에 Retry-After를 따르세요.
      headers:
        Retry-After:
          $ref: '#/components/headers/BudgetRetryAfter'
        X-RateLimit-Scope:
          $ref: '#/components/headers/BudgetXRateLimitScope'
        X-RateLimit-Limit:
          $ref: '#/components/headers/BudgetXRateLimitLimit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/BudgetXRateLimitRemaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/BudgetXRateLimitReset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitBudgetError'
          example:
            detail: >-
              GET request rate limit exceeded. You can make up to 600 requests
              per minute.
            reference: RL-00000000000040008000000000000001
            limit: 600
            remaining: 0
            reset: 1794358860
            window_seconds: 60
  headers:
    BudgetRetryAfter:
      description: 다음 윈도우까지 기다려야 하는 시간(초)을 올림한 값입니다. 미들웨어 예산 거부 응답에 포함됩니다.
      schema:
        type: integer
    BudgetXRateLimitScope:
      description: 예산을 초과한 범위입니다. 미들웨어 예산 거부 응답에 포함됩니다.
      schema:
        type: string
    BudgetXRateLimitLimit:
      description: 초과된 범위의 예산입니다. 본문 한도와 같습니다. 미들웨어 예산 거부 응답에 포함됩니다.
      schema:
        type: integer
    BudgetXRateLimitRemaining:
      description: 남은 예산이며 0 미만으로 내려가지 않습니다. 본문의 remaining과 같습니다. 미들웨어 예산 거부 응답에만 있습니다.
      schema:
        type: integer
    BudgetXRateLimitReset:
      description: Unix 초 단위의 재설정 시간이며 본문의 reset 값과 같습니다. 미들웨어 예산 거부 응답에 포함됩니다.
      schema:
        type: integer
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Business Console의 Developers -> API keys에서 발급받은 귀하 애플리케이션의 API 키입니다. 기본
        키는 전체 접근 권한을 갖습니다. 이름이 지정된 키는 리소스별 none, read, write 범위로 권한을 제한할 수 있으며
        특정 워크플로나 승인된 세션, IP 주소 목록, 만료일 등으로 제한할 수도 있습니다. 401은 키가 잘못되었거나 폐기되었거나
        만료되었음을 의미합니다. 403은 키가 전송되지 않았거나, 키에 해당 리소스나 작업에 대한 접근 권한이 없거나, 요청이 허용된
        IP 목록 외부 주소에서 발생했음을 의미합니다. 세션 경로에서의 404는 해당 세션이 키의 허용 워크플로 또는 상태 범위를
        벗어났음을 의미합니다. 미디어 접근 권한이 없는 키는 이미지, 비디오, PDF URL을 null로 수신하며, 세션 write
        권한이 없는 키는 세션 링크와 token을 null로 수신합니다.
        https://docs.didit.me/console/api-keys 를 참고하십시오.
    BearerAuth:
      type: http
      scheme: bearer
      description: 애플리케이션의 클라이언트 자격 증명 액세스 token입니다.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.