Entwickler API

Schweizer QR-Rechnungen mit einem API-Aufruf

Erstellen Sie konforme Schweizer QR-Rechnungen in Sekunden. Ein POST-Request liefert ein komplettes PDF mit Einzahlungsschein—bereit für Ihre Kunden. Kein API-Key zum Testen nötig.

Magic Heidi Rechnungserstellung

QR-Rechnungen selbst bauen? Die Realität.

Schweizer QR-Rechnungen manuell zu erstellen kostet jeden Monat Stunden. Eine eigene Lösung zu entwickeln bedeutet, komplexe SIX-Richtlinien, strukturierte Adressformate und QR-IBAN-Validierung zu meistern.

📋
Komplexe VorschriftenSIX Implementation Guidelines v2.3 Konformität
🏠
Strukturierte AdressenNur strukturierte Formate seit Nov 2025 erlaubt
ValidierungsregelnQR-IBAN, Referenztypen, Betragslimiten
Schnellstart

Ihre erste Rechnung in 60 Sekunden

Senden Sie einen POST-Request um eine komplette Schweizer QR-Rechnung zu generieren.

curl -X POST 'https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d' \
  -H 'Content-Type: application/json' \
  -d '{
    "data": {
      "language": "de",
      "file_name": "rechnung-001.pdf",
      "invoice_number": 1,
      "invoice_date": "15/01/2025",
      "user_details": {
        "name": "Ihre Firma GmbH",
        "address": "Bahnhofstrasse 10",
        "zip": "8001",
        "city": "Zürich",
        "iban": "CH93 0076 2011 6238 5295 7"
      },
      "customer_details": {
        "name": "Kunde AG",
        "address": "Rue du Marché 5",
        "zip": "1204",
        "city": "Genève"
      },
      "invoice_items": [
        {
          "description": "Beratungsleistungen",
          "quantity": 8,
          "unit_price": 150.00
        }
      ]
    }
  }'

Die Antwort enthält eine URL zu Ihrem generierten PDF:

{
  "result": "https://storage.googleapis.com/.../rechnung-001.pdf"
}

Das war's. Eine vollständige, konforme Schweizer Rechnung mit QR-Einzahlungsschein.

Warum eine API für Schweizer QR-Rechnungen?

Seit Oktober 2022 haben Schweizer QR-Rechnungen alle alten Einzahlungsscheine ersetzt. Jede Rechnung an Schweizer Kunden benötigt nun einen standardisierten QR-Code mit Zahlungsdaten. Das selbst zu entwickeln bedeutet Wochen Arbeit und laufende Wartung bei Regeländerungen.

🇨🇭 Schweizer Hosting
Vollständig konform
🔄 Auto-Updates
🚀 Gratis testen
📜
SIX-Richtlinien v2.3

Vollständige Konformität seit November 2025

🏠
Strukturierte Adressen

Automatisch geparst und formatiert

💰
Betragsvalidierung

CHF/EUR 0.01 bis 999'999'999.99

🏦
IBAN-Prüfung

Nur Schweiz & Liechtenstein

API-Referenz

Vollständige Dokumentation

Gehostet in Zürich (europe-west6) für optimale Latenz und Datenhaltung in der Schweiz.

Endpoint

POST https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d

Erforderliche Parameter

ParameterTypBeschreibung
file_namestringDateiname des PDF
invoice_numberintegerRechnungsnummer
invoice_datestringDatum im Format TT/MM/JJJJ
user_detailsobjectIhre Firmendaten
customer_detailsobjectEmpfängerdaten
invoice_itemsarrayRechnungspositionen

user_details Objekt:

{
  "name": "Firmenname",
  "address": "Strasse und Hausnummer",
  "zip": "8001",
  "city": "Zürich",
  "iban": "CH93 0076 2011 6238 5295 7"
}

customer_details Objekt:

{
  "name": "Kundenname",
  "address": "Strasse und Hausnummer",
  "zip": "1204",
  "city": "Genève"
}

invoice_items Array:

[
  {
    "description": "Dienstleistungsbeschreibung",
    "quantity": 1.5,
    "unit_price": 100.00
  }
]
Code-Beispiele

Integration in Ihrer Sprache

Sofort einsetzbare Code-Beispiele für gängige Programmiersprachen.

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"Rechnungs-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('Rechnungs-URL:', response.data.result);
  })
  .catch(error => {
    console.error('Fehler:', 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 "Rechnungs-URL: " . $result['result'];
Fehlerbehandlung

Antwort-Codes & Validierung

Die API gibt Standard-HTTP-Statuscodes für einfache Fehlerbehandlung zurück.

200 OK

{
  "result": "https://storage.googleapis.com/.../rechnung.pdf"
}

422 Unprocessable Entity

{
  "error": "Provided IBAN is invalid"
}

Häufige Validierungsfehler:

  • Ungültiges IBAN-Format oder Prüfsumme
  • Fehlende Pflichtparameter
  • Ungültiges Datumsformat (muss TT/MM/JJJJ sein)
  • Betrag ausserhalb des gültigen Bereichs

500 Internal Server Error

Diese werden intern überwacht. Falls Sie einen erhalten, senden Sie eine E-Mail an hello@magicheidi.ch mit dem Zeitstempel zur Fehleranalyse.

Update November 2025

Automatische Compliance-Updates

Seit dem 22. November 2025 verlangen die SIX Implementation Guidelines Version 2.3 ausschliesslich strukturierte Adressen. Alle Adressen müssen Strassenname, Hausnummer, PLZ, Ort und Land enthalten. Die Magic Heidi API handhabt dies automatisch—wenn Sie eine Adresse wie 'Bahnhofstrasse 10' angeben, parsen und strukturieren wir sie korrekt für den QR-Code.

Schweizer Business Compliance
FAQ

Häufig gestellte Fragen

Brauche ich eine QR-IBAN?

Nur wenn Sie QR-Referenznummern (QRR) verwenden möchten. Für Creditor References (SCOR) oder ohne Referenz funktioniert eine normale Schweizer IBAN. Prüfen Sie die Positionen 5-9 Ihrer IBAN—liegt die Zahl zwischen 30000 und 31999, ist es eine QR-IBAN.

Kann ich Rechnungen in Euro erstellen?

Ja. Setzen Sie "currency": "EUR" in Ihrer Anfrage. Sowohl CHF als auch EUR werden gemäss QR-Rechnungs-Spezifikation unterstützt.

Funktioniert das für internationale Kunden?

Der QR-Rechnungs-Standard unterstützt nur Schweizer und Liechtensteiner IBANs. Für internationale Rechnungen benötigen Sie ein Schweizer Bankkonto.

Kann ich nur den QR-Einzahlungsschein generieren?

Ja. Setzen Sie "qr_only": true um nur den QR-Einzahlungsschein ohne vollständiges Rechnungsdokument zu erhalten.

Wie füge ich mein Firmenlogo hinzu?

Fügen Sie einen logo_url-Parameter mit einer öffentlich zugänglichen URL zu Ihrem Logo hinzu. Wir empfehlen PNG- oder SVG-Format.

Gibt es ein Rate Limit?

Für Tests ohne API-Key wird eine angemessene Nutzung erwartet. Für Produktionsanwendungen kontaktieren Sie hello@magicheidi.ch um einen API-Key mit definierten Limits anzufordern.

Starten Sie noch heute mit der Rechnungserstellung

Testen Sie die API mit den obigen Code-Beispielen—keine Authentifizierung nötig. Fordern Sie einen API-Key für den Produktiveinsatz an.

Erste Schritte

  1. Testen Sie die API mit den obigen Code-Beispielen—keine Authentifizierung nötig
  2. Integrieren Sie in Ihre Anwendung mit Ihrer bevorzugten Programmiersprache
  3. Fordern Sie einen API-Key an unter hello@magicheidi.ch für den Produktiveinsatz

Für die vollständige API-Dokumentation und Updates besuchen Sie unser GitHub Repository.

Fragen? Schreiben Sie an hello@magicheidi.ch. Wir antworten in der Regel innerhalb von 24 Stunden.


Magic Heidi ist eine Schweizer Rechnungssoftware für Freiberufler und Kleinunternehmen. Verfügbar für iOS, Android, Mac, Windows und Web.