SwissAutomate SwissAutomate API

Documentation de l'API

L'API fournit deux indices officiels suisses utilisés dans les contrats de bail : l'IPC (indice suisse des prix à la consommation, publié mensuellement par l'OFS) et le TRH (taux hypothécaire de référence, publié trimestriellement par l'OFL).

Authentification

Chaque requête vers /api/indices doit porter votre clé dans l'en-tête X-API-Key. Pour obtenir une clé, contactez notre équipe.

Service Indices — points d'accès

Point d'accèsRenvoie
GET /api/ipcipc + ipcdate — l'IPC seul.
GET /api/trhtrh + trhdate — le TRH seul.
GET /api/indicesLes quatre champs combinés (compatibilité avec les intégrations existantes).

D'autres familles de services (manipulation de PDF, …) rejoindront l'API sous leur propre préfixe ; l'authentification par clé et le suivi de consommation s'appliquent de la même manière.

Paramètres communs

ParamètreObligatoireDescription
date oui Date de référence au format YYYY-MM-DD (calendrier Europe/Zurich).
base non (/api/ipc et /api/indices) Base de l'IPC au format YYYY-MM. Par défaut : 2020-12. Bases disponibles : 1914-06, 1939-08, 1966-09, 1977-09, 1982-12, 1993-05, 2000-05, 2005-12, 2010-12, 2015-12, 2020-12, 2025-12.

Exemples

$ curl -H "X-API-Key: votre-clé" \
    "https://api.swissautomate.ch/api/ipc?date=2026-05-15"
{ "ipc": 108.3, "ipcdate": "2026-05-01" }

$ curl -H "X-API-Key: votre-clé" \
    "https://api.swissautomate.ch/api/trh?date=2026-05-15"
{ "trh": 1.25, "trhdate": "2026-03-03" }

$ curl -H "X-API-Key: votre-clé" \
    "https://api.swissautomate.ch/api/indices?date=2026-05-15"
{
  "ipc": 108.3,           // indice du mois de la date demandée
  "trh": 1.25,            // taux en vigueur à la date demandée (%)
  "ipcdate": "2026-05-01",  // mois de référence de l'IPC
  "trhdate": "2026-03-03"   // date « valable dès le » de la publication OFL
}

Utiliser une base IPC différente

L'IPC est disponible sur plusieurs bases d'indexation (mois de référence valant 100). Par défaut, la base 2020-12 est utilisée. Pour choisir une autre base, passez le paramètre base :

$ curl -H "X-API-Key: votre-clé" \
    "https://api.swissautomate.ch/api/ipc?date=2026-05-15&base=1977-09"
{ "ipc": 215.4, "ipcdate": "2026-05-01" }  // valeur sur la base sept. 1977 = 100

Bases disponibles : 1914-06, 1939-08, 1966-09, 1977-09, 1982-12, 1993-05, 2000-05, 2005-12, 2010-12, 2015-12, 2020-12, 2025-12.

Codes de statut

CodeSignification
200Succès.
401Clé API absente ou invalide.
422Paramètre date ou base invalide — le corps JSON {"error": "…"} précise la raison.
404Date antérieure au début des séries disponibles.
503Aucune donnée en cache et sources fédérales injoignables (rare).

Service PDF — points d'accès

Manipulation de documents PDF, 100 % en JSON : les fichiers sont transmis et renvoyés en base64. Méthode POST, en-tête X-API-Key, réponses {"success": true, "file": …} ou {"success": true, "files": […]} ; en cas d'erreur métier : HTTP 422 et {"success": false, "error": "…"}.

Point d'accèsCorps de requêteEffet
POST /api/pdf/extract-first-page{file}Extrait la première page.
POST /api/pdf/extract-pages{file, pages: [1,3]}Extrait les pages indiquées.
POST /api/pdf/merge{files: [f1, f2, …]}Fusionne au moins deux PDF.
POST /api/pdf/delete-blank-pages{file}Supprime les pages blanches.
POST /api/pdf/split{file, interval: 1}Découpe par blocs de interval pages (→ files).
POST /api/pdf/split-by-blank-pages{file}Découpe aux pages blanches (→ files).
$ BASE64=$(base64 -w 0 dossier.pdf)
$ curl -s -X POST -H "X-API-Key: votre-clé" -H "Content-Type: application/json" \
    -d "{\"file\":\"$BASE64\"}" \
    "https://api.swissautomate.ch/api/pdf/extract-first-page" \
  | jq -r '.file' | base64 -d > premiere-page.pdf

Service Excel — points d'accès

Point d'accèsCorps de requêteEffet
POST /api/excel/xls-to-xlsx{file}Convertit un classeur .xls (format BIFF hérité) en .xlsx. Réponse : {"success": true, "xlsx_file": …} (base64).

Service Avis de fixation — points d'accès

Génération d'avis de fixation de loyer officiels pour les cantons GE, VD, FR et LU. Méthode POST, en-tête X-API-Key, corps JSON {canton, mode, fields} :

Point d'accèsCorps de requêteEffet
POST /api/v1/avis/render{canton, mode, fields}Génère l'avis. mode vaut full (fond officiel + valeurs) ou fields-only (valeurs seules, à imprimer sur formulaire papier pré-imprimé). Réponse : {file, canton, mode, template_version} (fichier en base64).
$ curl -s -X POST -H "X-API-Key: votre-clé" -H "Content-Type: application/json" \
    -d "{\"canton\":\"GE\",\"mode\":\"fields-only\",\"fields\":{\"tenant\":\"Jean Exemple\",\"owner\":\"Immo Exemple SA\",\"new_annual_rent\":\"38400.00\"}}" \
    "https://api.swissautomate.ch/api/v1/avis/render" \
  | jq -r '.file' | base64 -d > avis-ge.pdf

Les valeurs sont rendues verbatim (aucun formatage côté API). Les cantons non supportés (BE, ZH, …) renvoient HTTP 422.

Canton FR

ChampLibelléObligatoireMultiligne
tenant Locataire oui non
owner Bailleur oui non
unit_address Adresse du logement oui non
floor Étage oui non
rooms Nombre de pièces oui non
previous_monthly_rent Loyer mensuel précédent (CHF) oui non
previous_lease_start Début du bail précédent oui non
previous_lease_end Fin du bail précédent oui non
new_monthly_rent Nouveau loyer mensuel (CHF) oui non
new_start_date Début du nouveau bail oui non
trh Taux de référence (%) oui non
ipc IPC (points) oui non
ipc_base Base IPC oui non
remarks Remarques non oui

Canton GE

ChampLibelléObligatoireMultiligne
tenant Ancien locataire oui non
owner Bailleur oui non
booking_contact Contact de réservation non non
unit_address Adresse du logement oui non
floor Étage oui non
rooms Nombre de pièces oui non
previous_annual_rent Loyer annuel précédent (CHF) oui non
previous_lease_start Début du bail précédent oui non
trh Taux de référence (%) oui non
ipc IPC (points) oui non
new_annual_rent Nouveau loyer annuel (CHF) oui non
new_start_date Début du nouveau bail oui non
new_end_date Fin du nouveau bail oui non

Canton LU

ChampLibelléObligatoireMultiligne
owner_block Vermieter (bloc adresse) oui oui
tenant Mieter oui non
unit_name Mietobjekt oui non
since_line Ligne « seit » oui non
net_rent_line Ligne Nettomietzins oui non
total_rent_line Ligne Total inkl. Nebenkosten oui non
trh Referenzzinssatz (%) oui non
ipc_line Ligne Landesindex oui non
new_start_date Gültig ab oui non

Canton VD

ChampLibelléObligatoireMultiligne
owner Bailleur oui non
tenant Locataire oui non
unit_address Adresse du logement oui non
previous_lease_start Début du bail précédent oui non
trh Taux de référence (%) oui non
ipc IPC (points) oui non
ipc_month Mois IPC oui non
ipc_year Année IPC oui non
ipc_base Base IPC oui non
previous_annual_rent Loyer annuel précédent (CHF) oui non
previous_quarterly_rent Loyer trimestriel précédent (CHF) oui non
previous_monthly_rent Loyer mensuel précédent (CHF) oui non
new_annual_rent Nouveau loyer annuel (CHF) oui non
new_quarterly_rent Nouveau loyer trimestriel (CHF) oui non
new_monthly_rent Nouveau loyer mensuel (CHF) oui non
remarks Remarques non oui

Service Factures — points d'accès

Génération de factures white-label pour votre client final : logo, coordonnées bancaires et calculs TVA proviennent du profil de facturation associé à votre clé. Méthode POST, en-tête X-API-Key, corps JSON {brand_profile, language, header, lines, iban_override} :

Point d'accèsCorps de requêteEffet
POST /api/v1/invoice/render{brand_profile, language, header, lines, iban_override}Génère la facture. Réponse : {file, total, brand_profile, language} (fichier en base64).
ChampDescription
brand_profileIdentifiant du profil de facturation (slug), propre à votre clé API.
languagefr ou en.
header7 champs : invoice_number, booking_contact, building, customer_ref, start_date, end_date, guests.
linesTableau de lignes : description, quantity, unit_price (HT), vat_rate (fraction, ex. 0.081).
iban_overrideOptionnel — remplace l'IBAN du profil pour cette facture.
$ curl -s -X POST -H "X-API-Key: votre-clé" -H "Content-Type: application/json" \
    -d "{\"brand_profile\":\"acme\",\"language\":\"fr\",\"header\":{\"invoice_number\":\"F-2026-001\",\"booking_contact\":\"Jean Exemple\",\"building\":\"Résidence Alpina\",\"customer_ref\":\"CL-042\",\"start_date\":\"2026-05-01\",\"end_date\":\"2026-05-07\",\"guests\":2},\"lines\":[{\"description\":\"Séjour 6 nuits\",\"quantity\":6,\"unit_price\":150,\"vat_rate\":0.081},{\"description\":\"Frais de dossier\",\"quantity\":1,\"unit_price\":150.00,\"vat_rate\":0.081}]}" \
    "https://api.swissautomate.ch/api/v1/invoice/render" \
  | jq -r '.file' | base64 -d > facture.pdf

L'API calcule les montants TTC et le total — envoyez les valeurs brutes. Le profil de facturation est géré dans le portail admin et appartient à votre clé.

Accès MCP (assistants IA)

Les mêmes services sont accessibles à votre assistant IA (Claude, …) via le protocole MCP : connectez https://api.swissautomate.ch/mcp/api avec votre clé API comme jeton Bearer. Outils disponibles : get_ipc, get_trh, get_indices, list_ipc_bases. Les appels sont comptabilisés comme les appels REST.

claude mcp add --transport http swissautomate-api https://api.swissautomate.ch/mcp/api \
  --header "Authorization: Bearer votre-clé"

GET /api/health

Point de contrôle public (sans authentification) exposant l'état du service :

{
  "status": "ok",
  "ipc_rows": 5483,
  "trh_rows": 72,
  "latest_trh_from": "2026-06-02",
  "latest_ipc_month": "2026-06",
  "ipc_default_base": "2020-12",
  "ipc_bases": ["1914-06", "…", "2025-12"]
}

Sources des données