API para Desarrolladores

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.

Generación de Facturas Magic Heidi

¿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.

📋
Regulaciones ComplejasCumplimiento con Guías SIX v2.3
🏠
Direcciones EstructuradasSolo formatos estructurados desde Nov 2025
Reglas de ValidaciónQR-IBAN, tipos de referencia, límites
Inicio Rápido

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.

🇨🇭 Alojado en Suiza
Totalmente Conforme
🔄 Auto-Actualizado
🚀 Pruebas Gratis
📜
Guías SIX v2.3

Cumplimiento total desde noviembre 2025

🏠
Direcciones Estructuradas

Parseadas y formateadas automáticamente

💰
Validación de Montos

CHF/EUR 0.01 a 999,999,999.99

🏦
Verificación IBAN

Solo Suiza y Liechtenstein

Referencia API

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ámetroTipoDescripción
file_namestringNombre del archivo PDF de salida
invoice_numberintegerNúmero de referencia de factura
invoice_datestringFecha en formato DD/MM/YYYY
user_detailsobjectDatos de tu empresa
customer_detailsobjectDatos del destinatario
invoice_itemsarrayLí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
  }
]
Ejemplos de Código

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'];
Manejo de Errores

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.

Actualización Noviembre 2025

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.

Cumplimiento Empresarial Suizo
FAQ

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.

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

  1. Prueba la API con los ejemplos de código arriba—sin autenticación necesaria
  2. Integra en tu aplicación usando tu lenguaje preferido
  3. 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.