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:
| Campo | Valor |
|---|---|
| MCP Server URL | https://mcp.wasabil.com |
| Authorization URL | https://app.wasabil.com/oauth/authorize |
| Token URL | https://api.wasabil.com/api/oauth/token |
| Issuer | https://api.wasabil.com |
| Registration URL | https://mcp.wasabil.com/oauth/register |
| Client ID | wasabil-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 type | authorization_code |
| Response type | code |
| PKCE | S256 — obligatorio. Si el cliente lo ofrece como opción, actívalo. |
| Token endpoint auth method | none (public client) |
Tools disponibles en el MCP
| Tool | Descripción |
|---|---|
| Documentos | Emitir facturas, boletas y notas de crédito |
| Búsqueda | Consultar documentos por folio, cliente o fecha |
| Reportes | Ventas por mes, producto, cliente o atributo |
| Atributos | Asignar y filtrar metafields personalizados |
| Clientes | Crear y buscar receptores |
| Proveedores | Gestionar proveedores para facturas de compra |
| Conciliación | Vincular pagos bancarios con documentos |
| Cargar movimientos | Importar transacciones desde la cartola bancaria |
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
Tipos de DTE soportados
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.
| Campo | Tipo | Descripción | |
|---|---|---|---|
| sii_document_type_code | int | requerido | Código SII del tipo de documento |
| payment_method | string | requerido | contado o credito |
| details | array | requerido | Líneas del documento |
| details[].name | string | requerido | Nombre/glosa (max 80 caracteres) |
| details[].price | number | requerido | Precio unitario |
| details[].quantity | number | requerido | Cantidad (soporta decimales) |
| details[].discount | number | opcional | Descuento en % (0–100) |
| details[].exempt | boolean | opcional | Línea exenta de IVA (solo tipo 33) |
| issue | boolean | opcional | Emitir inmediatamente (default false) |
| currency_symbol | string | opcional | CLP | USD | UF |
| receiver_rut | string | opcional | RUT del receptor |
| receiver_name | string | opcional | Razón social |
| receiver_email | string | opcional | Email(s) separados por ";" |
| client_id | int | opcional | Id del cliente (alternativa a receiver_*) |
| notification_url | string | opcional | Webhook para cambios de estado |
| notify_all | boolean | opcional | Recibir todos los estados (default: solo emitidos) |
| invoice_reference | string | opcional | ID externo (nro de orden, etc.) |
| origin | string | opcional | Tienda/sucursal de origen |
| document_date | string | opcional | Fecha 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étodo | Endpoint | Descripción |
|---|---|---|
| POST /api/documents/query | Listar con filtros (paginado, hasta 250/página) | |
| GET /api/documents/{uuid} | Obtener documento completo | |
| GET /api/documents/{uuid}/status | Solo 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}/issue | Emitir documento pendiente | |
| POST /api/documents/{uuid}/cancel | Anular 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étodo | Endpoint | Descripción |
|---|---|---|
| GET /api/clients | Listar todos los clientes | |
| POST /api/clients/query | Buscar con filtros | |
| GET /api/clients/rut/{rut} | Buscar por RUT | |
| POST /api/clients | Crear cliente | |
| PUT /api/clients/{id} | Actualizar cliente | |
Conciliación bancaria
Vincula movimientos bancarios con documentos emitidos o recibidos.
| Método | Endpoint | Descripción |
|---|---|---|
| POST /api/financials/transactions | Registrar movimiento bancario | |
| POST /api/financials/transactions/bulk | Carga masiva de movimientos | |
| POST /api/financials/reconcile/transaction-to-document | Vincular pago → documento | |
| POST /api/financials/reconcile/dereconcile | Desconciliar | |
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:
| Endpoint | Descripción |
|---|---|
| POST /api/documents/{uuid}/set-issued | Forzar estado Emitido |
| POST /api/documents/{uuid}/set-failed | Forzar estado Fallido |
Preguntas frecuentes
POST /api/documents/bulk puedes crear hasta 100 documentos en un solo request.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.currency_symbol: "USD" o "UF". El tipo de cambio se obtiene automáticamente desde el Banco Central.