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

# GET/Token

> Guía de API de recuperación de tokens cifrados en modo privado

Recupere de forma segura los tokens registrados. Puede realizar una recuperación detallada de un solo token o una recuperación de toda la lista de tokens.

<Info>
  Cuando la opción **Secure Data Transmission** está habilitada, los datos de respuesta se transmiten cifrados con AES-256.
</Info>

## Información Básica

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

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

## Configuración de Seguridad

### Transmisión Cifrada

<Check>
  Cuando **Secure Data Transmission** está habilitada, todos los datos de respuesta están protegidos con cifrado AES-256.
</Check>

* Método de cifrado: **AES-256**
* Cobertura: Datos de respuesta
* Compatibilidad: Mismo método de cifrado/descifrado que POST/submission, PATCH/submission, DELETE/submission, Webhook
* [Opciones de Transferencia Segura de Datos](/es/idcheck/getting-started/encrypt-and-decrypt-data/overview#4-secure-data-transfer-options)

### Autenticación

<ParamField header="x-api-key" type="string" required>
  Establezca su clave API del proyecto.
</ParamField>

```bash theme={null}
x-api-key: {{YOUR_API_KEY}}
```

## Tipos de Recuperacion de Tokens

1. Recuperacion individual

* Recuperacion detallada de un tokenId específico (1 por solicitud)

2. Recuperacion de lista

* Recuperacion de toda la lista de tokens: 10,000 por solicitud
* Cuando los tokenId registrados superan 10,000, se proporcionan campos de paginación ('nextPageKeyId', 'nextPageKeyTime')

3. Recuperacion de conteo total

* Recuperar el conteo total de tokens registrados (conteo total N por solicitud)

## Parámetros de Solicitud

### Parámetros de Consulta

<ParamField query="tokenId" type="String">
  ID de token específico

  * **Cuando se proporciona**: Recuperacion detallada de un solo token
  * **Cuando no se proporciona**: Recuperacion de toda la lista de tokens
</ParamField>

<ParamField query="type" type="String">
  `count`

  * **Cuando se proporciona**: Recuperar solo el conteo total de tokens registrados
  * **Cuando no se proporciona**: Proporcionar tokens registrados, estado de expiración y conteo
</ParamField>

<RequestExample>
  ```bash Specific token retrieval theme={null}
  GET /submission/tokens?tokenId=user001a
  ```

  ```bash Entire token list retrieval   theme={null}
  GET /submission/tokens
  ```

  ```bash Total token count retrieval theme={null}
  GET /submission/tokens?type=count
  ```
</RequestExample>

## Respuesta

### Respuesta Exitosa (200)

<Tabs>
  <Tab title="Recuperacion de token individual">
    <ResponseField name="success" type="Boolean" required>
      Estado de éxito de la recuperación
    </ResponseField>

    <ResponseField name="tokenId" type="String" required>
      ID del token recuperado
    </ResponseField>

    <ResponseField name="data" type="Object" required>
      Datos del token

      <Expandable title="data properties">
        <ResponseField name="tokenId" type="String">
          ID del token
        </ResponseField>

        <ResponseField name="updateTime" type="String">
          Última hora de actualización (formato ISO 8601)
        </ResponseField>

        <ResponseField name="expired" type="Boolean">
          \[true, false]
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseExample>
      ```json Single token retrieval response theme={null}
      {
        "success": true,
        "tokenId": "user001a",
        "data": {
          "tokenId": "user001a",
          "updateTime": "2024-01-15T10:30:45.123Z"
        }
      }
      ```
    </ResponseExample>
  </Tab>

  <Tab title="Recuperacion de lista completa">
    <ResponseField name="success" type="Boolean" required>
      Estado de éxito de la recuperación
    </ResponseField>

    <ResponseField name="tokenId" type="Array<String>" required>
      Lista de IDs de tokens
    </ResponseField>

    <ResponseField name="data" type="Array<Object>" required>
      Array de datos de tokens

      <Expandable title="data array properties">
        <ResponseField name="tokenId" type="String">
          ID del token
        </ResponseField>

        <ResponseField name="updateTime" type="String">
          Última hora de actualización (formato ISO 8601)
        </ResponseField>

        <ResponseField name="expired" type="Boolean">
          \[true, false]
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="count" type="Number" required>
      Conteo total de tokens
    </ResponseField>

    <ResponseField name="nextPageKey" type="Object" required>
      Objeto de clave de paginación

      <Expandable title="nextPageKey array properties">
        <ResponseField name="id" type="String">
          ID de clave de paginación
        </ResponseField>

        <ResponseField name="time" type="String">
          Tiempo de clave de paginación
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseExample>
      ```json Entire list retrieval response theme={null}
      {
        "success": true,
        "tokenId": ["user001a", "api.key.01", "token-123-abc"],
        "data": [
          {
            "tokenId": "user001a",
            "updateTime": "2024-01-15T10:30:45.123Z"
          },
          {
            "tokenId": "api.key.01",
            "updateTime": "2024-01-15T09:15:30.456Z"
          },
          {
            "tokenId": "token-123-abc",
            "updateTime": "2024-01-15T08:45:12.789Z"
          }
        ],
        "count": 3,
      	"nextPageKey" : {
      	  "id": "sample.id.01",
      	  "time": "2024-01-15T08:45:12.792Z"
      	}
      }
      ```
    </ResponseExample>
  </Tab>

  <Tab title="Recuperacion de conteo total">
    <ResponseField name="success" type="Boolean" required>
      Estado de éxito de la recuperación
    </ResponseField>

    <ResponseField name="totalCount" type="Number" required>
      Conteo total de tokens registrados
    </ResponseField>

    <ResponseExample>
      ```json Total count retrieval theme={null}
      {
        "success": true,
        "totalCount": 4991
      }
      ```
    </ResponseExample>
  </Tab>
</Tabs>

<Tip>
  Puede usar el valor data\['expired'] para verificar cuáles tokens han expirado entre los enviados anteriormente y utilizarlo para operaciones DELETE-token.
</Tip>

### Respuesta de Error (400/500)

<ResponseField name="errorCode" type="String" required>
  Código de error
</ResponseField>

<ResponseField name="errorMessage" type="String" required>
  Mensaje de error
</ResponseField>

<ResponseExample>
  ```json Token not found theme={null}
  {
    "errorCode": "token_not_found",
    "errorMessage": "Token not found."
  }
  ```

  ```json Token details retrieval failed theme={null}
  {
    "errorCode": "token_id_details_not_found", 
    "errorMessage": "Token details could not be retrieved."
  }
  ```
</ResponseExample>

## Consideraciones de Seguridad

### Protección de Datos

<Warning>
  La recuperación de tokens puede contener información sensible. Considere habilitar la opción de cifrado para seguridad en entornos de producción.
</Warning>

* **Transmisión cifrada**: Cifrado de datos de respuesta mediante AES-256
* **Control de acceso**: Restricción de acceso a nivel de proyecto mediante claves API
* **Pre-validación**: Recuperacion API posible independientemente del estado de activación de la opción

### Política de Tokens

<Info>
  **Pool de Tokens**: Gestione hasta 100,000 tokens por PID
  **Alcance de recuperación**: Solo puede recuperar tokens dentro del alcance del proyecto
</Info>

## Códigos de Error

### Errores Comunes

| Error Code                 | HTTP Status | Descripción                                           |
| -------------------------- | ----------- | ----------------------------------------------------- |
| invalid\_payload           | 400         | Payload de solicitud faltante o error de formato      |
| invalid\_path              | 400         | Método HTTP no soportado                              |
| invalid\_project           | 400         | ID de proyecto faltante o clave API inválida          |
| invalid\_query\_parameters | 400         | Parámetros de consulta faltantes o error de formato   |
| invalid\_order             | 400         | Error de formato en el parámetro de orden de consulta |
| internal\_server\_error    | 500         | Error interno del servidor                            |

### Errores Relacionados con Tokens

| Error Code                      | HTTP Status | Descripción                                                                |
| ------------------------------- | ----------- | -------------------------------------------------------------------------- |
| invalid\_token\_id              | 400         | ID de token faltante, valor vacío o no es un array                         |
| invalid\_token\_id\_format      | 400         | Violación de regla de formato de ID de token                               |
| invalid\_token\_id\_type        | 400         | El ID de token no es una cadena                                            |
| invalid\_token\_id\_length      | 400         | Longitud del ID de token fuera del rango de 8-64 caracteres                |
| invalid\_token\_id\_whitespace  | 400         | El ID de token contiene caracteres de espacio en blanco                    |
| invalid\_token\_id\_characters  | 400         | El ID de token contiene caracteres no permitidos                           |
| invalid\_token\_id\_start       | 400         | El ID de token no comienza con letra/número                                |
| invalid\_token\_id\_end         | 400         | El ID de token no termina con letra/número                                 |
| request\_token\_limit\_exceeded | 400         | Límite de conteo de tokens por solicitud excedido (500)                    |
| token\_limit\_exceeded          | 400         | Limite total de tokens del proyecto excedido (100,000)                     |
| token\_id\_not\_found           | 400         | El token solicitado no existe en el pool                                   |
| token\_id\_details\_not\_found  | 400         | Fallo en la recuperación de detalles del token                             |
| delete\_token\_limit\_exceeded  | 400         | Conteo de solicitud de eliminación masiva basada en tiempo excedido (5000) |

## Ejemplos de Uso

<Steps>
  <Step title="Verificar toda la lista de tokens">
    Primero, recupere todos los tokens registrados en el proyecto.

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

    <Check>
      Puede verificar el conteo total de tokens a través del campo `count` en la respuesta.
    </Check>
  </Step>

  <Step title="Recuperar detalles de un token específico">
    Recupere información detallada de un token específico.

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

    <Check>
      Puede verificar la última hora de actualización del token a través de `updateTime`.
    </Check>
  </Step>
</Steps>

<Note>
  En entornos cifrados, los datos de respuesta también se proporcionan cifrados.<br />
  Se requiere procesamiento de descifrado para estos datos.<br />
  Para métodos de cifrado y descifrado, consulte [Cifrado y Descifrado de Datos](/es/idcheck/getting-started/encrypt-and-decrypt-data/overview).
</Note>
