> ## Documentation Index
> Fetch the complete documentation index at: https://help.ship.uniuni.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Introducción

> Comienza con la API Cliente de la Plataforma UniUni

La API Cliente de la Plataforma UniUni te permite crear envíos, comprar etiquetas, gestionar lotes, rastrear entregas y recibir notificaciones por webhook de forma programática.

## Entornos

Proporcionamos entornos **sandbox** y **producción**. Prueba tu integración en sandbox primero antes de pasar a producción.

| Entorno    | URL base                                      |
| ---------- | --------------------------------------------- |
| Sandbox    | `https://api-sandbox.ship.uniuni.com/client/` |
| Producción | `https://api.ship.uniuni.com/prod/client/`    |

Todas las solicitudes son solo HTTPS.

## Autenticación

Cada solicitud debe incluir tu **token de acceso API** en el encabezado `Authorization`:

```
Authorization: Bearer <TU_TOKEN_DE_ACCESO>
```

Consulta [Crear token de acceso](/es/api/create-access-token) para instrucciones detalladas sobre cómo generar y gestionar tus tokens.

## Formato de solicitud y respuesta

* Todas las solicitudes y respuestas usan **JSON**.
* Usa `Content-Type: application/json; charset=utf-8` para cuerpos de solicitudes POST.
* Todas las claves de objetos están en **camelCase**.
* El código HTTP de respuesta siempre es `200` con un payload válido. Los payloads inválidos devuelven HTTP `422`.

Cada respuesta sigue esta estructura:

```json theme={null}
{
  "message": "Shipment created successfully",
  "code": 0,
  "data": { ... }
}
```

| Campo     | Tipo           | Descripción                                               |
| --------- | -------------- | --------------------------------------------------------- |
| `message` | string         | Información adicional sobre el estado de la solicitud     |
| `code`    | integer        | Código de estado (`0` indica éxito)                       |
| `data`    | object \| null | Payload de respuesta. Devuelve `null` si `code` no es `0` |

## Paginación

Los endpoints de colección soportan paginación mediante parámetros de consulta:

| Parámetro  | Predeterminado | Máximo | Descripción           |
| ---------- | -------------- | ------ | --------------------- |
| `page`     | 1              | —      | Número de página      |
| `pageSize` | 10             | 500    | Resultados por página |

## Pruebas en sandbox

Puedes probar tu integración libremente usando la URL base de sandbox. No se incurrirá en cargos. Los datos del sandbox están aislados y se pueden restablecer sin afectar la producción.

Para agregar créditos de prueba en sandbox, usa el número de tarjeta de crédito de prueba **4242 4242 4242 4242** con cualquier fecha de vencimiento y CVC.

## Manejo de errores

### 422 Contenido no procesable

Se devuelve cuando faltan parámetros requeridos o tienen el tipo incorrecto:

```json theme={null}
{
  "message": "Invalid payload [...]",
  "errorCode": "PayloadValidationError",
  "statusCode": 422,
  "meta": {
    "issues": [
      {
        "code": "invalid_type",
        "expected": "number",
        "received": "nan",
        "path": ["page"],
        "message": "Expected number, received nan"
      }
    ],
    "name": "ZodError"
  }
}
```

### Errores de autenticación

```json theme={null}
{
  "message": "Invalid or revoked access token",
  "code": 1009,
  "data": null
}
```

```json theme={null}
{
  "message": "Missing access token",
  "code": 1009,
  "data": null
}
```

### Códigos de error

| Código | Razón                                   |
| ------ | --------------------------------------- |
| `0`    | Éxito                                   |
| `1002` | Solicitud inválida                      |
| `1006` | Error de base de datos                  |
| `1009` | Error general                           |
| `1014` | Recurso no encontrado (etiquetas/lotes) |
| `1031` | Búsqueda de rastreo fallida             |
