Clientes
Recursos de la API de YoFacturo relacionados con la gestión de clientes: clientes, cuenta corriente, CRM y beneficios y recompensas.
Todos los endpoints están bajo la URL base https://api.yo-facturo.com y requieren el header X-API-Key con tu token. Cada recurso declara los scopes necesarios para leer (:read) o escribir (:write). Los recursos sobre el factory CRUD exponen además endpoints /bulk/* para operaciones en lote.
Clientes
El recurso de clientes representa a las personas y empresas a las que tu cuenta factura y vende. Es el recurso central al que se vinculan la cuenta corriente, las tareas de CRM y los puntos de beneficios.
Endpoint base: /api/v1/customers
Scopes: customers:read, customers:write
Campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
name | string | Sí | Nombre o razón social del cliente. Entre 2 y 200 caracteres. |
email | string | No | Email del cliente. Debe tener formato de email válido. |
customer_email | string | No | Email alternativo de contacto del cliente. |
phone | string | No | Teléfono del cliente. |
document_type | string | No | Tipo de documento: "dni", "cuit", "cuil", "passport", "cedula" u "other". |
document_number | string | No | Número de documento. Hasta 20 caracteres. |
address | string | object | No | Domicilio del cliente. Acepta un string o un objeto. |
status | string | No | Estado del cliente: "active", "inactive" o "blocked". |
notes | string | No | Notas internas sobre el cliente. Hasta 1000 caracteres. |
tags | array | No | Etiquetas para clasificar al cliente. |
custom_fields | object | No | Campos personalizados definidos por la cuenta. |
metadata | object | No | Metadatos libres asociados al cliente. |
Endpoints
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/customers/list/ | Listar registros con filtros y paginación | customers:read |
GET | /api/v1/customers/{id}/ | Obtener un registro por su ID | customers:read |
POST | /api/v1/customers/ | Crear un registro | customers:write |
PUT | /api/v1/customers/{id}/ | Actualizar un registro | customers:write |
DELETE | /api/v1/customers/{id}/ | Eliminar un registro | customers:write |
POST | /api/v1/customers/bulk/create/ | Crear múltiples registros en una sola petición | customers:write |
PUT | /api/v1/customers/bulk/update/ | Actualizar múltiples registros en una sola petición | customers:write |
POST | /api/v1/customers/bulk/delete/ | Eliminar múltiples registros en una sola petición | customers:write |
Ejemplo — Petición
Crear un cliente con POST /api/v1/customers/:
{
"name": "Distribuidora del Sur S.A.",
"email": "[email protected]",
"phone": "+54 11 4567-8900",
"document_type": "cuit",
"document_number": "30712345678",
"address": "Av. Siempre Viva 742, CABA",
"status": "active",
"tags": ["mayorista", "preferencial"]
}Ejemplo — Respuesta
{
"success": true,
"data": {
"_id": "66f1a2b3c4d5e6f7a8b9c0d1",
"name": "Distribuidora del Sur S.A.",
"email": "[email protected]",
"phone": "+54 11 4567-8900",
"document_type": "cuit",
"document_number": "30712345678",
"address": "Av. Siempre Viva 742, CABA",
"status": "active",
"tags": ["mayorista", "preferencial"],
"creation_date": "2026-05-21T14:30:00Z"
}
}Cuenta corriente
La cuenta corriente lleva el saldo de un cliente o proveedor: registra los comprobantes como débitos y los pagos como créditos, y permite definir un límite de crédito y un plazo de pago. Cada cuenta está asociada a una entidad (cliente o proveedor).
Endpoint base: /api/v1/current-accounts
Scopes: current_accounts:read, current_accounts:write
Campos del body de creación de una cuenta corriente (POST /api/v1/current-accounts/):
Campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
entity_type | string | Sí | Tipo de entidad titular de la cuenta: "customer" o "supplier". |
entity_id | string | Sí | ID de la entidad (cliente o proveedor) titular de la cuenta. |
entity_name | string | Sí | Nombre de la entidad titular de la cuenta. |
credit_limit | number | No | Límite de crédito de la cuenta. Por defecto 0. No puede ser negativo. |
payment_terms_days | integer | No | Plazo de pago en días. Por defecto 30. |
Endpoints
La cuenta corriente usa un controller propio, no el factory CRUD: no expone endpoints /bulk/*. Estos son sus endpoints principales:
| Método | Endpoint | Descripción |
|---|---|---|
GET | /api/v1/current-accounts/ | Listar cuentas corrientes |
GET | /api/v1/current-accounts/{id}/ | Obtener una cuenta corriente por su ID |
GET | /api/v1/current-accounts/{entity_type}/{entity_id}/ | Obtener la cuenta de una entidad (cliente o proveedor) |
POST | /api/v1/current-accounts/ | Crear una cuenta corriente |
PUT | /api/v1/current-accounts/{id}/ | Actualizar la configuración de una cuenta |
DELETE | /api/v1/current-accounts/{id}/ | Eliminar una cuenta corriente |
GET | /api/v1/current-accounts/{id}/movements/ | Listar los movimientos de una cuenta |
GET | /api/v1/current-accounts/{id}/statement/ | Obtener el estado de cuenta |
GET | /api/v1/current-accounts/{id}/credit-limit/ | Consultar el estado del límite de crédito |
POST | /api/v1/current-accounts/{id}/payments/ | Registrar un pago (movimiento de crédito) |
POST | /api/v1/current-accounts/{id}/invoices/ | Registrar un comprobante (movimiento de débito) |
POST | /api/v1/current-accounts/{id}/payments/apply/ | Aplicar un pago a comprobantes pendientes |
GET | /api/v1/current-accounts/aging/ | Reporte de antigüedad de saldos |
Ejemplo — Petición
Crear una cuenta corriente para un cliente con POST /api/v1/current-accounts/:
{
"entity_type": "customer",
"entity_id": "66f1a2b3c4d5e6f7a8b9c0d1",
"entity_name": "Distribuidora del Sur S.A.",
"credit_limit": 200000,
"payment_terms_days": 30
}Ejemplo — Respuesta
{
"success": true,
"data": {
"_id": "67a0b1c2d3e4f5a6b7c8d9e0",
"entity_type": "customer",
"entity_id": "66f1a2b3c4d5e6f7a8b9c0d1",
"entity_name": "Distribuidora del Sur S.A.",
"credit_limit": 200000,
"payment_terms_days": 30,
"balance": 0,
"creation_date": "2026-05-21T14:35:00Z"
}
}Para registrar un pago sobre una cuenta usá POST /api/v1/current-accounts/{id}/payments/:
{
"amount": 50000,
"payment_method": "credit_card",
"reference": "TRANS-123",
"payment_date": "2026-05-21T10:00:00",
"auto_apply": false
}CRM
El módulo de CRM agrupa varios subrecursos para gestionar la relación comercial con tus clientes: tareas, pipelines de venta, oportunidades, segmentos, recordatorios, comunicaciones y plantillas. Cada subrecurso tiene su propio endpoint base y todos comparten los mismos scopes.
Scopes: crm:read, crm:write — aplican a todos los subrecursos de CRM.
Endpoints base del módulo CRM:
| Subrecurso | Endpoint |
|---|---|
| Tareas | /api/v1/crm-tasks |
| Pipelines | /api/v1/crm-pipelines |
| Oportunidades | /api/v1/crm-opportunities |
| Segmentos | /api/v1/crm-segments |
| Recordatorios | /api/v1/crm-reminders |
| Comunicaciones | /api/v1/crm-communications |
| Plantillas | /api/v1/crm-templates |
Todos los subrecursos de CRM usan el factory CRUD y exponen el mismo conjunto de endpoints (list, get, create, update, delete y bulk). Algunos agregan endpoints auxiliares propios (por ejemplo, completar una tarea o mover una oportunidad de etapa).
CRM — Tareas
Las tareas de CRM son acciones de seguimiento comercial (llamadas, reuniones, recordatorios) que pueden vincularse a un cliente y asignarse a un usuario.
Campos — Tareas
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
title | string | Sí | Título de la tarea. Entre 1 y 250 caracteres. |
description | string | No | Descripción de la tarea. Hasta 5000 caracteres. |
customer_id | string | No | ID del cliente vinculado a la tarea (24 caracteres). |
due_date | string | No | Fecha de vencimiento en formato date-time ISO 8601. |
status | string | No | Estado: "pending", "in_progress", "done" o "cancelled". |
priority | string | No | Prioridad: "low", "normal", "high" o "urgent". |
assigned_to_email | string | No | Email del usuario asignado a la tarea. |
assigned_to_user_id | string | No | ID del usuario asignado a la tarea. |
related_to | object | No | Referencia a otra entidad: objeto con "type" e "id". |
tags | array | No | Etiquetas de la tarea. |
metadata | object | No | Metadatos libres asociados a la tarea. |
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/crm-tasks/list/ | Listar registros con filtros y paginación | crm:read |
GET | /api/v1/crm-tasks/{id}/ | Obtener un registro por su ID | crm:read |
POST | /api/v1/crm-tasks/ | Crear un registro | crm:write |
PUT | /api/v1/crm-tasks/{id}/ | Actualizar un registro | crm:write |
DELETE | /api/v1/crm-tasks/{id}/ | Eliminar un registro | crm:write |
POST | /api/v1/crm-tasks/bulk/create/ | Crear múltiples registros en una sola petición | crm:write |
PUT | /api/v1/crm-tasks/bulk/update/ | Actualizar múltiples registros en una sola petición | crm:write |
POST | /api/v1/crm-tasks/bulk/delete/ | Eliminar múltiples registros en una sola petición | crm:write |
Endpoints adicionales: POST /api/v1/crm-tasks/{id}/complete/ (marcar completada), GET /api/v1/crm-tasks/by-customer/{customer_id}/ (tareas de un cliente).
Ejemplo — Petición POST /api/v1/crm-tasks/:
{
"title": "Llamar para renovar contrato",
"description": "Contacto anual de seguimiento comercial",
"customer_id": "66f1a2b3c4d5e6f7a8b9c0d1",
"due_date": "2026-06-01T09:00:00Z",
"status": "pending",
"priority": "high",
"tags": ["seguimiento"]
}Ejemplo — Respuesta
{
"success": true,
"data": {
"_id": "67b1c2d3e4f5a6b7c8d9e0f1",
"title": "Llamar para renovar contrato",
"customer_id": "66f1a2b3c4d5e6f7a8b9c0d1",
"due_date": "2026-06-01T09:00:00Z",
"status": "pending",
"priority": "high",
"creation_date": "2026-05-21T14:40:00Z"
}
}CRM — Pipelines
Un pipeline define el embudo de ventas: un conjunto ordenado de etapas por las que avanzan las oportunidades. Cada cuenta puede tener uno o varios pipelines.
Campos — Pipelines
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
name | string | Sí | Nombre del pipeline. Entre 1 y 200 caracteres. |
stages | array | Sí | Etapas del pipeline. Al menos una etapa. |
description | string | No | Descripción del pipeline. Hasta 1000 caracteres. |
is_default | boolean | No | Indica si es el pipeline por defecto. |
metadata | object | No | Metadatos libres asociados al pipeline. |
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/crm-pipelines/list/ | Listar registros con filtros y paginación | crm:read |
GET | /api/v1/crm-pipelines/{id}/ | Obtener un registro por su ID | crm:read |
POST | /api/v1/crm-pipelines/ | Crear un registro | crm:write |
PUT | /api/v1/crm-pipelines/{id}/ | Actualizar un registro | crm:write |
DELETE | /api/v1/crm-pipelines/{id}/ | Eliminar un registro | crm:write |
POST | /api/v1/crm-pipelines/bulk/create/ | Crear múltiples registros en una sola petición | crm:write |
PUT | /api/v1/crm-pipelines/bulk/update/ | Actualizar múltiples registros en una sola petición | crm:write |
POST | /api/v1/crm-pipelines/bulk/delete/ | Eliminar múltiples registros en una sola petición | crm:write |
CRM — Oportunidades
Una oportunidad representa una venta potencial dentro de un pipeline. Avanza por las etapas del pipeline y puede vincularse a un cliente, con un monto y una probabilidad de cierre.
Campos — Oportunidades
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
title | string | Sí | Título de la oportunidad. Entre 1 y 250 caracteres. |
pipeline_id | string | Sí | ID del pipeline al que pertenece la oportunidad. |
stage_id | string | Sí | ID de la etapa actual de la oportunidad. |
customer_id | string | No | ID del cliente vinculado a la oportunidad. |
amount | number | No | Monto estimado de la oportunidad. |
currency | string | No | Código de moneda. Hasta 10 caracteres. |
probability | integer | No | Probabilidad de cierre, entre 0 y 100. |
expected_close_date | string | No | Fecha estimada de cierre en formato date-time ISO 8601. |
owner_email | string | No | Email del responsable de la oportunidad. |
status | string | No | Estado: "open", "won" o "lost". |
notes | string | No | Notas sobre la oportunidad. Hasta 5000 caracteres. |
metadata | object | No | Metadatos libres asociados a la oportunidad. |
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/crm-opportunities/list/ | Listar registros con filtros y paginación | crm:read |
GET | /api/v1/crm-opportunities/{id}/ | Obtener un registro por su ID | crm:read |
POST | /api/v1/crm-opportunities/ | Crear un registro | crm:write |
PUT | /api/v1/crm-opportunities/{id}/ | Actualizar un registro | crm:write |
DELETE | /api/v1/crm-opportunities/{id}/ | Eliminar un registro | crm:write |
POST | /api/v1/crm-opportunities/bulk/create/ | Crear múltiples registros en una sola petición | crm:write |
PUT | /api/v1/crm-opportunities/bulk/update/ | Actualizar múltiples registros en una sola petición | crm:write |
POST | /api/v1/crm-opportunities/bulk/delete/ | Eliminar múltiples registros en una sola petición | crm:write |
Endpoints adicionales: GET /api/v1/crm-opportunities/board/{pipeline_id}/ (vista tablero), POST /api/v1/crm-opportunities/{id}/move/ (mover de etapa), GET /api/v1/crm-opportunities/by-customer/{customer_id}/.
CRM — Segmentos
Un segmento agrupa clientes según reglas de filtrado. Puede ser dinámico (se recalcula a partir de las reglas) o estático (lista fija de clientes).
Campos — Segmentos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
name | string | Sí | Nombre del segmento. Entre 1 y 200 caracteres. |
description | string | No | Descripción del segmento. Hasta 1000 caracteres. |
rules | array | No | Reglas del segmento. Cada regla con "field", "operator" y "value". |
rule_combinator | string | No | Combinador lógico de las reglas: "and" u "or". |
is_dynamic | boolean | No | Indica si el segmento se recalcula dinámicamente. |
static_customer_ids | array | No | IDs de clientes asignados de forma estática. |
color | string | No | Color del segmento. |
metadata | object | No | Metadatos libres asociados al segmento. |
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/crm-segments/list/ | Listar registros con filtros y paginación | crm:read |
GET | /api/v1/crm-segments/{id}/ | Obtener un registro por su ID | crm:read |
POST | /api/v1/crm-segments/ | Crear un registro | crm:write |
PUT | /api/v1/crm-segments/{id}/ | Actualizar un registro | crm:write |
DELETE | /api/v1/crm-segments/{id}/ | Eliminar un registro | crm:write |
POST | /api/v1/crm-segments/bulk/create/ | Crear múltiples registros en una sola petición | crm:write |
PUT | /api/v1/crm-segments/bulk/update/ | Actualizar múltiples registros en una sola petición | crm:write |
POST | /api/v1/crm-segments/bulk/delete/ | Eliminar múltiples registros en una sola petición | crm:write |
Endpoints adicionales: GET /api/v1/crm-segments/metadata/ (campos y operadores disponibles para las reglas), GET /api/v1/crm-segments/{id}/customers/ (clientes del segmento).
CRM — Recordatorios
Los recordatorios programan un aviso sobre un cliente para una fecha y hora determinadas, con envío por uno o varios canales.
Campos — Recordatorios
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
title | string | Sí | Título del recordatorio. Entre 1 y 250 caracteres. |
customer_id | string | Sí | ID del cliente vinculado al recordatorio (24 caracteres). |
remind_at | string | Sí | Fecha y hora del recordatorio en formato date-time ISO 8601. |
message | string | No | Mensaje del recordatorio. Hasta 2000 caracteres. |
channels | array | No | Canales de envío: "email", "push", "sms" o "whatsapp". |
metadata | object | No | Metadatos libres asociados al recordatorio. |
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/crm-reminders/list/ | Listar registros con filtros y paginación | crm:read |
GET | /api/v1/crm-reminders/{id}/ | Obtener un registro por su ID | crm:read |
POST | /api/v1/crm-reminders/ | Crear un registro | crm:write |
PUT | /api/v1/crm-reminders/{id}/ | Actualizar un registro | crm:write |
DELETE | /api/v1/crm-reminders/{id}/ | Eliminar un registro | crm:write |
POST | /api/v1/crm-reminders/bulk/create/ | Crear múltiples registros en una sola petición | crm:write |
PUT | /api/v1/crm-reminders/bulk/update/ | Actualizar múltiples registros en una sola petición | crm:write |
POST | /api/v1/crm-reminders/bulk/delete/ | Eliminar múltiples registros en una sola petición | crm:write |
Endpoints adicionales: GET /api/v1/crm-reminders/by-customer/{customer_id}/, POST /api/v1/crm-reminders/{id}/cancel/ (cancelar recordatorio).
CRM — Comunicaciones
Las comunicaciones registran los mensajes intercambiados con un cliente (email, SMS, WhatsApp, etc.), tanto salientes como entrantes, y conforman su historial de contacto.
Campos — Comunicaciones
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
customer_id | string | Sí | ID del cliente vinculado a la comunicación (24 caracteres). |
channel | string | Sí | Canal: "email", "sms", "whatsapp", "push" o "internal". |
body | string | Sí | Cuerpo del mensaje. Entre 1 y 20000 caracteres. |
direction | string | No | Dirección: "outbound" o "inbound". |
subject | string | No | Asunto del mensaje. Hasta 500 caracteres. |
status | string | No | Estado: "queued", "sent", "delivered", "read", "failed", "received" o "logged". |
template_id | string | No | ID de la plantilla usada para generar la comunicación. |
metadata | object | No | Metadatos libres asociados a la comunicación. |
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/crm-communications/list/ | Listar registros con filtros y paginación | crm:read |
GET | /api/v1/crm-communications/{id}/ | Obtener un registro por su ID | crm:read |
POST | /api/v1/crm-communications/ | Crear un registro | crm:write |
PUT | /api/v1/crm-communications/{id}/ | Actualizar un registro | crm:write |
DELETE | /api/v1/crm-communications/{id}/ | Eliminar un registro | crm:write |
POST | /api/v1/crm-communications/bulk/create/ | Crear múltiples registros en una sola petición | crm:write |
PUT | /api/v1/crm-communications/bulk/update/ | Actualizar múltiples registros en una sola petición | crm:write |
POST | /api/v1/crm-communications/bulk/delete/ | Eliminar múltiples registros en una sola petición | crm:write |
Endpoints adicionales: GET /api/v1/crm-communications/by-customer/{customer_id}/, POST /api/v1/crm-communications/send-template/ (enviar una comunicación a partir de una plantilla).
CRM — Plantillas
Las plantillas son mensajes reutilizables con variables del tipo {{nombre}} que se completan al enviar una comunicación a un cliente.
Campos — Plantillas
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
name | string | Sí | Nombre de la plantilla. Entre 1 y 200 caracteres. |
channel | string | Sí | Canal: "email", "sms", "whatsapp", "push" o "internal". |
body | string | Sí | Cuerpo de la plantilla. Entre 1 y 10000 caracteres. Admite variables con doble llave. |
subject | string | No | Asunto de la plantilla. Hasta 250 caracteres. |
description | string | No | Descripción de la plantilla. Hasta 500 caracteres. |
is_active | boolean | No | Indica si la plantilla está activa. |
tags | array | No | Etiquetas de la plantilla. |
metadata | object | No | Metadatos libres asociados a la plantilla. |
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/crm-templates/list/ | Listar registros con filtros y paginación | crm:read |
GET | /api/v1/crm-templates/{id}/ | Obtener un registro por su ID | crm:read |
POST | /api/v1/crm-templates/ | Crear un registro | crm:write |
PUT | /api/v1/crm-templates/{id}/ | Actualizar un registro | crm:write |
DELETE | /api/v1/crm-templates/{id}/ | Eliminar un registro | crm:write |
POST | /api/v1/crm-templates/bulk/create/ | Crear múltiples registros en una sola petición | crm:write |
PUT | /api/v1/crm-templates/bulk/update/ | Actualizar múltiples registros en una sola petición | crm:write |
POST | /api/v1/crm-templates/bulk/delete/ | Eliminar múltiples registros en una sola petición | crm:write |
Endpoint adicional: POST /api/v1/crm-templates/{id}/render/ (renderizar la plantilla reemplazando las variables).
Beneficios y recompensas
El recurso de recompensas gestiona el catálogo de beneficios del programa de fidelización: descuentos, productos gratis, cashback y vouchers que los clientes pueden canjear con los puntos acumulados.
Endpoint base: /api/v1/rewards
Scopes: benefits:read, benefits:write
Campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
name | string | Sí | Nombre de la recompensa. Entre 1 y 200 caracteres. |
points_cost | integer | Sí | Costo en puntos para canjear la recompensa. Mínimo 1. |
reward_type | string | Sí | Tipo: "discount_percentage", "discount_fixed", "free_publication", "free_product", "free_shipping", "cashback", "voucher", "experience" o "custom". |
description | string | No | Descripción de la recompensa. |
value_percentage | number | No | Valor del descuento en porcentaje, entre 0 y 100. |
value_amount | number | No | Valor del descuento en monto fijo. Mínimo 0. |
publication_id | string | No | ID de la publicación vinculada a la recompensa. |
publication_type | string | No | Tipo de publicación vinculada: "", "product", "service" o "rental". |
category | string | No | Categoría de la recompensa. |
value | number | No | Valor genérico de la recompensa. Mínimo 0. |
stock | integer | No | Stock disponible de la recompensa. Mínimo 0. |
image_url | string | No | URL de la imagen de la recompensa. |
featured | boolean | No | Indica si la recompensa es destacada. |
active | boolean | No | Indica si la recompensa está activa. |
valid_from | string | No | Fecha de inicio de validez. |
valid_until | string | No | Fecha de fin de validez. |
terms_conditions | string | No | Términos y condiciones de la recompensa. |
redemption_limit | integer | No | Límite de canjes de la recompensa. Mínimo 0. |
tags | array | No | Etiquetas de la recompensa. |
Endpoints
| Método | Endpoint | Descripción | Scope |
|---|---|---|---|
GET | /api/v1/rewards/list/ | Listar registros con filtros y paginación | benefits:read |
GET | /api/v1/rewards/{id}/ | Obtener un registro por su ID | benefits:read |
POST | /api/v1/rewards/ | Crear un registro | benefits:write |
PUT | /api/v1/rewards/{id}/ | Actualizar un registro | benefits:write |
DELETE | /api/v1/rewards/{id}/ | Eliminar un registro | benefits:write |
POST | /api/v1/rewards/bulk/create/ | Crear múltiples registros en una sola petición | benefits:write |
PUT | /api/v1/rewards/bulk/update/ | Actualizar múltiples registros en una sola petición | benefits:write |
POST | /api/v1/rewards/bulk/delete/ | Eliminar múltiples registros en una sola petición | benefits:write |
Endpoints adicionales: GET /api/v1/rewards/redemptions/ (historial de canjes), POST /api/v1/rewards/redeem/ (canjear una recompensa).
Ejemplo — Petición
Crear una recompensa con POST /api/v1/rewards/:
{
"name": "10% de descuento en tu próxima compra",
"reward_type": "discount_percentage",
"points_cost": 500,
"value_percentage": 10,
"stock": 100,
"active": true,
"featured": true
}Ejemplo — Respuesta
{
"success": true,
"data": {
"_id": "67c2d3e4f5a6b7c8d9e0f1a2",
"name": "10% de descuento en tu próxima compra",
"reward_type": "discount_percentage",
"points_cost": 500,
"value_percentage": 10,
"stock": 100,
"active": true,
"featured": true,
"creation_date": "2026-05-21T14:45:00Z"
}
}