API

Documentación para desarrolladores

Recursos: Clientes

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

CampoTipoRequeridoNotas
namestringNombre o razón social del cliente. Entre 2 y 200 caracteres.
emailstringNoEmail del cliente. Debe tener formato de email válido.
customer_emailstringNoEmail alternativo de contacto del cliente.
phonestringNoTeléfono del cliente.
document_typestringNoTipo de documento: "dni", "cuit", "cuil", "passport", "cedula" u "other".
document_numberstringNoNúmero de documento. Hasta 20 caracteres.
addressstring | objectNoDomicilio del cliente. Acepta un string o un objeto.
statusstringNoEstado del cliente: "active", "inactive" o "blocked".
notesstringNoNotas internas sobre el cliente. Hasta 1000 caracteres.
tagsarrayNoEtiquetas para clasificar al cliente.
custom_fieldsobjectNoCampos personalizados definidos por la cuenta.
metadataobjectNoMetadatos libres asociados al cliente.

Endpoints

MétodoEndpointDescripciónScope
GET/api/v1/customers/list/Listar registros con filtros y paginacióncustomers:read
GET/api/v1/customers/{id}/Obtener un registro por su IDcustomers:read
POST/api/v1/customers/Crear un registrocustomers:write
PUT/api/v1/customers/{id}/Actualizar un registrocustomers:write
DELETE/api/v1/customers/{id}/Eliminar un registrocustomers:write
POST/api/v1/customers/bulk/create/Crear múltiples registros en una sola peticióncustomers:write
PUT/api/v1/customers/bulk/update/Actualizar múltiples registros en una sola peticióncustomers:write
POST/api/v1/customers/bulk/delete/Eliminar múltiples registros en una sola peticióncustomers: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

CampoTipoRequeridoNotas
entity_typestringTipo de entidad titular de la cuenta: "customer" o "supplier".
entity_idstringID de la entidad (cliente o proveedor) titular de la cuenta.
entity_namestringNombre de la entidad titular de la cuenta.
credit_limitnumberNoLímite de crédito de la cuenta. Por defecto 0. No puede ser negativo.
payment_terms_daysintegerNoPlazo 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étodoEndpointDescripció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:

SubrecursoEndpoint
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

CampoTipoRequeridoNotas
titlestringTítulo de la tarea. Entre 1 y 250 caracteres.
descriptionstringNoDescripción de la tarea. Hasta 5000 caracteres.
customer_idstringNoID del cliente vinculado a la tarea (24 caracteres).
due_datestringNoFecha de vencimiento en formato date-time ISO 8601.
statusstringNoEstado: "pending", "in_progress", "done" o "cancelled".
prioritystringNoPrioridad: "low", "normal", "high" o "urgent".
assigned_to_emailstringNoEmail del usuario asignado a la tarea.
assigned_to_user_idstringNoID del usuario asignado a la tarea.
related_toobjectNoReferencia a otra entidad: objeto con "type" e "id".
tagsarrayNoEtiquetas de la tarea.
metadataobjectNoMetadatos libres asociados a la tarea.
MétodoEndpointDescripciónScope
GET/api/v1/crm-tasks/list/Listar registros con filtros y paginacióncrm:read
GET/api/v1/crm-tasks/{id}/Obtener un registro por su IDcrm:read
POST/api/v1/crm-tasks/Crear un registrocrm:write
PUT/api/v1/crm-tasks/{id}/Actualizar un registrocrm:write
DELETE/api/v1/crm-tasks/{id}/Eliminar un registrocrm:write
POST/api/v1/crm-tasks/bulk/create/Crear múltiples registros en una sola peticióncrm:write
PUT/api/v1/crm-tasks/bulk/update/Actualizar múltiples registros en una sola peticióncrm:write
POST/api/v1/crm-tasks/bulk/delete/Eliminar múltiples registros en una sola peticióncrm: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

CampoTipoRequeridoNotas
namestringNombre del pipeline. Entre 1 y 200 caracteres.
stagesarrayEtapas del pipeline. Al menos una etapa.
descriptionstringNoDescripción del pipeline. Hasta 1000 caracteres.
is_defaultbooleanNoIndica si es el pipeline por defecto.
metadataobjectNoMetadatos libres asociados al pipeline.
MétodoEndpointDescripciónScope
GET/api/v1/crm-pipelines/list/Listar registros con filtros y paginacióncrm:read
GET/api/v1/crm-pipelines/{id}/Obtener un registro por su IDcrm:read
POST/api/v1/crm-pipelines/Crear un registrocrm:write
PUT/api/v1/crm-pipelines/{id}/Actualizar un registrocrm:write
DELETE/api/v1/crm-pipelines/{id}/Eliminar un registrocrm:write
POST/api/v1/crm-pipelines/bulk/create/Crear múltiples registros en una sola peticióncrm:write
PUT/api/v1/crm-pipelines/bulk/update/Actualizar múltiples registros en una sola peticióncrm:write
POST/api/v1/crm-pipelines/bulk/delete/Eliminar múltiples registros en una sola peticióncrm: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

CampoTipoRequeridoNotas
titlestringTítulo de la oportunidad. Entre 1 y 250 caracteres.
pipeline_idstringID del pipeline al que pertenece la oportunidad.
stage_idstringID de la etapa actual de la oportunidad.
customer_idstringNoID del cliente vinculado a la oportunidad.
amountnumberNoMonto estimado de la oportunidad.
currencystringNoCódigo de moneda. Hasta 10 caracteres.
probabilityintegerNoProbabilidad de cierre, entre 0 y 100.
expected_close_datestringNoFecha estimada de cierre en formato date-time ISO 8601.
owner_emailstringNoEmail del responsable de la oportunidad.
statusstringNoEstado: "open", "won" o "lost".
notesstringNoNotas sobre la oportunidad. Hasta 5000 caracteres.
metadataobjectNoMetadatos libres asociados a la oportunidad.
MétodoEndpointDescripciónScope
GET/api/v1/crm-opportunities/list/Listar registros con filtros y paginacióncrm:read
GET/api/v1/crm-opportunities/{id}/Obtener un registro por su IDcrm:read
POST/api/v1/crm-opportunities/Crear un registrocrm:write
PUT/api/v1/crm-opportunities/{id}/Actualizar un registrocrm:write
DELETE/api/v1/crm-opportunities/{id}/Eliminar un registrocrm:write
POST/api/v1/crm-opportunities/bulk/create/Crear múltiples registros en una sola peticióncrm:write
PUT/api/v1/crm-opportunities/bulk/update/Actualizar múltiples registros en una sola peticióncrm:write
POST/api/v1/crm-opportunities/bulk/delete/Eliminar múltiples registros en una sola peticióncrm: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

CampoTipoRequeridoNotas
namestringNombre del segmento. Entre 1 y 200 caracteres.
descriptionstringNoDescripción del segmento. Hasta 1000 caracteres.
rulesarrayNoReglas del segmento. Cada regla con "field", "operator" y "value".
rule_combinatorstringNoCombinador lógico de las reglas: "and" u "or".
is_dynamicbooleanNoIndica si el segmento se recalcula dinámicamente.
static_customer_idsarrayNoIDs de clientes asignados de forma estática.
colorstringNoColor del segmento.
metadataobjectNoMetadatos libres asociados al segmento.
MétodoEndpointDescripciónScope
GET/api/v1/crm-segments/list/Listar registros con filtros y paginacióncrm:read
GET/api/v1/crm-segments/{id}/Obtener un registro por su IDcrm:read
POST/api/v1/crm-segments/Crear un registrocrm:write
PUT/api/v1/crm-segments/{id}/Actualizar un registrocrm:write
DELETE/api/v1/crm-segments/{id}/Eliminar un registrocrm:write
POST/api/v1/crm-segments/bulk/create/Crear múltiples registros en una sola peticióncrm:write
PUT/api/v1/crm-segments/bulk/update/Actualizar múltiples registros en una sola peticióncrm:write
POST/api/v1/crm-segments/bulk/delete/Eliminar múltiples registros en una sola peticióncrm: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

CampoTipoRequeridoNotas
titlestringTítulo del recordatorio. Entre 1 y 250 caracteres.
customer_idstringID del cliente vinculado al recordatorio (24 caracteres).
remind_atstringFecha y hora del recordatorio en formato date-time ISO 8601.
messagestringNoMensaje del recordatorio. Hasta 2000 caracteres.
channelsarrayNoCanales de envío: "email", "push", "sms" o "whatsapp".
metadataobjectNoMetadatos libres asociados al recordatorio.
MétodoEndpointDescripciónScope
GET/api/v1/crm-reminders/list/Listar registros con filtros y paginacióncrm:read
GET/api/v1/crm-reminders/{id}/Obtener un registro por su IDcrm:read
POST/api/v1/crm-reminders/Crear un registrocrm:write
PUT/api/v1/crm-reminders/{id}/Actualizar un registrocrm:write
DELETE/api/v1/crm-reminders/{id}/Eliminar un registrocrm:write
POST/api/v1/crm-reminders/bulk/create/Crear múltiples registros en una sola peticióncrm:write
PUT/api/v1/crm-reminders/bulk/update/Actualizar múltiples registros en una sola peticióncrm:write
POST/api/v1/crm-reminders/bulk/delete/Eliminar múltiples registros en una sola peticióncrm: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

CampoTipoRequeridoNotas
customer_idstringID del cliente vinculado a la comunicación (24 caracteres).
channelstringCanal: "email", "sms", "whatsapp", "push" o "internal".
bodystringCuerpo del mensaje. Entre 1 y 20000 caracteres.
directionstringNoDirección: "outbound" o "inbound".
subjectstringNoAsunto del mensaje. Hasta 500 caracteres.
statusstringNoEstado: "queued", "sent", "delivered", "read", "failed", "received" o "logged".
template_idstringNoID de la plantilla usada para generar la comunicación.
metadataobjectNoMetadatos libres asociados a la comunicación.
MétodoEndpointDescripciónScope
GET/api/v1/crm-communications/list/Listar registros con filtros y paginacióncrm:read
GET/api/v1/crm-communications/{id}/Obtener un registro por su IDcrm:read
POST/api/v1/crm-communications/Crear un registrocrm:write
PUT/api/v1/crm-communications/{id}/Actualizar un registrocrm:write
DELETE/api/v1/crm-communications/{id}/Eliminar un registrocrm:write
POST/api/v1/crm-communications/bulk/create/Crear múltiples registros en una sola peticióncrm:write
PUT/api/v1/crm-communications/bulk/update/Actualizar múltiples registros en una sola peticióncrm:write
POST/api/v1/crm-communications/bulk/delete/Eliminar múltiples registros en una sola peticióncrm: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

CampoTipoRequeridoNotas
namestringNombre de la plantilla. Entre 1 y 200 caracteres.
channelstringCanal: "email", "sms", "whatsapp", "push" o "internal".
bodystringCuerpo de la plantilla. Entre 1 y 10000 caracteres. Admite variables con doble llave.
subjectstringNoAsunto de la plantilla. Hasta 250 caracteres.
descriptionstringNoDescripción de la plantilla. Hasta 500 caracteres.
is_activebooleanNoIndica si la plantilla está activa.
tagsarrayNoEtiquetas de la plantilla.
metadataobjectNoMetadatos libres asociados a la plantilla.
MétodoEndpointDescripciónScope
GET/api/v1/crm-templates/list/Listar registros con filtros y paginacióncrm:read
GET/api/v1/crm-templates/{id}/Obtener un registro por su IDcrm:read
POST/api/v1/crm-templates/Crear un registrocrm:write
PUT/api/v1/crm-templates/{id}/Actualizar un registrocrm:write
DELETE/api/v1/crm-templates/{id}/Eliminar un registrocrm:write
POST/api/v1/crm-templates/bulk/create/Crear múltiples registros en una sola peticióncrm:write
PUT/api/v1/crm-templates/bulk/update/Actualizar múltiples registros en una sola peticióncrm:write
POST/api/v1/crm-templates/bulk/delete/Eliminar múltiples registros en una sola peticióncrm: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

CampoTipoRequeridoNotas
namestringNombre de la recompensa. Entre 1 y 200 caracteres.
points_costintegerCosto en puntos para canjear la recompensa. Mínimo 1.
reward_typestringTipo: "discount_percentage", "discount_fixed", "free_publication", "free_product", "free_shipping", "cashback", "voucher", "experience" o "custom".
descriptionstringNoDescripción de la recompensa.
value_percentagenumberNoValor del descuento en porcentaje, entre 0 y 100.
value_amountnumberNoValor del descuento en monto fijo. Mínimo 0.
publication_idstringNoID de la publicación vinculada a la recompensa.
publication_typestringNoTipo de publicación vinculada: "", "product", "service" o "rental".
categorystringNoCategoría de la recompensa.
valuenumberNoValor genérico de la recompensa. Mínimo 0.
stockintegerNoStock disponible de la recompensa. Mínimo 0.
image_urlstringNoURL de la imagen de la recompensa.
featuredbooleanNoIndica si la recompensa es destacada.
activebooleanNoIndica si la recompensa está activa.
valid_fromstringNoFecha de inicio de validez.
valid_untilstringNoFecha de fin de validez.
terms_conditionsstringNoTérminos y condiciones de la recompensa.
redemption_limitintegerNoLímite de canjes de la recompensa. Mínimo 0.
tagsarrayNoEtiquetas de la recompensa.

Endpoints

MétodoEndpointDescripciónScope
GET/api/v1/rewards/list/Listar registros con filtros y paginaciónbenefits:read
GET/api/v1/rewards/{id}/Obtener un registro por su IDbenefits:read
POST/api/v1/rewards/Crear un registrobenefits:write
PUT/api/v1/rewards/{id}/Actualizar un registrobenefits:write
DELETE/api/v1/rewards/{id}/Eliminar un registrobenefits:write
POST/api/v1/rewards/bulk/create/Crear múltiples registros en una sola peticiónbenefits:write
PUT/api/v1/rewards/bulk/update/Actualizar múltiples registros en una sola peticiónbenefits:write
POST/api/v1/rewards/bulk/delete/Eliminar múltiples registros en una sola peticiónbenefits: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"
  }
}