API Facture QR Suisse : Générez des Factures Conformes en Secondes

API RESTful conviviale pour la génération de factures QR suisses. Conforme ISO 20022, support multilingue, compatible QR-IBAN. Un appel API, un PDF entièrement conforme.

Génération de Factures QR Suisses

Vous développez des fonctionnalités de facturation pour le marché suisse ? Arrêtez de vous battre avec les spécifications QR-Rechnung et les normes ISO 20022. Notre API génère des factures QR suisses conformes en un seul appel — sans bibliothèques complexes, sans casse-tête de conformité.

Que vous développiez une plateforme SaaS, intégriez la facturation dans votre ERP ou créiez un outil pour indépendants, vous aurez des factures QR conformes opérationnelles en moins de 30 minutes.

Pourquoi Utiliser une API Plutôt que Développer en Interne ?

La génération de factures QR suisses semble simple jusqu'à ce qu'on entre dans les détails. Voici ce qui vous attend si vous la développez vous-même :

📋

Complexité de Conformité

67 pages de directives d'implémentation v2.3. Normes ISO 20022, validation QR-IBAN, chiffres de contrôle, adresses structurées.
🔄

Maintenance Continue

Les standards bancaires suisses évoluent. La mise à jour 2025 a introduit les adresses structurées, de nouveaux jeux de caractères et de nouvelles règles de validation.
🧪

Charge de Test

Chaque combinaison de type IBAN, format de référence, devise et langue doit être testée. Plus les cas limites, taux TVA, formatage PDF.
⏱️

Délai de Mise sur le Marché

Développement from scratch : 2-3 mois. Avec notre API : générez des factures en quelques heures.
Fonctionnalités Complètes

Conçue pour les Développeurs Professionnels

Tout ce dont vous avez besoin pour générer des factures QR suisses conformes, maintenu et mis à jour automatiquement.

Support QR-IBAN et IBAN Standard

Les deux méthodes de paiement fonctionnent parfaitement. QR-IBAN (IID 30000-31999) pour la réconciliation automatisée avec références à 27 chiffres. IBAN standard avec Référence Créancier ou sans référence pour la facturation simple.

  • Validation automatique du format IBAN
  • Calcul du chiffre de contrôle inclus
  • Validation du numéro de référence par type d'IBAN
  • Aucune validation manuelle requise

Adresses Structurées Prêtes pour 2025

Mise à jour critique : À partir du 21 novembre 2025, les factures QR exigent des adresses structurées. Notre API supporte déjà le nouveau format.

  • Format d'adresse structuré (type S)
  • Nom de rue et numéro séparés
  • Validation code postal et ville
  • Support des codes pays

Génération Multilingue de Factures

Générez des factures dans toutes les langues officielles suisses plus l'anglais. La langue affecte les libellés, le formatage et l'affichage des dates.

  • Allemand (Deutsch) – QR-Rechnung
  • Français – Facture QR
  • Italien (Italiano) – Fattura QR
  • Anglais – QR Invoice

Gestion Intelligente des Références

Tous les formats de référence supportés avec validation automatique et calcul du chiffre de contrôle.

  • Référence QR (27 chiffres) avec chiffre de contrôle auto
  • Référence Créancier (ISO 11649, 5-25 car.)
  • Option sans référence pour facturation simple
  • Validation du format selon le type d'IBAN

Gestion TVA Intégrée

TVA suisse aux taux standards ou taux personnalisés. Calcul automatique et formatage selon les normes suisses.

  • Taux standards (8.1%, 2.6%, 3.8%)
  • Taux TVA personnalisés supportés
  • Plusieurs taux TVA par facture
  • Calcul automatique brut et net

Options de Personnalisation

Factures professionnelles avec votre identité visuelle et intégration à la gestion documentaire.

  • Intégration du logo (PNG, max 2 Mo)
  • Noms de fichiers PDF personnalisés
  • Contrôle de la numérotation des factures
  • Attribution d'ID interne
Démarrage Rapide

Testez l'API Maintenant

Aucune authentification requise pour les tests. Copiez cette commande et exécutez-la dans votre terminal :

curl --location --request POST \
  'https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "data": {
      "user_details": {
        "name": "Your Company GmbH",
        "address": "Bahnhofstrasse 1",
        "zip": "8001",
        "city": "Zürich",
        "iban": "CH0700700112900411647"
      },
      "customer_details": {
        "name": "Customer AG",
        "address": "Rue du Rhône 1",
        "zip": "1204",
        "city": "Genève"
      },
      "invoice_items": [
        {
          "description": "Software Development",
          "quantity": 8.5,
          "unit_price": 150.00
        }
      ]
    }
  }'

Vous recevrez une facture PDF complète avec un code QR scannable. Aucune clé API nécessaire pour les tests.

Paramètres

Paramètres de Requête Expliqués

Structure JSON simple avec champs obligatoires et optionnels.

Champs Obligatoires

{
  "user_details": {
    "name": "Nom du créancier (max 70 car.)",
    "address": "Rue et numéro", 
    "zip": "Code postal",
    "city": "Ville",
    "iban": "CH76 0070 0112 3456 7890 1"
  },
  "customer_details": {
    "name": "Nom du débiteur (max 70 car.)",
    "address": "Rue et numéro",
    "zip": "Code postal", 
    "city": "Ville"
  },
  "invoice_items": [
    {
      "description": "Service ou produit",
      "quantity": 1.0,
      "unit_price": 100.00
    }
  ]
}

Paramètres Optionnels

{
  "invoice_number": "INV-2024-001",
  "invoice_date": "2024-01-15",
  "reference": "210000000003139471430009017",
  "language": "de",
  "currency": "CHF",
  "vat_rate": 8.1,
  "filename": "invoice_customer_2024_001",
  "logo_url": "https://yoursite.com/logo.png"
}

Gestion des Réponses

Succès (HTTP 200) :

{
  "result": {
    "pdf_url": "https://storage.googleapis.com/...",
    "invoice_id": "abc123",
    "total_amount": 1275.00
  }
}

Erreur (HTTP 400) :

{
  "error": {
    "code": "INVALID_IBAN",
    "message": "IBAN check digit validation failed"
  }
}

L'URL du PDF reste accessible pendant 30 jours. Téléchargez et stockez-le dans votre système immédiatement.

Exemples de Code

Implémentation dans Votre Langage

Exemples prêts à copier-coller pour JavaScript, Python, PHP, Ruby, Go et Java.

JavaScript / Node.js

const axios = require('axios');

async function generateInvoice() {
  const response = await axios.post(
    'https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d',
    {
      data: {
        user_details: {
          name: "Tech Solutions AG",
          address: "Technoparkstrasse 1",
          zip: "8005",
          city: "Zürich",
          iban: "CH0700700112900411647"
        },
        customer_details: {
          name: "Client Corp",
          address: "Avenue de la Gare 10",
          zip: "1003",
          city: "Lausanne"
        },
        invoice_items: [
          {
            description: "API Integration Service",
            quantity: 5,
            unit_price: 200.00
          }
        ]
      }
    }
  );
  
  return response.data.result.pdf_url;
}

Python

import requests
import json

def generate_qr_invoice():
    url = "https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d"
    
    payload = {
        "data": {
            "user_details": {
                "name": "Your Company GmbH",
                "address": "Bahnhofstrasse 1",
                "zip": "8001",
                "city": "Zürich",
                "iban": "CH0700700112900411647"
            },
            "customer_details": {
                "name": "Customer Name",
                "address": "Street Address",
                "zip": "1000",
                "city": "Lausanne"
            },
            "invoice_items": [
                {
                    "description": "Consulting Services",
                    "quantity": 10,
                    "unit_price": 180.00
                }
            ]
        }
    }
    
    response = requests.post(url, json=payload)
    return response.json()['result']['pdf_url']

PHP

<?php
$curl = curl_init();

$data = [
    'data' => [
        'user_details' => [
            'name' => 'Swiss Services SA',
            'address' => 'Route de Berne 5',
            'zip' => '1010',
            'city' => 'Lausanne',
            'iban' => 'CH0700700112900411647'
        ],
        'customer_details' => [
            'name' => 'Client Company',
            'address' => 'Via Nassa 1',
            'zip' => '6900',
            'city' => 'Lugano'
        ],
        'invoice_items' => [
            [
                'description' => 'Web Development',
                'quantity' => 20,
                'unit_price' => 125.00
            ]
        ]
    ]
];

curl_setopt_array($curl, [
    CURLOPT_URL => 'https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($data),
    CURLOPT_HTTPHEADER => ['Content-Type: application/json']
]);

$response = curl_exec($curl);
$result = json_decode($response, true);

echo $result['result']['pdf_url'];
?>

Ruby

require 'net/http'
require 'json'
require 'uri'

uri = URI('https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d')

payload = {
  data: {
    user_details: {
      name: "Development Studio GmbH",
      address: "Seestrasse 20",
      zip: "8002",
      city: "Zürich",
      iban: "CH0700700112900411647"
    },
    customer_details: {
      name: "Client Business AG",
      address: "Spalenring 5",
      zip: "4055",
      city: "Basel"
    },
    invoice_items: [
      {
        description: "Design Services",
        quantity: 15,
        unit_price: 160.00
      }
    ]
  }
}

response = Net::HTTP.post(uri, payload.to_json, 
  'Content-Type' => 'application/json')

result = JSON.parse(response.body)
puts result['result']['pdf_url']

Go

package main

import (
    "bytes"
    "encoding/json"
    "net/http"
)

type InvoiceRequest struct {
    Data struct {
        UserDetails struct {
            Name    string `json:"name"`
            Address string `json:"address"`
            Zip     string `json:"zip"`
            City    string `json:"city"`
            IBAN    string `json:"iban"`
        } `json:"user_details"`
        CustomerDetails struct {
            Name    string `json:"name"`
            Address string `json:"address"`
            Zip     string `json:"zip"`
            City    string `json:"city"`
        } `json:"customer_details"`
        InvoiceItems []struct {
            Description string  `json:"description"`
            Quantity    float64 `json:"quantity"`
            UnitPrice   float64 `json:"unit_price"`
        } `json:"invoice_items"`
    } `json:"data"`
}

func generateInvoice() (string, error) {
    url := "https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d"
    
    var req InvoiceRequest
    req.Data.UserDetails.Name = "Swiss Tech AG"
    req.Data.UserDetails.Address = "Technoparkstrasse 1"
    req.Data.UserDetails.Zip = "8005"
    req.Data.UserDetails.City = "Zürich"
    req.Data.UserDetails.IBAN = "CH0700700112900411647"
    
    jsonData, _ := json.Marshal(req)
    resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData))
    
    // Handle response...
    return "pdf_url", err
}

Java

import java.net.http.*;
import java.net.URI;
import org.json.JSONObject;

public class QRInvoiceGenerator {
    public static String generateInvoice() throws Exception {
        String url = "https://europe-west6-magic-heidi.cloudfunctions.net/create_invoice_abstract_v1d";
        
        JSONObject payload = new JSONObject()
            .put("data", new JSONObject()
                .put("user_details", new JSONObject()
                    .put("name", "Software GmbH")
                    .put("address", "Europaallee 1")
                    .put("zip", "8004")
                    .put("city", "Zürich")
                    .put("iban", "CH0700700112900411647"))
                .put("customer_details", new JSONObject()
                    .put("name", "Client AG")
                    .put("address", "Bahnhofstrasse 10")
                    .put("zip", "3011")
                    .put("city", "Bern"))
                .put("invoice_items", new JSONArray()
                    .put(new JSONObject()
                        .put("description", "Development")
                        .put("quantity", 40)
                        .put("unit_price", 150.00))));
        
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(payload.toString()))
            .build();
            
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
            
        JSONObject result = new JSONObject(response.body());
        return result.getJSONObject("result").getString("pdf_url");
    }
}

Cas d'Usage Courants & Patterns d'Intégration

Scénarios concrets où notre API résout les défis de facturation suisse pour les développeurs et les entreprises.

Temps de réponse 2 secondes
🔒 Conforme ISO 20022
🌍 Multilingue
Adresses structurées 2025
💼
Plateformes SaaS de Facturation

Ajoutez le support du marché suisse. Les codes QR facilitent les paiements clients via scan depuis l'app bancaire.

🔄
Intégration ERP et CRM

Connectez vos systèmes existants à la génération automatique de factures. Création de factures déclenchée par webhook avec les données CRM.

👨‍💼
Outils pour Indépendants

Support multilingue, gestion TVA appropriée, PDFs professionnels. Conformité suisse gérée automatiquement.

🛒
Checkout E-commerce

Proposez le paiement par facture pour le B2B. Générez des factures QR immédiatement après confirmation de commande.

🏢
Associations et Organisations

Automatisez la collecte des cotisations. Références QR uniques pour le rapprochement automatique des paiements.

📱
Applications Mobiles

Générez des factures en déplacement. Intégration API légère pour applications iOS et Android.

Détails Techniques

Comprendre QR-IBAN vs IBAN Standard

Ce point pose problème à la plupart des développeurs au départ. Voici la différence pratique :

Quand Utiliser le QR-IBAN

Utilisez le QR-IBAN quand : Vous avez besoin d'un rapprochement automatisé des paiements. La référence QR à 27 chiffres relie les paiements entrants à des factures spécifiques automatiquement. Votre banque fait correspondre la référence et vous notifie quelle facture a été payée.

Comment reconnaître un QR-IBAN : Les 5e à 9e caractères (IID) vont de 30000 à 31999.

  • Exemple : CH12 30123 4567 8901 2345 6 (30123 = QR-IID)

Comment obtenir un QR-IBAN : Contactez votre banque suisse. Elle émettra des QR-IBAN en complément de vos IBAN classiques. La plupart des banques suisses offrent ce service gratuitement pour les comptes professionnels.

Quand Utiliser l'IBAN Standard

Utilisez l'IBAN standard quand : Une facturation simple suffit. Vous faites correspondre manuellement les paiements entrants aux factures, ou vous utilisez le champ Référence Créancier (format ISO 11649) pour un rapprochement semi-automatisé.

Reconnaissance de l'IBAN standard : Format IBAN suisse standard avec IID hors de la plage 30000-31999.

Compatibilité des Références

  • QR-IBAN → Doit utiliser la Référence QR (27 chiffres)
  • IBAN standard → Peut utiliser la Référence Créancier ou aucune référence

L'API valide cela automatiquement. Vous passez une Référence QR avec un IBAN standard ? Vous obtiendrez une erreur avant de générer une facture invalide.

FAQ

Questions Fréquentes

Pourquoi mon IBAN ne fonctionne-t-il pas ?

D'abord, vérifiez qu'il s'agit d'un IBAN suisse ou liechtensteinois (commence par CH ou LI). Les factures QR ne supportent que ces pays. Ensuite, vérifiez que vous ne mélangez pas les types d'IBAN — les Références QR nécessitent un QR-IBAN, pas un IBAN standard.

Ai-je besoin d'un compte bancaire spécial ?

Aucun compte spécial n'est nécessaire pour les factures avec IBAN standard. Pour les factures QR-IBAN avec rapprochement automatique des paiements, contactez votre banque pour activer le service QR-IBAN. La plupart des comptes professionnels suisses l'incluent.

Quelle est l'échéance pour les adresses structurées ?

Obligatoire à partir du 21 novembre 2025. Conformité complète requise d'ici le 30 septembre 2026. Notre API supporte déjà le format structuré — vous êtes couvert.

Puis-je utiliser des IBAN internationaux ?

Non. La spécification de la facture QR suisse n'accepte que les IBAN suisses (CH) et liechtensteinois (LI). Pour la facturation internationale, envisagez plutôt les factures SEPA.

Comment calculer le chiffre de contrôle de la Référence QR ?

Vous n'en avez pas besoin. Passez votre référence à 26 chiffres, et nous calculons le 27e chiffre (Modulo 10, récursif). L'API gère la validation du chiffre de contrôle pour l'IBAN et la référence.

Que faire si l'app bancaire de mon client ne reconnaît pas le code QR ?

Cela indique soit : (1) un problème de qualité du code QR à l'impression/affichage du PDF, (2) une génération de code QR non conforme, ou (3) une app bancaire obsolète. Notre API génère des codes QR entièrement conformes, testés avec toutes les principales apps bancaires suisses. Assurez-vous que les clients scannent depuis le PDF original, pas une photocopie de mauvaise qualité.

Puis-je personnaliser la mise en page de la facture ?

Logo et couleurs oui, mise en page structurelle non. Les factures QR suisses suivent des exigences de formatage strictes pour la compatibilité bancaire. Vous pouvez ajouter votre logo, mais le positionnement du bulletin de paiement et du code QR est réglementé.

Quel est votre taux de disponibilité API ?

Nous maintenons une disponibilité de 99.9%. C'est moins de 9 heures d'interruption par an. Les clients entreprise bénéficient d'un support prioritaire et peuvent demander une infrastructure dédiée.

En combien de temps puis-je intégrer cette API ?

La plupart des développeurs complètent l'intégration de base en 2-4 heures. Une implémentation prête pour la production avec gestion des erreurs, intégration webhook et tests prend généralement 1-2 jours.

Tarification Simple et Transparente

Payez uniquement ce que vous utilisez. Remises sur volume disponibles pour les applications à fort volume.

Test Gratuit

CHF0/month
Factures de Test Illimitées
  • Factures de test illimitées
  • Aucune authentification requise
  • Toutes les fonctionnalités disponibles
  • Parfait pour les preuves de concept
Commencer les Tests

Entreprise

CHFSur mesure/month
Infrastructure Dédiée
  • Infrastructure dédiée
  • Support prioritaire
  • SLAs personnalisés
  • Rate limits plus élevés
  • Idéal pour éditeurs ERP
  • Plateformes à fort volume
Contacter les Ventes
🛡️Tous les plans incluent l'accès complet à l'API, le support multilingue, la compatibilité QR-IBAN et les mises à jour automatiques de conformité.

Commencez à Développer Aujourd'hui

Testez immédiatement sans inscription. Générez votre première facture QR suisse conforme dans les 5 prochaines minutes.

Prêt à intégrer la facturation QR suisse ?

  1. Testez immédiatement : Copiez la commande curl ci-dessus et exécutez-la dans votre terminal
  2. Consultez la documentation : Référence API complète avec exemples
  3. Obtenez votre clé API : Demandez l'accès maintenant

Questions sur l'implémentation ? Notre équipe de support développeur répond sous 24 heures.
Écrivez à support@magicheidi.ch avec votre cas d'usage.


Conçu par des développeurs, pour des développeurs. Nous comprenons la complexité de la facturation suisse parce que nous l'avons résolue pour nous-mêmes. Maintenant, nous partageons cette solution avec vous.

Essayez l'API gratuitement – sans carte bancaire, sans inscription pour les tests.