API + MCP

Facturación electrónica chilena para developers

API REST y MCP Server para emitir cualquier DTE ante el SII de Chile desde tu código, tu IDE o directamente con Claude. Sin configuraciones del SII, sin certificados digitales propios.

REST API MCP Server OAuth 2.0 + PKCE Webhooks Sandbox Emisión masiva Claude Code Node.js / Python / PHP
📄

Esta página es una referencia pública general

Para ver la documentación completa y siempre actualizada, accede directamente al app: Documentación MCP · Documentación API REST

MCP Server — Emite DTEs desde Claude o tu IDE

Wasabil fue el primer facturador electrónico de Chile en implementar el Model Context Protocol. Conecta Claude Code, Claude.ai, Cursor o Windsurf directamente a tu empresa.

Claude Code (CLI)

claude mcp add \
  --transport http \
  --scope user \
  wasabil \
  https://mcp.wasabil.com

# Luego escribe /mcp y autoriza

Claude.ai

1. Ir a claude.ai/customize/connectors
2. Agregar conector personalizado
3. Nombre: Wasabil / URL: https://mcp.wasabil.com
4. Autorizar con tu cuenta Wasabil

OAuth 2.0 — Parámetros de conexión

La mayoría de los clientes detectan estos valores automáticamente con solo pegar la URL del servidor. Si tu cliente te pide completarlos manualmente, usa estos valores:

CampoValor
MCP Server URLhttps://mcp.wasabil.com
Authorization URLhttps://app.wasabil.com/oauth/authorize
Token URLhttps://api.wasabil.com/api/oauth/token
Issuerhttps://api.wasabil.com
Registration URLhttps://mcp.wasabil.com/oauth/register
Client IDwasabil-mcp-server
Client Secret(dejar vacío) — no hay secret, la conexión se asegura con PKCE
Scopes(dejar vacío)
Authorization URL Parameters(dejar vacío)
Grant typeauthorization_code
Response typecode
PKCES256 — obligatorio. Si el cliente lo ofrece como opción, actívalo.
Token endpoint auth methodnone (public client)

Tools disponibles en el MCP

ToolDescripción
DocumentosEmitir facturas, boletas y notas de crédito
BúsquedaConsultar documentos por folio, cliente o fecha
ReportesVentas por mes, producto, cliente o atributo
AtributosAsignar y filtrar metafields personalizados
ClientesCrear y buscar receptores
ProveedoresGestionar proveedores para facturas de compra
ConciliaciónVincular pagos bancarios con documentos
Cargar movimientosImportar transacciones desde la cartola bancaria

→ Ver guía completa de instalación del MCP

API REST

Autenticación

Authorization: Bearer TU_TOKEN
Content-Type: application/json

Obtén tu token en app.wasabil.com/api-tokens. Para integraciones multi-empresa usa OAuth 2.0 con PKCE.

URL Base: https://api.wasabil.com/api

La URL antigua https://api.wasabil.com/v1 sigue funcionando para integraciones existentes pero no recibirá nuevos endpoints. Para integraciones nuevas, usa siempre /api.

Estados de documentos

6
Pendiente
2
Procesando
3
Emitido
4
Fallido

Tipos de DTE soportados

33Factura de Venta
34Factura Exenta
39Boleta de Venta
41Boleta Exenta
46Factura de Compra
52Guía de Despacho
56Nota de Débito
61Nota de Crédito
110Factura de Exportación
111Nota de Débito Exportación
112Nota de Crédito Exportación
200Boleta Honorarios Terceros

Crear y emitir un documento

POST /api/documents

Crea cualquier tipo de DTE. Define el tipo con sii_document_type_code. Incluye issue: true para emitir inmediatamente.

CampoTipoDescripción
sii_document_type_codeintrequeridoCódigo SII del tipo de documento
payment_methodstringrequeridocontado o credito
detailsarrayrequeridoLíneas del documento
details[].namestringrequeridoNombre/glosa (max 80 caracteres)
details[].pricenumberrequeridoPrecio unitario
details[].quantitynumberrequeridoCantidad (soporta decimales)
details[].discountnumberopcionalDescuento en % (0–100)
details[].exemptbooleanopcionalLínea exenta de IVA (solo tipo 33)
issuebooleanopcionalEmitir inmediatamente (default false)
currency_symbolstringopcionalCLP | USD | UF
receiver_rutstringopcionalRUT del receptor
receiver_namestringopcionalRazón social
receiver_emailstringopcionalEmail(s) separados por ";"
client_idintopcionalId del cliente (alternativa a receiver_*)
notification_urlstringopcionalWebhook para cambios de estado
notify_allbooleanopcionalRecibir todos los estados (default: solo emitidos)
invoice_referencestringopcionalID externo (nro de orden, etc.)
originstringopcionalTienda/sucursal de origen
document_datestringopcionalFecha YYYY-MM-DD (default: hoy)

Ejemplo — Factura de Venta (cURL)

curl -X POST https://api.wasabil.com/api/documents \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "sii_document_type_code": 33,
    "issue": true,
    "payment_method": "contado",
    "receiver_rut": "12345678-9",
    "receiver_name": "Cliente SpA",
    "receiver_email": "facturacion@cliente.cl",
    "details": [
      {
        "name": "Consultoría desarrollo web",
        "price": 100000,
        "quantity": 1
      }
    ],
    "notification_url": "https://tu-app.com/webhooks/wasabil"
  }'

Ejemplo — Boleta (JavaScript / Node.js)

const response = await fetch('https://api.wasabil.com/api/documents', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.WASABIL_TOKEN}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    sii_document_type_code: 39,   // Boleta de Venta
    issue: true,
    payment_method: 'contado',
    details: [
      { name: 'Suscripción mensual', price: 9990, quantity: 1 }
    ]
  })
});

const { data } = await response.json();
console.log(data.folio);              // folio asignado por el SII
console.log(data.document_pdf_url);  // URL del PDF

Ejemplo — Factura de Compra / servicios digitales (Python)

import requests

resp = requests.post(
    'https://api.wasabil.com/api/documents',
    headers={
        'Authorization': f'Bearer {WASABIL_TOKEN}',
        'Content-Type': 'application/json'
    },
    json={
        'sii_document_type_code': 46,   # Factura de Compra
        'issue': True,
        'payment_method': 'contado',
        'receiver_rut': '59.015.491-7',
        'receiver_name': 'Google LLC',
        'details': [{
            'name': 'Google Ads - Mayo 2026',
            'price': 84034,
            'quantity': 1
        }]
    }
)
doc = resp.json()['data']
print(doc['folio'])  # folio SII

Emisión masiva — hasta 100 documentos por request

// POST /api/documents/bulk — array de hasta 100 objetos
[
  {
    "sii_document_type_code": 39,
    "issue": true,
    "payment_method": "contado",
    "details": [{ "name": "Venta #001", "price": 9990, "quantity": 1 }]
  },
  {
    "sii_document_type_code": 39,
    "issue": true,
    "payment_method": "contado",
    "details": [{ "name": "Venta #002", "price": 14990, "quantity": 2 }]
  }
]

Consultar y gestionar documentos

MétodoEndpointDescripción
POST /api/documents/queryListar con filtros (paginado, hasta 250/página)
GET /api/documents/{uuid}Obtener documento completo
GET /api/documents/{uuid}/statusSolo el estado (útil para polling)
GET /api/documents/{uuid}/document-pdf/{filename}Descargar PDF del DTE
GET /api/documents/{uuid}/document-xml/{filename}Descargar XML original
POST /api/documents/{uuid}/issueEmitir documento pendiente
POST /api/documents/{uuid}/cancelAnular totalmente (genera NC automática)
PUT /api/documents/{uuid}Actualizar (solo Pendientes)
DELETE /api/documents/{uuid}Eliminar (solo Pendientes)

Filtros de búsqueda

// POST /api/documents/query
{
  "page": 1,
  "perPage": 50,
  "siiDocumentTypeCode": "33",
  "fromDocumentDate": "2026-05-01",
  "toDocumentDate": "2026-05-31",
  "search": "folio:1234",      // también: tipo:33, ref:OC-9876, receptor:12345678-9
  "statusId": 3,               // 3 = Emitidos
  "received": false            // false = emitidos, true = recibidos
}

Webhooks

Al crear un documento con notification_url, Wasabil envía un POST a esa URL cada vez que cambia de estado. El body contiene el documento completo. Reintentos automáticos si no recibe HTTP 200.

// Body del webhook — documento emitido
{
  "uuid":                  "36cdebc2-79b7-402f-ac91-1534d003a91b",
  "document":              90000000005953,   // ID numérico interno
  "sii_document_type_id":  33,
  "status_id":             3,                // 3=Emitido · 4=Fallido · 6=Pendiente
  "folio":                 "1234",
  "document_date":         "2026-05-14",
  "company_id":            2337,
  "client_id":             111481,
  "receiver_rut":          "12.345.678-9",
  "receiver_name":         "Cliente SpA",
  "currency_id":           1,
  "current_nsubtotal":     100000,
  "current_niva":          19000,
  "current_ntotal":        119000,
  "invoice_reference":     "OC-9876",
  "error_code":            null,
  "display_error":         null,
  "has_document_pdf":      true,
  "document_pdf_url":      "https://api.wasabil.com/api/documents/.../document-pdf/...",
  "document_xml_url":      "https://api.wasabil.com/api/documents/.../document-xml/...",
  "status_updated_at":     "2026-05-14T10:31:15.000000Z",
  "details": [
    { "name": "Consultoría", "quantity": 1, "price": 100000, "total": 119000 }
  ]
}

Otros módulos de la API

Clientes

CRUD completo con metafields, múltiples direcciones y giros por cliente.

MétodoEndpointDescripción
GET /api/clientsListar todos los clientes
POST /api/clients/queryBuscar con filtros
GET /api/clients/rut/{rut}Buscar por RUT
POST /api/clientsCrear cliente
PUT /api/clients/{id}Actualizar cliente

Conciliación bancaria

Vincula movimientos bancarios con documentos emitidos o recibidos.

MétodoEndpointDescripción
POST /api/financials/transactionsRegistrar movimiento bancario
POST /api/financials/transactions/bulkCarga masiva de movimientos
POST /api/financials/reconcile/transaction-to-documentVincular pago → documento
POST /api/financials/reconcile/dereconcileDesconciliar

Metafields

Campos personalizados (Centro de Costos, Categoría, Proyecto, etc.) aplicables a documentos, clientes y proveedores.

// Asignar metafield a un documento
PUT /api/documents/{uuid}/metafields/proyecto
{ "value": "ecommerce-2026" }

Sandbox

Los documentos creados en sandbox incluyen "sandbox": true. Usa estos endpoints para simular estados sin depender del SII:

EndpointDescripción
POST /api/documents/{uuid}/set-issuedForzar estado Emitido
POST /api/documents/{uuid}/set-failedForzar estado Fallido

Preguntas frecuentes

¿Necesito manejar el certificado digital del SII?
No. Wasabil maneja todo el proceso de firma y envío al SII. Solo necesitas un token de API.
¿Cuántos documentos puedo emitir por request?
Con POST /api/documents/bulk puedes crear hasta 100 documentos en un solo request.
¿Cómo sé cuándo el documento fue aceptado por el SII?
La emisión es asíncrona. Usa webhooks (notification_url) para recibir una notificación cuando el DTE pase a estado Emitido (3) o Fallido (4). También puedes hacer polling en GET /api/documents/{uuid}/status.
¿La API soporta múltiples empresas?
Sí. Usa OAuth 2.0 con PKCE para integraciones multi-empresa. Cada token Bearer corresponde a una sola empresa.
¿Puedo emitir en USD o UF?
Sí. Usa el campo currency_symbol: "USD" o "UF". El tipo de cambio se obtiene automáticamente desde el Banco Central.
¿Qué pasa si falla la emisión?
El documento queda en estado Fallido (4). Recibirás el webhook con el error. Puedes corregir el documento y emitirlo nuevamente.

Empieza a integrar hoy

Crea tu cuenta gratis y obtén tu API token en minutos. Sandbox incluido.

Crear cuenta gratis Guía MCP para Claude