Saltar al contenido principal

Introducción y autenticación

El plugin Notiwoo publica una API REST en el espacio de nombres notiwoo/v1. La app NOTIWOO la usa para pedidos, catálogo, extras, operación, mesas y fidelización, y puedes usarla para tus propias integraciones.

Esta referencia corresponde a notiwoo-plugin 1.29.0. Consulta la versión instalada con GET /status o en Notiwoo → Dashboard.

Dominios de ejemplo

Todos los ejemplos usan https://tienda.example.test y datos inventados. Para probar sin tocar una tienda real, usa el entorno de pruebas local, con URL base http://127.0.0.1:8096/wp-json/notiwoo/v1.

URL base​

https://tienda.example.test/wp-json/notiwoo/v1

Si el sitio usa enlaces permanentes simples, usa https://tienda.example.test/?rest_route=/notiwoo/v1/....

La versión forma parte de la ruta (v1). No hay cabecera ni negociación de versión.

Comprobar la instalación​

GET /status es público y no requiere autenticación. Úsalo antes de otras llamadas para comprobar la versión del plugin y si la tienda acepta pedidos.

curl https://tienda.example.test/wp-json/notiwoo/v1/status
{
"success": true,
"data": {
"plugin": "notiwoo-plugin",
"version": "1.29.0",
"namespace": "notiwoo/v1",
"coexistence_mode": false,
"accepting_orders": true,
"time": "2026-09-30T12:15:00-05:00"
}
}
CampoSignificado
versionVersión instalada del plugin. Compárala con la tabla de compatibilidad.
coexistence_modetrue mientras siga activo un plugin WooFood. Ver modo coexistencia.
accepting_ordersSi es false, no llames a POST /orders.
timeHora del sitio en ISO 8601, según la zona horaria de WordPress.

Autenticación​

Los permisos se basan en los usuarios y las capacidades de WordPress, así que funciona cualquier método que identifique al usuario ante WordPress.

MétodoCómo se envíaCuándo usarlo
Token Bearer de NotiwooAuthorization: Bearer <token>Apps móviles y clientes propios. Recomendado.
Contraseña de aplicación de WordPressAuthorization: Basic base64(usuario:contraseña-de-aplicación)Integraciones de servidor y la conexión con la app NOTIWOO.
Cookie + nonceSesión iniciada y cabecera X-WP-NonceJavaScript dentro de wp-admin (lo usan las pantallas del plugin).

Las antiguas cabeceras Username y Password de WooFood ya no se admiten.

Token Bearer​

Solicita un token con el usuario (o el correo) y la contraseña de WordPress:

curl -X POST https://tienda.example.test/wp-json/notiwoo/v1/auth/token \
-H "Content-Type: application/json" \
-d '{"username": "gerente@example.test", "password": "contraseña-de-ejemplo"}'
{
"success": true,
"data": {
"token": "Q3xY7mV2nB8kL1pZ5rT9wE4uI6oA0sD2fG7hJ3kL8zX1cV5bN9mQ2wE6rT4yU0iO",
"token_type": "Bearer",
"expires_at": 1793793600,
"user": { "id": 7, "username": "gerente", "roles": ["shop_manager"], "capabilities": { "manage_woocommerce": true } }
}
}
  • El token tiene 64 caracteres y dura 30 días desde que se emite. No se renueva con el uso ni hay ruta de renovación: cuando caduque, solicita uno nuevo.
  • expires_at es una marca de tiempo Unix en segundos.
  • Cada inicio de sesión crea un token nuevo, así que un mismo usuario puede tener varios dispositivos conectados.
  • El token solo se muestra una vez. El plugin guarda un hash, nunca el valor original.
  • DELETE /auth/token revoca el token con el que se hace la petición. Úsalo al cerrar sesión.
  • Si la petición llega con una sesión de cookie, la cookie tiene prioridad sobre el token.
Servidores que eliminan la cabecera Authorization

Algunos servidores Apache o CGI no pasan la cabecera Authorization a PHP. Si recibes 401 con un token válido, añade al .htaccess la regla SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1, o pide a tu proveedor de hosting que la configure.

Contraseña de aplicación​

Créala en Usuarios → Perfil → Contraseñas de aplicación para una cuenta de administrador o gestor de tienda. WordPress exige HTTPS para usarlas, salvo en entornos locales.

curl -u "gerente:abcd efgh ijkl mnop qrst uvwx" \
https://tienda.example.test/wp-json/notiwoo/v1/auth/me

Permisos​

Cada ruta exige uno de estos niveles:

NivelQuién
PúblicoCualquiera, sin autenticación.
Sesión iniciadaCualquier usuario autenticado, incluidos los clientes.
GestiónUsuarios con la capacidad manage_woocommerce: administrador y gestor de tienda.
Gestión o tiendamanage_woocommerce o el rol multistore_user (complemento multitienda heredado).

Sin autenticación, las rutas protegidas responden 401 notiwoo_unauthorized. Con un usuario sin permiso, responden 403 notiwoo_forbidden. Cada página de esta sección indica el nivel de cada ruta.

Formato de respuesta​

Las respuestas correctas usan este sobre:

{ "success": true, "data": {}, "meta": {} }
  • data contiene el recurso o la lista.
  • meta solo aparece cuando tiene contenido, por ejemplo la paginación.
  • El código HTTP es 200, o 201 al crear un recurso.

Los errores tienen dos formatos posibles. Consulta Errores.

Paginación​

Las listas aceptan page (desde 1) y per_page (20 por defecto, máximo 100). La información de páginas llega en meta:

"meta": { "page": 1, "per_page": 20, "total": 57, "total_pages": 3 }

La API no envía las cabeceras X-WP-Total, X-WP-TotalPages ni Link. Lee siempre meta. Las excepciones se indican en cada recurso.

Cabeceras​

CabeceraDirecciónUso
AuthorizationPeticiónToken Bearer o contraseña de aplicación.
X-WP-NoncePeticiónAutenticación por cookie.
X-Notiwoo-Actor: notifier:<id>Petición, opcionalRegistra quién hizo un cambio en el historial de fidelización. Solo se acepta de usuarios con manage_woocommerce.
Cache-Control: private, no-storeRespuestaEn todas las rutas de mesas y fidelización.

Idempotencia y concurrencia​

Algunas operaciones aceptan una clave para que un reintento no duplique el cambio:

OperaciónCampoFormato
Cambios masivosrequest_id8 a 64 caracteres A-Z a-z 0-9 _ -
Canjear puntosidempotency8 a 80 caracteres A-Z a-z 0-9 _ : -
Ajustar puntosidempotency8 a 64 caracteres A-Z a-z 0-9 _ -

Si repites la petición con la misma clave, obtienes el resultado original. Las operaciones que no pueden ejecutarse en paralelo (una mesa, una cuenta de puntos, un cambio masivo) responden 409 cuando otra ya está en curso. Espera y reintenta.

Límites y CORS​

  • El plugin no aplica límites de peticiones. Protege las rutas públicas de acceso (/auth/token, /auth/register, /auth/reset-password) con el firewall o el hosting.
  • Solo hay un límite propio: los correos de verificación de fidelización, uno por minuto por cuenta.
  • El plugin no cambia la política CORS de WordPress. Si llamas a la API desde un navegador en otro dominio, configura CORS en el servidor.

Idioma de los mensajes​

Los mensajes (message) se devuelven en el idioma del sitio: español o inglés desde 1.29.0. Nunca programes lógica según el texto: usa el campo code.

Modo coexistencia​

Mientras siga activo un plugin WooFood:

  • Todas las rutas siguen registradas.
  • POST /orders responde 409 notiwoo_cutover_pending.
  • Mesas y fidelización aparecen desactivadas.
  • Las rutas antiguas woofood/* las sigue atendiendo el plugin anterior.

Consulta Migrar desde WooFood.

Recursos​

RecursoPágina
Acceso, cuenta del cliente y direccionesCuentas y clientes
Pedidos y estadosPedidos
Modalidades, horarios, domicilio y validación del carritoHorarios, domicilio y carrito
Productos, disponibilidad y categoríasCatálogo
Extras, categorías de extras y asignacionesExtras
Cambios masivos con vista previa y deshacerCambios masivos
Operación, apariencia y menú de categoríasAjustes
Servicio en mesa y QRMesas
Puntos, recompensas y programaFidelización
Repartidores, pagos y envíosOperación de la tienda
Estados propios, webhooks, metadatos y checkoutIntegración con WooCommerce