# Formato de Respuesta

Todas las respuestas de la API respetan el formato descripto en esta página.

### Encabezado de la respuesta (header)

Los posibles codigos del header de las respuestas son los siguientes:

| Code | Status                   | Significado                                                                                                                                                            |
| ---- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 200  | OK                       | Operación realizada con éxito                                                                                                                                          |
| 401  | UNAUTHORIZED             | No autorizado para realizar la operación. Api key incorrecta                                                                                                           |
| 404  | NOT\_FOUND               | El recurso no existe. Ya sea porque la url en si no existe, o porque el recurso que estamos buscando no esta disponible. Por ej: Si buscamos un cliente que no existe. |
| 400  | BAD\_REQUEST             | Error en el formato de la consulta. Puede haber campos faltantes o con valores erroneos.                                                                               |
| 409  | CONFLICT                 | Conflicto con campos únicos. Por ej: Quiero crear un cliente con un número que ya posee otro cliente en el sistema.                                                    |
| 415  | UNSUPPORTED\_MEDIA\_TYPE | El único media type soportado es application/json                                                                                                                      |
| 500  | INTERNAL\_ERROR          | Error interno del servidor. Algo salió mal.                                                                                                                            |

### Contenido de la respuesta (body)

El contenido de las respuestas de la API se recibe en formato JSON, y tiene esta estructura genérica:

{% hint style="warning" %}
A excepción de los PDFs que pueden ser en formato binario
{% endhint %}

```json
{    
    "success": true,    
    "paging": {
        "offset": 0,
        "limit": 20,
        "result": 20,
        "total": 195
    },
    "data": {} || [{}, {}, ...],
    "error": {
        "status": 404,
        "type": "BAD_REQUEST",
        "userMessage": "El campo x es obligatorio"    
    }
}
```

‌No siempre estarán presentes todas las propiedades, depende de que tipo de pedido se haya realizado y el resultado del mismo. Se constituye por los siguientes elementos:‌

**success** - Presente en todas las respuestas. Indica `true` si la llamada ha sido procesada con éxito, `false` en caso contrario. Es útil para hacer un chequeo general más allá del status code del header y saber si la respuesta contiene las propiedades data o error.‌

**paging** - En las respuestas de pedidos GET a las colecciones, la propiedad paging nos indicará los límites del listado con datos útiles como `offset` (a partir de qué elemento inicia el listado), `limit` (la cantidad de elementos en el listado actual recibido), `result` (la cantidad total de elementos coincidentes con la búsqueda) y `total` (el total de elementos en la colección).‌

**data** - En las respuestas de pedidos GET a las colecciones, la propiedad `data` es un array con los elementos requeridos. En caso de que la colección esté vacía, será un array vacío. En las respuestas de pedidos GET a un elemento, la propiedad `data`será un objeto con todos los campos del elemento en cuestión.&#x20;

**error** - Aquí se indica el detalle del error. Cada error tiene un `status` que coincide con el status de la respuesta HTTP, un`type` que lo identifica y un `userMessage` con el mensaje textual que puede mostrarse al usuario.‌

Los valores de `type` pueden ser los siguientes:

| type                         | Description                                                                                                                                  |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| **UNAUTHORIZED**             | El api key no existe o es inválido.                                                                                                          |
| **NOT\_FOUND**               | El recurso especificado no existe, puede ser porque el ID especificado no exista. O se este haciendo una consulta a un endpoint inexistente. |
| **BAD\_REQUEST**             | El pedido tiene una estructura inválida.                                                                                                     |
| **CONFLICT**                 | El recurso que se intentó crear entra en conflicto con uno existente.                                                                        |
| **UNSUPPORTED\_MEDIA\_TYPE** | El formato de datos indicado no es soportado.                                                                                                |
| **INTERNAL\_ERROR**          | Ocurrió un error interno del servidor.                                                                                                       |
