{"openapi":"3.1.0","info":{"title":"Nooki — API de facturación electrónica SUNAT","version":"1.0.0","description":"Tu sistema envía la venta en JSON; Nooki arma el comprobante, lo firma con tu certificado, lo envía a SUNAT, guarda el XML y la constancia (CDR) y te avisa el resultado.\n\n**Autenticación:** cabeceras `X-Api-Key` y `X-Api-Secret` (se sacan en el portal). El secreto va solo en el servidor de tu sistema, nunca en el navegador.\n\n**Estados de un comprobante:** `pendiente` (en cola o reintentando) → `aceptado` | `observado` (válidos) | `rechazado` (el número queda usado; emite otro) | `error` (no se pierde el número: corrige y usa reenviar) | `por_verificar` | `anulado`.\n\n**Errores:** siempre `{ \"error\": { \"codigo\", \"mensaje\", \"campo\" } }`.","contact":{"name":"Nooki","url":"https://nooki.pe"}},"servers":[{"url":"https://api.nooki.pe","description":"Nooki"}],"security":[{"llave":[],"secreto":[]}],"tags":[{"name":"Empresa"},{"name":"Emisión"},{"name":"Comprobantes"},{"name":"Anulaciones y resúmenes"},{"name":"Avisos (webhooks)"}],"paths":{"/v1/empresa":{"get":{"tags":["Empresa"],"operationId":"obtenerEmpresa","summary":"Datos de tu empresa","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Empresa"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/series":{"get":{"tags":["Empresa"],"operationId":"listarSeries","summary":"Series y su último número","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Serie"}}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/facturas":{"post":{"tags":["Emisión"],"operationId":"emitirFactura","summary":"Emitir una factura","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":200},"description":"Recomendado. Un valor único por venta (ej. `venta-000123`): si el pedido se repite por un corte de internet, no se duplica el comprobante y se devuelve el mismo (cabecera `Idempotent-Replay: true`)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NuevaFactura"}}}},"responses":{"200":{"description":"Repetida con la misma Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"201":{"description":"Creada (estado pendiente; SUNAT responde en segundos)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Se alcanzó el límite del plan (`limite_plan`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/boletas":{"post":{"tags":["Emisión"],"operationId":"emitirBoleta","summary":"Emitir una boleta","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":200},"description":"Recomendado. Un valor único por venta (ej. `venta-000123`): si el pedido se repite por un corte de internet, no se duplica el comprobante y se devuelve el mismo (cabecera `Idempotent-Replay: true`)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NuevaBoleta"}}}},"responses":{"200":{"description":"Repetida con la misma Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"201":{"description":"Creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Límite del plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/notas-credito":{"post":{"tags":["Emisión"],"operationId":"emitirNotaCredito","summary":"Emitir una nota de crédito","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":200},"description":"Recomendado. Un valor único por venta (ej. `venta-000123`): si el pedido se repite por un corte de internet, no se duplica el comprobante y se devuelve el mismo (cabecera `Idempotent-Replay: true`)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NuevaNotaCredito"}}}},"responses":{"200":{"description":"Repetida con la misma Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"201":{"description":"Creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Límite del plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/notas-debito":{"post":{"tags":["Emisión"],"operationId":"emitirNotaDebito","summary":"Emitir una nota de débito","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":200},"description":"Recomendado. Un valor único por venta (ej. `venta-000123`): si el pedido se repite por un corte de internet, no se duplica el comprobante y se devuelve el mismo (cabecera `Idempotent-Replay: true`)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NuevaNotaDebito"}}}},"responses":{"200":{"description":"Repetida con la misma Idempotency-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"201":{"description":"Creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Límite del plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/comprobantes":{"get":{"tags":["Comprobantes"],"operationId":"listarComprobantes","summary":"Lista de comprobantes (más recientes primero)","parameters":[{"name":"tipo_doc","in":"query","schema":{"type":"string","enum":["01","03","07","08"]}},{"name":"estado","in":"query","schema":{"$ref":"#/components/schemas/EstadoComprobante"}},{"name":"desde","in":"query","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]}},{"name":"hasta","in":"query","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]}},{"name":"limite","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"despues_de","in":"query","schema":{"type":"integer"},"description":"Valor de `siguiente` de la página anterior."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["datos","siguiente"],"properties":{"datos":{"type":"array","items":{"$ref":"#/components/schemas/Comprobante"}},"siguiente":{"description":"Pásalo en `despues_de` (o `antes_de` en avisos) para la página siguiente; null si no hay más.","oneOf":[{"type":"integer"},{"type":"string"},{"type":"null"}]}}}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/comprobantes/{id}":{"get":{"tags":["Comprobantes"],"operationId":"obtenerComprobante","summary":"Estado y datos de un comprobante","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del comprobante"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/comprobantes/{id}/xml":{"get":{"tags":["Comprobantes"],"operationId":"descargarXml","summary":"XML firmado","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del comprobante"}],"responses":{"200":{"description":"XML UBL 2.1 firmado","content":{"application/xml":{"schema":{"type":"string"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/comprobantes/{id}/cdr":{"get":{"tags":["Comprobantes"],"operationId":"descargarCdr","summary":"Constancia de recepción de SUNAT (CDR)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del comprobante"}],"responses":{"200":{"description":"CDR de SUNAT","content":{"application/xml":{"schema":{"type":"string"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o SUNAT aún no respondió.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/comprobantes/{id}/pdf":{"get":{"tags":["Comprobantes"],"operationId":"descargarPdf","summary":"Representación impresa en PDF (A4 o ticket de 80 mm) con código QR","description":"En beta lleva la marca \"SIN VALOR LEGAL\"; si está anulado, la marca \"ANULADO\". Los rechazados y los que están en error no tienen PDF.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del comprobante"},{"name":"formato","in":"query","schema":{"type":"string","enum":["a4","ticket"],"default":"a4"}}],"responses":{"200":{"description":"PDF","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Rechazado o en error: no tiene representación impresa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/comprobantes/{id}/reenviar":{"post":{"tags":["Comprobantes"],"operationId":"reenviarComprobante","summary":"Reenviar uno en error o por_verificar (mismo número)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del comprobante"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comprobante"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"No está en un estado que se pueda reenviar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/comprobantes/{id}/anular":{"post":{"tags":["Anulaciones y resúmenes"],"operationId":"anularComprobante","summary":"Anular (comunicación de baja para serie F, resumen con estado 3 para serie B; se elige solo)","description":"Solo comprobantes aceptados u observados, sin notas vigentes y dentro del plazo. Pedirlo dos veces devuelve la misma baja. El comprobante pasa a `anulado` cuando SUNAT acepta la baja.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del comprobante"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["motivo"],"properties":{"motivo":{"type":"string","minLength":3,"maxLength":100,"examples":["Error en el RUC del cliente"]}}}}}},"responses":{"200":{"description":"Ya existía","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resumen"}}}},"201":{"description":"Baja creada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resumen"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"No se puede anular (estado, plazo o notas vigentes).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/resumenes":{"post":{"tags":["Anulaciones y resúmenes"],"operationId":"crearResumenDiario","summary":"Armar ya el resumen diario de las boletas pendientes de un día","description":"Solo para empresas con boletas por resumen. Normalmente el trabajador lo arma solo al día siguiente.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"fecha":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"],"description":"Por defecto hoy."}}}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"datos":{"type":"array","items":{"$ref":"#/components/schemas/Resumen"}}}}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Anulaciones y resúmenes"],"operationId":"listarResumenes","summary":"Bajas y resúmenes","parameters":[{"name":"tipo","in":"query","schema":{"type":"string","enum":["RC","RA"]}},{"name":"estado","in":"query","schema":{"type":"string"}},{"name":"limite","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"despues_de","in":"query","schema":{"type":"integer"},"description":"Valor de `siguiente` de la página anterior."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["datos","siguiente"],"properties":{"datos":{"type":"array","items":{"$ref":"#/components/schemas/Resumen"}},"siguiente":{"description":"Pásalo en `despues_de` (o `antes_de` en avisos) para la página siguiente; null si no hay más.","oneOf":[{"type":"integer"},{"type":"string"},{"type":"null"}]}}}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/resumenes/{id}":{"get":{"tags":["Anulaciones y resúmenes"],"operationId":"obtenerResumen","summary":"Estado, ticket y comprobantes incluidos","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del resumen o baja"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resumen"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/resumenes/{id}/xml":{"get":{"tags":["Anulaciones y resúmenes"],"operationId":"descargarXmlResumen","summary":"XML firmado del resumen o baja","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del resumen o baja"}],"responses":{"200":{"description":"XML firmado","content":{"application/xml":{"schema":{"type":"string"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/resumenes/{id}/cdr":{"get":{"tags":["Anulaciones y resúmenes"],"operationId":"descargarCdrResumen","summary":"Constancia de SUNAT del resumen o baja","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del resumen o baja"}],"responses":{"200":{"description":"CDR","content":{"application/xml":{"schema":{"type":"string"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/resumenes/{id}/reenviar":{"post":{"tags":["Anulaciones y resúmenes"],"operationId":"reenviarResumen","summary":"Reintentar uno en error o por_verificar (si ya tiene ticket, solo se consulta)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"},"description":"id del resumen o baja"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resumen"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"No se puede reenviar en su estado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook":{"get":{"tags":["Avisos (webhooks)"],"operationId":"obtenerWebhook","summary":"Configuración de los avisos","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"tags":["Avisos (webhooks)"],"operationId":"configurarWebhook","summary":"Activar o cambiar la URL de avisos","description":"La primera vez la respuesta incluye `secreto` (una sola vez). Cambiar la URL conserva el secreto.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","maxLength":500,"examples":["https://tusistema.com/nooki/avisos"]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookConSecreto"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Avisos (webhooks)"],"operationId":"desactivarWebhook","summary":"Apagar los avisos (los pendientes se descartan)","responses":{"204":{"description":"Apagados"},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook/secreto":{"post":{"tags":["Avisos (webhooks)"],"operationId":"rotarSecretoWebhook","summary":"Nuevo secreto de firma (el anterior deja de valer)","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"secreto":{"type":"string"},"aviso":{"type":"string"}}}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook/prueba":{"post":{"tags":["Avisos (webhooks)"],"operationId":"enviarAvisoPrueba","summary":"Enviar un aviso webhook.prueba","responses":{"202":{"description":"En cola","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entrega"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"El webhook no está configurado (`webhook_inactivo`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook/entregas":{"get":{"tags":["Avisos (webhooks)"],"operationId":"listarEntregas","summary":"Historial de avisos","parameters":[{"name":"estado","in":"query","schema":{"type":"string","enum":["pendiente","enviando","entregado","fallido","descartado"]}},{"name":"evento","in":"query","schema":{"type":"string","enum":["comprobante.aceptado","comprobante.observado","comprobante.rechazado","comprobante.error","comprobante.por_verificar","comprobante.anulado","resumen.aceptado","resumen.observado","resumen.rechazado","resumen.error","resumen.por_verificar","webhook.prueba"]}},{"name":"comprobante_id","in":"query","schema":{"type":"integer"}},{"name":"resumen_id","in":"query","schema":{"type":"integer"}},{"name":"limite","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"name":"antes_de","in":"query","schema":{"type":"string","format":"uuid"},"description":"Valor de `siguiente` de la página anterior."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["datos","siguiente"],"properties":{"datos":{"type":"array","items":{"$ref":"#/components/schemas/Entrega"}},"siguiente":{"description":"Pásalo en `despues_de` (o `antes_de` en avisos) para la página siguiente; null si no hay más.","oneOf":[{"type":"integer"},{"type":"string"},{"type":"null"}]}}}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Datos inválidos (`datos_invalidos`); `campo` dice cuál.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook/entregas/{id}":{"get":{"tags":["Avisos (webhooks)"],"operationId":"obtenerEntrega","summary":"Un aviso con el contenido exacto enviado","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"id del aviso (cabecera Nooki-Entrega)"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntregaConContenido"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/webhook/entregas/{id}/reintentar":{"post":{"tags":["Avisos (webhooks)"],"operationId":"reintentarEntrega","summary":"Volver a mandar un aviso (mismo id y contenido)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"id del aviso (cabecera Nooki-Entrega)"}],"responses":{"202":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entrega"}}}},"401":{"description":"Faltan las llaves o no son válidas (`no_autorizado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"La empresa está desactivada (`empresa_inactiva`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No existe o es de otra empresa (`no_encontrado`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"El webhook está desactivado.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"aviso":{"post":{"summary":"Aviso que Nooki envía a tu sistema","description":"POST a tu URL cuando un comprobante o resumen llega a su resultado. Responde 2xx en menos de 10 s.\n\nSi no, se reintenta con el mismo `Nooki-Entrega` a los 10 s, 30 s, 2 min, 10 min, 30 min, 1 h, 2 h, 6 h, 12 h, 24 h.\n\nComprueba la firma: HMAC-SHA256 con tu secreto sobre `t + \".\" + cuerpo` (el cuerpo tal como llegó) y compárala con `v1`; rechaza avisos con `t` de hace más de 5 minutos.\n\nPueden llegar repetidos o en otro orden: usa el id para no procesar dos veces.","parameters":[{"name":"Nooki-Evento","in":"header","required":true,"schema":{"type":"string","enum":["comprobante.aceptado","comprobante.observado","comprobante.rechazado","comprobante.error","comprobante.por_verificar","comprobante.anulado","resumen.aceptado","resumen.observado","resumen.rechazado","resumen.error","resumen.por_verificar","webhook.prueba"]}},{"name":"Nooki-Entrega","in":"header","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"Nooki-Intento","in":"header","required":true,"schema":{"type":"integer"}},{"name":"Nooki-Firma","in":"header","required":true,"schema":{"type":"string","examples":["t=1791866199,v1=9f2c…"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Aviso"}}}},"responses":{"200":{"description":"Recibido (cualquier 2xx)"}}}}},"components":{"securitySchemes":{"llave":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"Llave pública (fe_test_… o fe_live_…)."},"secreto":{"type":"apiKey","in":"header","name":"X-Api-Secret","description":"Secreto de la llave. Solo en el servidor."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["codigo","mensaje","campo"],"properties":{"codigo":{"type":"string","examples":["datos_invalidos","no_autorizado","no_encontrado","conflicto","limite_plan"]},"mensaje":{"type":"string","description":"En español, para mostrar o registrar."},"campo":{"type":["string","null"],"examples":["cliente.num_doc"]}}}}},"EstadoComprobante":{"type":"string","enum":["pendiente","enviando","aceptado","observado","rechazado","error","por_verificar","anulado"]},"Cliente":{"type":"object","additionalProperties":false,"required":["tipo_doc","num_doc","razon_social"],"properties":{"tipo_doc":{"type":"string","enum":["0","1","4","6","7","A","B","C","D","E"],"description":"Catálogo 06: 6 RUC, 1 DNI, 4 carné de extranjería, 7 pasaporte, 0 sin documento."},"num_doc":{"type":"string","maxLength":15},"razon_social":{"type":"string","maxLength":300},"direccion":{"type":"string","maxLength":300},"email":{"type":"string","format":"email"}}},"Item":{"type":"object","additionalProperties":false,"required":["descripcion","cantidad"],"description":"Manda `precio_unitario` (con IGV) o `valor_unitario` (sin IGV).","properties":{"codigo":{"type":"string","maxLength":30},"descripcion":{"type":"string","maxLength":500},"unidad":{"type":"string","pattern":"^[A-Z0-9]{1,3}$","default":"NIU","description":"Catálogo 03: NIU unidad, ZZ servicio, KGM kilo…"},"cantidad":{"oneOf":[{"type":"number"},{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$"}],"description":"Número o texto con punto decimal, ej. `\"118.00\"`. Mejor como texto para no perder decimales."},"precio_unitario":{"oneOf":[{"type":"number"},{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$"}],"description":"Número o texto con punto decimal, ej. `\"118.00\"`. Mejor como texto para no perder decimales."},"valor_unitario":{"oneOf":[{"type":"number"},{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$"}],"description":"Número o texto con punto decimal, ej. `\"118.00\"`. Mejor como texto para no perder decimales."},"tip_afe_igv":{"type":"string","enum":["10","11","12","13","14","15","16","20","21","30","31","32","33","34","35","36","40"],"default":"10","description":"10 gravado, 20 exonerado, 30 inafecto, 40 exportación; 11–16, 21, 31–36 gratuitos."},"porcentaje_igv":{"oneOf":[{"type":"number"},{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$"}],"description":"Número o texto con punto decimal, ej. `\"118.00\"`. Mejor como texto para no perder decimales."},"codigo_sunat":{"type":"string","pattern":"^\\d{8}$"},"bolsa_plastica":{"type":"boolean","description":"Agrega el ICBPER."}}},"Cuota":{"type":"object","additionalProperties":false,"required":["monto","fecha_pago"],"properties":{"monto":{"oneOf":[{"type":"number"},{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$"}],"description":"Número o texto con punto decimal, ej. `\"118.00\"`. Mejor como texto para no perder decimales."},"fecha_pago":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]}}},"NuevaFactura":{"type":"object","additionalProperties":false,"required":["serie","items"],"properties":{"serie":{"type":"string","pattern":"^F[A-Z0-9]{3}$","examples":["F001"]},"fecha_emision":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"],"description":"Por defecto hoy (hora de Lima). Hasta 3 días de atraso."},"moneda":{"type":"string","enum":["PEN","USD","EUR"],"default":"PEN"},"tipo_operacion":{"type":"string","enum":["0101","0200"],"default":"0101","description":"0101 venta interna, 0200 exportación."},"forma_pago":{"type":"string","enum":["Contado","Credito"],"default":"Contado"},"cuotas":{"type":"array","maxItems":60,"items":{"$ref":"#/components/schemas/Cuota"},"description":"Obligatorio si forma_pago es Credito."},"fecha_vencimiento":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]},"cliente":{"$ref":"#/components/schemas/Cliente","description":"Obligatorio en facturas (RUC, tipo_doc 6, en venta interna)."},"items":{"type":"array","minItems":1,"maxItems":500,"items":{"$ref":"#/components/schemas/Item"}},"observacion":{"type":"string","maxLength":500},"orden_compra":{"type":"string","maxLength":20}}},"NuevaBoleta":{"type":"object","additionalProperties":false,"required":["serie","items"],"properties":{"serie":{"type":"string","pattern":"^B[A-Z0-9]{3}$","examples":["B001"]},"fecha_emision":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"],"description":"Por defecto hoy (hora de Lima). Hasta 3 días de atraso."},"moneda":{"type":"string","enum":["PEN","USD","EUR"],"default":"PEN"},"tipo_operacion":{"type":"string","enum":["0101","0200"],"default":"0101","description":"0101 venta interna, 0200 exportación."},"forma_pago":{"type":"string","enum":["Contado","Credito"],"default":"Contado"},"cuotas":{"type":"array","maxItems":60,"items":{"$ref":"#/components/schemas/Cuota"},"description":"Obligatorio si forma_pago es Credito."},"fecha_vencimiento":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]},"cliente":{"$ref":"#/components/schemas/Cliente","description":"Opcional: sin cliente sale a CLIENTES VARIOS (hasta S/ 700)."},"items":{"type":"array","minItems":1,"maxItems":500,"items":{"$ref":"#/components/schemas/Item"}},"observacion":{"type":"string","maxLength":500},"orden_compra":{"type":"string","maxLength":20}}},"NuevaNotaCredito":{"type":"object","additionalProperties":false,"required":["serie","motivo"],"description":"Indica el comprobante que se modifica con `comprobante_afectado_id` o `comprobante_afectado`.","properties":{"serie":{"type":"string","pattern":"^[FB][A-Z0-9]{3}$","examples":["FC01"],"description":"F para notas de facturas, B para notas de boletas."},"fecha_emision":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]},"comprobante_afectado_id":{"type":"integer"},"comprobante_afectado":{"type":"string","pattern":"^[FB][A-Z0-9]{3}-\\d{1,8}$","examples":["F001-25"]},"motivo":{"type":"string","enum":["10","01","02","03","04","05","06","07","08","09"],"description":"10: OTROS CONCEPTOS; 01: ANULACIÓN DE LA OPERACIÓN; 02: ANULACIÓN POR ERROR EN EL RUC; 03: CORRECCIÓN POR ERROR EN LA DESCRIPCIÓN; 04: DESCUENTO GLOBAL; 05: DESCUENTO POR ÍTEM; 06: DEVOLUCIÓN TOTAL; 07: DEVOLUCIÓN POR ÍTEM; 08: BONIFICACIÓN; 09: DISMINUCIÓN EN EL VALOR"},"descripcion_motivo":{"type":"string","maxLength":250},"items":{"type":"array","minItems":1,"maxItems":500,"items":{"$ref":"#/components/schemas/Item"},"description":"Si el motivo es 01, 02 o 06 y no mandas ítems, se copian los del comprobante original."}}},"NuevaNotaDebito":{"type":"object","additionalProperties":false,"required":["serie","motivo"],"description":"Indica el comprobante que se modifica con `comprobante_afectado_id` o `comprobante_afectado`.","properties":{"serie":{"type":"string","pattern":"^[FB][A-Z0-9]{3}$","examples":["FD01"],"description":"F para notas de facturas, B para notas de boletas."},"fecha_emision":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]},"comprobante_afectado_id":{"type":"integer"},"comprobante_afectado":{"type":"string","pattern":"^[FB][A-Z0-9]{3}-\\d{1,8}$","examples":["F001-25"]},"motivo":{"type":"string","enum":["01","02","03"],"description":"01: INTERESES POR MORA; 02: AUMENTO EN EL VALOR; 03: PENALIDADES/ OTROS CONCEPTOS"},"descripcion_motivo":{"type":"string","maxLength":250},"items":{"type":"array","minItems":1,"maxItems":500,"items":{"$ref":"#/components/schemas/Item"},"description":"Obligatorio."}}},"Comprobante":{"type":"object","properties":{"id":{"type":"integer"},"tipo_doc":{"type":"string","enum":["01","03","07","08"],"description":"01 factura, 03 boleta, 07 nota de crédito, 08 nota de débito."},"numero":{"type":"string","examples":["F001-25"]},"serie":{"type":"string"},"correlativo":{"type":"integer"},"fecha_emision":{"type":"string","description":"Hora de Lima, AAAA-MM-DDTHH:MM:SS."},"moneda":{"type":"string"},"entorno":{"type":"string","enum":["beta","produccion"]},"cliente":{"$ref":"#/components/schemas/Cliente"},"totales":{"type":"object","properties":{"gravadas":{"type":["number","null"]},"exoneradas":{"type":["number","null"]},"inafectas":{"type":["number","null"]},"exportacion":{"type":["number","null"]},"gratuitas":{"type":["number","null"]},"igv":{"type":"number"},"icbper":{"type":["number","null"]},"total":{"type":"number"}}},"doc_afectado":{"oneOf":[{"type":"null"},{"type":"object","properties":{"id":{"type":"integer"},"tipo_doc":{"type":"string"},"numero":{"type":"string"}}}]},"estado":{"$ref":"#/components/schemas/EstadoComprobante"},"sunat":{"$ref":"#/components/schemas/RespuestaSunat"},"hash":{"type":["string","null"],"description":"Valor resumen (DigestValue) para la representación impresa."},"qr":{"type":"string","description":"Texto del código QR según SUNAT."},"nombre_archivo":{"type":"string"},"intentos":{"type":"integer"},"via_resumen":{"type":"boolean"},"resumen_id":{"type":["integer","null"]},"anulacion_id":{"type":["integer","null"]},"enlaces":{"type":"object","properties":{"xml":{"type":"string"},"cdr":{"type":["string","null"]},"pdf":{"type":["string","null"]},"resumen":{"type":["string","null"]},"anulacion":{"type":["string","null"]}}},"creado_en":{"type":"string","format":"date-time"},"actualizado_en":{"type":"string","format":"date-time"}}},"RespuestaSunat":{"type":"object","properties":{"codigo":{"type":["string","null"],"description":"0 aceptado; 2000–3999 rechazado; 4000+ observado."},"descripcion":{"type":["string","null"]},"notas":{"type":"array","items":{"type":"string"}}}},"Resumen":{"type":"object","properties":{"id":{"type":"integer"},"tipo":{"type":"string","enum":["RA","RC"]},"descripcion":{"type":"string"},"nombre":{"type":"string","examples":["RA-20261013-001"]},"fecha_documentos":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]},"fecha_envio":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-10-13"]},"moneda":{"type":"string"},"entorno":{"type":"string"},"estado":{"type":"string","enum":["pendiente","enviando","en_proceso","consultando","aceptado","observado","rechazado","error","por_verificar"]},"ticket":{"type":["string","null"]},"sunat":{"$ref":"#/components/schemas/RespuestaSunat"},"intentos":{"type":"integer"},"consultas":{"type":"integer"},"lineas":{"type":"array","items":{"type":"object","properties":{"linea":{"type":"integer"},"accion":{"type":"string","enum":["informar","anular"]},"motivo":{"type":["string","null"]},"comprobante_id":{"type":"integer"},"tipo_doc":{"type":"string"},"numero":{"type":"string"},"estado_comprobante":{"$ref":"#/components/schemas/EstadoComprobante"}}}},"enlaces":{"type":"object","properties":{"xml":{"type":"string"},"cdr":{"type":["string","null"]}}},"creado_en":{"type":"string","format":"date-time"},"actualizado_en":{"type":"string","format":"date-time"}}},"Empresa":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"ruc":{"type":"string"},"razon_social":{"type":"string"},"nombre_comercial":{"type":["string","null"]},"direccion":{"type":"string"},"entorno":{"type":"string","enum":["beta","produccion"]},"tasa_igv":{"type":"number"},"certificado":{"oneOf":[{"type":"null"},{"type":"object","properties":{"titular":{"type":"string"},"vence":{"type":"string"},"de_prueba":{"type":"boolean"}}}]},"boletas_por_resumen":{"type":"boolean"},"activa":{"type":"boolean"}}},"Serie":{"type":"object","properties":{"tipo_doc":{"type":"string"},"serie":{"type":"string"},"ultimo_correlativo":{"type":"integer"},"activa":{"type":"boolean"}}},"Webhook":{"type":"object","properties":{"url":{"type":["string","null"]},"activo":{"type":"boolean"},"secreto_configurado":{"type":"boolean"},"eventos":{"type":"array","items":{"type":"string"}},"entregas":{"type":"object","properties":{"pendientes":{"type":"integer"},"fallidas":{"type":"integer"},"ultima_entrega":{"type":["string","null"]}}}}},"WebhookConSecreto":{"allOf":[{"$ref":"#/components/schemas/Webhook"},{"type":"object","properties":{"secreto":{"type":"string","description":"Solo la primera vez. Guárdalo: no se vuelve a mostrar.","examples":["whsec_…"]},"aviso":{"type":"string"}}}]},"Entrega":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"evento":{"type":"string"},"estado":{"type":"string","enum":["pendiente","enviando","entregado","fallido","descartado"]},"comprobante_id":{"type":["integer","null"]},"resumen_id":{"type":["integer","null"]},"intentos":{"type":"integer"},"proximo_intento":{"type":["string","null"]},"ultimo_intento":{"type":["string","null"]},"ultimo_codigo_http":{"type":["integer","null"]},"ultimo_error":{"type":["string","null"]},"creado_en":{"type":"string"},"entregado_en":{"type":["string","null"]}}},"EntregaConContenido":{"allOf":[{"$ref":"#/components/schemas/Entrega"},{"type":"object","properties":{"contenido":{"$ref":"#/components/schemas/Aviso"}}}]},"Aviso":{"type":"object","required":["id","evento","creado_en","empresa","data"],"properties":{"id":{"type":"string","format":"uuid","description":"Igual a la cabecera Nooki-Entrega."},"evento":{"type":"string","enum":["comprobante.aceptado","comprobante.observado","comprobante.rechazado","comprobante.error","comprobante.por_verificar","comprobante.anulado","resumen.aceptado","resumen.observado","resumen.rechazado","resumen.error","resumen.por_verificar","webhook.prueba"]},"creado_en":{"type":"string","format":"date-time"},"empresa":{"type":"object","properties":{"ruc":{"type":"string"},"razon_social":{"type":"string"}}},"data":{"type":"object","description":"`comprobante` en eventos comprobante.*, `resumen` en resumen.*, `mensaje` en webhook.prueba.","properties":{"comprobante":{"type":"object","description":"Mismos campos principales que Comprobante, con enlaces detalle, xml, cdr y pdf."},"resumen":{"type":"object","description":"Mismos campos principales que Resumen, con lineas (comprobante_id, numero, accion, estado_comprobante)."},"mensaje":{"type":"string"}}}}}}}}