MCP Alegra

MCP Alegra

Servidor MCP (Model Context Protocol) para integración con Alegra.
Permite acceso a herramientas de gestión empresarial como inventarios, contactos,
facturas, bancos, pagos, retenciones, entre otros, a través de una interfaz MCP estandarizada.

Paquete MCP Expenses (@alegradev/mcp-expenses): facturas de compra (bills), notas de débito de
gastos, órdenes de compra y pagos salientes; las herramientas públicas documentadas enlazan con
references/tools/ y se invocan igual vía JSON-RPC sobre POST /mcp (véase #/paths/~1mcp).

Base URL: https://mcp.alegra.com
Versión: 1.0.0
Soporte: Comunidad Alegra


Inicio Rápido

El token se construye codificando email:token-alegra en Base64:

Base64(email:token-alegra)

Obtén tu token en Alegra → Configuración → API.

Cursor IDE

{
  "mcpServers": {
    "alegra-mcp": {
      "type": "streamable-http",
      "streamable": true,
      "url": "https://mcp.alegra.com/mcp",
      "headers": {
        "Authorization": "Basic TU_TOKEN_AQUI",
        "mcp-groups": "maestros,gastos,ingresos,items,config,contacts,invoices,banks,income-payments,resolutions,currencies,sellers,taxes,retentions,reports,ledger,accounting,support-center"
      }
    }
  }
}

Otros clientes MCP

  • URL: https://mcp.alegra.com/mcp
  • Transporte: streamable-http
  • Header auth: Authorization: Basic <token-base64>
  • Header grupos: mcp-groups: <grupos-separados-por-coma>

Grupos disponibles

147 herramientas en 19 grupos.

GrupoDescripciónHerramientas
🔧 maestrosProtocolo MCP, endpoints principales y verificación de salud del servidor.0
🧾 gastosFacturas de compra, notas de débito, órdenes de compra y pagos salientes.35
📈 ingresosGestión de facturación, emisión de comprobantes, numeraciones y pagos recibidos.17
📦 itemsGestión de inventario y productos37
⚙️ configCatálogos de configuración del sistema (unidades de medida, claves de producto)2
👥 contactsGestión de contactos y clientes5
💰 invoicesGestión de facturación7
🏦 banksGestión de cuentas bancarias y conciliaciones10
💵 income-paymentsGestión de pagos recibidos4
📄 resolutionsGestión de numeraciones y resoluciones6
💱 currenciesGestión de monedas y divisas5
🏪 sellersGestión de vendedores4
🧾 taxesGestión de impuestos4
🛡️ retentionsGestión de retenciones fiscales4
🔧 reportsGestión de reportes de ventas7
📖 ledgerCatálogo de cuentas contables4
🗂️ accountingComprobantes contables y centros de costos10
🔧 support-centerGestión de tickets de soporte y base de conocimientos3

Herramientas

🧾 Gastos

Facturas de compra, notas de débito, órdenes de compra y pagos salientes.

🧾 Bills

  • bills__list_bills — bills__list_bills
  • bills__get_bill — bills__get_bill
  • bills__create_bill — bills__create_bill
  • bills__update_bill — bills__update_bill
  • bills__delete_bill — bills__delete_bill
  • bills__close_bill — bills__close_bill
  • bills__apply_bill_advances — bills__apply_bill_advances
  • bills__update_bill_retentions — bills__update_bill_retentions
  • bills__update_bill_perceptions — bills__update_bill_perceptions
  • bills__add_bill_comments — bills__add_bill_comments
  • bills__update_bill_comment — bills__update_bill_comment
  • bills__delete_bill_comment — bills__delete_bill_comment
  • bills__upload_bill_attachment — bills__upload_bill_attachment
  • bills__delete_bill_attachment — bills__delete_bill_attachment
  • bills__import_bill_by_cufe — bills__import_bill_by_cufe

bills__list_bills

MCP

Herramienta lógica list_bills. Nombre típico: bills__list_bills (p. ej. expenses__list_bills según el servidor).

HTTP

GET /v1/bills — Query: todos los parámetros opcionales van en arguments como claves planas (equivalente a query string).

Respuesta exitosa

HTTP 200: arreglo de bills, o { metadata: { total }, data: [...] } si metadata=true.

Errores frecuentes

CódigoSignificadoAcción
903Paginación inválida (start/limit)start≥0; limit dentro del máximo del API
400ValidaciónRevisar message y code en el cuerpo

Filtros proveedor

client_id exacto: si no existe ese proveedor, cero resultados (no es error). No combinar lógica de intersección con client_name/provider_name; usar id o nombre (ver guía list_filter_semantics en la fuente).

Campos expandidos

Usar fields como lista separada por comas; ver fields_query_param y fields_guidance en la guía pública (stamp, xml, retentions, journal, etc.).

ArgumentoTipoReqDescripción
startintegerOffset ≥0. Default: 0
limitintegerTamaño de página (máx. típico 200). Default: 30
fieldsstringCampos extra separados por comas
decimalModestringValores: calculation | display
simpleboolean
metadatastring'true' para envoltorio metadata+data
order_fieldstringValores: billNumber | name | date | dueDate | id
order_directionstringValores: ASC | DESC
uuidstring
uuidsstring
idsstring
idGlobalstring
exclude_idstring
fullNumberstring
billNumber_equalsstring
statusstringdraft,open,paid,void (separados por coma)
typestringColombia suele default bill. Valores: bill | supportDocument | all
client_idinteger
client_namestring
provider_namestring
datestring
date_afterOrNowstring
date_beforeOrNowstring
dueDatestring
dueDate_earlierThanOrEqualTostring
dueDate_laterThanOrEqualTostring
dueDate_betweenstringstart,end
createdAt_laterThanOrEqualTostring
createdAt_earlierThanOrEqualTostring
createdBystring
item_idinteger
purchaseOrder_idinteger
currencystring
warehouse_idinteger
costCenter_idstring
emissionStatusstring
areElectronicboolean
excludePaidBillsboolean
excludePrefixstring
includeVoidPaymentsstringValores: yes | no

Respuesta:

{
  "data": []
}

bills__get_bill

MCP

get_billbills__get_bill.

HTTP

GET /v1/bills/{id}

Argumentos

  • id (path): id local del bill.
  • Query opcional: fields, decimalMode, simple, includeVoidPayments, dataByDate.

Respuesta exitosa

HTTP 200: objeto bill (forma según fields).

Errores

CódigoSignificadoAcción
11110Bill no existeVerificar id
403Prohibido (permisos/plan)Revisar rol, plan y permisos del recurso
ArgumentoTipoReqDescripción
idstring
fieldsstring
decimalModestringValores: calculation | display
simpleboolean
includeVoidPaymentsstringValores: yes | no
dataByDatestring

Respuesta:

{
  "id": "1"
}

bills__create_bill

MCP

create_billbills__create_bill.

HTTP

POST /v1/bills — Cuerpo JSON = objeto bill de alta.

Requisitos

  • date, dueDate, provider.id obligatorios.
  • Líneas bajo purchases.items y/o purchases.categories (al menos una línea), salvo fusión válida con órdenes de compra (ver guía).
  • No enviar en alta: id, status, total, totalPaid, balance, calculationScale, payments (solo lectura / calculados).
  • No usar idCostCenter en raíz (rechazado); usar costCenter: { id } o atajo numérico costCenter.

Impuestos en líneas

tax debe ser arreglo de { id }. Códigos: 11048, 11058, 11081 (multiples impuestos), 11067/11059 ids inválidos.

Respuesta exitosa

HTTP 201: bill creado.

Errores (selección)

CódigoSignificadoAcción
11004Proveedor no encontradoCorregir provider.id
2094Proveedor deshabilitadoHabilitar proveedor o usar otro
11040Sin ítems ni categoríasAgregar líneas en purchases
20007Resolución / numberTemplate.id inválidaAjustar numeración según país
11097 / 11101Retenciones o pagos no permitidos al timbrar (CR)Quitar o ajustar retenciones/pagos para timbre
900Límite de planActualizar plan o borrar documentos
907Plan solo lecturaPlan que no permite escritura
3051Fallo timbre — puede ir error + bill parcialNo repetir POST a ciegas; usar update_bill con id (ver guía 3051)
11108UUID ya asociado a otro billUsar otro UUID o factura existente

Ver error_3051_stamp_failure y error_code_reference en la guía pública.

Respuesta:

{
  "id": "1"
}

bills__update_bill

MCP

update_billbills__update_bill.

HTTP

PUT /v1/bills/{id} — Actualización parcial.

Restricciones

No enviar id, status, total, totalPaid, balance, calculationScale, payments, advances en el sentido de forzar estado.

Errores

CódigoSignificadoAcción
11042No editableEstado/reglas bloquean edición
3051Fallo timbre (puede incluir bill parcial)Ver guía 3051; no reintentar mismo payload a ciegas
11094Falta centro de costo obligatorioEnviar costCenter donde aplique
907 / 908 / 911Plan o acción no permitidaRevisar plan y tipo de operación
11110No encontradoVerificar id
ArgumentoTipoReqDescripción
idstring
datestring
dueDatestring
providerobject
purchasesobject
costCenterobject
stampobject
should_open_billboolean
electronicInvoicingVersionstring

Respuesta:

{
  "id": "1"
}

bills__delete_bill

MCP

delete_billbills__delete_bill.

HTTP

DELETE /v1/bills/{id}

Respuesta exitosa

HTTP 204 (cuerpo vacío).

Errores

CódigoSignificadoAcción
11110Bill no encontradoVerificar id
403Sin permisoRevisar acceso
400Validación / no eliminableRevisar message y estado del documento
ArgumentoTipoReqDescripción
idstring

Respuesta:

{}

bills__close_bill

MCP

close_billbills__close_bill.

HTTP

POST /v1/bills/{id}/close

Body obligatorio

  • date (yyyy-MM-dd): fecha de cierre.
  • category: id de categoría de ingreso (string, number u objeto { id }).

Body opcional

  • observations (máx. 500 caracteres).
  • journal.numberTemplate.id si la empresa usa tipos y numeraciones para el asiento de cierre.

Errores

CódigoSignificadoAcción
11200Formulario de cierre vacío o incompletoEnviar campos requeridos de cierre
11201Fecha de cierre obligatoriaIncluir date válida
11203Categoría de ingreso obligatoriaIncluir category válida
11208Factura no cerrable en este estadoVerificar saldo y estado
11110Bill no encontradoVerificar id
905JSON inválidoCorregir cuerpo de la petición
ArgumentoTipoReqDescripción
idstring
datestring
categoryobject
observationsstring
journalobject

Respuesta:

{
  "code": 200,
  "message": "OK"
}

bills__apply_bill_advances

MCP

apply_bill_advancesbills__apply_bill_advances.

HTTP

POST /v1/bills/{id}/advances-applied

Body

advances: arreglo de { id, amount }.

Respuesta

HTTP 200: { code: 200, message: [ ... anticipos ... ] }

Errores

CódigoSignificadoAcción
11110Bill no encontradoVerificar id
11300Cuerpo de anticipos vacíoEnviar advances con entradas válidas
400ValidaciónRevisar ids y montos de anticipos
ArgumentoTipoReqDescripción
idstring
advancesarray

Respuesta:

{
  "code": 200,
  "message": []
}

bills__update_bill_retentions

MCP

update_bill_retentionsbills__update_bill_retentions.

HTTP

PUT /v1/bills/{id}/retentionsReemplazo total del arreglo retentions.

Errores

CódigoSignificadoAcción
11110Bill no encontradoVerificar id
11311Tipo documento incompatible con detracciones (PE)Solo tipo bill admite regla
11435Retenciones aplicadas bloquean ediciónNo reemplazar retenciones en ese estado
ArgumentoTipoReqDescripción
idstring
retentionsarray

Respuesta:

[]

bills__update_bill_perceptions

MCP

update_bill_perceptionsbills__update_bill_perceptions.

HTTP

PUT /v1/bills/{id}/perceptions

Solo empresas Argentina con percepciones habilitadas. Otros países: 405. Cuenta sin feature: 923.

Body

perceptions: arreglo de { id, amount }.

Errores

CódigoSignificadoAcción
405Método no permitido (país / sin feature)Solo Argentina con percepciones habilitadas
923Cuenta sin feature de percepcionesHabilitar feature en cuenta
11414Percepción inválidaRevisar ids y montos en perceptions
11416perceptions debe ser arregloEnviar arreglo de { id, amount }
ArgumentoTipoReqDescripción
idstring
perceptionsarray

Respuesta:

[]

bills__add_bill_comments

MCP

add_bill_commentsbills__add_bill_comments.

HTTP

POST /v1/bills/{id}/comments

Body

Debe incluir comments: arreglo de objetos (p. ej. { text } según integración).

Errores

CódigoSignificadoAcción
902Cuerpo vacíoEnviar JSON con body
905JSON inválidoCorregir sintaxis del cuerpo
11103comments mal formado (debe ser arreglo)Formato según API de comentarios
ArgumentoTipoReqDescripción
idstring
commentsarray

Respuesta:

{
  "success": true
}

bills__update_bill_comment

MCP

update_bill_commentbills__update_bill_comment.

HTTP

PUT /v1/bills/{id}/comments/{commentId}

Body

comment: string (texto del comentario).

Errores

CódigoSignificadoAcción
11301Falta id de comentario obligatorioIncluir commentId válido en ruta/payload
ArgumentoTipoReqDescripción
idstring
commentIdstring
commentstring

Respuesta:

{
  "success": true
}

bills__delete_bill_comment

MCP

delete_bill_commentbills__delete_bill_comment.

HTTP

DELETE /v1/bills/{id}/comments/{commentId}

ArgumentoTipoReqDescripción
idstring
commentIdstring

Respuesta:

{
  "success": true
}

bills__upload_bill_attachment

MCP

upload_bill_attachmentbills__upload_bill_attachment.

HTTP

POST /v1/bills/{id}/attachmentmultipart/form-data con un solo campo de archivo llamado file. El id del bill va solo
en la URL ({id}), no como campo extra del formulario.

Argumentos (MCP)

  • id: mismo valor que {id} del path (no se duplica como campo multipart).
  • file: contenido del único campo de formulario file (en JSON-RPC suele enviarse como base64).

Errores

CódigoSignificadoAcción
11110Bill no encontradoVerificar id
904Adjunto / multipart inválidoCampo file y multipart/form-data correctos
ArgumentoTipoReqDescripción
idstring
filestringÚnico campo de archivo de la API; nombre del campo file.

Respuesta:

{
  "id": "1"
}

bills__delete_bill_attachment

MCP

delete_bill_attachmentbills__delete_bill_attachment.

HTTP

DELETE /v1/bills/attachment/{fileId}fileId va solo en la URL (no es el id del bill).

ArgumentoTipoReqDescripción
fileIdstring

Respuesta:

{
  "success": true
}

bills__import_bill_by_cufe

MCP

import_bill_by_cufebills__import_bill_by_cufe.

HTTP

POST /v1/bills/import-by-cufe — Body JSON: { "cufe": "..." }.

Solo Colombia.

ArgumentoTipoReqDescripción
cufestring

Respuesta:

{
  "id": "1"
}

📑 Debit Notes

  • debit-notes__list_debit_notes — debit-notes__list_debit_notes
  • debit-notes__get_debit_note — debit-notes__get_debit_note
  • debit-notes__create_debit_note — debit-notes__create_debit_note
  • debit-notes__update_debit_note — debit-notes__update_debit_note
  • debit-notes__delete_debit_note — debit-notes__delete_debit_note
  • debit-notes__add_debit_note_comments — debit-notes__add_debit_note_comments

debit-notes__list_debit_notes

MCP

list_debit_notesdebit-notes__list_debit_notes.

HTTP

GET /v1/debit-notes

Query (arguments)

Paginación: start (default 0), limit (default 30). type: normal | adjustmentNote | all (default normal).
Filtros: fields, metadata, order_field, order_direction, number, date, item_id, provider_name,
emissionStatus, idGlobal, client_id, id (lista de ids locales, máx. 30 en un request), rangos de fecha, etc.

Respuesta

HTTP 200: arreglo o { metadata, data } si metadata está definido.

Errores frecuentes

CódigoSignificadoAcción
903Paginación inválida o más de 30 ids en idstart≥0; limit válido; máx. 30 ids en id
400ValidaciónRevisar message y code en el cuerpo
ArgumentoTipoReqDescripción
startintegerDefault: 0
limitintegerDefault: 30
fieldsstring
metadatastring
typestringValores: normal | adjustmentNote | all. Default: normal
order_fieldstringValores: number | name | date | id
order_directionstringValores: ASC | DESC
numberstring
datestring
item_idinteger
provider_namestring
emissionStatusstring
idGlobalstring
client_idinteger
idstringIds separados por coma, máx. 30
date_afterOrNowstring
date_beforeOrNowstring
date_betweenstring

Respuesta:

{
  "data": []
}

debit-notes__get_debit_note

MCP

get_debit_notedebit-notes__get_debit_note.

HTTP

GET /v1/debit-notes/{id} — Query opcional: fields.

Errores

CódigoSignificadoAcción
13005Nota de débito no existeVerificar id (típ. HTTP 404)
403ProhibidoRevisar permisos/plan
ArgumentoTipoReqDescripción
idstring
fieldsstring

Respuesta:

{
  "id": "1"
}

debit-notes__create_debit_note

MCP

create_debit_notedebit-notes__create_debit_note.

HTTP

POST /v1/debit-notes

Obligatorio

  • client: { id } (proveedor), date
  • Al menos una línea: items, categories, purchases.items o purchases.categories

Opcional

bills: [{ id, amount }], refunds, retentions, stamp, warehouse, currency, costCenter,
resolution, metadatos (adjustmentNoteType, annotation, reason, typeCreditNote CR), etc.

No enviar

id, status, total, balance, calculationScale, emissionStatus, payments.

Errores (selección)

CódigoSignificadoAcción
13011Cliente/proveedor no encontradoCorregir client.id
13043Sin líneasAgregar items/categories/purchases
13066Timbre sin resolución electrónica (CO/CR cuando aplica)Asignar resolución electrónica
13007Multimoneda no habilitadaHabilitar multimoneda en cuenta
900Límite planPlan o cupo
907Solo lecturaPlan no permite escritura
3051Fallo timbre en alta — puede ir debitNote parcialNo re-POST ciego; update_debit_note con id
905 / 902JSON vacío o mal formadoCuerpo JSON válido y no vacío

Códigos de líneas: 13043–13054, 13104, etc. Ver line_models.validation_codes_common en la fuente.

Actualización tras 3051

Persistir debitNote.id y usar update_debit_note (ver error_3051_stamp_failure en la guía).

Respuesta:

{
  "id": "1"
}

debit-notes__update_debit_note

MCP

update_debit_notedebit-notes__update_debit_note.

HTTP

PUT /v1/debit-notes/{id}

Errores

CódigoSignificadoAcción
13038No editableEstado/reglas bloquean edición
13093Periodo contable cerradoAbrir periodo o ajustar fecha
13005No encontradoVerificar id
907 / 908PlanRevisar plan y permisos
(dinámico)Fallo timbre en PUT: error + debitNoteLeer error.code; no reintentar mismo payload a ciegas

No reintentar el mismo payload fallido a ciegas en rutas de timbre.

ArgumentoTipoReqDescripción
idstring
datestring
clientobject
itemsarray
categoriesarray
purchasesobject
billsarray
stampobject

Respuesta:

{
  "id": "1"
}

debit-notes__delete_debit_note

MCP

delete_debit_notedebit-notes__delete_debit_note.

HTTP

DELETE /v1/debit-notes/{id}

Respuesta

HTTP 204; algunos despliegues devuelven JSON legacy { code, message }.

Errores

CódigoSignificadoAcción
13005Nota no encontradaVerificar id
13042Estado no permite borradoAnular o cambiar estado según reglas
ArgumentoTipoReqDescripción
idstring

Respuesta:

{
  "code": 200
}

debit-notes__add_debit_note_comments

MCP

add_debit_note_commentsdebit-notes__add_debit_note_comments.

HTTP

POST /v1/debit-notes/{id}/comments

Body

Debe existir la clave comments (arreglo u objeto según servicio de comentarios).

Errores

CódigoSignificadoAcción
902Cuerpo vacíoEnviar JSON con body
905JSON inválidoCorregir cuerpo
37008Sin comentarios válidos para agregarcomments presente y no vacío según API
ArgumentoTipoReqDescripción
idstring
commentsarrayArray de comentarios (forma según API de comentarios)

Respuesta:

{
  "success": true
}

📋 Purchase Orders

  • purchase-orders__list-purchase-orders — purchase-orders__list-purchase-orders
  • purchase-orders__get-purchase-order — purchase-orders__get-purchase-order
  • purchase-orders__create-purchase-order — purchase-orders__create-purchase-order
  • purchase-orders__update-purchase-order — purchase-orders__update-purchase-order
  • purchase-orders__delete-purchase-order — purchase-orders__delete-purchase-order
  • purchase-orders__void-purchase-order — purchase-orders__void-purchase-order
  • purchase-orders__add-purchase-order-comments — purchase-orders__add-purchase-order-comments
  • purchase-orders__email-purchase-order — purchase-orders__email-purchase-order

purchase-orders__list-purchase-orders

MCP

list-purchase-orderspurchase-orders__list-purchase-orders.

HTTP

GET /v1/purchase-orders

Query (arguments)

Defaults API/MCP: start=0, limit=30. Opcional: metadata (boolean), order_field (name, date, id, deliveryDate, status),
order_direction (ASC|DESC), fields, client_id, provider_name, costCenter_id (usar null/none/0 para sin CC),
warehouse_id, fullNumber, number, item_id, status, date, deliveryDate, delivery_date, id, currency.

Respuesta

Arreglo de órdenes o { metadata: { total }, data } con metadata=true.

Errores frecuentes

CódigoSignificadoAcción
903Paginación inválida (start/limit)Valores dentro del máximo del API
905Petición mal formada o serializaciónRevisar query y tipos
400ValidaciónRevisar message y code en el cuerpo
ArgumentoTipoReqDescripción
startnumberDefault: 0
limitnumberDefault: 30
metadataboolean
order_fieldstringValores: name | date | id | deliveryDate | status
order_directionstringValores: ASC | DESC
fieldsstring
client_idnumber
provider_namestring
costCenter_idstring
warehouse_idstring
fullNumberstring
numberstring
item_idnumber
statusstring
datestring
deliveryDatestring
delivery_datestring
idstring
currencystring

Respuesta:

{
  "data": []
}

purchase-orders__get-purchase-order

MCP

get-purchase-orderpurchase-orders__get-purchase-order.

HTTP

GET /v1/purchase-orders/{id}

Query

fields, fromMicro (boolean o string según cliente).

Errores

CódigoSignificadoAcción
404Orden de compra no existeVerificar id
905Error inesperado / serializaciónReducir fields o revisar petición
403ProhibidoPermisos o plan
ArgumentoTipoReqDescripción
idstringId numérico local (path)
fieldsstring
fromMicroobject

Respuesta:

{
  "id": "1"
}

purchase-orders__create-purchase-order

MCP

create-purchase-orderpurchase-orders__create-purchase-order.

HTTP

POST /v1/purchase-orders

Body obligatorio

  • date, deliveryDate
  • provider (o provider.id)
  • purchases con al menos una línea en purchases.items y/o purchases.categories

No enviar

id, status, total, subTotal, bills (en respuesta). Evitar idCostCenter en raíz; usar costCenter objeto.

Líneas

Items/categories: id, price, quantity; impuestos como { id } o arreglo de objetos { id }.

Errores

CódigoSignificadoAcción
12016Sin líneas en compraAgregar items/categories en purchases
12030Moneda no disponibleElegir moneda válida para la cuenta
3042Validación de líneaRevisar items/categories e impuestos
12021Número ya registradoOtro número o numeración
902Cuerpo vacíoEnviar JSON con body

México puede exigir taxCondition en líneas.

Respuesta:

{
  "id": "1"
}

purchase-orders__update-purchase-order

MCP

update-purchase-orderpurchase-orders__update-purchase-order.

HTTP

PUT /v1/purchase-orders/{id}

Errores

CódigoSignificadoAcción
12010No editable (facturas asociadas u otros bloqueos)Resolver bloqueos o no editar
12009Orden no encontradaVerificar id
3042Líneas inválidasCorregir purchases
ArgumentoTipoReqDescripción
idstring
datestring
deliveryDatestring
providerobject
purchasesobject
currencyobject
warehouseobject
costCenterobject

Respuesta:

{
  "id": "1"
}

purchase-orders__delete-purchase-order

MCP

delete-purchase-orderpurchase-orders__delete-purchase-order.

HTTP

DELETE /v1/purchase-orders/{id} — Solo si es eliminable (sin bills ligadas que bloqueen).

Errores

CódigoSignificadoAcción
404No encontradaVerificar id
400No eliminable (reglas de negocio)Quitar vínculos que bloqueen
ArgumentoTipoReqDescripción
idstring

Respuesta:

{
  "code": 200
}

purchase-orders__void-purchase-order

MCP

void-purchase-orderpurchase-orders__void-purchase-order.

HTTP

POST al endpoint de anulación (void) — no es DELETE.

Errores

CódigoSignificadoAcción
404No encontrada o no anulable en este estadoVerificar id y estado
ArgumentoTipoReqDescripción
idstring

Respuesta:

{
  "id": "1",
  "status": "void"
}

purchase-orders__add-purchase-order-comments

MCP

add-purchase-order-commentspurchase-orders__add-purchase-order-comments.

HTTP

POST /v1/purchase-orders/{purchaseOrderId}/comments (nombre de path en guía: purchaseOrderId).

Body

comments: string o arreglo (no vacío).

Errores

CódigoSignificadoAcción
37008Sin comentarios válidos para agregarcomments no vacío según API
37009Documento no existeVerificar purchaseOrderId
37010No se pudo guardar comentarioReintentar o revisar payload
ArgumentoTipoReqDescripción
purchaseOrderIdstringId local de la OC (path). Algunos clientes usan id como alias.
commentsobject

Respuesta:

{
  "code": 201
}

purchase-orders__email-purchase-order

MCP

email-purchase-orderpurchase-orders__email-purchase-order.

HTTP

POST con path purchaseOrderId según API de correo de OC.

Body

  • emails: arreglo o string (obligatorio)
  • Opcional: sendCopyToUser, emailTemplate: { subject, message }

Errores

CódigoSignificadoAcción
12005Sin destinatariosIncluir emails o sendCopyToUser
12006Correo inválidoFormato email válido en lista
12004Error maquetación PDF (tamaño de página)Ajustar plantilla PDF o contactar soporte
ArgumentoTipoReqDescripción
purchaseOrderIdstring
emailsobject
sendCopyToUserboolean
emailTemplateobject

Respuesta:

{
  "success": true
}

💸 Transaction Out

  • transaction-out__list-outgoing-payments — transaction-out__list-outgoing-payments
  • transaction-out__get-outgoing-payment — transaction-out__get-outgoing-payment
  • transaction-out__create-outgoing-payment — transaction-out__create-outgoing-payment
  • transaction-out__update-outgoing-payment — transaction-out__update-outgoing-payment
  • transaction-out__delete-outgoing-payment — transaction-out__delete-outgoing-payment
  • transaction-out__void-outgoing-payment — transaction-out__void-outgoing-payment

transaction-out__list-outgoing-payments

MCP

list-outgoing-paymentstransaction-out__list-outgoing-payments.

HTTP

GET /api/v1/payments (según gateway; el listado de solo salientes usa type=out).

Query (arguments)

Incluir type: "out" para restringir a pagos salientes. Paginación: start, limit (típico tope 30).
Filtros adicionales: order_field, order_direction, from, to (fechas), fields, client_id, account_id, status.

Respuesta

Lista paginada o arreglo según API; expandir con fields.

Errores frecuentes

CódigoSignificadoAcción
400Parámetros o rango de fechas inválidoRevisar from/to y filtros
401No autorizadoToken Bearer válido
ArgumentoTipoReqDescripción
typestringFiltrar pagos salientes. Valores: out
startnumber
limitnumber
order_fieldstring
order_directionstring
fromstringFecha inicio
tostringFecha fin
fieldsstring
client_idstring
account_idstring
statusstring

Respuesta:

{
  "data": []
}

transaction-out__get-outgoing-payment

MCP

get-outgoing-paymenttransaction-out__get-outgoing-payment.

HTTP

GET /api/v1/payments/{id}

Query

fields (lista separada por comas) para expandir numberTemplate, bills, pdf, etc.

Errores

CódigoSignificadoAcción
404Pago no encontradoVerificar id
400Parámetro fields u otros inválidosRevisar lista de fields
ArgumentoTipoReqDescripción
idstringId local del pago
fieldsstring

Respuesta:

{
  "id": "1",
  "type": "out"
}

transaction-out__create-outgoing-payment

MCP

create-outgoing-paymenttransaction-out__create-outgoing-payment.

HTTP

POST /api/v1/payments

Body obligatorio

  • type: "out"
  • date: YYYY-MM-DD
  • bankAccount: { id } o id escalar

Asociaciones (al menos una)

  • bills: [{ id, amount, retentions? }]
  • categories: líneas de gasto (ver line_models.categories en fuente)
  • documentLines: pagos a líneas de mayor (idJournal, documentLineId, amount)

Opcional

numberTemplate, currency, costCenter (objeto { id }, no idCostCenter en raíz),
client, paymentMethod, observations, metadata (string JSON), paymentType (Rep. Dominicana → mayúsculas en metadata).

Errores

CódigoSignificadoAcción
4002Cuenta bancaria ausente o inválidaEnviar bankAccount válido
4006Resolución no es tipo salida (transactionOut)Elegir numeración correcta
4012Mezcla de asociaciones incompatibleNo mezclar bills con invoices en mismo pago
4004Conflicto entre number y numberTemplateAlinear numeración manual vs plantilla
4250Aviso/retraso en respuesta de timbre SAT (async)Ver error_4250_stamp_failure en la guía

Timbre async

Otros códigos de timbre pueden ir en error anidado según país (ver guía pública).

Respuesta:

{
  "id": "1"
}

transaction-out__update-outgoing-payment

MCP

update-outgoing-paymenttransaction-out__update-outgoing-payment.

HTTP

PUT /api/v1/payments/{id}

Restricción

No cambiar el tipo fuera de out.

Errores

CódigoSignificadoAcción
4059No se puede cambiar el tipo de pagoMantener type: out
6071idCostCenter en raíz no permitidoUsar solo costCenter: { id }
ArgumentoTipoReqDescripción
idstring
datestring
bankAccountobject
billsarray
categoriesarray
numberTemplateobject
costCenterobject

Respuesta:

{
  "id": "1"
}

transaction-out__delete-outgoing-payment

MCP

delete-outgoing-paymenttransaction-out__delete-outgoing-payment.

HTTP

DELETE /api/v1/payments/{id} cuando las reglas lo permitan.

Errores

CódigoSignificadoAcción
403Borrado prohibidoUsar anulación (void) o liberar documentos bloqueantes
ArgumentoTipoReqDescripción
idstring

Respuesta:

{
  "success": true
}

transaction-out__void-outgoing-payment

MCP

void-outgoing-paymenttransaction-out__void-outgoing-payment.

HTTP

Endpoint de void del recurso de pagos (no confundir con delete).

Body opcional

voidCause, voidDate (nombres según contrato API / guía).

Errores

CódigoSignificadoAcción
400No anulable en el estado actualConsultar GET previo (voidable y mensaje)
ArgumentoTipoReqDescripción
idstring
voidCausestring
voidDatestring

Respuesta:

{
  "id": "1",
  "status": "void"
}

📈 Ingresos

Gestión de facturación, emisión de comprobantes, numeraciones y pagos recibidos.

💰 Invoices

  • invoices__getInvoices — invoices__getInvoices
  • invoices__getInvoiceById — invoices__getInvoiceById
  • invoices__getInvoiceByNumber — invoices__getInvoiceByNumber
  • invoices__createInvoice — invoices__createInvoice
  • invoices__updateInvoice — invoices__updateInvoice
  • invoices__deleteInvoice — invoices__deleteInvoice
  • invoices__getPaymentTypes — invoices__getPaymentTypes

invoices__getInvoices

Lista todas las facturas con filtros opcionales

ArgumentoTipoReqDescripción
limitintegerDefault: 30
offsetintegerDefault: 0
statusstringValores: draft | open | paid | void

Respuesta:

{
  "data": [
    {
      "id": 1,
      "number": "FAC-001",
      "status": "open"
    }
  ]
}

invoices__getInvoiceById

Obtiene una factura específica por su ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1,
  "number": "FAC-001"
}

invoices__getInvoiceByNumber

Obtiene una factura por su número (NCF o número completo)

ArgumentoTipoReqDescripción
numberstring

Respuesta:

{
  "id": 1
}

invoices__createInvoice

Crea una nueva factura

ArgumentoTipoReqDescripción
documentTypestring
clientIdinteger
itemsarray

Respuesta:

{
  "id": 1
}

invoices__updateInvoice

Actualiza una factura existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

invoices__deleteInvoice

Elimina una factura por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

invoices__getPaymentTypes

Obtiene tipos de pago disponibles (específico para República Dominicana)

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Efectivo"
    },
    {
      "id": 2,
      "name": "Tarjeta"
    }
  ]
}

💵 Income Payments

  • incomePayments__getIncomePayments — incomePayments__getIncomePayments
  • incomePayments__createIncomePayment — incomePayments__createIncomePayment
  • incomePayments__updateIncomePayment — incomePayments__updateIncomePayment
  • incomePayments__deleteIncomePayment — incomePayments__deleteIncomePayment

incomePayments__getIncomePayments

Obtiene lista de pagos asociados a ingresos

ArgumentoTipoReqDescripción
limitintegerDefault: 30
offsetintegerDefault: 0

Respuesta:

{
  "data": [
    {
      "id": 1,
      "amount": 100,
      "date": "2024-01-15"
    }
  ]
}

incomePayments__createIncomePayment

Crea un nuevo pago recibido

ArgumentoTipoReqDescripción
invoiceIdinteger
amountnumber
datestring

Respuesta:

{
  "id": 1
}

incomePayments__updateIncomePayment

Actualiza un pago existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

incomePayments__deleteIncomePayment

Elimina un pago por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

📄 Resolutions

  • resolutions__getResolutionss — resolutions__getResolutionss
  • resolutions__getResolutionById — resolutions__getResolutionById
  • resolutions__getDefaultResolutions — resolutions__getDefaultResolutions
  • resolutions__createResolutions — resolutions__createResolutions
  • resolutions__updateResolutions — resolutions__updateResolutions
  • resolutions__deleteResolutions — resolutions__deleteResolutions

resolutions__getResolutionss

Obtiene lista de resoluciones (plantillas de numeración)

ArgumentoTipoReqDescripción
limitintegerDefault: 30

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Factura Electrónica"
    }
  ]
}

resolutions__getResolutionById

Obtiene una resolución específica por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

resolutions__getDefaultResolutions

Obtiene las resoluciones por defecto para un tipo de documento

ArgumentoTipoReqDescripción
documentTypestring

Respuesta:

{
  "data": []
}

resolutions__createResolutions

Crea una nueva resolución

ArgumentoTipoReqDescripción
namestring
prefixstring
frominteger
tointeger

Respuesta:

{
  "id": 1
}

resolutions__updateResolutions

Actualiza una resolución existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

resolutions__deleteResolutions

Elimina una resolución por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

📦 Items

Gestión de inventario y productos

  • items__getItems — items__getItems
  • items__getItem — items__getItem
  • items__createItem — items__createItem
  • items__updateItem — items__updateItem
  • items__deleteItem — items__deleteItem
  • customFields__getCustomFields — customFields__getCustomFields
  • customFields__getCustomField — customFields__getCustomField
  • customFields__createCustomField — customFields__createCustomField
  • customFields__updateCustomField — customFields__updateCustomField
  • customFields__deleteCustomField — customFields__deleteCustomField
  • itemCategories__getItemCategories — itemCategories__getItemCategories
  • itemCategories__getItemCategory — itemCategories__getItemCategory
  • itemCategories__createItemCategory — itemCategories__createItemCategory
  • itemCategories__updateItemCategory — itemCategories__updateItemCategory
  • itemCategories__deleteItemCategory — itemCategories__deleteItemCategory
  • priceList__getPriceLists — priceList__getPriceLists
  • priceList__getPriceList — priceList__getPriceList
  • priceList__createPriceList — priceList__createPriceList
  • priceList__updatePriceList — priceList__updatePriceList
  • priceList__deletePriceList — priceList__deletePriceList
  • warehouses__getWarehouses — warehouses__getWarehouses
  • warehouses__getWarehouse — warehouses__getWarehouse
  • warehouses__createWarehouse — warehouses__createWarehouse
  • warehouses__updateWarehouse — warehouses__updateWarehouse
  • warehouses__deleteWarehouse — warehouses__deleteWarehouse
  • itemStock__get_item_stock — itemStock__get_item_stock
  • itemStock__get_item_stock_summary — itemStock__get_item_stock_summary
  • variantAttributes__getVariantAttributes — variantAttributes__getVariantAttributes
  • variantAttributes__getVariantAttribute — variantAttributes__getVariantAttribute
  • variantAttributes__createVariantAttribute — variantAttributes__createVariantAttribute
  • variantAttributes__updateVariantAttribute — variantAttributes__updateVariantAttribute
  • variantAttributes__deleteVariantAttribute — variantAttributes__deleteVariantAttribute
  • warehouseTransfers__getWarehouseTransfers — warehouseTransfers__getWarehouseTransfers
  • warehouseTransfers__getWarehouseTransfer — warehouseTransfers__getWarehouseTransfer
  • warehouseTransfers__createWarehouseTransfer — warehouseTransfers__createWarehouseTransfer
  • warehouseTransfers__updateWarehouseTransfer — warehouseTransfers__updateWarehouseTransfer
  • warehouseTransfers__deleteWarehouseTransfer — warehouseTransfers__deleteWarehouseTransfer

items__getItems

Obtiene la lista de ítems registrados en la aplicación con filtros opcionales. Usar el parámetro "fields" para incluir datos adicionales cuando el contexto de la conversación lo requiera (e.g. inventory para consultas de stock, images para catálogos, editable/deletable para tareas de gestión).

ArgumentoTipoReqDescripción
limitintegerCantidad máxima de ítems a retornar. Por defecto 30.
startintegerOffset para paginación (número de ítems a omitir).
metadatabooleanSi es true, la respuesta incluye { metadata: { total }, data: [...] } en lugar del array directo.
querystringTexto libre para buscar ítems por nombre o descripción.
typestringFiltrar ítems por tipo.. Valores: simple | kit | variantParent | variant | surtido
statusstringFiltrar ítems por estado.. Valores: active | inactive
namestringFiltrar ítems por nombre exacto.
referencestringFiltrar ítems por referencia o código SKU.
idItemCategorystringFiltrar ítems por ID de categoría de ítem.
idWarehousestringFiltrar ítems por ID de bodega.
order_fieldstringCampo por el cual ordenar los resultados.
order_directionstringDirección del ordenamiento.. Valores: ASC | DESC
fieldsstringCampos adicionales a retornar, separados por coma. Valores posibles: itemVariants, variantAttributes, subitems, editable, deletable, settingsOnShop, remissionedQuantity, negativeSale, source, simpleSale, inventory, images, attachments, productKey, tariffHeading, kitWarehouse, idGlobal.
modestringModo de respuesta: simple retorna un conjunto reducido de campos.. Valores: advanced | simple

Respuesta:

[
  {
    "id": "1",
    "name": "Camiseta azul",
    "description": "Algodón 100%",
    "price": [
      {
        "price": 25
      }
    ],
    "type": "product",
    "status": "active"
  },
  {
    "id": "2",
    "name": "Consultoría básica",
    "price": [
      {
        "price": 150
      }
    ],
    "type": "service",
    "status": "active"
  }
]

items__getItem

Obtiene un ítem específico por su ID. Preferir sobre getItems cuando el ID es conocido — es más rápido y devuelve datos más completos. Usar el parámetro fields para solicitar información adicional solo cuando el contexto lo requiera.

ArgumentoTipoReqDescripción
idstringID del ítem a consultar.
fieldsstringCampos adicionales a retornar, separados por coma. Valores posibles: itemVariants, variantAttributes, subitems, editable, deletable, inventory, images, attachments, productKey, tariffHeading, kitWarehouse.

Respuesta:

{
  "id": "10",
  "name": "Camiseta azul",
  "type": "product",
  "status": "active",
  "price": [
    {
      "price": 25
    }
  ],
  "description": "Algodón 100%"
}

items__createItem

Crea un nuevo ítem en la aplicación. El campo type determina qué campos son requeridos:

typeCampos adicionales requeridos
serviceunit (opcional)
productinventory (unit, unitCost, warehouses)
kitsubitems + kitWarehouse
variantParentvariantAttributes (mín 1) + itemVariants (opcional)

⚠️

Límite de variantes: Para type=variantParent, el producto cartesiano de las opciones de variantAttributes no puede superar 100 combinaciones. Si se proveen itemVariants explícitos, no pueden superar 100 entradas. El servidor rechazará el request si se supera este límite.

ArgumentoTipoReqDescripción
namestringNombre del ítem.
typestringTipo de ítem. Determina qué campos adicionales aplican.. Valores: service | product | kit | variantParent
pricearrayLista de precios. Se requiere al menos un precio.
descriptionstring
referencestring
statusstringValores: active | inactive
unitstring
itemCategoryobjectCategoría del ítem (clasificación comercial).
categoryobjectCategoría contable del ítem (cuenta contable).
taxarray
customFieldsarray
settingsOnShopobjectConfiguración de visibilidad en tienda online.
accountingobjectCuentas contables del ítem.
inventoryobjectInventario del ítem. Aplica a type=product y type=variantParent.
subitemsarrayRequerido para type=kit. Lista de ítems que componen el kit.
kitWarehouseobjectRequerido para type=kit. Bodega desde la cual se descuenta el kit.
variantAttributesarrayRequerido para type=variantParent. Define los atributos y sus opciones. El producto cartesiano de opciones no puede superar 100 combinaciones (ej: 2 atributos × 5 opciones = 10, válido; 5 × 5 × 5 = 125, rechazado).
itemVariantsarrayOpcional para type=variantParent. Lista explícita de variantes a crear (máx 100). Si no se provee, las variantes se generan automáticamente como producto cartesiano de variantAttributes.

Respuesta:

{
  "id": "10",
  "name": "Camiseta azul",
  "type": "product",
  "status": "active"
}

items__updateItem

Actualiza los datos de un ítem existente. Solo enviar los campos que cambiarán.

⚠️

Advertencia para type=variantParent:

  • Enviar variantAttributes reemplaza TODOS los atributos existentes del ítem padre.
  • Enviar itemVariants reemplaza TODAS las variantes existentes (operación destructiva).
  • Límite: El producto cartesiano de opciones en variantAttributes no puede superar 100 combinaciones. El servidor rechazará el request si se supera este límite.
ArgumentoTipoReqDescripción
idstringID del ítem a actualizar.
namestring
pricearray
descriptionstring
referencestring
statusstringValores: active | inactive
unitstring
itemCategoryobjectCategoría del ítem (clasificación comercial).
categoryobjectCategoría contable del ítem.
taxarray
customFieldsarray
settingsOnShopobjectConfiguración de visibilidad en tienda online.
accountingobjectCuentas contables del ítem.
inventoryobject
subitemsarraySolo para type=kit. Reemplaza la lista de subitems del kit.
kitWarehouseobjectSolo para type=kit. Bodega desde la cual se descuenta el kit.
variantAttributesarraySolo para type=variantParent. REEMPLAZA todos los atributos existentes. El producto cartesiano de opciones no puede superar 100 combinaciones.
itemVariantsarraySolo para type=variantParent. REEMPLAZA todas las variantes existentes (operación destructiva). Obtener la lista actual con getItem antes de modificar.

Respuesta:

{
  "id": "10",
  "name": "Camiseta azul actualizada",
  "type": "product",
  "status": "active"
}

items__deleteItem

Elimina un ítem por su ID de la aplicación.

ArgumentoTipoReqDescripción
idstringID del ítem a eliminar.

Respuesta:

{
  "id": "10",
  "name": "Camiseta azul",
  "status": "inactive"
}

customFields__getCustomFields

Obtiene los campos adicionales registrados en la aplicación con filtros opcionales.

ArgumentoTipoReqDescripción
startinteger
limitinteger
metadataboolean
namestring
statusstringValores: active | inactive
order_fieldstring
order_directionstringValores: ASC | DESC
fieldsstring

Respuesta:

[
  {
    "id": "1",
    "name": "Código de barras",
    "resourceType": "item",
    "status": "active",
    "key": "barcode",
    "type": "text",
    "settings": {
      "isRequired": false,
      "showInItemVariants": true,
      "printOnInvoices": null
    }
  }
]

customFields__getCustomField

Obtiene un campo adicional específico por su ID. Preferir sobre getCustomFields cuando el ID es conocido.

ArgumentoTipoReqDescripción
idstringID del campo adicional a consultar.
fieldsstringCampos adicionales a retornar, separados por coma. Valores posibles: editable, deletable.

Respuesta:

{
  "id": "1",
  "name": "Código de barras",
  "type": "text",
  "resourceType": "item",
  "status": "active",
  "key": "barcode",
  "settings": {
    "isRequired": false,
    "printOnInvoices": null
  },
  "editable": true,
  "deletable": true
}

customFields__createCustomField

Crea un nuevo campo adicional para ítems.

ArgumentoTipoReqDescripción
customFieldobject

Respuesta:

{
  "id": "3",
  "name": "Fecha de vencimiento",
  "resourceType": "item",
  "status": "active",
  "type": "date"
}

customFields__updateCustomField

Actualiza los datos de un campo adicional existente.

ArgumentoTipoReqDescripción
idstring
customFieldobject

Respuesta:

{
  "id": "3",
  "name": "Fecha de vencimiento actualizada",
  "status": "active",
  "type": "date"
}

customFields__deleteCustomField

Elimina un campo adicional por su ID.

ArgumentoTipoReqDescripción
idstring

Respuesta:

{
  "id": "3",
  "name": "Fecha de vencimiento",
  "status": "inactive"
}

itemCategories__getItemCategories

Obtiene las categorías de ítems registradas en la aplicación con filtros opcionales.

ArgumentoTipoReqDescripción
startinteger
limitinteger
metadataboolean
namestring
order_fieldstring
order_directionstringValores: ASC | DESC
fieldsstring

Respuesta:

[
  {
    "id": "1",
    "name": "Telas",
    "status": "active"
  },
  {
    "id": "2",
    "name": "Ropa para hombre",
    "status": "inactive"
  }
]

itemCategories__getItemCategory

Obtiene una categoría de ítems específica por su ID. Preferir sobre getItemCategories cuando el ID es conocido.

ArgumentoTipoReqDescripción
idstringID de la categoría de ítems a consultar.
fieldsstringCampos adicionales a retornar, separados por coma. Valores posibles: editable, deletable, status.

Respuesta:

{
  "id": "1",
  "name": "Telas",
  "description": "Telas y materiales textiles",
  "status": "active",
  "editable": true,
  "deletable": false
}

itemCategories__createItemCategory

Crea una nueva categoría de ítems en la aplicación.

ArgumentoTipoReqDescripción
itemCategoryobject

Respuesta:

{
  "id": "3",
  "name": "Ropa de mujer",
  "status": "active"
}

itemCategories__updateItemCategory

Actualiza los datos de una categoría de ítems existente.

ArgumentoTipoReqDescripción
idstring
itemCategoryobject

Respuesta:

{
  "id": "3",
  "name": "Ropa de mujer actualizada",
  "status": "active"
}

itemCategories__deleteItemCategory

Elimina una categoría de ítems por su ID.

ArgumentoTipoReqDescripción
idstring

Respuesta:

{
  "id": "3",
  "name": "Ropa de mujer",
  "status": "inactive"
}

priceList__getPriceLists

Obtiene las listas de precios registradas en la aplicación.

ArgumentoTipoReqDescripción
metadataboolean
fieldsstring

Respuesta:

[
  {
    "id": "1",
    "name": "General",
    "status": "active",
    "type": "amount"
  },
  {
    "id": "2",
    "name": "Precios mayorista",
    "status": "active",
    "type": "percentage",
    "percentage": "10.00"
  }
]

priceList__getPriceList

Obtiene una lista de precios específica por su ID. Preferir sobre getPriceLists cuando el ID es conocido.

ArgumentoTipoReqDescripción
idstringID de la lista de precios a consultar.
fieldsstringCampos adicionales a retornar, separados por coma. Valores posibles: editable, deletable.

Respuesta:

{
  "id": "53",
  "name": "Lista mayorista",
  "type": "percentage",
  "percentage": 10,
  "status": "active",
  "editable": true,
  "deletable": true,
  "main": false
}

priceList__createPriceList

Crea una nueva lista de precios.

ArgumentoTipoReqDescripción
priceListobject

Respuesta:

{
  "id": "53",
  "name": "Lista mayorista",
  "status": "active",
  "type": "percentage",
  "percentage": 10
}

priceList__updatePriceList

Actualiza los datos de una lista de precios existente.

ArgumentoTipoReqDescripción
idstring
priceListobject

Respuesta:

{
  "id": "53",
  "name": "Lista mayorista actualizada",
  "status": "active",
  "type": "percentage",
  "percentage": 15
}

priceList__deletePriceList

Elimina una lista de precios por su ID.

ArgumentoTipoReqDescripción
idstring

Respuesta:

{
  "id": "53",
  "name": "Lista mayorista",
  "status": "inactive"
}

warehouses__getWarehouses

Obtiene la lista de bodegas registradas en la aplicación con filtros opcionales.

ArgumentoTipoReqDescripción
startinteger
limitinteger
metadataboolean
order_fieldstringValores: name | id
order_directionstringValores: ASC | DESC
fieldsstring
namestring
statusstringValores: active | inactive

Respuesta:

[
  {
    "id": "1",
    "name": "Bodega Norte",
    "isDefault": true,
    "address": "Calle principal",
    "status": "active"
  },
  {
    "id": "3",
    "name": "Bodega Sur",
    "isDefault": false,
    "status": "active"
  }
]

warehouses__getWarehouse

Obtiene una bodega específica por su ID. Preferir sobre getWarehouses cuando el ID es conocido.

ArgumentoTipoReqDescripción
idstringID de la bodega a consultar.
fieldsstringCampos adicionales a retornar, separados por coma. Valores posibles: editable, deletable.

Respuesta:

{
  "id": "1",
  "name": "Principal",
  "isDefault": true,
  "address": "Calle principal",
  "status": "active",
  "editable": true,
  "deletable": false
}

warehouses__createWarehouse

Crea una nueva bodega en la aplicación.

ArgumentoTipoReqDescripción
warehouseobject

Respuesta:

{
  "id": "22",
  "name": "Bodega de alimentos",
  "isDefault": false,
  "status": "active"
}

warehouses__updateWarehouse

Actualiza los datos de una bodega existente.

ArgumentoTipoReqDescripción
idstring
warehouseobject

Respuesta:

{
  "id": "22",
  "name": "Bodega de alimentos actualizada",
  "status": "active"
}

warehouses__deleteWarehouse

Elimina una bodega existente por su ID.

ArgumentoTipoReqDescripción
idstring

Respuesta:

{
  "code": 200,
  "message": "Se eliminó la bodega correctamente"
}

itemStock__get_item_stock

Obtiene el stock disponible de un ítem específico desglosado por bodega. Usar el campo idGlobal del ítem como valor de itemId. Soporta consulta histórica enviando documentDate para obtener el stock a una fecha específica. SIEMPRE mostrar el nombre de la bodega al presentar resultados — NUNCA mostrar el ID de la bodega directamente al usuario.

ArgumentoTipoReqDescripción
itemIdstringID global del ítem (idGlobal). Identificador único del ítem a consultar.
documentDatestringFecha en formato YYYY-MM-DD. Opcional — permite consultar el stock histórico a una fecha específica.

Respuesta:

{
  "company": {
    "id": "518587"
  },
  "item": {
    "id": "1046720"
  },
  "quantity": 5,
  "warehouses": [
    {
      "id": "019c24b0-744e-723e-8fb1-1b76a4f1704e",
      "quantity": -7
    },
    {
      "id": "019c441e-48ab-7396-8319-362c4341fbbf",
      "quantity": 12
    }
  ]
}

itemStock__get_item_stock_summary

Obtiene un resumen del stock de múltiples ítems filtrado por condición de stock. Requiere stockCondition para determinar qué ítems incluir en el resultado. Condiciones disponibles: NEGATIVE_STOCK (stock negativo), ZERO_STOCK (stock en cero), LOW_STOCK (stock por debajo de un umbral — usar con stockThreshold), CURRENT_STOCK (ítems con stock disponible). SIEMPRE usar otras herramientas para resolver nombres de ítems a partir de sus IDs. SIEMPRE mostrar el nombre de la bodega — NUNCA mostrar el ID de la bodega al usuario.

ArgumentoTipoReqDescripción
stockConditionstringCondición para filtrar el resumen de stock. NEGATIVE_STOCK: ítems con stock negativo. ZERO_STOCK: ítems con stock en cero. LOW_STOCK: ítems con stock por debajo del umbral (usar con stockThreshold). CURRENT_STOCK: ítems con stock disponible actual.
. Valores: NEGATIVE_STOCK | ZERO_STOCK | LOW_STOCK | CURRENT_STOCK
stockThresholdnumberUmbral de stock exclusivo para la condición LOW_STOCK. Solo usar cuando stockCondition es LOW_STOCK y el usuario menciona un límite, e.g. «ítems con stock menor a 10».
limitintegerCantidad máxima de registros a retornar. Por defecto 30, máximo 100.
startintegerÍndice del primer registro a retornar (base cero). Para paginación.

Respuesta:

[
  {
    "item": {
      "id": "1046720"
    },
    "quantity": 0
  },
  {
    "item": {
      "id": "1046721"
    },
    "quantity": 0
  }
]

variantAttributes__getVariantAttributes

Obtiene la lista de atributos de variante registrados en la aplicación con filtros opcionales. Los atributos de variante son dimensiones de producto (Color, Talla, Material) y sus opciones los valores posibles (Rojo, Azul, S, M, L). Usar para obtener IDs reales antes de crear o actualizar ítems de tipo variantParent.

ArgumentoTipoReqDescripción
startintegerDesde cuál variante se quiere consultar. Por ejemplo, para consultar desde el registro 20, se envía start=20.
limitintegerCantidad de registros a partir del inicio que se desea retornar. Por defecto retorna 30 registros. Si este valor es mayor que 30, la aplicación retorna error.
metadatabooleanSi es true, la respuesta incluye { metadata: { total }, data: [...] } en lugar del array directo.
namestringFiltrar variantes por nombre.
optionsstringFiltrar variantes por opciones.
fieldsstringCampos adicionales para retornar, separados por coma. Valores posibles: editable, deletable.
order_fieldstringCampo por el cual ordenar. Valores posibles: name.
order_directionstringASC o DESC.. Valores: ASC | DESC

Respuesta:

[
  {
    "id": "1",
    "name": "Color",
    "status": "active",
    "options": [
      {
        "id": "1",
        "value": "Rojo"
      },
      {
        "id": "2",
        "value": "Verde"
      }
    ]
  },
  {
    "id": "2",
    "name": "Talla",
    "status": "active",
    "options": [
      {
        "id": "3",
        "value": "S"
      },
      {
        "id": "4",
        "value": "M"
      }
    ]
  }
]

variantAttributes__getVariantAttribute

Obtiene un atributo de variante específico por su ID, incluyendo su lista completa de opciones.

ArgumentoTipoReqDescripción
idstringIdentificador de la variante a consultar.

Respuesta:

{
  "id": "1",
  "name": "Color",
  "status": "active",
  "options": [
    {
      "id": "1",
      "value": "Rojo"
    },
    {
      "id": "2",
      "value": "Verde"
    }
  ],
  "editable": true,
  "deletable": false
}

variantAttributes__createVariantAttribute

Crea un nuevo atributo de variante con su nombre y lista de opciones. Los atributos de variante representan dimensiones de producto (Color, Talla, Material) y sus opciones los valores posibles (Rojo, Azul, S, M, L). Se requieren name y options.

ArgumentoTipoReqDescripción
variantAttributeobject

Respuesta:

{
  "id": "2",
  "name": "COLOR",
  "status": "active",
  "options": [
    {
      "id": "3",
      "value": "BLANCO"
    },
    {
      "id": "4",
      "value": "ROJO"
    },
    {
      "id": "5",
      "value": "VERDE"
    }
  ]
}

variantAttributes__updateVariantAttribute

Actualiza un atributo de variante existente — nombre, estado o lista de opciones. IMPORTANTE: el campo "options" es un reemplazo completo. Enviar todas las opciones que se quieren conservar incluyendo las existentes con su ID. Cualquier opción omitida será eliminada permanentemente.

ArgumentoTipoReqDescripción
idstringID del atributo de variante a actualizar.
variantAttributeobject

Respuesta:

{
  "id": "3",
  "name": "Color actualizado",
  "status": "active",
  "options": [
    {
      "id": "3",
      "value": "BLANCO"
    },
    {
      "id": "4",
      "value": "ROJO"
    },
    {
      "id": "10",
      "value": "AMARILLO"
    }
  ]
}

variantAttributes__deleteVariantAttribute

Elimina permanente e irreversiblemente un atributo de variante por su ID. Solo es posible eliminar atributos que no estén en uso por ítems de tipo variantParent. Verificar el campo "deletable" con getVariantAttributes (fields: "deletable") antes de llamar a esta herramienta.

ArgumentoTipoReqDescripción
idstringIdentificador de la variante que se desea eliminar.

Respuesta:

{
  "code": 200,
  "message": "La variante ha sido eliminada"
}

warehouseTransfers__getWarehouseTransfers

Obtiene la lista de transferencias de bodegas registradas en la aplicación con filtros opcionales. Permite consultar movimientos de inventario entre bodegas filtrados por fecha, ítem o paginación.

ArgumentoTipoReqDescripción
startintegerOffset para paginación (número de transferencias a omitir).
limitintegerCantidad máxima de transferencias a retornar. Por defecto 30.
metadatabooleanSi es true, la respuesta incluye { metadata: { total }, data: [...] } en lugar del array directo.
item_idintegerFiltrar transferencias que involucren a un ítem específico.
datestringFiltrar transferencias por fecha exacta.
fieldsstringCampos adicionales a retornar. Valores posibles: editable, deletable.

Respuesta:

[
  {
    "id": "3",
    "date": "2024-01-15",
    "observations": "",
    "origin": {
      "id": "1",
      "name": "Principal",
      "isDefault": true,
      "status": "active"
    },
    "destination": {
      "id": "2",
      "name": "Bodega 1",
      "isDefault": false,
      "status": "active"
    },
    "items": [
      {
        "id": "4",
        "name": "Item inventariable",
        "quantity": "10.00"
      }
    ]
  }
]

warehouseTransfers__getWarehouseTransfer

Obtiene una transferencia de bodegas específica por su ID, incluyendo el detalle completo de bodegas origen, destino y los ítems transferidos con sus cantidades.

ArgumentoTipoReqDescripción
idstringID de la transferencia de bodegas a consultar.

Respuesta:

{
  "id": "3",
  "date": "2024-01-15",
  "observations": "Reposición de stock mensual",
  "origin": {
    "id": "1",
    "name": "Principal",
    "isDefault": true,
    "address": "",
    "status": "active",
    "costCenter": {
      "id": "4",
      "name": "Centro 4"
    }
  },
  "destination": {
    "id": "2",
    "name": "Bodega 1",
    "isDefault": false,
    "address": "",
    "status": "active",
    "costCenter": {
      "id": "2",
      "name": "Centro 2"
    }
  },
  "items": [
    {
      "id": "4",
      "name": "Item inventariable",
      "quantity": "10.00"
    }
  ]
}

warehouseTransfers__createWarehouseTransfer

Crea una nueva transferencia de bodegas para mover inventario entre dos bodegas. Verificar el stock disponible del ítem en la bodega origen con items__getItem (fields: "inventory") antes de crear la transferencia para evitar stock negativo.

ArgumentoTipoReqDescripción
warehouseTransferobject

Respuesta:

{
  "id": "4",
  "date": "2024-01-15",
  "observations": "Reposición de stock mensual",
  "origin": {
    "id": "1",
    "name": "Principal"
  },
  "destination": {
    "id": "2",
    "name": "Bodega 1"
  },
  "items": [
    {
      "id": "4",
      "name": "Item inventariable",
      "quantity": "10.00"
    }
  ]
}

warehouseTransfers__updateWarehouseTransfer

Actualiza una transferencia de bodegas existente. IMPORTANTE: la API requiere enviar siempre los campos "date", "origin", "destination" e "items" completos, incluso al cambiar un solo campo. Obtener primero la transferencia con getWarehouseTransfer para construir el payload completo.

ArgumentoTipoReqDescripción
idstringID de la transferencia a actualizar.
warehouseTransferobject

Respuesta:

{
  "id": "4",
  "date": "2024-01-20",
  "observations": "Reposición actualizada",
  "origin": {
    "id": "1",
    "name": "Principal"
  },
  "destination": {
    "id": "2",
    "name": "Bodega 1"
  },
  "items": [
    {
      "id": "4",
      "name": "Item inventariable",
      "quantity": "15.00"
    }
  ]
}

warehouseTransfers__deleteWarehouseTransfer

Elimina permanente e irreversiblemente una transferencia de bodegas por su ID. Verificar el campo "deletable" con getWarehouseTransfers (fields: "deletable") antes de llamar a esta herramienta.

ArgumentoTipoReqDescripción
idstringID de la transferencia de bodegas a eliminar.

Respuesta:

{
  "code": 200,
  "message": "la transferencia entre bodegas fue eliminada correctamente."
}

⚙️ Config

Catálogos de configuración del sistema (unidades de medida, claves de producto)

  • config__getUnits — config__getUnits
  • config__getProductKeys — config__getProductKeys

config__getUnits

Obtiene las unidades de medida disponibles en la aplicación para asignar a ítems.

Respuesta:

[
  {
    "id": 2,
    "code": "94",
    "key": "unit",
    "value": "Unidad",
    "unitType": "Unidad",
    "electronicInvoicingVersion": "2.1",
    "deprecated": false
  },
  {
    "id": 3,
    "code": "EA",
    "key": "service",
    "value": "Servicio",
    "unitType": "Unidad",
    "electronicInvoicingVersion": "2.1",
    "deprecated": false
  },
  {
    "id": 4,
    "code": "PIECE",
    "key": "piece",
    "value": "Pieza",
    "unitType": "Unidad",
    "electronicInvoicingVersion": "2.1",
    "deprecated": false
  }
]

config__getProductKeys

Obtiene las claves (referencias) de producto disponibles en la aplicación para clasificar ítems.

ArgumentoTipoReqDescripción
namestringFiltrar claves de producto por nombre.

Respuesta:

[
  {
    "id": 1,
    "key": "10101501",
    "name": "Gatos"
  },
  {
    "id": 2,
    "key": "10101502",
    "name": "Perros"
  },
  {
    "id": 3,
    "key": "10101504",
    "name": "Visón"
  }
]

👥 Contacts

Gestión de contactos y clientes

  • contacts__getContacts — contacts__getContacts
  • contacts__getContactByName — contacts__getContactByName
  • contacts__createContact — contacts__createContact
  • contacts__updateContact — contacts__updateContact
  • contacts__deleteContact — contacts__deleteContact

contacts__getContacts

Lista los contactos (clientes y/o proveedores) de la cuenta con filtros y paginación. Equivale a GET /contacts de la API de Alegra. El parámetro mode=advanced retorna objetos completos; mode=simple retorna un subconjunto reducido. Para búsquedas por texto libre usar query; para encontrar exactamente por documento, identification.

ArgumentoTipoReqDescripción
limitintegerCantidad máxima de contactos a retornar. El servidor MCP fuerza un tope de 30.. Default: 30. Máx: 30
startintegerOffset para paginación (número de contactos a omitir desde el inicio).. Default: 0
order_directionstringDirección del ordenamiento.. Valores: ASC | DESC
order_fieldstringCampo por el cual ordenar (p. ej. name, id, identification).
querystringTexto libre. Busca coincidencias en nombre, identificación, email, etc.
identificationstringFiltra por número de identificación exacto (NIT, cédula, RFC, según país).
namestringFiltra por nombre del contacto.
typestringFiltra por tipo de contacto. Si se omite, retorna ambos.. Valores: client | provider
modestringModo de respuesta: simple retorna un subconjunto de campos; advanced retorna el contacto completo.. Valores: advanced | simple

Respuesta:

[
  {
    "id": "1",
    "name": "Acme S.A.S",
    "identification": "900123456",
    "email": "[email protected]",
    "type": [
      "client"
    ],
    "status": "active",
    "address": {
      "city": "Bogotá",
      "address": "Calle 100 #20-30"
    }
  },
  {
    "id": "2",
    "name": "Proveedor XYZ",
    "identification": "800987654",
    "type": [
      "provider"
    ],
    "status": "active"
  }
]

contacts__getContactByName

Busca un contacto por nombre y retorna el primer resultado encontrado. Atajo equivalente a getContacts con query=<name> tomando data[0]. Si no hay coincidencias, la respuesta puede ser undefined. Para varias coincidencias usar contacts__getContacts.

ArgumentoTipoReqDescripción
namestringNombre (o fragmento) del contacto a buscar.

Respuesta:

{
  "id": "1",
  "name": "Acme S.A.S",
  "identification": "900123456",
  "email": "[email protected]",
  "type": [
    "client"
  ],
  "status": "active"
}

contacts__createContact

Crea un contacto (cliente, proveedor, o ambos). Equivale a POST /contacts. Únicamente name es obligatorio para Alegra; los demás campos son opcionales y dependen del país y del flujo del usuario (facturación electrónica, contabilidad, retenciones, etc.). Para facturar en países con DIAN/SUNAT/SAT, normalmente también se requiere identification y type.

ArgumentoTipoReqDescripción
contactobject

Respuesta:

{
  "id": "10",
  "name": "Acme S.A.S",
  "identification": "900123456",
  "email": "[email protected]",
  "type": [
    "client"
  ],
  "status": "active",
  "address": {
    "city": "Bogotá",
    "address": "Calle 100 #20-30"
  }
}

contacts__updateContact

Actualiza un contacto existente. Equivale a PUT /contacts/{id} con semántica de PATCH: solo se envían los campos a modificar; los omitidos conservan su valor. El parámetro paramsToUpdate también se acepta como string JSON serializado (algunos clientes MCP serializan objetos anidados); el servidor lo parsea internamente.

ArgumentoTipoReqDescripción
idstringID del contacto a actualizar.
paramsToUpdateobjectSubconjunto de campos a actualizar. Mismas propiedades que contacts__createContact.contact, todas opcionales.

Respuesta:

{
  "id": "10",
  "name": "Acme Colombia S.A.S",
  "identification": "900123456",
  "email": "[email protected]",
  "type": [
    "client",
    "provider"
  ],
  "status": "inactive"
}

contacts__deleteContact

Elimina un contacto por su ID. Equivale a DELETE /contacts/{id}. ⚠️ Operación destructiva: la API de Alegra puede rechazar el borrado si el contacto tiene documentos asociados (facturas, recibos, notas, etc.).

ArgumentoTipoReqDescripción
contactobject

Respuesta:

{
  "id": "10",
  "name": "Acme S.A.S",
  "status": "inactive"
}

💰 Invoices

Gestión de facturación

  • invoices__getInvoices — invoices__getInvoices
  • invoices__getInvoiceById — invoices__getInvoiceById
  • invoices__getInvoiceByNumber — invoices__getInvoiceByNumber
  • invoices__createInvoice — invoices__createInvoice
  • invoices__updateInvoice — invoices__updateInvoice
  • invoices__deleteInvoice — invoices__deleteInvoice
  • invoices__getPaymentTypes — invoices__getPaymentTypes

invoices__getInvoices

Lista todas las facturas con filtros opcionales

ArgumentoTipoReqDescripción
limitintegerDefault: 30
offsetintegerDefault: 0
statusstringValores: draft | open | paid | void

Respuesta:

{
  "data": [
    {
      "id": 1,
      "number": "FAC-001",
      "status": "open"
    }
  ]
}

invoices__getInvoiceById

Obtiene una factura específica por su ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1,
  "number": "FAC-001"
}

invoices__getInvoiceByNumber

Obtiene una factura por su número (NCF o número completo)

ArgumentoTipoReqDescripción
numberstring

Respuesta:

{
  "id": 1
}

invoices__createInvoice

Crea una nueva factura

ArgumentoTipoReqDescripción
documentTypestring
clientIdinteger
itemsarray

Respuesta:

{
  "id": 1
}

invoices__updateInvoice

Actualiza una factura existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

invoices__deleteInvoice

Elimina una factura por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

invoices__getPaymentTypes

Obtiene tipos de pago disponibles (específico para República Dominicana)

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Efectivo"
    },
    {
      "id": 2,
      "name": "Tarjeta"
    }
  ]
}

🏦 Banks

Gestión de cuentas bancarias y conciliaciones

  • banks__getBanks — banks__getBanks
  • banks__getBanksById — banks__getBanksById
  • banks__getBanksByName — banks__getBanksByName
  • banks__createBankAccount — banks__createBankAccount
  • banks__updateBankAccount — banks__updateBankAccount
  • banks__deleteBankAccount — banks__deleteBankAccount
  • banks__getReconciliations — banks__getReconciliations
  • banks__getReconciliationById — banks__getReconciliationById
  • banks__createReconciliation — banks__createReconciliation
  • banks__deleteReconciliation — banks__deleteReconciliation

banks__getBanks

Lista todas las cuentas bancarias con filtros opcionales

ArgumentoTipoReqDescripción
limitintegerDefault: 30
offsetintegerDefault: 0

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Banco Principal",
      "accountNumber": "123456789"
    }
  ]
}

banks__getBanksById

Obtiene una cuenta bancaria específica por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1,
  "name": "Banco Principal"
}

banks__getBanksByName

Lista cuentas bancarias filtradas por nombre

ArgumentoTipoReqDescripción
namestring

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Banco Principal"
    }
  ]
}

banks__createBankAccount

Crea una nueva cuenta bancaria

ArgumentoTipoReqDescripción
namestring
accountNumberstring
bankIdinteger

Respuesta:

{
  "id": 1
}

banks__updateBankAccount

Actualiza una cuenta bancaria existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

banks__deleteBankAccount

Elimina una cuenta bancaria por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

banks__getReconciliations

Lista todas las conciliaciones con filtros

ArgumentoTipoReqDescripción
bankAccountIdinteger
limitinteger

Respuesta:

{
  "data": [
    {
      "id": 1,
      "bankAccountId": 1
    }
  ]
}

banks__getReconciliationById

Obtiene una conciliación específica por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

banks__createReconciliation

Crea una nueva conciliación bancaria

ArgumentoTipoReqDescripción
bankAccountIdinteger
datestring

Respuesta:

{
  "id": 1
}

banks__deleteReconciliation

Elimina una conciliación por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

💵 Income Payments

Gestión de pagos recibidos

  • incomePayments__getIncomePayments — incomePayments__getIncomePayments
  • incomePayments__createIncomePayment — incomePayments__createIncomePayment
  • incomePayments__updateIncomePayment — incomePayments__updateIncomePayment
  • incomePayments__deleteIncomePayment — incomePayments__deleteIncomePayment

incomePayments__getIncomePayments

Obtiene lista de pagos asociados a ingresos

ArgumentoTipoReqDescripción
limitintegerDefault: 30
offsetintegerDefault: 0

Respuesta:

{
  "data": [
    {
      "id": 1,
      "amount": 100,
      "date": "2024-01-15"
    }
  ]
}

incomePayments__createIncomePayment

Crea un nuevo pago recibido

ArgumentoTipoReqDescripción
invoiceIdinteger
amountnumber
datestring

Respuesta:

{
  "id": 1
}

incomePayments__updateIncomePayment

Actualiza un pago existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

incomePayments__deleteIncomePayment

Elimina un pago por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

📄 Resolutions

Gestión de numeraciones y resoluciones

  • resolutions__getResolutionss — resolutions__getResolutionss
  • resolutions__getResolutionById — resolutions__getResolutionById
  • resolutions__getDefaultResolutions — resolutions__getDefaultResolutions
  • resolutions__createResolutions — resolutions__createResolutions
  • resolutions__updateResolutions — resolutions__updateResolutions
  • resolutions__deleteResolutions — resolutions__deleteResolutions

resolutions__getResolutionss

Obtiene lista de resoluciones (plantillas de numeración)

ArgumentoTipoReqDescripción
limitintegerDefault: 30

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Factura Electrónica"
    }
  ]
}

resolutions__getResolutionById

Obtiene una resolución específica por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

resolutions__getDefaultResolutions

Obtiene las resoluciones por defecto para un tipo de documento

ArgumentoTipoReqDescripción
documentTypestring

Respuesta:

{
  "data": []
}

resolutions__createResolutions

Crea una nueva resolución

ArgumentoTipoReqDescripción
namestring
prefixstring
frominteger
tointeger

Respuesta:

{
  "id": 1
}

resolutions__updateResolutions

Actualiza una resolución existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

resolutions__deleteResolutions

Elimina una resolución por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

💱 Currencies

Gestión de monedas y divisas

  • currencies__getCurrencies — currencies__getCurrencies
  • currencies__getDefaultCurrency — currencies__getDefaultCurrency
  • currencies__createCurrency — currencies__createCurrency
  • currencies__updateCurrency — currencies__updateCurrency
  • currencies__deleteCurrency — currencies__deleteCurrency

currencies__getCurrencies

Lista las monedas configuradas en la empresa

Respuesta:

{
  "data": [
    {
      "id": 1,
      "code": "USD",
      "name": "Dólar estadounidense"
    }
  ]
}

currencies__getDefaultCurrency

Obtiene la moneda principal de la empresa

Respuesta:

{
  "id": 1,
  "code": "USD"
}

currencies__createCurrency

Crea una nueva moneda

ArgumentoTipoReqDescripción
codestring
namestring
exchangeRatenumber

Respuesta:

{
  "id": 1
}

currencies__updateCurrency

Actualiza una moneda por código

ArgumentoTipoReqDescripción
codestring
exchangeRatenumber

Respuesta:

{
  "id": 1
}

currencies__deleteCurrency

Elimina una moneda por código

ArgumentoTipoReqDescripción
codestring

Respuesta:

{
  "success": true
}

🏪 Sellers

Gestión de vendedores

  • sellers__getSellers — sellers__getSellers
  • sellers__createSeller — sellers__createSeller
  • sellers__updateSeller — sellers__updateSeller
  • sellers__deleteSeller — sellers__deleteSeller

sellers__getSellers

Obtiene lista de vendedores

ArgumentoTipoReqDescripción
limitintegerDefault: 30

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Juan Pérez"
    }
  ]
}

sellers__createSeller

Crea un nuevo vendedor

ArgumentoTipoReqDescripción
namestring
identificationstring
emailstring

Respuesta:

{
  "id": 1
}

sellers__updateSeller

Actualiza un vendedor existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

sellers__deleteSeller

Elimina un vendedor por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

🧾 Taxes

Gestión de impuestos

  • taxes__getTaxes — taxes__getTaxes
  • taxes__createTax — taxes__createTax
  • taxes__updateTax — taxes__updateTax
  • taxes__deleteTax — taxes__deleteTax

taxes__getTaxes

Obtiene todos los impuestos configurados

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "IVA 16%",
      "percentage": 16
    }
  ]
}

taxes__createTax

Crea un nuevo impuesto

ArgumentoTipoReqDescripción
namestring
percentagenumber

Respuesta:

{
  "id": 1
}

taxes__updateTax

Actualiza un impuesto existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

taxes__deleteTax

Elimina un impuesto por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

🛡️ Retentions

Gestión de retenciones fiscales

  • retentions__getRetentions — retentions__getRetentions
  • retentions__createRetention — retentions__createRetention
  • retentions__updateRetention — retentions__updateRetention
  • retentions__deleteRetention — retentions__deleteRetention

retentions__getRetentions

Obtiene lista de retenciones fiscales

ArgumentoTipoReqDescripción
limitintegerDefault: 30

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Retención en la fuente"
    }
  ]
}

retentions__createRetention

Crea una nueva retención fiscal

ArgumentoTipoReqDescripción
namestring
typestring
percentagenumber

Respuesta:

{
  "id": 1
}

retentions__updateRetention

Actualiza una retención existente

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1
}

retentions__deleteRetention

Elimina una retención por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

🔧 Reports

Gestión de reportes de ventas

  • reports__getGeneralSalesDocuments — reports__getGeneralSalesDocuments
  • reports__getGeneralSalesTotals — reports__getGeneralSalesTotals
  • reports__getSalesBySeller — reports__getSalesBySeller
  • reports__getSalesBySellerTotals — reports__getSalesBySellerTotals
  • reports__getSalesByClient — reports__getSalesByClient
  • reports__getSalesByClientTotals — reports__getSalesByClientTotals
  • reports__getClientsWithItems — reports__getClientsWithItems

reports__getGeneralSalesDocuments

Obtiene una lista de documentos de venta individuales (facturas, notas crédito, notas débito) para un rango de fechas

ArgumentoTipoReqDescripción
fromstringFecha inicio en formato YYYY-MM-DD
tostringFecha fin en formato YYYY-MM-DD
startstringOffset de paginación. Default: 0
limitstringCantidad de registros devueltos por llamada (tamaño de página). Por defecto 10.. Default: 10
optionalParamsobjectFiltros extra sobre los documentos. Envía un objeto (no un texto con JSON escapado). Todo es opcional; puedes combinar varios.
• documentName — texto del nombre o descripción del documento
• date — un solo día en formato YYYY-MM-DD (el rango principal sigue siendo from / to)
• documentStatus — estado: open, closed o applied
• documentNumber — número del documento a buscar
• documentTypes — tipos separados por coma, por ejemplo invoice, creditNote o incomeDebitNote

Respuesta:

{
  "data": [
    {
      "id": 1,
      "documentNumber": "FV-001",
      "documentType": "invoice",
      "total": 1500,
      "date": "2024-01-15",
      "status": "closed"
    }
  ]
}

reports__getGeneralSalesTotals

Obtiene totales de ventas agrupados por periodo (día, mes o año). Retorna totales como beforeTaxes, tax, total, discount, creditNote

ArgumentoTipoReqDescripción
fromstringFecha inicio en formato YYYY-MM-DD
tostringFecha fin en formato YYYY-MM-DD
groupBystringAgrupación temporal. Valores: day | month | year
optionalParamsobjectFiltros extra sobre los mismos documentos que entran en los totales. Envía un objeto (no un texto con JSON escapado). Todo es opcional.
• documentName — texto del nombre o descripción del documento
• date — un solo día YYYY-MM-DD (además del rango from / to)
• documentStatus — open, closed o applied
• documentNumber — número del documento
• documentTypes — tipos separados por coma (invoice, creditNote, incomeDebitNote)

Respuesta:

{
  "data": [
    {
      "period": "2024-01",
      "beforeTaxes": 10000,
      "tax": 1900,
      "total": 11900,
      "discount": 500,
      "creditNote": 200
    }
  ]
}

reports__getSalesBySeller

Obtiene una lista de vendedores con sus totales de ventas. Cada fila representa un vendedor con sus datos de ventas agregados

ArgumentoTipoReqDescripción
fromstringFecha inicio (YYYY-MM-DD)
tostringFecha fin (YYYY-MM-DD)
startstringOffset de paginación. Default: 0
limitstringCantidad de vendedores devueltos por llamada. Por defecto 10.. Default: 10
optionalParamsobjectOpcional. Envía un objeto (no un texto con JSON escapado).
• sellerName — deja solo el vendedor cuyo nombre coincida (si no lo envías, salen todos)
• order_field — por qué columna ordenar totalDocuments, totalPayed, beforeTaxes o total (si piden subtotal, usa beforeTaxes)
• order_direction — ASC o DESC; úsalo siempre junto con order_field

Respuesta:

{
  "data": [
    {
      "sellerName": "Juan Pérez",
      "totalDocuments": 15,
      "totalPayed": 5000,
      "beforeTaxes": 8000,
      "total": 9520
    }
  ]
}

reports__getSalesBySellerTotals

Obtiene el total/suma de ventas por vendedor. Retorna un resumen agregado con totalPayed, beforeTaxes, total

ArgumentoTipoReqDescripción
fromstringFecha inicio (YYYY-MM-DD)
tostringFecha fin (YYYY-MM-DD)
optionalParamsobjectOpcional. Envía un objeto (no un texto con JSON escapado).
• sellerName — si lo indicas, el resumen es solo de ese vendedor; si no, de todos
• order_field y order_direction — para ordenar antes de agregar (mismos valores que en la lista por vendedor)

Respuesta:

{
  "data": {
    "totalPayed": 25000,
    "beforeTaxes": 40000,
    "total": 47600
  }
}

reports__getSalesByClient

Obtiene una lista de clientes con sus datos de compras/transacciones. Muestra las métricas de compra de cada cliente

ArgumentoTipoReqDescripción
fromstringFecha inicio (YYYY-MM-DD)
tostringFecha fin (YYYY-MM-DD)
startstringOffset de paginación. Default: 0
limitstringCantidad de clientes devueltos por llamada. Por defecto 10.. Default: 10
optionalParamsobjectOpcional. Envía un objeto (no un texto con JSON escapado).
• clientName — deja solo el cliente cuyo nombre coincida
• order_field — ordenar por totalDocuments, subTotal o total
• order_direction — ASC o DESC; úsalo junto con order_field

Respuesta:

{
  "data": [
    {
      "clientName": "Empresa ABC S.A.S",
      "totalDocuments": 8,
      "subTotal": 15000,
      "total": 17850
    }
  ]
}

reports__getSalesByClientTotals

Obtiene el total/suma de compras/transacciones por cliente. Retorna un resumen agregado con subTotal, total, totalDiscount

ArgumentoTipoReqDescripción
fromstringFecha inicio (YYYY-MM-DD)
tostringFecha fin (YYYY-MM-DD)
optionalParamsobjectOpcional. Envía un objeto (no un texto con JSON escapado).
• clientName — si lo indicas, el resumen es solo de ese cliente; si no, de todos
• order_field y order_direction — para ordenar antes de consolidar (totalDocuments, subTotal, total + ASC o DESC)

Respuesta:

{
  "data": {
    "subTotal": 50000,
    "total": 59500,
    "totalDiscount": 2500
  }
}

reports__getClientsWithItems

Obtiene datos de ventas agrupados por cliente mostrando qué items/productos compró cada cliente

ArgumentoTipoReqDescripción
fromstringFecha inicio (YYYY-MM-DD)
tostringFecha fin (YYYY-MM-DD)
limitstringCantidad de líneas de ítem mostradas por cliente en la respuesta. Por defecto 10. Enviar como string numérico.. Default: 10
optionalParamsobjectOpcional. Envía un objeto (no un texto con JSON escapado).
• clients — lista de nombres de cliente; si la envías, solo aparecen esos clientes en el resultado (coincidencia sin distinguir mayúsculas)

Respuesta:

{
  "data": [
    {
      "clientName": "Cliente A",
      "items": [
        {
          "itemName": "Producto 1",
          "quantity": 10,
          "total": 5000
        },
        {
          "itemName": "Producto 2",
          "quantity": 5,
          "total": 2500
        }
      ]
    }
  ]
}

📖 Ledger

Catálogo de cuentas contables

  • ledger__listCategories — ledger__listCategories
  • ledger__getCategory — ledger__getCategory
  • ledger__createCategory — ledger__createCategory
  • ledger__updateCategory — ledger__updateCategory

ledger__listCategories

Lista todas las categorías del catálogo de cuentas contables

ArgumentoTipoReqDescripción
limitintegerNúmero máximo de resultados. Default: 30
offsetintegerOffset para paginación. Default: 0

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Activos",
      "code": "1000",
      "type": "asset"
    }
  ]
}

ledger__getCategory

Obtiene una categoría contable específica por su ID

ArgumentoTipoReqDescripción
idintegerID de la categoría contable

Respuesta:

{
  "id": 1,
  "name": "Activos",
  "code": "1000",
  "type": "asset"
}

ledger__createCategory

Crea una nueva categoría en el catálogo de cuentas

ArgumentoTipoReqDescripción
namestringNombre de la categoría
codestringCódigo contable
typestringTipo de cuenta contable. Valores: asset | liability | equity | income | expense

Respuesta:

{
  "id": 2,
  "name": "Pasivos",
  "code": "2000",
  "type": "liability"
}

ledger__updateCategory

Actualiza una categoría existente en el catálogo de cuentas

ArgumentoTipoReqDescripción
idintegerID de la categoría a actualizar
namestringNuevo nombre
codestringNuevo código contable

Respuesta:

{
  "id": 1,
  "name": "Activos Corrientes",
  "code": "1100"
}

🗂️ Accounting

Comprobantes contables y centros de costos

  • accounting__listJournals — accounting__listJournals
  • accounting__getJournal — accounting__getJournal
  • accounting__createJournal — accounting__createJournal
  • accounting__updateJournal — accounting__updateJournal
  • accounting__deleteJournal — accounting__deleteJournal
  • accounting__listCostCenters — accounting__listCostCenters
  • accounting__getCostCenter — accounting__getCostCenter
  • accounting__createCostCenter — accounting__createCostCenter
  • accounting__updateCostCenter — accounting__updateCostCenter
  • accounting__deleteCostCenter — accounting__deleteCostCenter

accounting__listJournals

Lista todos los comprobantes contables registrados

ArgumentoTipoReqDescripción
limitintegerNúmero máximo de resultados. Default: 30
offsetintegerOffset para paginación. Default: 0

Respuesta:

{
  "data": [
    {
      "id": 1,
      "date": "2024-01-15",
      "description": "Asiento de apertura",
      "total": 1000
    }
  ]
}

accounting__getJournal

Obtiene un comprobante contable específico por su ID

ArgumentoTipoReqDescripción
idintegerID del comprobante contable

Respuesta:

{
  "id": 1,
  "date": "2024-01-15",
  "description": "Asiento de apertura",
  "total": 1000
}

accounting__createJournal

Crea un nuevo comprobante contable

ArgumentoTipoReqDescripción
datestringFecha del comprobante (YYYY-MM-DD)
descriptionstringDescripción del comprobante
entriesarrayLíneas del comprobante (débitos y créditos)

Respuesta:

{
  "id": 2,
  "date": "2024-01-16"
}

accounting__updateJournal

Actualiza un comprobante contable existente

ArgumentoTipoReqDescripción
idinteger
descriptionstring

Respuesta:

{
  "id": 1
}

accounting__deleteJournal

Elimina un comprobante contable por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

accounting__listCostCenters

Lista todos los centros de costos registrados

ArgumentoTipoReqDescripción
limitintegerDefault: 30
offsetintegerDefault: 0

Respuesta:

{
  "data": [
    {
      "id": 1,
      "name": "Ventas",
      "code": "CC-001"
    }
  ]
}

accounting__getCostCenter

Obtiene un centro de costos específico por su ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "id": 1,
  "name": "Ventas",
  "code": "CC-001"
}

accounting__createCostCenter

Crea un nuevo centro de costos

ArgumentoTipoReqDescripción
namestringNombre del centro de costos
codestringCódigo del centro de costos

Respuesta:

{
  "id": 2,
  "name": "Administración",
  "code": "CC-002"
}

accounting__updateCostCenter

Actualiza un centro de costos existente

ArgumentoTipoReqDescripción
idinteger
namestring
codestring

Respuesta:

{
  "id": 1,
  "name": "Ventas Directas"
}

accounting__deleteCostCenter

Elimina un centro de costos por ID

ArgumentoTipoReqDescripción
idinteger

Respuesta:

{
  "success": true
}

🔧 Support Center

Gestión de tickets de soporte y base de conocimientos

  • supportCenter__createTicket — supportCenter__createTicket
  • supportCenter__retrieveTicketHistory — supportCenter__retrieveTicketHistory
  • supportCenter__searchHelpers — supportCenter__searchHelpers

supportCenter__createTicket

Crea un ticket de soporte en HubSpot vía la API del Centro de Soporte Alegra

ArgumentoTipoReqDescripción
subjectstringAsunto del ticket
descriptionstringDescripción detallada del problema o consulta
alegra_productstringProducto Alegra relacionado con el ticket
typestringTipo de ticket. Valores: General | Payment

Respuesta:

{
  "id": "TKT-001",
  "subject": "Error al emitir factura",
  "status": "open",
  "createdAt": "2024-01-15T10:30:00Z"
}

supportCenter__retrieveTicketHistory

Obtiene el historial de tickets de soporte del usuario vía la API Alegra

ArgumentoTipoReqDescripción
statusstringFiltrar por estado del ticket. Valores: open | pending | closed
searchstringTérmino de búsqueda para filtrar tickets
dateStartstringFecha inicial del rango de búsqueda (ISO 8601)
dateEndstringFecha final del rango de búsqueda (ISO 8601, requerido si dateStart está definido)
limitstringNúmero máximo de resultados a retornar. Default: 10
afterstringCursor de paginación para obtener la siguiente página de resultados

Respuesta:

[
  {
    "id": "TKT-001",
    "subject": "Error al emitir factura",
    "status": "closed",
    "createdAt": "2024-01-10T08:00:00Z"
  },
  {
    "id": "TKT-002",
    "subject": "Consulta sobre impuestos",
    "status": "open",
    "createdAt": "2024-01-14T14:20:00Z"
  }
]

supportCenter__searchHelpers

Busca artículos, guías y documentación en la base de conocimientos vía la API de soporte Alegra

ArgumentoTipoReqDescripción
questionstringTexto de búsqueda para encontrar artículos relevantes en la base de conocimientos

Respuesta:

[
  {
    "id": "KB-123",
    "title": "Cómo emitir tu primera factura electrónica",
    "url": "https://help.alegra.com/factura-electronica",
    "snippet": "Pasos para emitir facturas electrónicas en Alegra..."
  },
  {
    "id": "KB-124",
    "title": "Requisitos para facturación electrónica",
    "url": "https://help.alegra.com/requisitos-fe",
    "snippet": "Conoce los requisitos previos para habilitar la facturación..."
  }
]

API HTTP

MétodoPathDescripción
POST/mcpEnviar comandos JSON-RPC
GET/mcpAbrir conexión SSE
DELETE/mcpCerrar sesión MCP
GET/healthHealth check

Headers:

HeaderDescripción
AuthorizationBasic <token-base64> — requerido
mcp-session-idID de sesión MCP (opcional para POST, requerido para GET/DELETE).
mcp-groupsGrupos de herramientas a habilitar separados por comas.

Métodos JSON-RPC:

tools/list

Listar herramientas disponibles

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}

tools/call

Ejecutar herramienta

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "items__getItems",
    "arguments": {
      "limit": 10,
      "offset": 0
    }
  }
}

Health check

GET /health
{ "success": true, "message": "OK" }

Códigos de error

Código JSON-RPCDescripción
−32600Request inválido
−32601No autorizado
HTTPDescripción
400Solicitud inválida
401No autorizado — revisa las credenciales BasicAuth
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32600,
    "message": "Invalid Request"
  }
}
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32601,
    "message": "Unauthorized"
  }
}

Licencia MIT.