> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.laposta.org/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.laposta.org/_mcp/server.

# ¿Cuáles son los errores más comunes con la API?

> Errores habituales al conectar con la API de Laposta, con el mensaje de error que recibes y la solución.

## Un id desconocido no devuelve un 404

Si compruebas si existe una lista o un suscriptor verificando si devuelve un `404`, pasarás por alto cualquier id desconocido. En ese caso, la API devuelve un `400`:

```json
{ "error": { "type": "invalid_input", "message": "Unknown list", "code": 203, "parameter": "list_id" } }
```

Solo recibirás un `404` cuando la ruta no exista, por ejemplo por un error tipográfico en la URL. Por lo tanto, comprueba el `code` `203` en lugar del código de estado.

Ten en cuenta la diferencia entre dos códigos: un id o una dirección de correo electrónico que no existe en la lista devuelve `203`, mientras que `202` ("Invalid member_id") significa que la sintaxis del parámetro no es correcta.

## Un campo de selección múltiple vacío no se vacía

Si envías una lista vacía para un campo `select_multiple`, las opciones seleccionadas no desaparecen. Los valores existentes se mantienen y recibes igualmente un `200` sin mensaje de error.

**`curl`**

```bash title="curl"
curl https://api.laposta.nl/v2/member/suscriptor@example.net \
  -u TU_CLAVE_API: \
  -d list_id=BaImMu3JZA \
  -d "custom_fields[intereses][]="
```

**`PHP`**

```php title="PHP"
$laposta = new Laposta('TU_CLAVE_API');
$laposta->memberApi()->update('BaImMu3JZA', 'suscriptor@example.net', [
    'custom_fields' => ['intereses' => ['']],
]);
```

Si quieres asegurarte de que una selección ha quedado vacía, comprueba la respuesta y avisa a través de [helpdesk@laposta.nl](mailto:helpdesk@laposta.nl) si todavía contiene valores.

## Enviar etiquetas sin corchetes no funciona

Un suscriptor puede tener varias [etiquetas](/labels), por lo que el campo espera una matriz. Si envías un único valor sin corchetes, recibirás un `200` sin mensaje de error con el suscriptor en la respuesta, pero no habrá cambiado nada.

**`curl`**

```bash title="curl"
-d "custom_fields[labels]=Cliente"      # tiene éxito, pero no hace nada
-d "custom_fields[labels][]=Cliente"    # así es como debe hacerse
```

**`PHP`**

```php title="PHP"
'custom_fields' => ['labels' => 'Cliente']      // tiene éxito, pero no hace nada
'custom_fields' => ['labels' => ['Cliente']]    // así es como debe hacerse
```

El campo `labels` solo existe a partir del momento en que la lista tiene al menos una etiqueta. Antes de eso, no aparecerá entre los campos ni en los datos del suscriptor. Tampoco puedes crear una etiqueta con él: un nombre que la lista no reconozca devuelve un `400`.

```json
{ "error": { "type": "invalid_input", "message": "Field labels: unknown option", "code": 203, "parameter": "labels" } }
```

Envía siempre el nombre y no el id de `options_full`. Enviar un id devuelve el mismo mensaje.

En las operaciones en bloque (bulk) envías JSON, por lo que no se usan corchetes en el nombre del parámetro, sino un array. Si envías un texto suelto, la API contabiliza al suscriptor como modificado sin dar ningún mensaje de error, pero las etiquetas de ese suscriptor quedarán vacías.

```json
"custom_fields": { "labels": "Cliente" }     // 200, edited_count 1, etiquetas vacías después
"custom_fields": { "labels": ["Cliente"] }   // así es como debe hacerse
```

Si en una operación en bloque envías una etiqueta desconocida, ese suscriptor aparecerá en `errors` con el mismo código `203` y no se añadirá.

## Las operaciones en bloque están desactivadas por defecto

El endpoint para la sincronización en bloque (bulk) existe en todas las cuentas, pero devuelve un `401` si no tienes permiso:

```json
{ "error": { "type": "invalid_request", "message": "Not permitted to issue bulk requests (1)" } }
```

Esto no es un fallo en tu código. En [Sincronizar suscriptores a través de la API](/relaties-synchroniseren-via-de-api) se explica quién puede utilizar las operaciones en bloque y cómo solicitar su activación.

## Una campaña se envía por duplicado con una segunda llamada

Si llamas dos veces a [Enviar campaña](/campagnes/campagne-verzenden), recibirás un `200` en ambas ocasiones y el envío se pondrá en marcha de nuevo. En [Enviar una campaña a través de la API](/campagne-versturen-via-de-api) puedes ver cómo evitarlo en tu propio código.

Tampoco se bloquea la modificación de una campaña que ya ha sido enviada.

## Solicitar el contenido de una campaña no funciona con todas las campañas

Si solicitas el contenido de una campaña creada en el editor drag & drop, recibirás:

```json
{ "error": { "type": "invalid_input", "message": "Wrong campaign type", "code": 203, "parameter": "campaign_id" } }
```

No se trata de una avería. En [Enviar una campaña a través de la API](/campagne-versturen-via-de-api) se indica con qué campañas sí es posible hacerlo.

## El campo \_iso puede no estar presente

Cuando un campo de fecha está vacío, a veces la variante `_iso` no aparece en absoluto en la respuesta en lugar de tener el valor `null`. Por tanto, comprueba primero si este campo existe en la respuesta antes de leerlo; de lo contrario, tu código fallará por una clave inexistente. Ver: [Campos de fecha y hora en la API](/api-datum-en-tijdvelden).

## Es fácil alcanzar el límite de solicitudes

En una cuenta gratuita puedes hacer 30 solicitudes por minuto, y en una cuenta de pago, 120. Una sincronización que haga una llamada por cada suscriptor agotará este límite enseguida en cuanto tenga unos pocos cientos de suscriptores.

```http
HTTP/1.1 429 Too Many Requests
Retry-After: 60
```

Espera el número de segundos indicado en el encabezado `Retry-After` en lugar de volver a intentarlo inmediatamente, y utiliza la [sincronización en bloque](/lijsten/lijst-synchroniseren-bulk) para grandes volúmenes. Puedes leer más sobre este tema en [Límites y mensajes de error de la API](/api-limieten-en-foutmeldingen).

## Un nombre de campo desconocido en un segmento no devuelve ningún mensaje de error

Un segmento se crea mediante una definición en JSON. La API comprueba el formato y las comparaciones, pero no verifica si el campo por el que estás filtrando existe realmente. Por lo tanto, un error tipográfico en el nombre de un campo devolverá igualmente un `201`, creando un segmento que no seleccionará a nadie.

Por eso, comprueba los nombres de los campos de tu definición comparándolos con los campos obtenidos mediante [Solicitar todos los campos](/velden/alle-velden-opvragen).

## Artículos relacionados

#### [¿Cuáles son los límites y mensajes de error de la API?](/api-limieten-en-foutmeldingen)

Cuántas solicitudes por minuto permite la API y qué códigos de estado y de error puedes…

#### [Sincronizar suscriptores a través de la API](/relaties-synchroniseren-via-de-api)

Mantén tu lista igual que tu tienda online o CRM: añadir, actualizar, darse de baja y…

#### [Probar la API con Try it](/api-uitproberen)

Envía desde tu navegador una llamada real a la API de Laposta, sin instalar nada.