Présentation de l'API
Cette API permet de calculer la taxe de séjour en France. Elle accepte des requêtes POST au format JSON et retourne les détails de la taxe calculée.
Le post doit être une liste de séjours.
Pour chaque séjour, vous fournissez une liste de un ou plusieurs 'splits', chacun représentant une partie du séjour différente (par le nombre de personnes).
Le post doit être une liste de séjours.
Pour chaque séjour, vous fournissez une liste de un ou plusieurs 'splits', chacun représentant une partie du séjour différente (par le nombre de personnes).
Années disponibles
- 2025
En cas de calcul sur une année qui n'est pas encore disponible, une estimation est faite par rapport à la même date de la dernière année disponible.
C'est la clé is_estimation:bool dans les lignes et dans le
footer qui l'indique.
l'API gère aussi une estimation future sur un 29 février.
Détails de la Route
URL: https://api.sejour.tax/tds/process/calculate
Méthode: POST
Content-Type: application/json
Vous désirez la tester ?
L'API est accessible par une clé d'API. Si vous désirez la tester pour l'intégrer à vos outils, contactez-nous sur purefrance.com
Format de la requête
Le POST est une liste d'objets.
Chaque objet a les clés suivantes:
- internal_ref : (string) Cette clé est facultative et vous permet de différencier les séjours entre eux.
-
house : (objet) Cette clé est obligatoire. Elle contient un objet avec
les clés:
- rent: (float) le loyer (Obligatoire)
- siren: (str) le siren de la commune (Obligatoire)
- category: (int) la catégorie du bien (Obligatoire)
- nature: (int) la nature du bien (Obligatoire)
-
splits : (liste) Cette clé est obligatoire. Chaque élément de la liste
est un objet contenant :
- arrival_date : (string) La date de début du split. ("%Y-%m-%d"). (Obligatoire).
- departure_date : (string) La date de fin du split. ("%Y-%m-%d"). (Obligatoire).
- adults :(int) Nombre d'adultes assujétis. (Obligatoire).
- exo_or_child : (int) Nombre de personnes exonérées. (Obligatoire).
Les dates des différents splits doivent être consécutives. La dernière d'un split doit être la première du suivant.
En cas d'erreur une réponse avec la clé "message" est retournée avec la raison de l'erreur.
Format de la réponse
La réponse est une liste d'objets.
Chaque objet correspond à un séjour. et contient les clés :
- invoice_header : (objet) Rappel les détail du séjour.
- invoice_line : (objet) Détaille le calcul jour par jour.
- invoice_footer : (objet) Récapitule les totaux.
Dans le footer, la clé 'invoice_total' est le montant total de la taxe à percevoir (et reverser).
Exemple de requête
Encadré en rouge ci-dessous l'objet qui correspond à un séjour avec deux périodes différentes.
[
{
"internal_ref":"MAREFPERSO01",
"house": {
"rent": 10200.00,
"siren": "214000655",
"category": 9,
"nature": 4
},
"splits": [
{
"arrival_date": "2025-12-27",
"departure_date": "2025-12-30",
"adults": 8,
"exo_or_child":2
},
{
"arrival_date": "2025-12-30",
"departure_date": "2026-01-03",
"adults":4,
"exo_or_child": 0
}
]
},
{
"internal_ref":"MAREFPERSO02",
"house": {
"rent": 1000.00,
"siren": "214000655",
"category": 5,
"nature": 4
},
"splits": [
{
"arrival_date": "2025-12-27",
"departure_date": "2025-12-30",
"adults": 8,
"exo_or_child": 4
}
]
}
]
Exemple de Réponse
[
{
"invoice_footer": {
"detail_taxes": {
"department": "30.72",
"lgv": "104.32",
"regional": "0.00",
"tx200": "0.00"
},
"invoice_total": "442.24",
"is_estimation": true,
"tds_without_add_taxes": "307.20",
"total_add_taxes": "135.04"
},
"invoice_header": {
"arrival_date": "2025-12-27",
"category": "9",
"departure_date": "2026-01-04",
"internal_ref": "MAREFPERSO01",
"nature": 4,
"rent": "10200.0",
"siren": "214000655",
"tarification": "%"
},
"invoice_line": [
{
"date": "2025-12-27",
"is_estimation": false,
"liable_for_tax": 8,
"per_person_with_taxes": "6.91",
"per_person_without_taxes": "4.80",
"taxes": {
"dpt": "0.48",
"lgv": "1.63",
"reg": "0.00",
"tx2": "0.00"
},
"total_of_the_day": "55.28"
},
{
"date": "2025-12-28",
"is_estimation": false,
"liable_for_tax": 8,
"per_person_with_taxes": "6.91",
"per_person_without_taxes": "4.80",
"taxes": {
"dpt": "0.48",
"lgv": "1.63",
"reg": "0.00",
"tx2": "0.00"
},
"total_of_the_day": "55.28"
},
{
"date": "2025-12-29",
"is_estimation": false,
"liable_for_tax": 8,
"per_person_with_taxes": "6.91",
"per_person_without_taxes": "4.80",
"taxes": {
"dpt": "0.48",
"lgv": "1.63",
"reg": "0.00",
"tx2": "0.00"
},
"total_of_the_day": "55.28"
},
{
"date": "2025-12-30",
"is_estimation": false,
"liable_for_tax": 8,
"per_person_with_taxes": "6.91",
"per_person_without_taxes": "4.80",
"taxes": {
"dpt": "0.48",
"lgv": "1.63",
"reg": "0.00",
"tx2": "0.00"
},
"total_of_the_day": "55.28"
},
{
"date": "2025-12-31",
"is_estimation": false,
"liable_for_tax": 8,
"per_person_with_taxes": "6.91",
"per_person_without_taxes": "4.80",
"taxes": {
"dpt": "0.48",
"lgv": "1.63",
"reg": "0.00",
"tx2": "0.00"
},
"total_of_the_day": "55.28"
},
{
"date": "2026-01-01",
"is_estimation": true,
"liable_for_tax": 8,
"per_person_with_taxes": "6.91",
"per_person_without_taxes": "4.80",
"taxes": {
"dpt": "0.48",
"lgv": "1.63",
"reg": "0.00",
"tx2": "0.00"
},
"total_of_the_day": "55.28"
},
...
]
},
Second séjour:
{
"invoice_footer": {
"detail_taxes": {
"department": "2.40",
"lgv": "8.16",
"regional": "0.00",
"tx200": "0.00"
},
"invoice_total": "34.56",
"is_estimation": false,
"tds_without_add_taxes": "24.00",
"total_add_taxes": "10.56"
},
"invoice_header": {
"arrival_date": "2025-12-27",
"category": "5",
"departure_date": "2025-12-30",
"internal_ref": "MAREFPERSO02",
"nature": 4,
"rent": "1000.0",
"siren": "214000655",
"tarification": "€"
},
"invoice_line": [
{
"date": "2025-12-27",
"is_estimation": false,
"liable_for_tax": 8,
"per_person_with_taxes": "1.44",
"per_person_without_taxes": "1.00",
"taxes": {
"dpt": "0.10",
"lgv": "0.34",
"reg": "0.00",
"tx2": "0.00"
},
"total_of_the_day": "11.52"
},
...
]
}
]