> ## 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.

# 사기 네트워크 타임라인 API

> Didit 사기 네트워크의 이벤트 이력을 조회합니다. contract=2를 지정하면 멤버의 시도, 거래, 로그인, 규칙 적중, 연결된 케이스를 페이지 단위 타임라인으로 제공합니다.



네트워크 타임라인 API 프롬프트
        프롬프트를 클립보드에 복사



      
      

\<pre>

\`Retrieve a fraud network's event timeline through the Management API.

Endpoint:
GET https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/timeline/

Authentication:
Use the x-api-key header with my Didit API key.
Networks endpoints need a full-access API key: a key with restricted access gets 403.

Path parameter:
\- network_uuid - the network's UUID.

Two shapes, chosen by the contract query parameter:

1\. Default (no contract parameter): unchanged.
Response 200: {"results": [NetworkTimelineEvent, ...]}, oldest first, not paginated.
Each event has event_type (network_detected, signal_observed, network_active, network_in_review, network_resolved, network_dismissed), occurred_at, label, and metadata (event-specific, e.g. {network_id} for detection, {signal_type, subject_count, is_hub} for a signal observation, {reason} for a status change).
limit, cursor and event_type are ignored in this mode.

2\. Typed timeline (contract=2, opt-in):
Query params:
\- contract=2: required for this mode. Any other value is a 400.
\- limit: 1 to 500, default 100.
\- cursor: the previous page's next_cursor. An invalid or empty cursor is a 400 ("This cursor is not valid. Reload the feed.").
\- event_type: repeat it or pass a comma-separated list, at most 20 values. Defaults to every type: network_detected, signal_observed, network_active, network_in_review, network_resolved, network_dismissed, verification_attempt, transaction, login, rule_hit, case_linked, note_added.
Response 200: {"results": [NetworkTypedTimelineEvent, ...], "next_cursor": string|null}, newest first. Keep calling with cursor=next_cursor until next_cursor is null.
Each typed event has:
\- event_type, occurred_at, label, metadata: as in the default shape (metadata is {} for events that are not the network's own).
\- id: "<source>:<uuid>", unique within the timeline. ingested_at: when Didit stored it.
\- account: the member account {node_id ("vendor_user:<uuid>", "vendor_business:<uuid>" or "transaction_party:<uuid>"), node_type (account|business_account|transaction_party), uuid, vendor_data, display_name, ownership (owned|organization), route {kind, id, application_id}}. Null for the network's own events, case_linked and note_added.
\- source_ref: the record it was read from {kind (session|business_session|transaction|monitoring_event|case), id, ownership, route}. route is absent for monitoring_event and case. Null for the network's own events and note_added.
\- ownership: owned when the record belongs to the application I called, organization when it belongs to another application of my organization.
\- One detail block per event type, the others null:
\- verification_attempt {session_id, session_number, attempt, attempt_count, status, status_changed_at, decline_reasons [{risk, feature, short_description}] (declined sessions only)}
\- transaction {transaction_id, transaction_number, transaction_type, action_type, amount {value, currency, direction} or null, status, decision_reason_code, decision_reason_label, party_role}
\- login {action (auth.login, security.login_succeeded, auth.login_failed or security.login_failed), succeeded, status, ip {address, country_code, city, connection_type (free text), is_vpn_or_tor, is_data_center} or null, device {fingerprint, label} or null, is_first_login, is_new_device}
\- rule_hit {rule_id, rule_title, rule_category, rule_source, severity, score_delta, status_target, action_summary}
\- case_linked {case_id, case_number, status, author_email, author_name}
\- note_added {note_id, author_email}: never returned to an API key, only to console members.

Example call:
curl -X GET "https://verification.didit.me/v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/timeline/?contract=2&limit=50&event_type=verification_attempt,login" \
-H "x-api-key: YOUR_API_KEY"

Failure modes:
\- 400 (contract mode only): {"contract": [...]}, {"limit": [...]}, {"cursor": ["This cursor is not valid. Reload the feed."]} or {"event_type": {...}}.
\- 404: {"detail": "Network not found."}. The network does not exist, or has no member visible to this application.
\- 401: missing or invalid x-api-key.
\- 403: the API key belongs to another application, or it has restricted access (Networks needs a full-access key). A console member token needs read:networks.
\- 403 with {"code": "networks_not_entitled"}: Networks is not enabled for the organization.

Side effects: none, pure read.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

붙여넣을 곳

네트워크의 이벤트 기록을 조회합니다.
`contract`를 지정하지 않으면 응답은 네트워크 자체의 기록이며, 가장 오래된 순서로 정렬되고 페이지로 나뉘지 않습니다. 네트워크가 처음 감지된 시점, 각 신호가 마지막으로 관찰된 시점, 그리고 가장 최근의 상태 변경과 그 사유가 포함됩니다.
이 응답 형식은 변경되지 않으며, `limit`, `cursor`, `event_type`은 무시됩니다.## 타입이 지정된 타임라인타입이 지정된 타임라인을 조회하려면 `contract=2`를 전달합니다.
멤버 계정이 수행한 작업과 귀하의 팀이 해당 네트워크에 대해 취한 조치가 추가되며, 최신순으로 한 페이지씩 제공됩니다.
`contract`는 `2`만 허용하며, 다른 값을 지정하면 `400`이 반환됩니다.| 매개변수 | 설명 |
| - | - |
| `limit` | 페이지당 이벤트 수이며, 1에서 500 사이입니다. 기본값은 100입니다. |
| `cursor` | 이전 페이지의 `next_cursor`입니다. 잘못되었거나 비어 있는 커서를 지정하면 `400`이 반환됩니다. |
| `event_type` | 유지할 이벤트 유형으로, 반복하여 지정하거나 쉼표로 구분할 수 있으며 최대 20개 값입니다. 기본값은 모든 유형입니다. |응답은 `{"results": [...], "next_cursor": "..."}` 형식입니다.
`next_cursor`가 `null`이 될 때까지, `cursor`를 `next_cursor` 값으로 설정하여 다음 페이지를 조회합니다.## 이벤트 유형| `event_type` | 기록 내용 | 상세 블록 |
| - | - | - |
| `network_detected` | 네트워크가 감지되었습니다 | 없음 |
| `signal_observed` | 신호가 가장 최근에 관찰된 기록 | 없음 |
| `network_active`, `network_in_review`, `network_resolved`, `network_dismissed` | 네트워크의 가장 최근 상태 변경이며, 사유는 `metadata`에 포함됩니다 | 없음 |
| `verification_attempt` | 멤버(개인 또는 기업)의 인증 세션으로, 순번(`attempt_count` 중 `attempt`번째)이 표시되며, 거부된 경우 거부 사유가 포함됩니다 | `verification_attempt` |
| `transaction` | 멤버가 참여한 거래이며, 거래일을 기준으로 기록됩니다 | `transaction` |
| `login` | [events API](https://docs.didit.me/ko/transaction-monitoring/events.md)를 통해 멤버에 대해 전송한 로그인 또는 로그인 실패 | `login` |
| `rule_hit` | 멤버의 거래 또는 이벤트와 일치한 활성 규칙 | `rule_hit` |
| `case_linked` | 귀하의 조직에서 네트워크에 대해 열린 케이스 | `case_linked` |
| `note_added` | 네트워크에 남긴 메모이며, 메모 내용은 포함되지 않습니다 | `note_added` |`note_added` 이벤트는 콘솔 멤버에게만 반환되며, API 키에는 절대 반환되지 않습니다.
두 멤버 간의 거래는 각 멤버마다 자체 `account`와 함께 한 번씩 나타납니다.
해당 거래에 대한 규칙 적중은 한 번만 나타납니다.
로그인 이벤트는 이벤트로 게시한 로그인에만 존재합니다: `auth.login`, `security.login_succeeded` 및 이들의 실패 형태.## 계정 및 기록각 멤버 이벤트에는 해당 이벤트가 속한 멤버인 `account`와, 해당 이벤트를 읽어온 세션, 기업 세션, 거래, 모니터링 이벤트 또는 케이스인 `source_ref`가 포함됩니다.
`ownership`은 호출한 애플리케이션에 기록이 속하면 `owned`, 조직 내 다른 애플리케이션에 속하면 `organization`입니다.
`route`는 기록의 종류, UUID, 애플리케이션을 제공합니다. 모니터링 이벤트나 케이스의 `source_ref`에는 `route`가 없습니다.
네트워크 자체 이벤트에는 `account`와 `source_ref`가 모두 없습니다.## 관련 문서- [네트워크 조회](https://docs.didit.me/ko/management-api/networks/get.md)
- [네트워크 신호](https://docs.didit.me/ko/management-api/networks/signals.md)
- [네트워크 맵](https://docs.didit.me/ko/management-api/networks/map.md)
- [이벤트 수집](https://docs.didit.me/ko/transaction-monitoring/events.md)


## OpenAPI

````yaml ko/openapi-25.json GET /v3/organization/{organization_id}/application/{application_id}/networks/{network_uuid}/timeline/
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}/networks/{network_uuid}/timeline/:
    get:
      tags:
        - Networks
      summary: 네트워크 타임라인 조회
      description: >-
        `contract` 미지정 시: 네트워크 자체 이벤트(감지, 각 신호의 최신 관측 및 해당 검토)가 오래된 순서대로 페이지네이션
        없이 반환됩니다. `limit`, `cursor`, `event_type`은 무시됩니다. `contract=2` 지정 시: 커서
        기반 페이지네이션이 적용된 형식화된 타임라인이 최신순으로 반환됩니다. 멤버 계정이 수행한 작업(인증 시도, 거래, 이벤트 API를
        통해 전송한 로그인 및 트리거된 실시간 규칙)과 네트워크에 대해 생성된 케이스가 추가됩니다. `note_added` 이벤트는 콘솔
        멤버에게만 반환되며, API 키에는 절대 반환되지 않습니다. 전체 접근 권한이 있는 API 키 또는 콘솔 멤버의
        `read:networks` 권한이 필요합니다.
      operationId: get_network_timeline
      parameters:
        - name: organization_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: 조직 UUID입니다.
        - name: application_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: 애플리케이션 UUID입니다.
        - name: network_uuid
          in: path
          required: true
          schema:
            type: string
            format: uuid
            example: n3a5e000-0000-4000-8000-000000000001
          description: 네트워크 UUID입니다.
        - name: contract
          in: query
          required: false
          schema:
            type: string
            enum:
              - '2'
          description: '`2`는 유형이 지정된 타임라인을 반환합니다. 기본 타임라인의 경우 생략합니다. 그 외의 값은 400을 반환합니다.'
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            minimum: 1
            maximum: 500
          description: 유형별 타임라인 전용입니다. 페이지당 이벤트 수이며, 1에서 500 사이입니다. 기본값은 100입니다.
        - name: cursor
          in: query
          required: false
          schema:
            type: string
          description: >-
            유형별 타임라인 전용입니다. 이전 페이지의 `next_cursor`입니다. 유효하지 않거나 비어 있는 커서는 400을
            반환합니다.
        - name: event_type
          in: query
          required: false
          style: form
          explode: true
          schema:
            type: array
            maxItems: 20
            items:
              type: string
              enum:
                - network_detected
                - signal_observed
                - network_active
                - network_in_review
                - network_resolved
                - network_dismissed
                - verification_attempt
                - transaction
                - login
                - rule_hit
                - case_linked
                - note_added
          description: >-
            유형별 타임라인 전용입니다. 유지할 이벤트 유형으로, 반복하거나 쉼표로 구분하여 최대 20개 값까지 지정할 수 있습니다.
            기본값은 모든 유형입니다.
      responses:
        '200':
          description: >-
            `contract` 미지정 시: 페이지 매김 없는 `{results}`(오래된 순)입니다. `contract=2`인 경우:
            `{results, next_cursor}`(최신순)입니다.
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/NetworkTimeline'
                  - $ref: '#/components/schemas/NetworkTimelinePage'
              examples:
                Default timeline:
                  summary: contract 미지정
                  value:
                    results:
                      - event_type: network_detected
                        occurred_at: '2026-10-01T09:12:44Z'
                        label: Network detected
                        metadata:
                          network_id: N-0042
                      - event_type: signal_observed
                        occurred_at: '2026-10-12T16:03:10Z'
                        label: device observed
                        metadata:
                          signal_type: device
                          subject_count: 3
                          is_hub: false
                      - event_type: network_in_review
                        occurred_at: '2026-10-12T16:30:00Z'
                        label: Network in_review
                        metadata:
                          reason: Shared device across three new accounts.
                Typed timeline:
                  summary: contract=2인 경우
                  value:
                    results:
                      - id: monitoring_event:9b2f1c3e-4d5a-4b6c-8d7e-0f1a2b3c4d5e
                        event_type: login
                        occurred_at: '2026-10-12T18:41:02Z'
                        ingested_at: '2026-10-12T18:41:03Z'
                        label: Login
                        metadata: {}
                        account:
                          node_id: vendor_user:5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f
                          node_type: account
                          uuid: 5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f
                          vendor_data: user-1042
                          display_name: Alex Example
                          ownership: owned
                          route:
                            kind: user
                            id: 5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f
                            application_id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                        source_ref:
                          kind: monitoring_event
                          id: 9b2f1c3e-4d5a-4b6c-8d7e-0f1a2b3c4d5e
                          ownership: owned
                        verification_attempt: null
                        transaction: null
                        login:
                          action: auth.login
                          succeeded: true
                          status: APPROVED
                          ip:
                            address: 203.0.113.24
                            country_code: ES
                            city: Madrid
                            connection_type: null
                            is_vpn_or_tor: false
                            is_data_center: false
                          device:
                            fingerprint: fp_0a1b2c3d
                            label: Chrome · Android
                          is_first_login: false
                          is_new_device: true
                        rule_hit: null
                        case_linked: null
                        note_added: null
                      - id: session:1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f
                        event_type: verification_attempt
                        occurred_at: '2026-10-12T16:03:10Z'
                        ingested_at: '2026-10-12T16:03:10Z'
                        label: Verification attempt 2 of 2
                        metadata: {}
                        account:
                          node_id: vendor_user:5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f
                          node_type: account
                          uuid: 5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f
                          vendor_data: user-1042
                          display_name: Alex Example
                          ownership: owned
                          route:
                            kind: user
                            id: 5f6e7d8c-9b0a-4c1d-8e2f-3a4b5c6d7e8f
                            application_id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                        source_ref:
                          kind: session
                          id: 1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f
                          ownership: owned
                          route:
                            kind: session
                            id: 1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f
                            application_id: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
                        verification_attempt:
                          session_id: 1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f
                          session_number: 1287
                          attempt: 2
                          attempt_count: 2
                          status: Approved
                          status_changed_at: '2026-10-12T16:05:41Z'
                          decline_reasons: []
                        transaction: null
                        login: null
                        rule_hit: null
                        case_linked: null
                        note_added: null
                      - id: signal_observed:8d7c6b5a-4e3f-4a2b-9c1d-0e9f8a7b6c5d
                        event_type: signal_observed
                        occurred_at: '2026-10-12T16:03:10Z'
                        ingested_at: '2026-10-01T09:12:44Z'
                        label: device observed
                        metadata:
                          signal_type: device
                          subject_count: 3
                          is_hub: false
                        account: null
                        source_ref: null
                        verification_attempt: null
                        transaction: null
                        login: null
                        rule_hit: null
                        case_linked: null
                        note_added: null
                    next_cursor: >-
                      eyJ0IjoiMjAyNi0xMC0xMlQxNjowMzoxMCswMDowMCIsImMiOiIyMDI2LTEwLTAxVDA5OjEyOjQ0KzAwOjAwIiwiciI6MSwidSI6IjhkN2M2YjVhLTRlM2YtNGEyYi05YzFkLTBlOWY4YTdiNmM1ZCJ9
        '400':
          description: >-
            `contract`가 존재하는 경우: 유효하지 않은 `contract`, `limit`, `cursor` 또는
            `event_type` 값입니다.
          content:
            application/json:
              examples:
                Unsupported contract:
                  summary: 지원되지 않는 컨트랙트
                  value:
                    contract:
                      - '"3" is not a valid choice.'
                Invalid cursor:
                  summary: 유효하지 않은 커서
                  value:
                    cursor:
                      - This cursor is not valid. Reload the feed.
                Limit too large:
                  summary: 제한값이 너무 큼
                  value:
                    limit:
                      - Ensure this value is less than or equal to 500.
                Unknown event type:
                  summary: 알 수 없는 이벤트 유형
                  value:
                    event_type:
                      '0':
                        - '"logout" is not a valid choice.'
        '401':
          description: 자격 증명이 누락되었거나 유효하지 않습니다.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
                    description: '코드화된 오류에 표시됩니다(예: `networks_not_entitled`).'
              examples:
                Missing or invalid credentials:
                  summary: 자격 증명이 누락되었거나 유효하지 않음
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
        '403':
          description: >-
            API 키가 다른 애플리케이션에 속해 있거나 접근 권한이 제한된 키입니다. Networks 엔드포인트에는 전체 접근 권한
            키가 필요합니다. 콘솔 멤버 토큰에는 `read:networks` 권한이 필요합니다. 조직에 Networks가 활성화되어
            있지 않은 경우 `code: networks_not_entitled`와 함께 반환되기도 합니다.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
                    description: '코드화된 오류에 표시됩니다(예: `networks_not_entitled`).'
              examples:
                Networks not enabled:
                  summary: 네트워크가 활성화되지 않았습니다
                  value:
                    detail: >-
                      Networks is disabled for this organization. Contact Didit
                      support if you believe this is an error.
                    code: networks_not_entitled
                Restricted API key:
                  summary: 제한된 API 키
                  value:
                    detail: This API key has no access to this endpoint.
                No permission:
                  summary: 권한 없음
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: 네트워크를 찾을 수 없습니다(또는 이 애플리케이션에 표시되지 않음).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/n3a5e000-0000-4000-8000-000000000001/timeline/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: curl
          label: curl (typed timeline)
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/organization/11111111-2222-3333-4444-555555555555/application/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee/networks/3fa85f64-5717-4562-b3fc-2c963f66afa6/timeline/?contract=2&limit=50&event_type=verification_attempt,login'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

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

            result = client.networks.retrieve_timeline(
                "n3a5e000-0000-4000-8000-000000000001",
            )
            print(result)
        - 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();


            const result = await
            didit.networks.retrieveTimeline("n3a5e000-0000-4000-8000-000000000001");

            console.log(result);
        - 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\nresult, err := client.Networks.RetrieveTimeline(ctx, \"n3a5e000-0000-4000-8000-000000000001\", didit.NetworksRetrieveTimelineParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID

            // and DIDIT_APPLICATION_ID.

            Didit client = new Didit();


            var result =
            client.networks().retrieveTimeline("n3a5e000-0000-4000-8000-000000000001");

            System.out.println(result);
        - 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();


            $result =
            $didit->networks->retrieveTimeline('n3a5e000-0000-4000-8000-000000000001');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY, DIDIT_ORGANIZATION_ID

            # and DIDIT_APPLICATION_ID.

            didit = Didit::Client.new


            result =
            didit.networks.retrieve_timeline("n3a5e000-0000-4000-8000-000000000001")

            puts result.to_h
        - 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();


            var result = await
            client.Networks.RetrieveTimelineAsync("n3a5e000-0000-4000-8000-000000000001");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    NetworkTimeline:
      title: Default timeline (no contract)
      type: object
      description: '`contract` 미지정 시: 네트워크 자체 이벤트가 페이지네이션 없이 오래된 순서대로 반환됩니다.'
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/NetworkTimelineEvent'
    NetworkTimelinePage:
      title: Typed timeline page (contract=2)
      type: object
      description: '`contract=2`인 경우: 타입이 지정된 이벤트 1페이지(최신순 정렬)입니다.'
      properties:
        results:
          type: array
          items:
            $ref: '#/components/schemas/NetworkTypedTimelineEvent'
        next_cursor:
          type: string
          nullable: true
          description: 다음 페이지를 읽으려면 `cursor`로 전달하세요. 마지막 페이지에서는 null입니다.
    NetworkTimelineEvent:
      type: object
      properties:
        event_type:
          type: string
          description: >-
            예: network_detected, signal_observed, network_in_review,
            network_resolved, network_dismissed.
        occurred_at:
          type: string
          format: date-time
          nullable: true
        label:
          type: string
        metadata:
          type: object
    NetworkTypedTimelineEvent:
      type: object
      description: >-
        타입이 지정된 타임라인 이벤트 1건: 기본 필드 4개와 해당 id, Didit이 저장한 시점, 속한 멤버 계정 및 레코드, 그리고
        해당 이벤트 타입의 세부 정보 블록이 포함됩니다. 다른 세부 정보 블록은 null입니다.
      properties:
        id:
          type: string
          description: '`<source>:<uuid>`, 타임라인 내에서 고유합니다.'
          example: session:3fa85f64-5717-4562-b3fc-2c963f66afa6
        event_type:
          type: string
          enum:
            - network_detected
            - signal_observed
            - network_active
            - network_in_review
            - network_resolved
            - network_dismissed
            - verification_attempt
            - transaction
            - login
            - rule_hit
            - case_linked
            - note_added
        occurred_at:
          type: string
          format: date-time
          description: 발생한 시점입니다.
        ingested_at:
          type: string
          format: date-time
          description: Didit이 이를 저장한 시점입니다.
        label:
          type: string
          description: '영문 짧은 라벨(예: `Verification attempt 2 of 3`)입니다.'
        metadata:
          type: object
          description: 네트워크 자체 이벤트의 경우 기본 타임라인과 동일한 메타데이터입니다. 그 외의 경우 비어 있습니다.
        account:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineAccount'
          nullable: true
          description: 멤버 계정입니다. 네트워크 자체 이벤트, `case_linked` 및 `note_added`의 경우 null입니다.
        source_ref:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineSourceRef'
          nullable: true
          description: 소스 레코드입니다. 네트워크 자체 이벤트 및 `note_added`의 경우 null입니다.
        verification_attempt:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineAttempt'
          nullable: true
          description: '`verification_attempt` 이벤트에 설정됩니다.'
        transaction:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineTransaction'
          nullable: true
          description: '`transaction` 이벤트에 설정됩니다.'
        login:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineLogin'
          nullable: true
          description: '`login` 이벤트에 설정됩니다.'
        rule_hit:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineRuleHit'
          nullable: true
          description: '`rule_hit` 이벤트에 설정됩니다.'
        case_linked:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineCaseLinked'
          nullable: true
          description: '`case_linked` 이벤트에 설정됩니다.'
        note_added:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineNoteAdded'
          nullable: true
          description: '`note_added` 이벤트에 설정됩니다. API 키에는 절대 반환되지 않습니다.'
    NetworkTimelineAccount:
      type: object
      description: 이벤트가 속한 멤버 계정입니다.
      properties:
        node_id:
          type: string
          description: >-
            `<kind>:<uuid>` 형식이며, 여기서 종류(kind)는 `vendor_user`,
            `vendor_business`, `transaction_party` 중 하나입니다.
          example: vendor_user:3fa85f64-5717-4562-b3fc-2c963f66afa6
        node_type:
          type: string
          enum:
            - account
            - business_account
            - transaction_party
        uuid:
          type: string
          format: uuid
        vendor_data:
          type: string
          nullable: true
        display_name:
          type: string
          nullable: true
        ownership:
          type: string
          enum:
            - owned
            - organization
          description: >-
            레코드가 호출한 애플리케이션에 속한 경우(콘솔 멤버의 경우 권한이 부여된 애플리케이션) `owned`입니다. 조직의 다른
            애플리케이션에 속한 경우 `organization`입니다.
        route:
          $ref: '#/components/schemas/NetworkTimelineRoute'
    NetworkTimelineSourceRef:
      type: object
      description: 이벤트를 읽어온 레코드입니다.
      properties:
        kind:
          type: string
          enum:
            - session
            - business_session
            - transaction
            - monitoring_event
            - case
        id:
          type: string
          format: uuid
        ownership:
          type: string
          enum:
            - owned
            - organization
          description: >-
            레코드가 호출한 애플리케이션에 속한 경우(콘솔 멤버의 경우 권한이 부여된 애플리케이션) `owned`입니다. 조직의 다른
            애플리케이션에 속한 경우 `organization`입니다.
        route:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineRoute'
          description: '`monitoring_event` 및 `case`에는 없습니다.'
    NetworkTimelineAttempt:
      type: object
      description: 해당 계정의 인증 세션 1건입니다.
      properties:
        session_id:
          type: string
          format: uuid
          description: 세션 UUID 또는 기업의 경우 비즈니스 세션 UUID입니다.
        session_number:
          type: integer
          nullable: true
        attempt:
          type: integer
          description: 계정의 세션 중 생성 순서에 따른 이 세션의 위치입니다.
        attempt_count:
          type: integer
          description: 해당 계정에 속한 세션 수입니다.
        status:
          type: string
          description: '세션 상태입니다(예: `Approved` 또는 `Declined`).'
        status_changed_at:
          type: string
          format: date-time
          nullable: true
        decline_reasons:
          type: array
          items:
            $ref: '#/components/schemas/NetworkTimelineDeclineReason'
          description: '거부된 세션에 한함: 경고 목록이며 가장 오래된 순으로 경고당 한 번씩 표시됩니다. 그 외의 경우 비어 있습니다.'
    NetworkTimelineTransaction:
      type: object
      description: 멤버 계정이 참여한 거래로, 거래 일자를 기준으로 기록됩니다.
      properties:
        transaction_id:
          type: string
          format: uuid
        transaction_number:
          type: integer
          nullable: true
        transaction_type:
          type: string
        action_type:
          type: string
        amount:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineAmount'
          nullable: true
          description: 거래에 금액이 없는 경우 null입니다.
        status:
          type: string
        decision_reason_code:
          type: string
          nullable: true
        decision_reason_label:
          type: string
          nullable: true
        party_role:
          type: string
          description: >-
            거래에서 계정의 역할: `APPLICANT`, `REMITTER`, `BENEFICIARY` 또는
            `COUNTERPARTY`입니다.
    NetworkTimelineLogin:
      type: object
      description: 이벤트 API를 통해 개인에 대해 게시한 로그인 이벤트입니다.
      properties:
        action:
          type: string
          description: >-
            `<event_category>.<action_type>`: 로그인 성공의 경우 `auth.login` 또는
            `security.login_succeeded`, 실패한 경우 `auth.login_failed` 또는
            `security.login_failed`입니다.
        succeeded:
          type: boolean
        status:
          type: string
          description: 이벤트의 상태입니다.
        ip:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineIP'
          nullable: true
          description: 이벤트에 IP 주소가 없는 경우 null입니다.
        device:
          allOf:
            - $ref: '#/components/schemas/NetworkTimelineDevice'
          nullable: true
          description: 이벤트에 기기 핑거프린트 또는 컨텍스트가 없는 경우 null입니다.
        is_first_login:
          type: boolean
          description: 기록된 계정의 최초 성공 로그인입니다.
        is_new_device:
          type: boolean
          description: >-
            해당 계정의 이전 성공한 로그인 기록에 존재하지 않는 기기에서의 성공한 로그인입니다. 첫 번째 로그인에서는 절대 true가
            될 수 없습니다.
    NetworkTimelineRuleHit:
      type: object
      description: 멤버의 거래 또는 이벤트와 일치하는 활성 규칙입니다. 테스트 모드 일치 항목은 포함되지 않습니다.
      properties:
        rule_id:
          type: string
          format: uuid
        rule_title:
          type: string
        rule_category:
          type: string
        rule_source:
          type: string
        severity:
          type: string
          nullable: true
        score_delta:
          type: integer
        status_target:
          type: string
          nullable: true
        action_summary:
          type: string
          nullable: true
    NetworkTimelineCaseLinked:
      type: object
      description: >-
        조직 내 네트워크를 위해 생성된 케이스입니다. `source_ref.ownership`은 호출한 애플리케이션에 속하는지 여부를
        나타냅니다.
      properties:
        case_id:
          type: string
          format: uuid
        case_number:
          type: string
          nullable: true
        status:
          type: string
        author_email:
          type: string
          nullable: true
        author_name:
          type: string
          nullable: true
    NetworkTimelineNoteAdded:
      type: object
      description: 네트워크에 남겨진 메모입니다. 메모 텍스트는 포함되지 않습니다.
      properties:
        note_id:
          type: string
          format: uuid
        author_email:
          type: string
    NetworkTimelineRoute:
      type: object
      description: '레코드가 열리는 위치: 종류, UUID 및 레코드가 속한 애플리케이션.'
      properties:
        kind:
          type: string
          description: >-
            계정의 경우 `user`, `business` 또는 `transaction_party`이며, 소스 레코드의 경우
            `session`, `business_session` 또는 `transaction`입니다.
        id:
          type: string
          format: uuid
        application_id:
          type: string
          format: uuid
    NetworkTimelineDeclineReason:
      type: object
      properties:
        risk:
          type: string
          description: 경고 코드입니다.
        feature:
          type: string
          description: 경고를 발생시킨 기능입니다.
        short_description:
          type: string
    NetworkTimelineAmount:
      type: object
      properties:
        value:
          type: string
          description: 문자열 형태의 십진수 금액입니다.
        currency:
          type: string
        direction:
          type: string
          nullable: true
    NetworkTimelineIP:
      type: object
      properties:
        address:
          type: string
        country_code:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        connection_type:
          type: string
          nullable: true
          description: 주소에 대한 연결 유형 라벨(자유 텍스트)입니다.
        is_vpn_or_tor:
          type: boolean
        is_data_center:
          type: boolean
    NetworkTimelineDevice:
      type: object
      properties:
        fingerprint:
          type: string
          nullable: true
        label:
          type: string
          nullable: true
          description: 이벤트의 기기 컨텍스트로부터 생성된 읽기 쉬운 기기 라벨입니다.
  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 를 참고하십시오.

````

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