Conexión
Autenticación y límites
- Ninguna herramienta es pública. Las 51 (incluidas
verificarFormatoNit,calcularMontoLiteral,buscarNormativa,erroresComunesSiat,consultarDatosNit) se autentican antes de ejecutarse. - Las herramientas de Administración exigen la credencial de administración de CUCU (prefijo
ck_admin_), no una key de tenant. - Rate limit por API Key: cada
tools/callcuenta para el mismo límite de requests por minuto que REST. Superado, la tool devuelve el texto de rate limit (abajo) y hay que esperar 60 segundos. - Freno por IP: más de 20 credenciales inválidas en un minuto desde una IP bloquean esa IP por el tiempo que diga el mensaje, presente la llave que presente. Una llave de tenant válida sin permiso admin no cuenta.
- Los errores de autenticación y de límite no son respuestas HTTP 401/429: llegan como texto en
result.content[0].text.
Errores
Todos los errores llegan como texto en el resultado de la tool (no como error JSON-RPC). El agente debe inspeccionar el texto. Formas exactas:
Las tools de eventos, masiva y webhooks anteponen el contexto:
Error cerrando evento: [CODIGO] mensaje, Error registrando webhook: .... crearFactura y descargarDocumento devuelven JSON: {"success": false, "error": "<texto con las mismas formas>"}.
Formato de salida
Para extraer datos de forma confiable, preferí las tools con salida JSON o leé las líneas
- Campo: valor por nombre. Los identificadores que se reutilizan son ID (UUID interno) y CUF.
Flujos recomendados
Emitir y entregarconsultarPadron(tipo=5, numero=<NIT>)para obtener la razón social oficial;verificarFormatoNitsi el NIT lo escribió un humano.crearFactura(requestJson)conpointOfSaleId, cliente,paymentMethodCodeydetails.- Leer
siatStatede la respuesta:VALIDATED→ listo;REJECTED→ corregir consiatDescriptionyerroresComunesSiat; otro estado →verificarEstadoFactura(invoiceId). - Entregar:
pdfUrl/xmlUrlde la respuesta (públicas, sin key) odescargarDocumento(cuf, formato)para adjuntar el archivo en base64. - No reintentar
crearFacturaa ciegas tras un timeout: primerolistarFacturas(0, 5)uobtenerFacturaPorCufpara ver si ya se emitió.
anularFactura(id, codigoMotivo)con motivo1error de datos,2devolución,3período posterior,4otros. Solo sobreVALIDATED.- Si fue un error,
revertirAnulacion(id): vuelve aVALIDATED(también para emitidas offline). - Confirmar con
verificarEstadoFactura(id).
- La factura original debe estar
VALIDATED. crearNotaCreditoDebito(requestJson)conoriginalInvoiceId,notaType(CREDITO/DEBITO) y soloreturnedDetails; las líneas originales se clonan de la base.
verificarConexionSiat()para confirmar la caída.abrirEvento(posId, codigoMotivo, descripcion); desde ahí el POS emite offline (crearFacturasigue igual).- Al volver el SIAT:
cerrarEvento(posId, eventoId). Leer el detalle de paquetes de la respuesta: si alguno no entró,reenviarPaqueteEvento(posId, eventoId). - Facturas emitidas después del fin del evento (
verificarEstadoFacturaresponde[924]):regularizarFacturasFueraDeEvento(posId, eventoId). Facturas con CUFD distinto al del evento (quedan en901):resellarFacturasEvento. obtenerEventoActivo(posId)antes de abrir otro: un POS tiene a lo sumo un evento activo.
abrirLoteMasivo(posId)(idempotente). 2.crearFacturalas veces que haga falta: quedan enMASSIVE_PENDING. 3.cerrarLoteMasivo(posId); puede tardar minutos y es reentrante. 4.verLoteMasivo(posId); si hay rechazadas,rectificarLoteMasivo(posId)y volver acerrarLoteMasivo.
registrarWebhook(url, descripcion, tiposEvento): el secreto de firma se muestra una sola vez; guardarlo.- Diagnóstico:
listarEntregasWebhook(endpointId)yreenviarEntregaWebhook(deliveryId)para una entregaDEAD.