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

# POST/Submission

> Esta API permite a los clientes insertar y enviar de forma forzada datos de verificación de identidad de usuario sin pasar por la verificación de identidad de ARGOS. Solo soporta datos de tipo string. Para datos de imágenes, use la API `PUT Image` separada.

<Note>
  Esta API es particularmente útil para migrar datos de usuarios de sistemas existentes al sistema ARGOS o en casos especiales donde es necesario el envío directo de datos de verificación de identidad de usuario. También puede ayudar en la prueba de varios escenarios durante el desarrollo.
</Note>

<Warning>
  Los envíos creados usando esta API no pasan por el proceso de verificación estándar de ARGOS. La precisión y validez de los datos enviados es enteramente responsabilidad del cliente. Por lo tanto, esta API no debería reemplazar el proceso regular de verificación de identidad y se recomienda solo para casos de uso excepcionales.
</Warning>

## 1. Endpoint

```plaintext theme={null}
POST https://rest-api.argosidentity.com/v3/submission/migration
```

## 2. Autenticación

Incluya la clave API en el encabezado x-api-key:

```text x-api-key theme={null}
x-api-key: {yourAPIKey}
```

## 3. Cuerpo de la Solicitud

El cuerpo de la solicitud debe estar en formato JSON. A continuación se encuentran las descripciones de los campos:

<ResponseField name="admin" type="string" required="true">
  Email del administrador del proyecto (debe estar registrado en el dashboard).
</ResponseField>

<ResponseField name="email" type="string" required="true">
  Dirección de email del remitente KYC.
</ResponseField>

<ResponseField name="fullName" type="string" required="true">
  Nombre completo del remitente KYC.
</ResponseField>

<ResponseField name="first_name" type="string">
  Nombre del remitente.
</ResponseField>

<ResponseField name="last_name" type="string">
  Apellido del remitente.
</ResponseField>

<ResponseField name="birthDate" type="string" required="true">
  Fecha de nacimiento del remitente KYC.
</ResponseField>

<ResponseField name="kycStatus" type="string" required="true">
  Resultado KYC: `approved` o `rejected`.
</ResponseField>

<ResponseField name="idType" type="string">
  Tipo de ID [Códigos de Tarjeta de ID](/es/idcheck/reference_tables/id-card-types).
</ResponseField>

<ResponseField name="issuingCountry" type="string">
  País emisor de los [Códigos de País de ID](/es/idcheck/reference_tables/supported-id-types-alpha-3-country-codes).
</ResponseField>

<ResponseField name="nationality" type="string">
  Nacionalidad del remitente KYC [Códigos de País](/es/idcheck/reference_tables/supported-id-types-alpha-3-country-codes).
</ResponseField>

<ResponseField name="gender" type="string">
  `female` o `male`.
</ResponseField>

<ResponseField name="issueDate" type="string">
  Fecha de emisión del ID en formato `YYYY-MM-DD`.
</ResponseField>

<ResponseField name="expireDate" type="string">
  Fecha de vencimiento del ID en formato `YYYY-MM-DD`.
</ResponseField>

<ResponseField name="ipAddress" type="string">
  Dirección IP del remitente KYC.
</ResponseField>

<ResponseField name="identityNumber" type="string">
  Número de identidad del remitente KYC.
</ResponseField>

<ResponseField name="documentNumber" type="string">
  Número de documento del remitente KYC.
</ResponseField>

<ResponseField name="address_city" type="string">
  Ciudad de residencia.
</ResponseField>

<ResponseField name="address_country" type="string">
  País de residencia.
</ResponseField>

<ResponseField name="address_state" type="string">
  Estado/Provincia de residencia.
</ResponseField>

<ResponseField name="address_street" type="string">
  Dirección de calle.
</ResponseField>

<ResponseField name="address_full" type="string">
  Dirección completa.
</ResponseField>

<ResponseField name="cf1" type="string">
  Campo personalizado #1.
</ResponseField>

<ResponseField name="cf2" type="string">
  Campo personalizado #2.
</ResponseField>

<ResponseField name="cf3" type="string">
  Campo personalizado #3.
</ResponseField>

<ResponseField name="userid" type="string">
  ID único de usuario.
</ResponseField>

## 4. Ejemplo de Solicitud

```curl POST/Submission theme={null}
curl --location 'https://rest-api.argosidentity.com/v3/submission/migration' \
--header 'Content-Type: application/json' \
--header 'x-api-key: {yourAPIKey}' \
--data-raw '{
  "admin": "{admin}",
  "email": "{email}",
  "fullName": "{fullName}",
  "firstName": "{firstName}",
  "lastName": "{lastName}",  
  "birthDate": "{birthDate}",
  "kycStatus": "approved",
  "idType": "drvlic",
  "issuingCountry": "USA",
  ...
}'
```

## 5. Respuesta

### 5-1. Respuesta Exitosa

```json result.json theme={null}
{
    "message": "success",
    "submissionId": "submissionId123"
}
```

### 5-2. Respuesta de Error

Si ocurre un error, se devuelve un código de estado `400` con detalles en el cuerpo de la respuesta:

```json error.json theme={null}
{
    "errorCode": "invalid_payload",
    "message": "Invalid payload."
}
```

### 5-3. Códigos de Error

| Error Code          | Message                          | Descripción                                                       |
| ------------------- | -------------------------------- | ----------------------------------------------------------------- |
| `invalid_payload`   | Invalid payload                  | No se puede analizar el cuerpo de la solicitud                    |
| `missing_data`      | Required input data is missing   | Uno o más campos requeridos están faltantes                       |
| `invalid_project`   | Invalid project                  | El ID del proyecto no es válido                                   |
| `invalid_admin`     | Invalid admin                    | La cuenta del administrador carece de permisos para este proyecto |
| `invalid_parameter` | invalid parameter: `{parameter}` | Parámetro inesperado enviado                                      |
| `invalid_format`    | invalid format: `${parameter}`   | El parámetro no coincide con el formato esperado                  |
| `processing_error`  | Failed to complete migration     | Ocurrió un error desconocido durante el procesamiento             |

## 6. Opciones de Cifrado

Para mejorar la seguridad, el cuerpo de la solicitud puede ser cifrado. Al usar cifrado:

* Cifre el objeto completo del cuerpo de la solicitud.
* Envíe la cadena cifrada como el parámetro `data` (no como un campo `body`).

### 6-1. Ejemplo de Solicitud Cifrada

```python post-encrypted.py theme={null}
encryption = Encryption(api_key, mode='ECB')

payload_data = {
    "admin": "yourAdmin@sample.com",
    "email": "user@example.com",
    "fullName": "hong kil dong",
    "firstName": "kil dong",
    "lastName": "hong"
    "birthDate": "1999-11-31",
    "kycStatus": "approved",
    "idType": "drivers_license",
    "issuingCountry": "KOR"
}

# Encrypt the entire payload
payload_encrypted = encryption.encrypt(payload_data)

# Send the encrypted data as the data parameter
response = requests.post(
    url,
    headers=headers,
    data=payload_encrypted
)
```

```curl POST/Submission (Encrypted) theme={null}
curl --location 'https://rest-api.argosidentity.com/v3/submission/migration' \
--header 'x-api-key: {yourAPIKey}' \
--header 'Content-Type: application/json' \
--data 'N34SNtWaavEfgtg1g%2Bo%2B9JhQ9rp9dGUbyFNxAsHKKGH24aVQTRXYfNpFDHIGJU6Wo0RVpOupAubiDvFDuFyTkw%3D%3D'
```

### 6-2. Respuesta Cifrada

La respuesta incluye una bandera `isEncrypted` y los datos cifrados:

```json result.json theme={null}
response : {
   body : {
    "data": "encrypted-string",
    "isEncrypted": true
   }
}
```
