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ès | Renvoie |
|---|---|
| GET /api/ipc | ipc + ipcdate — l'IPC seul. |
| GET /api/trh | trh + trhdate — le TRH seul. |
| GET /api/indices | Les 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ètre | Obligatoire | Description |
|---|---|---|
| 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.
ipcettrhsont des nombres JSON ; les dates sont des chaînesYYYY-MM-DD.- Si le mois demandé n'est pas encore publié par l'OFS, l'API renvoie le dernier mois disponible
(visible via
ipcdate). - Le TRH renvoyé est celui de la dernière publication dont la date « valable dès le » est antérieure ou égale à la date demandée.
Codes de statut
| Code | Signification |
|---|---|
| 200 | Succès. |
| 401 | Clé API absente ou invalide. |
| 422 | Paramètre date ou base invalide — le corps JSON {"error": "…"} précise la raison. |
| 404 | Date antérieure au début des séries disponibles. |
| 503 | Aucune 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ès | Corps de requête | Effet |
|---|---|---|
| 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ès | Corps de requête | Effet |
|---|---|---|
| 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ès | Corps de requête | Effet |
|---|---|---|
| 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
| Champ | Libellé | Obligatoire | Multiligne |
|---|---|---|---|
| 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
| Champ | Libellé | Obligatoire | Multiligne |
|---|---|---|---|
| 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
| Champ | Libellé | Obligatoire | Multiligne |
|---|---|---|---|
| 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
| Champ | Libellé | Obligatoire | Multiligne |
|---|---|---|---|
| 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ès | Corps de requête | Effet |
|---|---|---|
| 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). |
| Champ | Description |
|---|---|
| brand_profile | Identifiant du profil de facturation (slug), propre à votre clé API. |
| language | fr ou en. |
| header | 7 champs : invoice_number, booking_contact, building, customer_ref, start_date, end_date, guests. |
| lines | Tableau de lignes : description, quantity, unit_price (HT), vat_rate (fraction, ex. 0.081). |
| iban_override | Optionnel — 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
- IPC : OFS, « LIK, Totalindex auf allen Indexbasen » (tableaux d'indexation, n° cc-d-05.02.08).
- TRH : OFL, « Évolution du taux de référence et du taux d'intérêt moyen ».