# Manejo de errores

## Status codes

En caso de que ocurra un error, el status recibido será uno de los siguientes:

| **Code** | **Status**               | **Significado**                                                                  |
| -------- | ------------------------ | -------------------------------------------------------------------------------- |
| `400`    | `Bad Request`            | Petición inválida                                                                |
| `401`    | `Unauthorized`           | Las credenciales de acceso no son válidas                                        |
| `403`    | `Forbidden`              | El recurso solicitado no esta dentro de los permitidos                           |
| `404`    | `Not found`              | La URI solicitada no corresponde a ningun recurso                                |
| `405`    | `Method Not Allowed`     | El método HTTP no está soportado                                                 |
| `409`    | `Conflict`               | El recurso que se intenta crear o modificar entra en conflicto con uno existente |
| `415`    | `Unsupported Media Type` | El Content-Type del pedido no es soportado                                       |
| `500`    | `Internal Server Error`  | Error del servidor                                                               |
| `503`    | `Service Unavailable`    | El servidor está limitando el acceso al recurso                                  |

## Detalles del error

Como complemento, la respuesta contendrá un objeto `error` con una propiedad `status` coincidente con la del status HTTP y un `type` que indica el motivos específico del error.&#x20;

Por ejemplo:

```javascript
{
    "href": "/micuenta/contacts",
    "success": false,
    "error": {
        "status": 409,
        "type": "RESOURCE_EXISTS",
        "userMessage": "El pedido no puedo ser procesado ya que entra en conflicto con un recurso existente",
        "validationErrors": {
            "email": "Valor duplicado"
        }
    }
}
```

Los valores de `type` pueden ser los siguientes:

| **Type**                 | **Descripción**                                                                                                                                                       |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `BAD_REQUEST`            | El pedido tiene una estructura inválida.                                                                                                                              |
| `RESOURCE_EXISTS`        | El recurso que se intentó crear entra en conflicto con uno existente. Se indica en `validationErrors` los campos en conflicto.                                        |
| `UNSUPPORTED_MEDIA_TYPE` | El formato de datos indicado no es soportado.                                                                                                                         |
| `INTERNAL_ERROR`         | Ocurrió un error interno del servidor.                                                                                                                                |
| `METHOD_NOT_ALLOWED`     | El método HTTP utilizado no es soportado por el recurso especificado.                                                                                                 |
| `NOT_FOUND`              | El recurso especificado no existe, puede ser porque el ID especificado no exista.                                                                                     |
| `SERVICE_UNAVAILABLE`    | El recurso solicitado no esta disponible temporalmente, posiblemente debido a un exceso de carga.                                                                     |
| `UNAUTHORIZED`           | No se proporcionó `token` de autorización, o es inválido.                                                                                                             |
| `FORBIDDEN`              | No se dispone del permiso necesario para el recurso solicitado.                                                                                                       |
| `VALIDATION_ERROR`       | El pedido realizado contiene errores en uno o más campos, en `validationErrors` se indican los campos con errores.                                                    |
| `ACCOUNT_REQUIRED`       | Se intentó realizar un login utilizando un email registrado en más de una cuenta, se debe repetir especificando la cuenta. En `data` se indican las cuentas posibles. |
| `PASSWORD_EXPIRED`       | Se intentó realizar un login pero la contraseña esta expirada o debe ser renovada.                                                                                    |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developers.myperfit.com/contacts-api/manejo-de-errores.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
