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

# DELETE/Token

> 프라이빗 모드에서 암호화된 토큰 안전 삭제 API 가이드

등록된 토큰을 안전하게 삭제합니다. 최대 5,000개까지 일괄 삭제 가능하며, 부분적 처리를 지원합니다.

<Warning>
  토큰 삭제는 되돌릴 수 없는 작업입니다. 삭제 전 신중히 검토하시기 바랍니다.
</Warning>

## 기본 정보

<ParamField path="method" type="string" required>
  **DELETE**
</ParamField>

<ParamField path="url" type="string" required>
  [https://rest-api.argosidentity.com/v3/submission/tokens](https://rest-api.argosidentity.com/v3/submission/tokens)
</ParamField>

## 보안 설정

### 암호화 전송

<Check>
  **안전한 데이터 전송** 옵션 활성화 시, 요청 및 응답이 AES-256으로 암호화됩니다.
</Check>

* 암호화 방식: **AES-256**
* 적용 범위: 요청 및 응답 데이터
* 호환성: POST/submission, PATCH/submission, GET/submission과 동일한 암/복호화 방식
* [안전한 데이터 전송 옵션](/ko/idcheck/getting-started/encrypt-and-decrypt-data/overview#4-안전한-데이터-전송-옵션) 확인하기

### 데이터 보안

<Info>
  삭제된 토큰 데이터는 완전히 제거되며, 복구가 불가능합니다. 안전한 데이터 전송에서는 삭제 과정도 암호화되어 진행됩니다.
</Info>

### 인증

<ParamField header="x-api-key" type="string" required>
  프로젝트 API 키를 설정합니다.
</ParamField>

<ParamField header="Content-Type" type="string">
  요청 본문의 MIME 타입을 설정합니다.
</ParamField>

<Warning>
  DELETE 요청 시 Content-Type: application/json`을 사용했을 때, 오류가 발생 시, 'text/plain`을 사용하세요.
</Warning>

```bash theme={null}
x-api-key: {{YOUR_API_KEY}}
Content-Type: text/plain
```

## 토큰 삭제 유형

1. tokenId 지정 삭제

* 특정 tokenId를 지정해서 삭제 (요청 당 최대 500개)

2. 시간 순 N개 삭제

* 제출한 순서 및 갯수에 따른 N개 삭제 (요청 당 최대 5,000개)

## 요청 파라미터

### Request Body

<Tabs>
  <Tab title="tokenId 지정 삭제">
    <ParamField body="tokenId" type="Array<String>" required>
      삭제할 토큰 ID 배열 (최대 500개)

      **토큰 ID 형식:**

      * **길이**: 8 Byte \~ 64 Byte
      * **허용 문자**: 영문자(a-z, A-Z), 숫자(0-9), 하이픈(-), 언더스코어(\_), 마침표(.)
      * **제한**: 공백, 탭, 개행문자 불가
      * **시작/끝**: 영문자 및 숫자만 가능
    </ParamField>
  </Tab>

  <Tab title="token 시간 순 N개 삭제">
    <ParamField body="count" type="Number" required>
      삭제할 토큰 갯수 (최대 5000개)
    </ParamField>

    <ParamField body="order" type="string" required>
      * `asc`: 오름차순
      * `desc`: 내림차순
    </ParamField>
  </Tab>
</Tabs>

<RequestExample>
  ```bash tokenId 지정 삭제 cURL 예시 theme={null}
  curl -X DELETE 'https://rest-api.argosidentity.com/v3/submission/tokens' \
    -H 'x-api-key: YOUR_API_KEY' \
    -H 'Content-Type: text/plain' \
    -d '{
    "tokenId": [
      "user001a",
      "api.key.01",
      "token-123-abc", 
      "session_data_01"
    ]
  }'
  ```

  ```bash token 시간 순 N개 삭제 cURL 예시 theme={null}
  curl -X DELETE 'https://rest-api.argosidentity.com/v3/submission/tokens' \
    -H 'x-api-key: YOUR_API_KEY' \
    -H 'Content-Type: text/plain' \
    -d '{
    "count": 5000,
    "order": "desc"
  }'
  ```
</RequestExample>

## 응답

### 성공 응답 (200)

<Tabs>
  <Tab title="tokenId 지정 삭제">
    <ResponseField name="success" type="Boolean" required>
      작업 성공 여부
    </ResponseField>

    <ResponseField name="message" type="String" required>
      작업 결과 메시지
    </ResponseField>

    <ResponseField name="summary" type="Object" required>
      요약 정보

      <Expandable title="summary 속성">
        <ResponseField name="totalSubmitted" type="Number">
          제출된 총 토큰 수
        </ResponseField>

        <ResponseField name="deleted" type="Number">
          성공적으로 삭제된 토큰 수
        </ResponseField>

        <ResponseField name="notFound" type="Number">
          존재하지 않는 토큰 수
        </ResponseField>

        <ResponseField name="failed" type="Number">
          삭제 실패한 토큰 수
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="details" type="Object">
      상세 정보 (실패나 존재하지 않는 토큰이 있는 경우에만 포함)

      <Expandable title="details 속성">
        <ResponseField name="notFound" type="Array<String>">
          존재하지 않는 토큰 목록
        </ResponseField>

        <ResponseField name="failed" type="Array<Object>">
          삭제 실패한 토큰 목록

          <Expandable title="failed 배열 속성">
            <ResponseField name="tokenId" type="String">
              삭제 실패한 토큰 ID
            </ResponseField>

            <ResponseField name="error" type="String">
              삭제 실패 코드
            </ResponseField>

            <ResponseField name="message" type="String">
              삭제 실패 메시지
            </ResponseField>
          </Expandable>
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Tab>

  <Tab title="token 시간 순 N개 삭제">
    <ResponseField name="success" type="Boolean" required>
      작업 성공 여부
    </ResponseField>

    <ResponseField name="message" type="String" required>
      작업 결과 메시지
    </ResponseField>

    <ResponseField name="summary" type="Object" required>
      요약 정보

      <Expandable title="summary 속성">
        <ResponseField name="deleted" type="Number">
          성공적으로 삭제된 토큰 수
        </ResponseField>

        <ResponseField name="failed" type="Number">
          삭제 실패한 토큰 수
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Tab>
</Tabs>

<ResponseExample>
  ```json tokenId 지정삭제 전체 성공 theme={null}
  {
    "success": true,
    "message": "Successfully deleted 3 tokens",
    "summary": {
      "totalSubmitted": 3,
      "deleted": 3,
      "notFound": 0,
      "failed": 0
    }
  }
  ```

  ```json tokenId 지정삭제 부분 성공 theme={null}
  {
    "success": false,
    "message": "Successfully deleted 1 tokens",
    "summary": {
      "totalSubmitted": 3,
      "deleted": 1,
      "notFound": 1,
      "failed": 1
    },
    "details": {
      "notFound": ["nonexistent1"],
      "failed": [
        {
          "tokenId": "problematic-token",
          "error": "Delete_failed",
          "message": "Delete operation failed"
        }
      ]
    }
  }
  ```

  ```json tokenId 시간 순 삭제 theme={null}
  {
      "success": true,
      "message": "Successfully deleted 10 tokens",
      "summary": {
          "deleted": 10,
          "failed": 0
      }
  }
  ```
</ResponseExample>

### 오류 응답 (400/500)

<ResponseField name="errorCode" type="String" required>
  에러 코드
</ResponseField>

<ResponseField name="errorMessage" type="String" required>
  에러 메시지
</ResponseField>

<ResponseExample>
  ```json 토큰을 찾을 수 없음 theme={null}
  {
    "errorCode": "token_not_found",
    "errorMessage": "Token not found."
  }
  ```
</ResponseExample>

## 토큰 정책

### 제한 사항

<Warning>
  **요청 제한**: 1회 요청 당 최대 5000개 토큰 ID
  **Pool 제한**: 각 PID별 최대 100,000개 토큰 관리
</Warning>

### Partial Handling

<Info>
  DELETE 요청은 토큰 ID에 대해 부분적으로 처리됩니다.
  Pool에 존재하지 않는 토큰 ID는 응답의 'notFound' 필드로 안내하고, 존재하는 토큰 ID만 삭제합니다.
</Info>

**예시:**

* Pool에 존재하는 Token ID: `tokenA`, `tokenB`, `tokenC`
* DELETE 요청: `tokenA`, `tokenC`, `tokenD`
* 요청 완료 후 Pool: `tokenB`
* 응답의 details.notFound: \[`tokenD`]

## 보안 고려사항

### 데이터 완전 삭제

<Check>
  프라이빗 모드에서 삭제된 토큰은 암호화된 상태에서 완전히 제거되어 복구가 불가능합니다.
</Check>

* **안전한 삭제**: 데이터베이스에서 완전 제거
* **암호화 처리**: 삭제 과정도 AES-256/GCM-256 암호화 적용
* **감사 로그**: 삭제 작업 기록 유지 (토큰 내용은 제외)

### 접근 제어

<Warning>
  삭제 권한은 API 키를 통해 제어됩니다. API 키 관리에 각별한 주의가 필요합니다.
</Warning>

## 에러 코드

### 공통 에러

| Error Code                 | HTTP Status | Description              |
| -------------------------- | ----------- | ------------------------ |
| invalid\_payload           | 400         | 요청 페이로드 누락 또는 형식 오류      |
| invalid\_path              | 400         | 지원하지 않는 HTTP 메서드         |
| invalid\_project           | 400         | 프로젝트 ID 누락 또는 잘못된 API 키  |
| invalid\_query\_parameters | 400         | 쿼리 파라미터 누락 또는 형식 오류      |
| invalid\_order             | 400         | 쿼리 파라미터의 정렬(order) 형식 오류 |
| internal\_server\_error    | 500         | 서버 내부 오류                 |

### Token 관련 에러

| Error Code                      | HTTP Status | Description                            |
| ------------------------------- | ----------- | -------------------------------------- |
| invalid\_token\_id              | 400         | 토큰 ID 누락, 빈 값, 또는 배열이 아님               |
| invalid\_token\_id\_format      | 400         | 토큰 ID 형식 규칙 위반                         |
| invalid\_token\_id\_type        | 400         | 토큰 ID가 문자열이 아님                         |
| invalid\_token\_id\_length      | 400         | 토큰 ID 길이가 8-64자 범위를 벗어남                |
| invalid\_token\_id\_whitespace  | 400         | 토큰 ID에 공백 문자 포함                        |
| invalid\_token\_id\_characters  | 400         | 토큰 ID에 허용되지 않는 문자 포함                   |
| invalid\_token\_id\_start       | 400         | 토큰 ID가 영문자/숫자로 시작하지 않음                 |
| invalid\_token\_id\_end         | 400         | 토큰 ID가 영문자/숫자로 끝나지 않음                  |
| request\_token\_limit\_exceeded | 400         | 요청 당 토큰 개수 제한 초과 (500개)                |
| token\_limit\_exceeded          | 400         | 프로젝트 당 토큰 총 개수 제한 초과 (100,000개)        |
| token\_id\_not\_found           | 400         | 요청한 토큰이 풀에 존재하지 않음                     |
| token\_id\_details\_not\_found  | 400         | 토큰 상세 정보 조회 실패                         |
| delete\_token\_limit\_exceeded  | 400         | 시간 순 다건 삭제 요청의 최대 갯수(count) 초과 (5000개) |

## 사용 예시

<Steps>
  <Step title="삭제 대상 토큰 확인">
    삭제하기 전에 토큰이 존재하는지 확인합니다.

    ```bash theme={null}
    curl -X GET 'https://rest-api.argosidentity.com/v3/submission/tokens?tokenId=user001a' \
      -H 'x-api-key: YOUR_API_KEY'
    ```

    <Check>
      토큰이 존재하는 경우 상세 정보가 반환됩니다.
    </Check>
  </Step>

  <Step title="토큰 삭제 실행">
    확인된 토큰을 삭제합니다.
    유형: 토큰 지정 삭제, 토큰 시간 순 삭제

    <Expandable title="토큰 지정 삭제">
      ```bash theme={null}
      curl -X DELETE 'https://rest-api.argosidentity.com/v3/submission/tokens' \
        -H 'x-api-key: YOUR_API_KEY' \
        -H 'Content-Type: text/plain' \
        -d '{"tokenId": ["user001a", "api.key.01"]}' 
      ```
    </Expandable>

    <Expandable title="토큰 시간 순 삭제">
      ```bash theme={null}
      curl -X DELETE 'https://rest-api.argosidentity.com/v3/submission/tokens' \
        -H 'x-api-key: YOUR_API_KEY' \
        -H 'Content-Type: text/plain' \
        -d '{"count": 5000, order: "asc"}' 
      ```
    </Expandable>

    <Warning>
      삭제는 즉시 실행되며 되돌릴 수 없습니다.
    </Warning>
  </Step>

  <Step title="삭제 결과 확인">
    응답에서 삭제 결과를 확인합니다.

    <Check>
      `summary.deleted` 필드에서 성공적으로 삭제된 토큰 수를 확인할 수 있습니다.
    </Check>
  </Step>
</Steps>

<Tip>
  대량 삭제 시에는 존재하지 않는 토큰이 포함되어도 존재하는 토큰만 선별적으로 삭제됩니다. `details.notFound`에서 존재하지 않았던 토큰 목록을 확인할 수 있습니다.
</Tip>

<Note>
  **Content-Type 주의사항**: DELETE 요청 시 Content-Type: application/json`을 사용했을 때, 오류가 발생 시, 'text/plain`을 사용하세요.
</Note>
