Genera Facturas Suizas QR-Bill con Una Llamada API
Crea facturas suizas QR-bill conformes en segundos. Una solicitud POST devuelve un PDF completo con talón de pago—listo para tus clientes. Sin clave API para empezar a probar.

¿Creando QR-Bills Manualmente? La Realidad.
Crear facturas suizas QR-bill manualmente consume horas cada mes. Construir tu propio generador implica navegar regulaciones SIX complejas, requisitos de direcciones estructuradas y reglas de validación QR-IBAN.
Tu Primera Factura en 60 Segundos
Envía una solicitud POST para generar una factura suiza QR-bill completa.
curl -X POST 'https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d' \
-H 'Content-Type: application/json' \
-d '{
"data": {
"language": "en",
"file_name": "invoice-001.pdf",
"invoice_number": 1,
"invoice_date": "15/01/2025",
"user_details": {
"name": "Your Company GmbH",
"address": "Bahnhofstrasse 10",
"zip": "8001",
"city": "Zürich",
"iban": "CH93 0076 2011 6238 5295 7"
},
"customer_details": {
"name": "Customer AG",
"address": "Rue du Marché 5",
"zip": "1204",
"city": "Genève"
},
"invoice_items": [
{
"description": "Consulting services",
"quantity": 8,
"unit_price": 150.00
}
]
}
}'
La respuesta contiene una URL a tu PDF generado:
{
"result": "https://storage.googleapis.com/.../invoice-001.pdf"
}
Eso es todo. Una factura suiza completa y conforme con talón de pago QR.
Por Qué Usar una API para Swiss QR-Bills
Desde octubre de 2022, las facturas QR suizas reemplazaron todos los talones de pago antiguos. Cada factura a clientes suizos ahora requiere un código QR estandarizado con datos de pago. Construir esto tú mismo significa semanas de desarrollo y mantenimiento continuo cuando cambian las regulaciones.
Cumplimiento total desde noviembre 2025
Parseadas y formateadas automáticamente
CHF/EUR 0.01 a 999,999,999.99
Solo Suiza y Liechtenstein
Documentación Completa
Alojado en Zúrich (europe-west6) para óptima latencia suiza y residencia de datos.
Endpoint
POST https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d
Parámetros Requeridos
| Parámetro | Tipo | Descripción |
|---|---|---|
file_name | string | Nombre del archivo PDF de salida |
invoice_number | integer | Número de referencia de factura |
invoice_date | string | Fecha en formato DD/MM/YYYY |
user_details | object | Datos de tu empresa |
customer_details | object | Datos del destinatario |
invoice_items | array | Líneas de la factura |
objeto user_details:
{
"name": "Company Name",
"address": "Street and number",
"zip": "8001",
"city": "Zürich",
"iban": "CH93 0076 2011 6238 5295 7"
}
objeto customer_details:
{
"name": "Customer Name",
"address": "Street and number",
"zip": "1204",
"city": "Genève"
}
array invoice_items:
[
{
"description": "Service description",
"quantity": 1.5,
"unit_price": 100.00
}
]
Parámetros Opcionales e IVA
Personaliza tus facturas con estas opciones adicionales.
Parámetros Opcionales
Ajusta la salida de tu factura con estas configuraciones.
- language: de, fr, it, en (por defecto: en)
- currency: CHF o EUR (por defecto: CHF)
- logo_url: URL del logo de tu empresa
- qr_reference: Referencia de pago para talón QR
- message: Mensaje adicional de pago (máx 140 caracteres)
- qr_only: Genera solo el talón QR, no factura completa
- dont_round: Omitir redondeo a 5 céntimos
Parámetros de IVA
Para empresas registradas, activa los cálculos de impuestos.
- vat_enabled: Establecer a true para activar IVA
- vat_percentage: Tasa como decimal (ej., 0.081)
- vat_number: Tu número IVA CHE
- Tasa estándar 2024: 8.1% (0.081)
- Tasa reducida: 2.6% (0.026) para alimentos, libros
Tipos de Referencia QR
Elige el tipo de referencia adecuado para tus necesidades.
- QR-Reference (QRR): 27 dígitos, requiere QR-IBAN
- Creditor Reference (SCOR): ISO 11649, empieza con RF
- No Reference (NON): Facturas simples
- QR-IBAN: Códigos bancarios 30000-31999
Integración en Tu Lenguaje
Ejemplos de código listos para usar en lenguajes populares.
Python
import requests
import json
url = "https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d"
payload = {
"data": {
"language": "de",
"currency": "CHF",
"file_name": "rechnung-2025-001.pdf",
"invoice_number": 1,
"invoice_date": "15/01/2025",
"vat_enabled": True,
"vat_percentage": 0.081,
"vat_number": "CHE-123.456.789",
"user_details": {
"name": "Muster GmbH",
"address": "Bahnhofstrasse 10",
"zip": "8001",
"city": "Zürich",
"iban": "CH93 0076 2011 6238 5295 7"
},
"customer_details": {
"name": "Kunde AG",
"address": "Hauptstrasse 1",
"zip": "3000",
"city": "Bern"
},
"invoice_items": [
{
"description": "Beratungsleistungen Januar 2025",
"quantity": 10,
"unit_price": 180.00
},
{
"description": "Reisekosten",
"quantity": 1,
"unit_price": 45.50
}
]
}
}
response = requests.post(url, json=payload)
result = response.json()
print(f"Invoice URL: {result['result']}")
Node.js (Axios)
const axios = require('axios');
const url = 'https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d';
const payload = {
data: {
language: 'fr',
currency: 'CHF',
file_name: 'facture-2025-001.pdf',
invoice_number: 1,
invoice_date: '15/01/2025',
logo_url: 'https://your-domain.ch/logo.png',
user_details: {
name: 'Votre Entreprise Sàrl',
address: 'Rue du Lac 15',
zip: '1003',
city: 'Lausanne',
iban: 'CH93 0076 2011 6238 5295 7'
},
customer_details: {
name: 'Client SA',
address: 'Avenue de la Gare 8',
zip: '1201',
city: 'Genève'
},
invoice_items: [
{
description: 'Services de développement',
quantity: 40,
unit_price: 120.00
}
]
}
};
axios.post(url, payload)
.then(response => {
console.log('Invoice URL:', response.data.result);
})
.catch(error => {
console.error('Error:', error.response?.data || error.message);
});
PHP (cURL)
<?php
$url = 'https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d';
$payload = [
'data' => [
'language' => 'it',
'file_name' => 'fattura-2025-001.pdf',
'invoice_number' => 1,
'invoice_date' => '15/01/2025',
'user_details' => [
'name' => 'La Tua Azienda Sagl',
'address' => 'Via Nassa 20',
'zip' => '6900',
'city' => 'Lugano',
'iban' => 'CH93 0076 2011 6238 5295 7'
],
'customer_details' => [
'name' => 'Cliente SA',
'address' => 'Piazza Grande 5',
'zip' => '6600',
'city' => 'Locarno'
],
'invoice_items' => [
[
'description' => 'Servizi di consulenza',
'quantity' => 5,
'unit_price' => 200.00
]
]
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
echo "Invoice URL: " . $result['result'];
Códigos de Respuesta y Validación
La API devuelve códigos de estado HTTP estándar para fácil manejo de errores.
200 OK
{
"result": "https://storage.googleapis.com/.../invoice.pdf"
}
422 Unprocessable Entity
{
"error": "Provided IBAN is invalid"
}
Errores de validación comunes:
- Formato o checksum de IBAN inválido
- Parámetros requeridos faltantes
- Formato de fecha inválido (debe ser DD/MM/YYYY)
- Monto fuera del rango válido
500 Internal Server Error
Estos se monitorean internamente. Si encuentras uno, envía un email a hello@magicheidi.ch con la marca de tiempo para resolución.
Actualizaciones de Cumplimiento Automáticas
Desde el 22 de noviembre de 2025, las Guías de Implementación SIX versión 2.3 requieren solo direcciones estructuradas. Todas las direcciones deben incluir nombre de calle, número, código postal, ciudad y país. La API de Magic Heidi maneja esto automáticamente—cuando proporcionas una dirección como 'Bahnhofstrasse 10', la parseamos y estructuramos correctamente para el código QR.

Preguntas Frecuentes
¿Necesito un QR-IBAN?
Solo si quieres usar números QR-Reference (QRR). Para Creditor References (SCOR) o sin referencia, un IBAN suizo regular funciona bien. Verifica las posiciones 5-9 de tu IBAN—si el número está entre 30000 y 31999, es un QR-IBAN.
¿Puedo generar facturas en Euros?
Sí. Establece "currency": "EUR" en tu solicitud. Tanto CHF como EUR están soportados según las especificaciones Swiss QR-bill.
¿Funciona para clientes internacionales?
El estándar QR-bill solo soporta IBANs suizos y de Liechtenstein. Para facturas internacionales, necesitarás una cuenta bancaria suiza.
¿Puedo generar solo el talón de pago QR?
Sí. Establece "qr_only": true para recibir solo el talón de pago QR sin el documento de factura completo.
¿Cómo agrego el logo de mi empresa?
Incluye un parámetro logo_url con una URL públicamente accesible a tu imagen de logo. Recomendamos formato PNG o SVG.
¿Hay límite de peticiones?
Para pruebas sin clave API, se espera un uso razonable. Para aplicaciones en producción, contacta a hello@magicheidi.ch para solicitar una clave API con límites definidos.
Qué Hace Esta API Diferente
Construida específicamente para requisitos de facturación suiza.
Facturas Completas
Facturas profesionales completas, no solo códigos QR
Cuatro Idiomas
Alemán, francés, italiano e inglés
Marca Personalizada
Añade tu logo sin manipulación PDF compleja
Pruebas Gratis
Sin tarjeta de crédito ni clave API requerida
Alojado en Suiza
Los datos permanecen en Zúrich (europe-west6)
Siempre Conforme
Actualizaciones automáticas cuando cambian regulaciones
Empieza a Generar Facturas Hoy
Prueba la API con los ejemplos de código arriba—sin autenticación necesaria. Solicita una clave API para uso en producción.
Cómo Empezar
- Prueba la API con los ejemplos de código arriba—sin autenticación necesaria
- Integra en tu aplicación usando tu lenguaje preferido
- Solicita una clave API en hello@magicheidi.ch para uso en producción
Para la documentación completa de la API y actualizaciones, visita nuestro repositorio GitHub.
¿Preguntas? Escríbenos a hello@magicheidi.ch. Normalmente respondemos en 24 horas.
Magic Heidi es una plataforma de facturación suiza creada para freelancers y pequeñas empresas. Disponible en iOS, Android, Mac, Windows y web.