> For the complete documentation index, see [llms.txt](https://docs.zipnova.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zipnova.com/rutas/respuestas-de-la-api.md).

# Respuestas de la API

## Códigos de estado

Correctos

* <mark style="color:$success;">`200`</mark> OK
* <mark style="color:$success;">`201`</mark> Creado

Errores en requests

* <mark style="color:$warning;">`400`</mark> Request inválido&#x20;
* <mark style="color:$danger;">`401`</mark> No autenticado
* <mark style="color:$danger;">`403`</mark> Sin permisos
* <mark style="color:$danger;">`404`</mark> No encontrado
* <mark style="color:$warning;">`406`</mark> No aceptable (ej: publicar una ruta sin driver o ya publicada)
* <mark style="color:$warning;">`409`</mark> Rate limit excedido
* <mark style="color:$warning;">`422`</mark> Error de validación (incluye `errors` con el detalle por campo)

Errores en el servidor

* <mark style="color:$danger;">`500`</mark> Error en el servidor

## Envelopes de respuesta

Las respuestas exitosas envuelven el cuerpo bajo una clave según el recurso.&#x20;

{% hint style="warning" %}
**Atención: la clave varía por endpoint.**&#x20;
{% endhint %}

| Endpoint                          | Envelope de la respuesta                                   |
| --------------------------------- | ---------------------------------------------------------- |
| `POST /shipments`                 | `{ "success": true, "shipment": { ... } }`                 |
| `GET /shipments/{id}`             | objeto del envío (nivel raíz)                              |
| `POST /shipments/{id}/cancel`     | `{ "success": true, "shipment": { ... } }`                 |
| `POST /shipments/quotes`          | `{ "quotes": [ ... ] }`                                    |
| `GET /shipments/{id}/tracking`    | `{ "tracking": [ ... ] }`                                  |
| `POST /shipments/tracking/bulk`   | `{ "tracking": [ { "shipment_id", "tracking": [...] } ] }` |
| `GET /shipments/{id}/attachments` | `{ "attachments": [ ... ] }`                               |
| `GET /tasks`                      | `{ "data": [ ... ], "meta": { paginación } }`              |
| `GET /tasks/{ulid}`               | objeto de la tarea (nivel raíz)                            |
| `POST /tasks`                     | `{ "success": true, "task": { ... } }`                     |
| `POST /tasks/{ulid}/cancel`       | `{ "success": true, "task": { ... } }`                     |
| `POST /workflows`                 | `{ "success": true, "workflow": { "data": { ... } } }`     |
| `POST /workflows/{id}/cancel`     | `{ "data": { "workflow": { ... } } }`                      |
| `GET /routes`                     | `{ "routes": { "data": [ ... ] } }`                        |
| `GET /routes/{id}`                | objeto de la ruta (nivel raíz)                             |
| `POST /routes` y `/publish`       | `{ "success": true, "route": { ... } }`                    |
| `GET /organizations/my`           | `{ "organization": { ... } }`                              |
| `GET /organizations/my/places`    | `{ "places": [ ... ] }`                                    |
| `GET /organizations/my/contracts` | `{ "organizations": [ ... ] }` (paginado)                  |
