API v1
API de Nokfi
Lanza análisis de Nokfi desde n8n, Make, Zapier o tus propios scripts y recibe el informe en JSON estructurado, listo para encadenar.
Claves reales en Pro y Max · claves de prueba en todos los planes
Autenticación
Crea una clave en Desarrolladores → Claves y envíala en cada petición:
Authorization: Bearer nk_live_…Cada análisis o extracción gasta 1 de tu cuota diaria (la misma que en la web); las herramientas fiscales no gastan cuota. Máximo 30 peticiones por minuto y clave. Si tu plan baja a Mini, las claves reales dejan de funcionar (401 api_plan_required) pero no se borran.
Endpoints
GET/api/v1/usageTu cuota de hoyPOST/api/v1/invoices/extractExtraer facturas con validacionesPOST/api/v1/analyzeLanzar un análisisGET/api/v1/analysesListar análisisGET/api/v1/analyses/{id}Obtener un informeGET/api/v1/jobs/{id}Estado y resultado de un trabajoPOST/api/v1/invoicesEmitir una factura (Idempotency-Key obligatoria)GET/api/v1/invoices/{id}Factura con líneas, eventos y VERI*FACTUPOST/api/v1/invoices/{id}/rectifyEmitir una rectificativaPOST/api/v1/invoices/{id}/cancelAnular una factura emitida por errorPOST/api/v1/invoices/{id}/statusRechazada, aceptada, cobrada o no cobradaGET/api/v1/invoices/{id}/pdf · /xmlPDF y factura electrónica (UBL, Facturae, Factur-X)GET · POST/api/v1/customersLibreta de clientesGET · POST/api/v1/webhooksTus webhooks (crear, listar, borrar, probar)GET/api/v1/tax/nifValidar NIF, NIE o CIFPOST/api/v1/tax/vatIVA y recargo de equivalenciaPOST/api/v1/tax/withholdingRetención de IRPFPOST/api/v1/tax/model-130Estimar el modelo 130GET/api/v1/tax/quarterResumen del trimestre desde tu libroGET/api/v1/tax/calendarPróximos plazos fiscalesGET/api/v1/openapi.jsonEspecificación OpenAPI
Tipos de análisis: excel (módulos stock, ventas, servicios, entradas, caja, total), compare (dos periodos), folder (varios documentos con una petición) y cuestionario (30 respuestas sí/no).
Facturas: del PDF al JSON validado
Envía hasta 5 facturas por petición (PDF, JPG, PNG o WebP en base64, o el texto ya extraído) y recibe siempre el mismo JSON. Cada petición gasta 1 análisis de tu cuota. No guardamos el archivo ni los datos (en modo asíncrono, el resultado se guarda 24 h para que lo recojas). Las facturas electrónicas (Facturae, UBL, CII o Factur-X/ZUGFeRD con el XML dentro del PDF) se leen tal cual, sin IA: el resultado es exacto y no gastan cuota.
curl -X POST https://nokfi.app/api/v1/invoices/extract \
-H "Authorization: Bearer nk_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d "{\"files\": [{\"name\": \"factura.pdf\", \"mime\": \"application/pdf\",
\"data\": \"$(base64 -w0 factura.pdf)\"}]}"Nokfi comprueba cada factura por su cuenta, sin fiarse de la IA: que base + IVA − retención cuadre con el total, el dígito de control del NIF/CIF/NIE, que la fecha sea válida y no futura y que el tipo de IVA sea habitual. Lo que no cuadra llega en warnings. Los PDF escaneados vuelven en errors (pdf_scanned): envíalos como imagen.
{
"invoices": [{
"file_name": "factura.pdf",
"issuer_name": "Talleres Ruiz SL", "issuer_nif": "B12345674",
"invoice_number": "F-2026-017", "invoice_date": "2026-09-14",
"base": 1000, "vat_rate": 21, "vat_amount": 210, "irpf_amount": 0, "total": 1210,
"checks": { "totals_ok": true, "nif_valid": true, "recipient_nif_valid": null,
"date_valid": true, "vat_rate_valid": true },
"warnings": []
}],
"errors": []
}Emitir facturas
Emite facturas en nombre de tu cuenta con la misma lógica que la app: numeración correlativa sin huecos, IVA por tipo, retención, recargo de equivalencia, apunte en el libro, PDF, factura electrónica y registro VERI*FACTU con huella encadenada. No usa IA ni gasta cuota.
curl -X POST https://nokfi.app/api/v1/invoices \
-H "Authorization: Bearer nk_live_TU_CLAVE" \
-H "Idempotency-Key: pedido-1001" \
-H "Content-Type: application/json" \
-d '{ "customer": { "name": "Bodegas Sur SA", "tax_id": "A58818501",
"address": "Ctra. Jerez 4", "postal_code": "11401", "city": "Jerez" },
"irpf_rate": 15,
"lines": [{ "description": "Diseño de etiqueta", "quantity": 1, "unit_price": 800, "vat_rate": 21 }] }'
# → 201 { "id": 42, "number": "F2026-0001", "kind": "F1", "base": 800, "vat_amount": 168,
# "irpf_amount": 120, "total": 848, "livemode": true, … }
curl https://nokfi.app/api/v1/invoices/42/pdf -H "Authorization: Bearer nk_live_TU_CLAVE" -o F2026-0001.pdfIdempotency-Key es obligatoria al emitir y al rectificar: si reintentas con la misma clave recibes la misma factura y nunca una duplicada. Una factura emitida no se edita ni se borra: se rectifica o se anula. Con una clave nk_test_ las facturas son de prueba (TEST-…), con su propia numeración, y no entran en el libro ni van a la AEAT. Tus datos de emisor se completan en la app.
Herramientas fiscales sin IA
Cálculos de la fiscalidad española hechos por Nokfi, no por un modelo: validar NIF/NIE/CIF con su dígito de control, IVA con o sin IVA incluido y recargo de equivalencia, retenciones de IRPF, el pago del modelo 130 y el calendario fiscal. Respuesta al momento y sin gastar cuota. Son orientativos (régimen general).
curl "https://nokfi.app/api/v1/tax/nif?value=B12345674" \
-H "Authorization: Bearer nk_live_TU_CLAVE"
curl -X POST https://nokfi.app/api/v1/tax/withholding \
-H "Authorization: Bearer nk_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{ "base": 1000, "type": "professional" }'
# → { "withholding_rate": 15, "withholding_amount": 150, "vat_amount": 210, "total_invoice": 1060, … }Asíncrono, webhooks e idempotencia
Para lotes o flujos que no pueden esperar, añade ?async=true (o la cabecera Prefer: respond-async) a analyze o invoices/extract: respondemos 202 con un trabajo al momento y el resultado queda 24 h en /api/v1/jobs/{id}. Los errores de formato y de cuota se devuelven al momento, sin crear el trabajo.
curl -X POST "https://nokfi.app/api/v1/invoices/extract?async=true" \
-H "Authorization: Bearer nk_live_TU_CLAVE" \
-H "Idempotency-Key: factura-2026-017" \
-H "Content-Type: application/json" \
-d '{ "files": [{ "name": "f.pdf", "mime": "application/pdf", "data": "JVBERi0x…" }] }'
# → 202 { "id": "job_3f9c…", "status": "queued", … }
curl https://nokfi.app/api/v1/jobs/job_3f9c… -H "Authorization: Bearer nk_live_TU_CLAVE"
# → { "status": "succeeded", "result": { "invoices": [ … ] } }Envía una cabecera Idempotency-Key (por ejemplo, el id de la factura) en cada POST: si tu flujo reintenta, devolvemos la misma respuesta (o el mismo trabajo) sin ejecutarlo ni cobrarlo dos veces. Guardamos la clave 24 h.
Con un webhook no hace falta preguntar: Nokfi avisa a tu URL cuando termina un análisis (analysis.completed) o un trabajo (job.completed, job.failed), al llegar al 80 % y al 100 % de la cuota (quota.threshold) y 7 días y 1 día antes de cada plazo fiscal (fiscal.deadline). Cada aviso va firmado con HMAC-SHA256 y se reintenta durante unas 20 h si tu servidor no responde. Para facturas: invoice.issued, invoice.cancelled, invoice.rejected, invoice.accepted, invoice.paid e invoice.unpaid (también las emitidas desde la web), y verifactu.accepted / verifactu.rejected con la respuesta de la AEAT a cada registro.
POST https://tu-servidor/webhook
Nokfi-Signature: t=1790000000,v1=5f2b… (HMAC-SHA256 de "t.cuerpo" con tu whsec_…)
Nokfi-Event: job.completed
Nokfi-Event-Id: evt_91c0…
{ "id": "evt_91c0…", "type": "job.completed", "created_at": "2026-10-01T09:12:03Z",
"livemode": true, "data": { "job_id": "job_3f9c…", "kind": "invoices.extract",
"status": "succeeded", "result": { "invoices": [ … ] } } }Claves de prueba (nk_test_)
Disponibles en todos los planes, también en Mini. Validan la entrada igual que las reales y devuelven datos de ejemplo con la misma forma, sin gastar cuota ni guardar nada. Los trabajos y webhooks funcionan igual, con livemode: false. Úsalas para montar y probar tus flujos antes de pasar a nk_live_.
Servidor MCP para agentes de IA
Conecta Nokfi como herramienta de Claude, ChatGPT, Cursor o el AI Agent de n8n. Usa la misma clave de API, la misma cuota y las mismas reglas que la API.
Herramientas: extract_invoices, analyze, validate_tax_id, calculate_vat, calculate_withholding, estimate_model_130, fiscal_calendar, get_usage, list_analyses, get_analysis, issue_invoice, list_invoices, get_invoice, cancel_invoice y set_invoice_status.
Claude Code
claude mcp add --transport http nokfi https://nokfi.app/api/mcp \
--header "Authorization: Bearer nk_live_TU_CLAVE"Claude Desktop
{
"mcpServers": {
"nokfi": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://nokfi.app/api/mcp",
"--header", "Authorization: Bearer nk_live_TU_CLAVE"]
}
}
}Cursor · VS Code
{
"mcpServers": {
"nokfi": {
"url": "https://nokfi.app/api/mcp",
"headers": { "Authorization": "Bearer nk_live_TU_CLAVE" }
}
}
}n8n (AI Agent → MCP Client Tool)
Endpoint: https://nokfi.app/api/mcp
Server Transport: HTTP Streamable
Authentication: Bearer Auth → nk_live_TU_CLAVEEjemplo
curl -X POST https://nokfi.app/api/v1/analyze \
-H "Authorization: Bearer nk_live_TU_CLAVE" \
-H "Content-Type: application/json" \
-d '{
"type": "excel",
"lang": "es",
"title": "Ventas de septiembre",
"data": {
"module": "ventas",
"files": [{ "name": "ventas.csv", "rows": [
{ "producto": "Camiseta", "unidades": 12, "importe": 240 },
{ "producto": "Gorra", "unidades": 3, "importe": 45 }
]}]
}
}'Respuesta: { id, type, title, report: { summary, key_figures, strengths, priorities, action_plan, glossary }, actions }.
Ejemplo con n8n
- Crea una credencial «Header Auth / Bearer» con tu clave nk_live_…
- Añade un nodo HTTP Request: POST https://nokfi.app/api/v1/analyze con cuerpo JSON
- Usa $json.report.summary o $json.report.priorities en los nodos siguientes (email, Slack, hoja…)
{
"nodes": [
{ "name": "Cada lunes", "type": "n8n-nodes-base.scheduleTrigger",
"parameters": { "rule": { "interval": [{ "field": "weeks", "triggerAtDay": [1], "triggerAtHour": 8 }] } } },
{ "name": "Leer hoja de ventas", "type": "n8n-nodes-base.googleSheets",
"parameters": { "operation": "read" } },
{ "name": "Analizar con Nokfi", "type": "n8n-nodes-base.httpRequest",
"parameters": {
"method": "POST", "url": "https://nokfi.app/api/v1/analyze",
"authentication": "genericCredentialType", "genericAuthType": "httpBearerAuth",
"sendBody": true, "specifyBody": "json",
"jsonBody": "={{ { type: 'excel', lang: 'es', data: { module: 'ventas', files: [{ name: 'ventas', rows: $input.all().map(i => i.json).slice(0, 5000), total_rows: $input.all().length }] } } }}"
} },
{ "name": "Enviar resumen", "type": "n8n-nodes-base.emailSend",
"parameters": { "subject": "Informe Nokfi", "text": "={{ $json.report.summary }}" } }
]
}Plantillas de n8n
Especificación completa: /api/v1/openapi.json · Crear una clave