API Développeur

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.

Génération de factures Magic Heidi

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.

📋
Réglementations complexesConformité aux directives SIX v2.3
🏠
Adresses structuréesFormat structuré obligatoire depuis nov. 2025
Règles de validationQR-IBAN, types de référence, limites de montant
Démarrage rapide

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.

🇨🇭 Hébergé en Suisse
100% Conforme
🔄 Mises à jour auto
🚀 Tests gratuits
📜
Directives SIX v2.3

Conformité totale depuis novembre 2025

🏠
Adresses structurées

Analyse et formatage automatiques

💰
Validation des montants

CHF/EUR de 0.01 à 999'999'999.99

🏦
Vérification IBAN

Suisse & Liechtenstein uniquement

Référence API

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ètreTypeDescription
file_namestringNom du fichier PDF généré
invoice_numberintegerNuméro de référence de la facture
invoice_datestringDate au format JJ/MM/AAAA
user_detailsobjectCoordonnées de votre entreprise
customer_detailsobjectCoordonnées du destinataire
invoice_itemsarrayLignes 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
  }
]
Exemples de code

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'];
Gestion des erreurs

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.

Mise à jour novembre 2025

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.

Conformité entreprise suisse
FAQ

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.

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

  1. Testez l'API avec les exemples de code ci-dessus—aucune authentification requise
  2. Intégrez dans votre application avec le langage de votre choix
  3. 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.