Générez des QR-factures suisses en un appel API
Créez des factures QR suisses conformes en quelques secondes. Une requête POST renvoie un PDF complet avec bulletin de versement—prêt à envoyer. Aucune clé API requise pour tester.

Créer vos QR-factures vous-même ? La réalité.
Créer manuellement des factures QR suisses fait perdre des heures chaque mois. Développer votre propre générateur implique de naviguer les réglementations SIX complexes, les adresses structurées et les règles de validation QR-IBAN.
Votre première facture en 60 secondes
Envoyez une requête POST pour générer une facture QR suisse complète.
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 réponse contient l'URL de votre PDF généré :
{
"result": "https://storage.googleapis.com/.../invoice-001.pdf"
}
C'est tout. Une facture suisse complète et conforme avec bulletin QR.
Pourquoi utiliser une API pour les QR-factures ?
Depuis octobre 2022, les QR-factures ont remplacé tous les anciens bulletins de versement. Chaque facture à des clients suisses nécessite désormais un code QR standardisé. Développer cela vous-même signifie des semaines de travail et une maintenance continue à chaque évolution réglementaire.
Conformité totale depuis novembre 2025
Analyse et formatage automatiques
CHF/EUR de 0.01 à 999'999'999.99
Suisse & Liechtenstein uniquement
Documentation complète
Hébergé à Zurich (europe-west6) pour une latence optimale et la résidence des données en Suisse.
Endpoint
POST https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d
Paramètres requis
| Paramètre | Type | Description |
|---|---|---|
file_name | string | Nom du fichier PDF généré |
invoice_number | integer | Numéro de référence de la facture |
invoice_date | string | Date au format JJ/MM/AAAA |
user_details | object | Coordonnées de votre entreprise |
customer_details | object | Coordonnées du destinataire |
invoice_items | array | Lignes de facturation |
Objet user_details :
{
"name": "Company Name",
"address": "Street and number",
"zip": "8001",
"city": "Zürich",
"iban": "CH93 0076 2011 6238 5295 7"
}
Objet customer_details :
{
"name": "Customer Name",
"address": "Street and number",
"zip": "1204",
"city": "Genève"
}
Tableau invoice_items :
[
{
"description": "Service description",
"quantity": 1.5,
"unit_price": 100.00
}
]
Paramètres optionnels et TVA
Personnalisez vos factures avec ces options supplémentaires.
Paramètres optionnels
Ajustez précisément le rendu de vos factures.
- language: de, fr, it, en (défaut: en)
- currency: CHF ou EUR (défaut: CHF)
- logo_url: URL de votre logo d'entreprise
- qr_reference: Référence de paiement pour le bulletin QR
- message: Message additionnel (max 140 car.)
- qr_only: Générer uniquement le bulletin QR
- dont_round: Ne pas arrondir aux 5 centimes
Paramètres TVA
Pour les entreprises assujetties, activez le calcul de la TVA.
- vat_enabled: true pour activer la TVA
- vat_percentage: Taux en décimal (ex: 0.081)
- vat_number: Votre numéro TVA CHE
- Taux normal 2024: 8.1% (0.081)
- Taux réduit: 2.6% (0.026) alimentation, livres
Types de référence QR
Choisissez le type de référence adapté à vos besoins.
- QR-Reference (QRR): 27 chiffres, nécessite QR-IBAN
- Creditor Reference (SCOR): ISO 11649, commence par RF
- Sans référence (NON): Factures simples
- QR-IBAN: Codes bancaires 30000-31999
Intégration dans votre langage
Exemples prêts à l'emploi pour les langages de programmation populaires.
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'];
Codes de réponse & validation
L'API renvoie des codes HTTP standards pour faciliter la gestion des erreurs.
200 OK
{
"result": "https://storage.googleapis.com/.../invoice.pdf"
}
422 Unprocessable Entity
{
"error": "Provided IBAN is invalid"
}
Erreurs de validation courantes :
- Format ou checksum IBAN invalide
- Paramètres requis manquants
- Format de date invalide (doit être JJ/MM/AAAA)
- Montant hors plage valide
500 Internal Server Error
Ces erreurs sont surveillées en interne. Si vous en rencontrez une, envoyez un email à hello@magicheidi.ch avec l'horodatage pour le dépannage.
Mises à jour de conformité automatiques
Depuis le 22 novembre 2025, les directives SIX version 2.3 exigent uniquement des adresses structurées. Toutes les adresses doivent inclure rue, numéro, code postal, ville et pays. L'API Magic Heidi gère cela automatiquement—quand vous fournissez une adresse comme 'Bahnhofstrasse 10', nous l'analysons et la structurons correctement pour le code QR.

Questions fréquentes
Ai-je besoin d'un QR-IBAN ?
Uniquement si vous souhaitez utiliser des numéros de référence QR (QRR). Pour les références créancier (SCOR) ou sans référence, un IBAN suisse standard suffit. Vérifiez les positions 5-9 de votre IBAN—si le nombre est entre 30000 et 31999, c'est un QR-IBAN.
Puis-je générer des factures en euros ?
Oui. Définissez "currency": "EUR" dans votre requête. CHF et EUR sont supportés selon les spécifications QR-facture suisse.
Cela fonctionne-t-il pour des clients internationaux ?
Le standard QR-facture ne supporte que les IBAN suisses et liechtensteinois. Pour les factures internationales, vous aurez besoin d'un compte bancaire suisse.
Puis-je générer uniquement le bulletin QR ?
Oui. Définissez "qr_only": true pour recevoir uniquement le bulletin de versement QR sans le document facture complet.
Comment ajouter mon logo d'entreprise ?
Incluez un paramètre logo_url avec une URL publique vers votre image de logo. Nous recommandons le format PNG ou SVG.
Y a-t-il une limite de requêtes ?
Pour les tests sans clé API, un usage raisonnable est attendu. Pour les applications en production, contactez hello@magicheidi.ch pour demander une clé API avec des limites définies.
Ce qui rend cette API différente
Conçue spécifiquement pour la facturation suisse.
Factures complètes
Factures professionnelles complètes, pas juste des codes QR
Quatre langues
Allemand, français, italien et anglais
Personnalisation
Ajoutez votre logo sans manipulation PDF complexe
Tests gratuits
Ni carte bancaire ni clé API requises
Hébergé en Suisse
Données stockées à Zurich (europe-west6)
Toujours conforme
Mises à jour automatiques selon les réglementations
Commencez à facturer dès aujourd'hui
Testez l'API avec les exemples ci-dessus—aucune authentification requise. Demandez une clé API pour la production.
Pour commencer
- Testez l'API avec les exemples de code ci-dessus—aucune authentification requise
- Intégrez dans votre application avec le langage de votre choix
- Demandez une clé API à hello@magicheidi.ch pour la production
Pour la documentation API complète et les mises à jour, visitez notre dépôt GitHub.
Questions ? Contactez hello@magicheidi.ch. Nous répondons généralement sous 24 heures.
Magic Heidi est une plateforme de facturation suisse conçue pour les indépendants et les PME. Disponible sur iOS, Android, Mac, Windows et web.