Dar de baja de un canal
Retira el consentimiento de uno o todos los canales.
POST /v1/subscribers/:id/unsubscribe
Requiere el permiso subscribers:write o full. Los permisos se comprueban en el servidor. Las claves test se rechazan con 403 test_mode_unavailable; no existe un sandbox aislado.
Da de baja al suscriptor de un canal o de todos mediante channel: "all" y devuelve su estado actualizado.
Parámetro de ruta
id es el identificador sub_… del suscriptor. También se admite el UUID sin prefijo, con o sin guiones. Cualquier otro formato devuelve 400 invalid_param.
Cuerpo de la petición
Los campos desconocidos se rechazan con 400 invalid_param.
| Campo | Tipo | Descripción |
|---|---|---|
channel | string | Obligatorio: email, sms, whatsapp o all. |
reason | string | Motivo libre, hasta 500 caracteres; por defecto manual. Se conserva con la baja de WhatsApp y es informativo para los otros canales. |
Efecto por canal
- Email: registra la baja y su fecha; con email y sin supresiones previas devuelve
unsubscribed. - SMS: registra la baja; con teléfono devuelve
unsubscribed. - WhatsApp: con teléfono registra la baja, el motivo y la fecha; devuelve
unsubscribedsi no hay una supresión previa. - all: aplica la baja a los tres canales.
Las supresiones por rebote, queja o bloqueo se conservan; dar de baja no las elimina. Si el contacto no tiene email o teléfono, el objeto público puede mostrar never_subscribed para el canal sin destino, aunque se conserve internamente la baja que corresponda.
Respuesta
El suscriptor actualizado con 200 OK. Repetir la operación sobre el mismo estado no vuelve a cambiar su significado.
Ejemplo
curl -X POST https://fluyio.com/api/v1/subscribers/sub_9f1c2b3a4d5e6f708192a3b4c5d6e7f8/unsubscribe \
-H "Authorization: Bearer $FLUYIO_API_KEY" \
-H "Fluyio-Version: 2026-05-15" \
-H "Content-Type: application/json" \
-d '{ "channel": "email", "reason": "user_request" }'Respuesta
{
"id": "sub_9f1c2b3a4d5e6f708192a3b4c5d6e7f8",
"object": "subscriber",
"email": "[email protected]",
"phone": "+34600000000",
"first_name": "Ada",
"last_name": "Lovelace",
"external_id": "user_12345",
"consent": {
"email": "unsubscribed",
"sms": "subscribed",
"whatsapp": "subscribed"
},
"properties": {
"company": "Analytical Engines",
"plan": "pro",
"country": "ES"
},
"lists": ["lst_0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f"],
"tags": ["beta", "vip"],
"created_at": "2026-05-11T12:34:56.000Z",
"updated_at": "2026-05-11T19:01:00.000Z",
"last_active_at": "2026-05-11T15:00:00.000Z"
}Dar de baja de todos los canales
curl -X POST https://fluyio.com/api/v1/subscribers/sub_9f1c2b3a4d5e6f708192a3b4c5d6e7f8/unsubscribe \
-H "Authorization: Bearer $FLUYIO_API_KEY" \
-H "Fluyio-Version: 2026-05-15" \
-H "Content-Type: application/json" \
-d '{ "channel": "all", "reason": "gdpr_request" }'Conservar una baja y eliminar un registro son decisiones diferentes. Si después utilizas DELETE, no presupongas que conservarás la baja en ese registro eliminado.
Errores
| HTTP | code | Descripción |
|---|---|---|
| 401 | missing_api_key / invalid_api_key | Falta la clave, no es válida, ha caducado o está revocada. |
| 403 | missing_scope | La clave no permite esta operación. |
| 403 | test_mode_unavailable | El modo de pruebas no está disponible. |
| 400 | invalid_param | ID, canal, origen o motivo no válido, propiedad reservada o campo desconocido. |
| 404 | resource_not_found | El suscriptor no existe en esta marca. |