Cuentas y clientes
Rutas
| Método | Ruta | Permiso | Desde |
|---|---|---|---|
| POST | /auth/token | Público | 1.1.0 |
| DELETE | /auth/token | Sesión iniciada | 1.1.0 |
| POST | /auth/register | Público | 1.5.0 |
| POST | /auth/reset-password | Público | 1.5.0 |
| GET | /auth/me | Sesión iniciada | 1.1.0 |
| PUT, PATCH | /auth/me | Sesión iniciada | 1.5.0 |
| GET | /users/me/orders | Sesión iniciada | 1.5.0 |
| GET, POST | /users/me/addresses | Sesión iniciada | 1.9.0 |
| DELETE | /users/me/addresses/{index} | Sesión iniciada | 1.9.0 |
Iniciar y cerrar sesión
POST /auth/token recibe username (usuario o correo) y password, y responde 201 con token, token_type, expires_at y el objeto user. Consulta Token Bearer.
Errores: 401 notiwoo_invalid_credentials. El mensaje es el mismo si el usuario no existe o si la contraseña es incorrecta.
DELETE /auth/token revoca el token de la petición y responde { "revoked": true }. Si la petición no usó un token, responde 404 notiwoo_token_not_found.
Objeto usuario
{
"id": 42,
"username": "cliente@example.test",
"email": "cliente@example.test",
"display_name": "Ana Pérez",
"first_name": "Ana",
"last_name": "Pérez",
"roles": ["customer"],
"billing": { "first_name": "", "last_name": "", "address_1": "", "address_2": "", "city": "", "state": "", "postcode": "", "phone": "", "country": "CO" },
"capabilities": { "manage_woocommerce": false, "edit_posts": false, "read": true }
}
Usa capabilities.manage_woocommerce para saber si el usuario puede usar las rutas de gestión.
Registrar un cliente
POST /auth/register
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
email | string | Sí | Será también el nombre de usuario. |
password | string | Sí | Mínimo 8 caracteres. |
first_name, last_name, phone | string | No | Se guardan en los datos de facturación. |
Crea un usuario con rol customer y responde 201 con un token, igual que /auth/token.
Errores: 400 notiwoo_invalid_email, 400 notiwoo_weak_password, 409 notiwoo_user_exists.
Restablecer la contraseña
POST /auth/reset-password con { "email": "..." }. Responde siempre 200 con un mensaje, exista o no la cuenta, para no revelar qué correos están registrados. Si la cuenta existe, WordPress envía su correo de restablecimiento.
Perfil
GET /auth/me devuelve el objeto usuario.
PUT /auth/me actualiza solo los campos enviados: first_name, last_name, display_name, address_1 (alias address), address_2, city, state, postcode, phone y country. El nombre y los apellidos se guardan en el usuario de WordPress; el resto, en los datos de facturación. Responde con el usuario actualizado.
curl -X PUT https://tienda.example.test/wp-json/notiwoo/v1/auth/me \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"phone": "+57 300 000 0000", "city": "Bogotá"}'
Pedidos del cliente
GET /users/me/orders lista los pedidos del usuario autenticado.
| Parámetro | Notas |
|---|---|
page, per_page | Paginación estándar. |
status | Uno o varios estados separados por comas, con o sin prefijo wc-. Por defecto, todos. |
Cada pedido tiene la estructura de WooCommerce (id, status, total, billing, line_items…) más status_nice (estado legible), order_type_slug y order_type (modalidad).
Direcciones guardadas
GET /users/me/addresses responde { "addresses": [...], "count": 1 }.
POST /users/me/addresses guarda una dirección solo si hay cobertura de domicilio:
| Campo | Obligatorio |
|---|---|
address | Sí |
city | Sí |
postcode, doorbell (apartamento, timbre), first_name, last_name | No |
El país siempre es el de la tienda.
curl -X POST https://tienda.example.test/wp-json/notiwoo/v1/users/me/addresses \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{"address": "Calle 10 # 20-30", "city": "Bogotá", "postcode": "110111", "doorbell": "Apto 402"}'
- Con cobertura:
201condeliverable: true, la dirección guardada, el resultado de la comprobación (check: distancia y tarifa) y la lista completa. - Sin cobertura:
200condeliverable: falseyreason. No se guarda nada. - Faltan datos:
422 notiwoo_missing_address_fields.
DELETE /users/me/addresses/{index} borra por posición, empezando en 0, y devuelve la lista reindexada. Si la posición no existe, responde 404 notiwoo_address_not_found.