// Auto-generated by MCX from API documentation
// Generated: 2026-02-16T22:22:56.769Z
// Endpoints: 32
import { defineAdapter, z } from '@mcx/core';
// Common schemas
const IdParam = z.object({ id: z.string() });
const PaginationParams = z.object({
start: z.number().optional(),
limit: z.number().optional(),
});
export const alegraIngresos = defineAdapter({
name: 'alegraIngresos',
config: z.object({
token: z.string().describe('API token (base64 encoded credentials)'),
baseUrl: z.string().default('https://api.alegra.com/api/v1'),
}),
methods: {
updatePaymentsById: {
description: "Editar pago",
input: z.object({
id: z.string().describe("Id del pago que se desea editar. Se debe enviar en la URL."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdVoid: {
description: "Anular pago",
input: z.object({
id: z.string().describe("Id del pago que se desea anular. Se debe enviar en la URL."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/void`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdOpen: {
description: "Convertir pago a abierto",
input: z.object({
id: z.string().describe("Id del pago al cual se le desea revertir la anulación. Se debe enviar en la URL."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/open`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPaymentsByIdAttachment: {
description: "Adjuntar archivos a pagos",
input: z.object({
id: z.string().describe("Id del pago al cual se desea adjuntar el archivo"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createPayments: {
description: "Crear pago",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getPaymentsById: {
description: "Consultar un pago",
input: z.object({
id: z.string().describe("Id del pago que se desea consultar. Se debe enviar en la URL."),
account_id: z.string().optional().describe("Id de la cuenta de banco por la que se desea filtrar"),
conciliated: z.boolean().optional().describe("Filtrar las transacciones conciliadas o no. Por default se devuelven ambas"),
fields: z.string().optional().describe("Para obtener los comentarios del pago se debe enviar el parámetro `fields` con el valor `comments`, "),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.account_id !== undefined) query.set('account_id', String(params.account_id));
if (params.conciliated !== undefined) query.set('conciliated', String(params.conciliated));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/payments/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getPayments: {
description: "Lista de pagos",
input: z.object({
start: z.number().optional().describe("Desde cual pago se quiere consultar. Por ejemplo para consultar desde el pago 20, se envía start=20."),
limit: z.number().optional().describe("Cantidad de pagos a partir del inicio que se desea retornar. Por defecto retorna 30 pagos. Si este"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar los pagos. Opciones disponibles son D"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, number, date, type."),
type: z.string().optional().describe("Filtrar los pagos por ingresos o egresos, para ingresos se envía type como 'in', para egresos 'out'."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el obje"),
id: z.string().optional().describe("Ids de los pagos. Sirve para consultar pagos específicos. Deben ir separados por coma (,) y sin espa"),
client_id: z.string().optional().describe("Filtra los ingresos y/o egresos por id del cliente."),
conciliation_id: z.string().optional().describe("Id de la conciliación. Permite recuperar los pagos asociados a una conciliación"),
includeUnconciliated: z.boolean().optional().describe("Incluye transacciones no conciliadas, debe ir junto con conciliation_id, de lo contrario se ignora e"),
fields: z.string().optional().describe("Permite recuperar campos adicionales. Se pueden incluir varios y deben ir separados por comas. Opcio"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.type !== undefined) query.set('type', String(params.type));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.conciliation_id !== undefined) query.set('conciliation_id', String(params.conciliation_id));
if (params.includeUnconciliated !== undefined) query.set('includeUnconciliated', String(params.includeUnconciliated));
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/payments` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deletePaymentsById: {
description: "Eliminar pago",
input: z.object({
id: z.string().describe("Id del pago que se desea editar. Se debe enviar en la URL."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/payments/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateIncomeDebitNotesById: {
description: "Editar nota débito cliente",
input: z.object({
id: z.string().describe("Identificador de la nota de débito cliente que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/income-debit-notes/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createIncomeDebitNotes: {
description: "Crear nota débito cliente",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/income-debit-notes`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getIncomeDebitNotes: {
description: "Lista de notas débito cliente",
input: z.object({
status: z.enum(["open", "closed", "draft", "void"]).optional().describe("estado de la nota de debito cliente"),
client_name: z.string().optional().describe("Nombre del cliente por el cual se desea filtrar las notas de debito cliente."),
client_identification: z.string().optional().describe("Identificación del cliente por el cual se desea filtrar las notas de debito cliente."),
date: z.string().optional().describe("Fecha de la nota de debito cliente la cual se desea filtrar."),
dueDate: z.string().optional().describe("Fecha de vencimiento de la nota de debito cliente la cual se desea filtrar."),
prefix: z.string().optional().describe("Prefijo de la nota de debito cliente por el cual se desea filtrar."),
number: z.number().optional().describe("Numeración de la nota de debito cliente por la cual se desea filtrar."),
emission_status: z.enum(["PENDING", "STAMPED_AND_ACCEPTED", "STAMPED_AND_ACCEPTED_WITH_OBSERVATIONS", "STAMPED_AND_REJECTED", "STAMPED_AND_WAITING_RESPONSE"]).optional().describe("Estado de emisión de la nota debito cliente por la cual se desa filtrar."),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.status !== undefined) query.set('status', String(params.status));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.client_identification !== undefined) query.set('client_identification', String(params.client_identification));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.dueDate !== undefined) query.set('dueDate', String(params.dueDate));
if (params.prefix !== undefined) query.set('prefix', String(params.prefix));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.emission_status !== undefined) query.set('emission_status', String(params.emission_status));
const url = `/income-debit-notes` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getIncomeDebitNotesById: {
description: "Consultar una nota débito cliente",
input: z.object({
id: z.string().describe("Id de la nota de débito cliente que se desea consultar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/income-debit-notes/${params.id}`;
const res = await ctx.fetch(url);
return res.json();
},
},
deleteIncomeDebitNotesById: {
description: "Eliminar nota débito cliente",
input: z.object({
id: z.string().describe("Identificador de la nota de débito cliente que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/income-debit-notes/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateCreditNotesById: {
description: "Editar nota crédito",
input: z.object({
id: z.string().describe("Identificador de la nota de crédito que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/credit-notes/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createCreditNotes: {
description: "Crear nota de crédito",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/credit-notes`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createCreditNotesByIdEmail: {
description: "Enviar nota de crédito por correo",
input: z.object({
id: z.string().describe("Identificador de la nota de crédito que se desea enviar por correo. Este parámetro se debe incluir e"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/credit-notes/${params.id}/email`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getCreditNotes: {
description: "Lista de notas de crédito",
input: z.object({
start: z.number().optional().describe("Desde cual nota de crédito se quiere consultar. Por ejemplo para consultar desde la nota de crédito "),
limit: z.number().optional().describe("Cantidad de notas de crédito a partir del inicio que se desea retornar. Por defecto retorna 30 nota"),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
id: z.string().optional().describe("Ids de las notas de crédito. Sirve para consultar notas específicas. Deben ir separados por coma (,)"),
item_id: z.string().optional().describe("Id del item por el cual se desea filtrar las notas de crédito."),
client_id: z.string().optional().describe("Id del cliente por el cual se desea filtrar las notas de crédito."),
attachment: z.boolean().optional().describe("Retorna un objeto attachment con los archivos adjuntos a la nota de crédito."),
number: z.string().optional().describe("Numeración de la nota de crédito por la cual se desea filtrar, se puede especificar el prefijo y el "),
client_name: z.string().optional().describe("Nombre del cliente el cual se desea filtrar las notas de crédito."),
date: z.string().optional().describe("Fecha de la nota de crédito la cual se desea filtrar."),
emission_status: z.string().optional().describe("Permite filtrar por estado de emisión de la nota crédito cuando es una nota crédito electrónica, los"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.attachment !== undefined) query.set('attachment', String(params.attachment));
if (params.number !== undefined) query.set('number', String(params.number));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.emission_status !== undefined) query.set('emission_status', String(params.emission_status));
const url = `/credit-notes` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getCreditNotesById: {
description: "Consultar una nota de crédito",
input: z.object({
id: z.string().describe("Id de la nota de crédito que se desea consultar."),
fields: z.string().optional().describe("Para obtener los comentarios de la nota de crédito se debe enviar el parámetro `fields` con el valor"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/credit-notes/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteCreditNotesById: {
description: "Eliminar nota de crédito",
input: z.object({
id: z.string().describe("Identificador de la nota de crédito que se desea eliminar."),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/credit-notes/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
updateInvoicesById: {
description: "Editar factura de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
updateInvoicesByIdRetentionsApplied: {
description: "Edita las retenciones aplicadas a factura de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta que se desea editar."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/retentionsApplied`;
const res = await ctx.fetch(url, {
method: 'PUT',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesByIdEmail: {
description: "Enviar factura por correo",
input: z.object({
id: z.string().describe("Identificador de la factura que se desea enviar por correo. Este parámetro se debe incluir en la URL"),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/email`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoices: {
description: "Crear factura de venta",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesStamp: {
description: "Emitir facturas de venta masivamente",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/stamp`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesPreview: {
description: "Vista previa factura de venta",
input: z.object({
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/preview`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesByIdVoid: {
description: "Anular factura de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta que se desea anular."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/void`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesByIdOpen: {
description: "Abrir factura de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta que se desea abrir."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/open`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
createInvoicesByIdAttachment: {
description: "Adjuntar archivos a facturas de venta",
input: z.object({
id: z.string().describe("Identificador de la factura de venta a la cual se desea adjuntar el archivo."),
body: z.record(z.any()).optional(),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}/attachment`;
const res = await ctx.fetch(url, {
method: 'POST',
body: params.body ? JSON.stringify(params.body) : undefined,
});
return res.json();
},
},
getInvoicesById: {
description: "Consultar una factura de venta",
input: z.object({
id: z.string().describe("Id de la factura que se desea consultar."),
fields: z.string().optional().describe("Se especifica los campos adicionales separados por , que se requieran (actualmente pdf, xml, comment"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.fields !== undefined) query.set('fields', String(params.fields));
const url = `/invoices/${params.id}` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
getInvoices: {
description: "Lista de facturas de venta",
input: z.object({
start: z.number().optional().describe("Desde cual factura se quiere consultar. Por ejemplo para consultar desde la factura 20, se envía sta"),
limit: z.number().optional().describe("Cantidad de facturas a partir del inicio que se desea retornar. Por defecto retorna 30 facturas. Si"),
order_direction: z.string().optional().describe("Orden ascendente o descendente en el cual se quieren retornar las facturas. Opciones disponibles so"),
order_field: z.string().optional().describe("Campo por el cual se desea ordenar, las opciones posibles son id, name, date, dueDate, status."),
metadata: z.boolean().optional().describe("Incluir en los resultados metadatos. Se debe tener en cuenta que si se envía este parámetro el objet"),
id: z.string().optional().describe("Ids de las facturas de venta. Sirve para consultar facturas específicas. Deben ir separados por coma"),
date: z.string().optional().describe("Filtrar resultados según fecha de creación de la factura. Se retornarán todas las facturas de venta "),
dueDate: z.string().optional().describe("Filtrar resultados según fecha de vencimiento de la factura. Se retornarán todas las facturas de ve"),
status: z.string().optional().describe("Filtrar resultados según el estado de la factura. Se retornarán todas las facturas de venta que coi"),
client_id: z.string().optional().describe("Filtrar resultados según el identificador del cliente de la factura. Se retornarán todas las factur"),
client_name: z.string().optional().describe("Filtrar resultados según el nombre del cliente de la factura. Se retornarán todas las facturas de v"),
client_identification: z.string().optional().describe("Filtrar resultados según la identificación del cliente de la factura. Se retornarán todas las factu"),
numberTemplate_fullNumber: z.string().optional().describe("Filtrar resultados según la numeración de la factura. Se retornarán todas las facturas de venta que "),
item_id: z.string().optional().describe("Filtrar las facturas de venta por el id del item."),
date_after: z.string().optional().describe("Fecha del documento desde la cual se deben obtener los resultados. Consulta desde el dia siguiente e"),
date_afterOrNow: z.string().optional().describe("Fecha del documento desde la cual se deben obtener los resultados. Consulta desde el dia actual en a"),
date_before: z.string().optional().describe("Fecha del documento desde la cual se deben obtener los resultados. Consulta desde el dia anterior pa"),
date_beforeOrNow: z.string().optional().describe("Fecha del documento desde la cual se deben obtener los resultados. Consulta desde el dia actual para"),
dueDate_after: z.string().optional().describe("Fecha de vencimiento del documento desde la cual se deben obtener los resultados. Consulta desde el "),
dueDate_afterOrNow: z.string().optional().describe("Fecha de vencimiento del documento desde la cual se deben obtener los resultados. Consulta desde el "),
dueDate_before: z.string().optional().describe("Fecha de vencimeinto del documento desde la cual se deben obtener los resultados. Consulta desde el "),
dueDate_beforeOrNow: z.string().optional().describe("Fecha de vencimeinto del documento desde la cual se deben obtener los resultados. Consulta desde el "),
toReplace: z.boolean().optional().describe("Filtrar las facturas que necesitan ser sustituidas de un cliente. Cuando este campo se envía, es obl"),
download: z.boolean().optional().describe("Al enviar este parametro solicitas unicamente la descarga del PDF de hasta 10 facturas."),
downloadType: z.string().optional().describe("Las opciones pueden ser `1to1` y `all`. Al utilizar `all` solicitas unidos en un solo archivo pdf qu"),
}),
output: z.any(),
async handler(params, ctx) {
const query = new URLSearchParams();
if (params.start !== undefined) query.set('start', String(params.start));
if (params.limit !== undefined) query.set('limit', String(params.limit));
if (params.order_direction !== undefined) query.set('order_direction', String(params.order_direction));
if (params.order_field !== undefined) query.set('order_field', String(params.order_field));
if (params.metadata !== undefined) query.set('metadata', String(params.metadata));
if (params.id !== undefined) query.set('id', String(params.id));
if (params.date !== undefined) query.set('date', String(params.date));
if (params.dueDate !== undefined) query.set('dueDate', String(params.dueDate));
if (params.status !== undefined) query.set('status', String(params.status));
if (params.client_id !== undefined) query.set('client_id', String(params.client_id));
if (params.client_name !== undefined) query.set('client_name', String(params.client_name));
if (params.client_identification !== undefined) query.set('client_identification', String(params.client_identification));
if (params.numberTemplate_fullNumber !== undefined) query.set('numberTemplate_fullNumber', String(params.numberTemplate_fullNumber));
if (params.item_id !== undefined) query.set('item_id', String(params.item_id));
if (params.date_after !== undefined) query.set('date_after', String(params.date_after));
if (params.date_afterOrNow !== undefined) query.set('date_afterOrNow', String(params.date_afterOrNow));
if (params.date_before !== undefined) query.set('date_before', String(params.date_before));
if (params.date_beforeOrNow !== undefined) query.set('date_beforeOrNow', String(params.date_beforeOrNow));
if (params.dueDate_after !== undefined) query.set('dueDate_after', String(params.dueDate_after));
if (params.dueDate_afterOrNow !== undefined) query.set('dueDate_afterOrNow', String(params.dueDate_afterOrNow));
if (params.dueDate_before !== undefined) query.set('dueDate_before', String(params.dueDate_before));
if (params.dueDate_beforeOrNow !== undefined) query.set('dueDate_beforeOrNow', String(params.dueDate_beforeOrNow));
if (params.toReplace !== undefined) query.set('toReplace', String(params.toReplace));
if (params.download !== undefined) query.set('download', String(params.download));
if (params.downloadType !== undefined) query.set('downloadType', String(params.downloadType));
const url = `/invoices` + (query.toString() ? '?' + query.toString() : '');
const res = await ctx.fetch(url);
return res.json();
},
},
deleteInvoicesById: {
description: "Eliminar factura de venta",
input: z.object({
id: z.string().describe("Id de la factura que se desea eliminar. Ejemplo: /invoices/1"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/${params.id}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
deleteInvoicesAttachmentById: {
description: "Eliminar archivos adjuntos",
input: z.object({
idAttachment: z.string().describe("Id del archivo adjunto a la cual se desea eliminar el archivo"),
}),
output: z.any(),
async handler(params, ctx) {
const url = `/invoices/attachment/${params.idAttachment}`;
const res = await ctx.fetch(url, { method: 'DELETE' });
return res.json();
},
},
},
});