{"openapi":"3.1.0","info":{"title":"Négocier son salaire — French pay and tax calculators","version":"1.0.0","description":"Free calculators, no key, no sign-up: French gross ↔ net, net after tax, employer cost, redundancy and termination pay, minimum wage, real salaries by job and place. Every figure is calculated by the site's code from official scales; no figure comes from a language model. Each response starts with a prefilled link to the page that redoes the calculation: give it to the person.","contact":{"name":"Négocier son salaire","url":"https://negociersonsalaire.fr/contact"}},"servers":[{"url":"https://negociersonsalaire.fr"}],"externalDocs":{"description":"How AI assistants can use the site","url":"https://negociersonsalaire.fr/en/pour-les-ia"},"paths":{"/api/v1/brut-net":{"get":{"operationId":"gross_to_net","summary":"Gross ↔ net","description":"Converts a French gross salary to net, or net to gross (hour, month, year), with contributions, taxable net and employer cost. French general scheme, permanent contract, 35 h, non-cadre, €20 health-insurance deduction, outside Alsace-Moselle by default; current scales.\n\nExample: /api/v1/brut-net?brut=3000&periode=mois&statut=non-cadre","parameters":[{"name":"brut","in":"query","required":false,"description":"Gross salary in euros, for the period given by period.","schema":{"type":"number","description":"Gross salary in euros, for the period given by period.","minimum":1,"maximum":10000000},"example":"3000"},{"name":"net","in":"query","required":false,"description":"Net salary (before income tax) in euros, instead of the gross.","schema":{"type":"number","description":"Net salary (before income tax) in euros, instead of the gross.","minimum":1,"maximum":10000000}},{"name":"periode","in":"query","required":false,"description":"Period of the amount: mois (month, default), an (year) or heure (hour).","schema":{"type":"string","enum":["mois","an","heure"],"description":"Period of the amount: mois (month, default), an (year) or heure (hour)."},"example":"mois"},{"name":"statut","in":"query","required":false,"description":"Status: non-cadre (default) or cadre (executive status, extra contributions).","schema":{"type":"string","enum":["non-cadre","cadre"],"description":"Status: non-cadre (default) or cadre (executive status, extra contributions)."},"example":"non-cadre"},{"name":"mois","in":"query","required":false,"description":"Months paid per year: 12 (default), 13 with a thirteenth month…","schema":{"type":"number","description":"Months paid per year: 12 (default), 13 with a thirteenth month…","minimum":12,"maximum":16}},{"name":"heures","in":"query","required":false,"description":"Hours per week (35 by default).","schema":{"type":"number","description":"Hours per week (35 by default).","minimum":1,"maximum":48}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/net-apres-impot":{"get":{"operationId":"net_after_tax","summary":"Net after income tax","description":"Net salary after income tax withheld at source, from gross or net pay: with the given personal rate (taux), otherwise the full scale if the household is described, otherwise the default (neutral) rate. French general scheme, permanent contract, 35 h, non-cadre, €20 health-insurance deduction, outside Alsace-Moselle by default; current scales.\n\nExample: /api/v1/net-apres-impot?brut=3500&periode=mois&taux=7.5","parameters":[{"name":"brut","in":"query","required":false,"description":"Gross salary in euros, for the period given by period.","schema":{"type":"number","description":"Gross salary in euros, for the period given by period.","minimum":1,"maximum":10000000},"example":"3500"},{"name":"net","in":"query","required":false,"description":"Net salary (before income tax) in euros, instead of the gross.","schema":{"type":"number","description":"Net salary (before income tax) in euros, instead of the gross.","minimum":1,"maximum":10000000}},{"name":"periode","in":"query","required":false,"description":"Period of the amount: mois (month, default), an (year) or heure (hour).","schema":{"type":"string","enum":["mois","an","heure"],"description":"Period of the amount: mois (month, default), an (year) or heure (hour)."},"example":"mois"},{"name":"statut","in":"query","required":false,"description":"Status: non-cadre (default) or cadre (executive status, extra contributions).","schema":{"type":"string","enum":["non-cadre","cadre"],"description":"Status: non-cadre (default) or cadre (executive status, extra contributions)."}},{"name":"mois","in":"query","required":false,"description":"Months paid per year: 12 (default), 13 with a thirteenth month…","schema":{"type":"number","description":"Months paid per year: 12 (default), 13 with a thirteenth month…","minimum":12,"maximum":16}},{"name":"taux","in":"query","required":false,"description":"Personal withholding rate, in % (7 for 7%).","schema":{"type":"number","description":"Personal withholding rate, in % (7 for 7%).","minimum":0,"maximum":60},"example":"7.5"},{"name":"situation","in":"query","required":false,"description":"Tax household: celibataire (single), couple (married or civil partnership, joint taxation) or veuf (widowed).","schema":{"type":"string","enum":["celibataire","couple","veuf"],"description":"Tax household: celibataire (single), couple (married or civil partnership, joint taxation) or veuf (widowed)."}},{"name":"enfants","in":"query","required":false,"description":"Dependent children.","schema":{"type":"integer","description":"Dependent children.","minimum":0,"maximum":10}},{"name":"parent_isole","in":"query","required":false,"description":"Parent raising their children alone (box T, extra half share).","schema":{"type":"boolean","description":"Parent raising their children alone (box T, extra half share)."}},{"name":"autres_revenus","in":"query","required":false,"description":"Other taxable household income per year (already net of their allowances).","schema":{"type":"number","description":"Other taxable household income per year (already net of their allowances).","minimum":0,"maximum":10000000}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/impot-revenu":{"get":{"operationId":"income_tax","summary":"Income tax","description":"Detailed French income tax (2026 scale, 2025 income): one or two filers, 10% deduction or actual expenses, retirement savings (PER), capped family quotient, decote, donations, home help and childcare credits. Gives the tax due or the refund, the average rate, the marginal bracket and the estimated withholding rate (individualised for a couple).\n\nExample: /api/v1/impot-revenu?revenu=38000&revenu_conjoint=26000&situation=couple&enfants=2","parameters":[{"name":"revenu","in":"query","required":true,"description":"Filer 1 net taxable salaries for the year, before the 10% deduction (box 1AJ).","schema":{"type":"number","description":"Filer 1 net taxable salaries for the year, before the 10% deduction (box 1AJ).","minimum":0,"maximum":10000000},"example":"38000"},{"name":"revenu_conjoint","in":"query","required":false,"description":"Couple: filer 2 net taxable salaries for the year (box 1BJ).","schema":{"type":"number","description":"Couple: filer 2 net taxable salaries for the year (box 1BJ).","minimum":0,"maximum":10000000},"example":"26000"},{"name":"situation","in":"query","required":false,"description":"Tax household: celibataire (single), couple (married or civil partnership, joint taxation) or veuf (widowed).","schema":{"type":"string","enum":["celibataire","couple","veuf"],"description":"Tax household: celibataire (single), couple (married or civil partnership, joint taxation) or veuf (widowed)."},"example":"couple"},{"name":"enfants","in":"query","required":false,"description":"Dependent children.","schema":{"type":"integer","description":"Dependent children.","minimum":0,"maximum":10},"example":"2"},{"name":"parent_isole","in":"query","required":false,"description":"Parent raising their children alone (box T, extra half share).","schema":{"type":"boolean","description":"Parent raising their children alone (box T, extra half share)."}},{"name":"frais_reels","in":"query","required":false,"description":"Filer 1 yearly actual expenses, instead of the 10% deduction.","schema":{"type":"number","description":"Filer 1 yearly actual expenses, instead of the 10% deduction.","minimum":0,"maximum":10000000}},{"name":"frais_reels_conjoint","in":"query","required":false,"description":"Filer 2 yearly actual expenses.","schema":{"type":"number","description":"Filer 2 yearly actual expenses.","minimum":0,"maximum":10000000}},{"name":"per","in":"query","required":false,"description":"Retirement savings plan (PER) contributions for the year (filer 1).","schema":{"type":"number","description":"Retirement savings plan (PER) contributions for the year (filer 1).","minimum":0,"maximum":10000000}},{"name":"per_conjoint","in":"query","required":false,"description":"Filer 2 PER contributions.","schema":{"type":"number","description":"Filer 2 PER contributions.","minimum":0,"maximum":10000000}},{"name":"autres_revenus","in":"query","required":false,"description":"Other taxable household income per year (already net of their allowances).","schema":{"type":"number","description":"Other taxable household income per year (already net of their allowances).","minimum":0,"maximum":10000000}},{"name":"dons","in":"query","required":false,"description":"Donations to charities (66%).","schema":{"type":"number","description":"Donations to charities (66%).","minimum":0,"maximum":10000000}},{"name":"dons_aide","in":"query","required":false,"description":"Donations to organisations helping people in need (75% up to the ceiling).","schema":{"type":"number","description":"Donations to organisations helping people in need (75% up to the ceiling).","minimum":0,"maximum":10000000}},{"name":"emploi_domicile","in":"query","required":false,"description":"Home help spending for the year, after subsidies (50% credit).","schema":{"type":"number","description":"Home help spending for the year, after subsidies (50% credit).","minimum":0,"maximum":10000000}},{"name":"garde_enfants","in":"query","required":false,"description":"Childcare outside the home for children under 6, after subsidies.","schema":{"type":"number","description":"Childcare outside the home for children under 6, after subsidies.","minimum":0,"maximum":10000000}},{"name":"enfants_gardes","in":"query","required":false,"description":"Children under 6 covered by that childcare spending.","schema":{"type":"integer","description":"Children under 6 covered by that childcare spending.","minimum":0,"maximum":10}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/bareme-kilometrique":{"get":{"operationId":"mileage_allowance","summary":"Mileage scale","description":"Deductible vehicle costs on the French tax mileage scale (2025 income): car, motorbike or moped, uplift for fully electric vehicles, commute capped at 40 km without justification (one round trip a day) or yearly mileage. Gives the bracket, the formula and the amount.\n\nExample: /api/v1/bareme-kilometrique?vehicule=voiture&puissance=5&distance=20&jours=210","parameters":[{"name":"vehicule","in":"query","required":false,"description":"Vehicle: voiture (car, default), moto (motorbike or scooter over 50 cc), cyclomoteur (moped, 50 cc or less).","schema":{"type":"string","enum":["voiture","moto","cyclomoteur"],"description":"Vehicle: voiture (car, default), moto (motorbike or scooter over 50 cc), cyclomoteur (moped, 50 cc or less)."},"example":"voiture"},{"name":"puissance","in":"query","required":false,"description":"Tax horsepower (registration certificate, box P.6), 5 by default; motorbike: 1-2, 3-5 or 6+, or the number of hp.","schema":{"type":"string","maxLength":8,"description":"Tax horsepower (registration certificate, box P.6), 5 by default; motorbike: 1-2, 3-5 or 6+, or the number of hp."},"example":"5"},{"name":"electrique","in":"query","required":false,"description":"Fully electric vehicle: scale increased by 20%.","schema":{"type":"boolean","description":"Fully electric vehicle: scale increased by 20%."}},{"name":"km","in":"query","required":false,"description":"Business kilometres for the year (commuting included), instead of distance and days.","schema":{"type":"number","description":"Business kilometres for the year (commuting included), instead of distance and days.","minimum":0,"maximum":10000000}},{"name":"distance","in":"query","required":false,"description":"Home to work distance, one way, in km (at most 40 km counted without justification).","schema":{"type":"number","description":"Home to work distance, one way, in km (at most 40 km counted without justification).","minimum":0,"maximum":500},"example":"20"},{"name":"jours","in":"query","required":false,"description":"Commuting days in the year (210 by default).","schema":{"type":"integer","description":"Commuting days in the year (210 by default).","minimum":0,"maximum":366},"example":"210"},{"name":"distance_justifiee","in":"query","required":false,"description":"Distance over 40 km justified (note attached to the return).","schema":{"type":"boolean","description":"Distance over 40 km justified (note attached to the return)."}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/frais-reels":{"get":{"operationId":"actual_expenses","summary":"Actual expenses or 10%","description":"An employee's actual work expenses in France (2025 income): vehicle on the mileage scale, tolls, meals (flat rate or receipted price, meal vouchers deducted), remote work at the flat rate, other costs; compared with the flat 10% deduction, with the household tax for each option and the tax saved.\n\nExample: /api/v1/frais-reels?revenu=30000&puissance=5&distance=25&jours=210&repas=180","parameters":[{"name":"revenu","in":"query","required":true,"description":"Net taxable salaries for the year, before any deduction (box 1AJ).","schema":{"type":"number","description":"Net taxable salaries for the year, before any deduction (box 1AJ).","minimum":0,"maximum":10000000},"example":"30000"},{"name":"situation","in":"query","required":false,"description":"Tax household: celibataire (single), couple (married or civil partnership, joint taxation) or veuf (widowed).","schema":{"type":"string","enum":["celibataire","couple","veuf"],"description":"Tax household: celibataire (single), couple (married or civil partnership, joint taxation) or veuf (widowed)."}},{"name":"enfants","in":"query","required":false,"description":"Dependent children.","schema":{"type":"integer","description":"Dependent children.","minimum":0,"maximum":10}},{"name":"revenu_conjoint","in":"query","required":false,"description":"Couple: partner's net taxable salaries (10% deduction for them).","schema":{"type":"number","description":"Couple: partner's net taxable salaries (10% deduction for them).","minimum":0,"maximum":10000000}},{"name":"vehicule","in":"query","required":false,"description":"Vehicle: voiture (car, default), moto (motorbike or scooter over 50 cc), cyclomoteur (moped, 50 cc or less).","schema":{"type":"string","enum":["voiture","moto","cyclomoteur"],"description":"Vehicle: voiture (car, default), moto (motorbike or scooter over 50 cc), cyclomoteur (moped, 50 cc or less)."}},{"name":"puissance","in":"query","required":false,"description":"Tax horsepower (registration certificate, box P.6), 5 by default; motorbike: 1-2, 3-5 or 6+, or the number of hp.","schema":{"type":"string","maxLength":8,"description":"Tax horsepower (registration certificate, box P.6), 5 by default; motorbike: 1-2, 3-5 or 6+, or the number of hp."},"example":"5"},{"name":"electrique","in":"query","required":false,"description":"Fully electric vehicle: scale increased by 20%.","schema":{"type":"boolean","description":"Fully electric vehicle: scale increased by 20%."}},{"name":"distance","in":"query","required":false,"description":"Home to work distance, one way, in km (at most 40 km counted without justification).","schema":{"type":"number","description":"Home to work distance, one way, in km (at most 40 km counted without justification).","minimum":0,"maximum":500},"example":"25"},{"name":"jours","in":"query","required":false,"description":"Commuting days in the year (210 by default).","schema":{"type":"integer","description":"Commuting days in the year (210 by default).","minimum":0,"maximum":366},"example":"210"},{"name":"distance_justifiee","in":"query","required":false,"description":"Distance over 40 km justified (note attached to the return).","schema":{"type":"boolean","description":"Distance over 40 km justified (note attached to the return)."}},{"name":"autres_km","in":"query","required":false,"description":"Other business kilometres for the year, not reimbursed.","schema":{"type":"number","description":"Other business kilometres for the year, not reimbursed.","minimum":0,"maximum":10000000}},{"name":"peages","in":"query","required":false,"description":"Tolls and parking for the year.","schema":{"type":"number","description":"Tolls and parking for the year.","minimum":0,"maximum":10000000}},{"name":"repas","in":"query","required":false,"description":"Meals eaten away from home in the year.","schema":{"type":"integer","description":"Meals eaten away from home in the year.","minimum":0,"maximum":366},"example":"180"},{"name":"prix_repas","in":"query","required":false,"description":"Average receipted meal price; absent: flat rate.","schema":{"type":"number","description":"Average receipted meal price; absent: flat rate.","minimum":0,"maximum":10000000}},{"name":"part_titre_restaurant","in":"query","required":false,"description":"Employer share per meal voucher.","schema":{"type":"number","description":"Employer share per meal voucher.","minimum":0,"maximum":10000000}},{"name":"teletravail","in":"query","required":false,"description":"Days of remote work at home (if the employer pays no allowance).","schema":{"type":"integer","description":"Days of remote work at home (if the employer pays no allowance).","minimum":0,"maximum":366}},{"name":"autres_frais","in":"query","required":false,"description":"Other work expenses for the year (training, second home, equipment).","schema":{"type":"number","description":"Other work expenses for the year (training, second home, equipment).","minimum":0,"maximum":10000000}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/cout-employeur":{"get":{"operationId":"employer_cost","summary":"Employer cost","description":"Total employer cost of a gross salary: employer contributions, general reduction, monthly and yearly cost, by company headcount. French general scheme, permanent contract, 35 h, non-cadre, €20 health-insurance deduction, outside Alsace-Moselle by default; current scales.\n\nExample: /api/v1/cout-employeur?brut=2500&periode=mois&effectif=12","parameters":[{"name":"brut","in":"query","required":true,"description":"Gross salary in euros, for the period given by period.","schema":{"type":"number","description":"Gross salary in euros, for the period given by period.","minimum":1,"maximum":10000000},"example":"2500"},{"name":"periode","in":"query","required":false,"description":"Period of the amount: mois (month, default), an (year) or heure (hour).","schema":{"type":"string","enum":["mois","an","heure"],"description":"Period of the amount: mois (month, default), an (year) or heure (hour)."},"example":"mois"},{"name":"statut","in":"query","required":false,"description":"Status: non-cadre (default) or cadre (executive status, extra contributions).","schema":{"type":"string","enum":["non-cadre","cadre"],"description":"Status: non-cadre (default) or cadre (executive status, extra contributions)."}},{"name":"mois","in":"query","required":false,"description":"Months paid per year: 12 (default), 13 with a thirteenth month…","schema":{"type":"number","description":"Months paid per year: 12 (default), 13 with a thirteenth month…","minimum":12,"maximum":16}},{"name":"effectif","in":"query","required":false,"description":"Number of employees in the company (fewer than 5 by default).","schema":{"type":"integer","description":"Number of employees in the company (fewer than 5 by default).","minimum":1,"maximum":1000000},"example":"12"},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/indemnite-licenciement":{"get":{"operationId":"severance_pay","summary":"Statutory redundancy pay","description":"Minimum statutory redundancy pay in France (permanent contract, at least 8 months of service, not for gross misconduct): most favourable reference salary, 1/4 of a month per year up to 10 years then 1/3. A collective agreement may provide more.\n\nExample: /api/v1/indemnite-licenciement?brut=2800&annees=6&mois_anciennete=4","parameters":[{"name":"brut","in":"query","required":true,"description":"Average gross monthly salary over the last 12 months (bonuses included).","schema":{"type":"number","description":"Average gross monthly salary over the last 12 months (bonuses included).","minimum":1,"maximum":10000000},"example":"2800"},{"name":"brut_3_mois","in":"query","required":false,"description":"Gross average over the last 3 months (optional: the more favourable average is used).","schema":{"type":"number","description":"Gross average over the last 3 months (optional: the more favourable average is used).","minimum":1,"maximum":10000000}},{"name":"annees","in":"query","required":true,"description":"Length of service in years (notice period included).","schema":{"type":"number","description":"Length of service in years (notice period included).","minimum":0,"maximum":60},"example":"6"},{"name":"mois_anciennete","in":"query","required":false,"description":"Complete months of service on top of the years.","schema":{"type":"integer","description":"Complete months of service on top of the years.","minimum":0,"maximum":11},"example":"4"},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/indemnite-rupture-conventionnelle":{"get":{"operationId":"conventional_termination_pay","summary":"Rupture conventionnelle payout","description":"Minimum payout of a French rupture conventionnelle (mutual termination): same calculation as statutory redundancy pay, with no length-of-service condition. The employer cannot offer less; anything above is negotiable.\n\nExample: /api/v1/indemnite-rupture-conventionnelle?brut=3200&annees=4","parameters":[{"name":"brut","in":"query","required":true,"description":"Average gross monthly salary over the last 12 months (bonuses included).","schema":{"type":"number","description":"Average gross monthly salary over the last 12 months (bonuses included).","minimum":1,"maximum":10000000},"example":"3200"},{"name":"brut_3_mois","in":"query","required":false,"description":"Gross average over the last 3 months (optional: the more favourable average is used).","schema":{"type":"number","description":"Gross average over the last 3 months (optional: the more favourable average is used).","minimum":1,"maximum":10000000}},{"name":"annees","in":"query","required":true,"description":"Length of service in years (notice period included).","schema":{"type":"number","description":"Length of service in years (notice period included).","minimum":0,"maximum":60},"example":"4"},{"name":"mois_anciennete","in":"query","required":false,"description":"Complete months of service on top of the years.","schema":{"type":"integer","description":"Complete months of service on top of the years.","minimum":0,"maximum":11}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/chomage":{"get":{"operationId":"unemployment_benefit","summary":"Unemployment benefit (ARE)","description":"French unemployment benefit (ARE) for an employee in mainland France (current rules): daily reference wage, gross and net benefit per day and per month, maximum duration by age and reason (cap after a rupture conventionnelle), degressivity, waiting period and deferrals (paid leave, payouts above the legal minimum).\n\nExample: /api/v1/chomage?brut=2500&mois_travailles=24&age=35&motif=rupture-conventionnelle","parameters":[{"name":"brut","in":"query","required":true,"description":"Average gross monthly salary over the months worked, bonuses included (without termination payouts).","schema":{"type":"number","description":"Average gross monthly salary over the months worked, bonuses included (without termination payouts).","minimum":0,"maximum":10000000},"example":"2500"},{"name":"mois_travailles","in":"query","required":true,"description":"Months worked over the last 24 months (36 from age 55); at least 6 to qualify.","schema":{"type":"number","description":"Months worked over the last 24 months (36 from age 55); at least 6 to qualify.","minimum":0,"maximum":36},"example":"24"},{"name":"age","in":"query","required":true,"description":"Age when the contract ends.","schema":{"type":"integer","description":"Age when the contract ends.","minimum":16,"maximum":70},"example":"35"},{"name":"motif","in":"query","required":false,"description":"How the contract ended: licenciement (dismissal, default), licenciement-economique (economic redundancy), rupture-conventionnelle (mutual termination), fin-cdd (end of fixed-term contract), demission-legitime (legitimate resignation).","schema":{"type":"string","enum":["licenciement","licenciement-economique","rupture-conventionnelle","fin-cdd","demission-legitime"],"description":"How the contract ended: licenciement (dismissal, default), licenciement-economique (economic redundancy), rupture-conventionnelle (mutual termination), fin-cdd (end of fixed-term contract), demission-legitime (legitimate resignation)."},"example":"rupture-conventionnelle"},{"name":"mois_sans_contrat","in":"query","required":false,"description":"Months without a contract between the first and last contract of the period.","schema":{"type":"number","description":"Months without a contract between the first and last contract of the period.","minimum":0,"maximum":36}},{"name":"premiere_ouverture","in":"query","required":false,"description":"First claim (never received benefit, or not for 20 years): 5 months are enough.","schema":{"type":"boolean","description":"First claim (never received benefit, or not for 20 years): 5 months are enough."}},{"name":"conges_payes","in":"query","required":false,"description":"Paid leave compensation paid at the end of the contract (deferral).","schema":{"type":"number","description":"Paid leave compensation paid at the end of the contract (deferral).","minimum":0,"maximum":10000000}},{"name":"supra_legale","in":"query","required":false,"description":"Part of the termination payouts above the legal minimum (specific deferral).","schema":{"type":"number","description":"Part of the termination payouts above the legal minimum (specific deferral).","minimum":0,"maximum":10000000}},{"name":"csg","in":"query","required":false,"description":"CSG rate from the reference tax income: normal (default), reduced, zero.","schema":{"type":"string","enum":["normal","reduced","zero"],"description":"CSG rate from the reference tax income: normal (default), reduced, zero."}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/smic":{"get":{"operationId":"minimum_wage","summary":"Minimum wage (SMIC)","description":"The current French minimum wage (SMIC), gross and net, per hour, month and year, for weekly hours (35 by default).","parameters":[{"name":"heures","in":"query","required":false,"description":"Hours per week (35 by default).","schema":{"type":"number","description":"Hours per week (35 by default).","minimum":1,"maximum":48}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/salaires-metier":{"get":{"operationId":"job_offer_salaries","summary":"Salaries in job offers","description":"Salaries actually offered for a job in a place in France, from France Travail job offers: median, quartiles, number of offers, by experience. Moves up a geographic level when offers are scarce, and says so.\n\nExample: /api/v1/salaires-metier?metier=d%C3%A9veloppeur&lieu=Lyon","parameters":[{"name":"metier","in":"query","required":true,"description":"Job or job title, in French preferably (« développeur », « aide-soignant »).","schema":{"type":"string","maxLength":80,"description":"Job or job title, in French preferably (« développeur », « aide-soignant »)."},"example":"développeur"},{"name":"lieu","in":"query","required":false,"description":"French city, département or region (whole of France if absent).","schema":{"type":"string","maxLength":80,"description":"French city, département or region (whole of France if absent)."},"example":"Lyon"},{"name":"experience","in":"query","required":false,"description":"Experience band: debutant (beginner), 1-3, 3-5, 5-10, 10+ or all (default).","schema":{"type":"string","enum":["debutant","1-3","3-5","5-10","10+","all"],"description":"Experience band: debutant (beginner), 1-3, 3-5, 5-10, 10+ or all (default)."}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/salaire-moyen":{"get":{"operationId":"average_salary","summary":"Average salary of a profession","description":"Average salary of a profession from Insee, the French statistics office (full-time employees): monthly net and gross, yearly gross, by age, gender gap, company size.\n\nExample: /api/v1/salaire-moyen?profession=infirmier","parameters":[{"name":"profession","in":"query","required":true,"description":"Profession title, in French preferably (« infirmier », « comptable »).","schema":{"type":"string","maxLength":120,"description":"Profession title, in French preferably (« infirmier », « comptable »)."},"example":"infirmier"},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/demarches":{"get":{"operationId":"find_procedure","summary":"Find a French administrative procedure","description":"Searches the site's catalogue of French administrative procedures (work and leaving a job, unemployment and France Travail, tax, health, family, housing, starting a business) for those matching a situation described in plain words. Gives each procedure's title, summary and page; demarche reads it in full.\n\nExample: /api/v1/demarches?q=lettre+de+d%C3%A9mission","parameters":[{"name":"q","in":"query","required":true,"description":"The situation or procedure, French or English (“I want to resign”, “file my tax return”).","schema":{"type":"string","maxLength":300,"description":"The situation or procedure, French or English (“I want to resign”, “file my tax return”)."},"example":"lettre de démission"},{"name":"theme","in":"query","required":false,"description":"Optional theme: travail, chomage, impots, famille, sante, logement, entreprise.","schema":{"type":"string","enum":["travail","chomage","impots","famille","sante","logement","entreprise"],"description":"Optional theme: travail, chomage, impots, famille, sante, logement, entreprise."}},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}},"/api/v1/demarche":{"get":{"operationId":"get_procedure","summary":"Read a French administrative procedure","description":"One procedure from the catalogue in full: who, when, where, cost, how long, step by step, documents to prepare, pitfalls, letter template in French, official online service, sources and date checked, related calculators.\n\nExample: /api/v1/demarche?slug=demission","parameters":[{"name":"slug","in":"query","required":true,"description":"Procedure identifier, from demarches (“demission”, “declarer-revenus”).","schema":{"type":"string","maxLength":80,"description":"Procedure identifier, from demarches (“demission”, “declarer-revenus”)."},"example":"demission"},{"name":"format","in":"query","required":false,"description":"json (default) or text: plain text starting with the link to give the person.","schema":{"type":"string","enum":["json","text"]}},{"name":"lang","in":"query","required":false,"description":"Language of the labels and of the linked page: fr (default) or en.","schema":{"type":"string","enum":["fr","en"]}}],"responses":{"200":{"description":"Calculation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Success"}},"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Missing or unreadable parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"422":{"description":"Calculation impossible with these inputs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}},"429":{"description":"Too many requests: slow down","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Failure"}}}}}}}},"components":{"schemas":{"Success":{"type":"object","properties":{"ok":{"type":"boolean","const":true},"endpoint":{"type":"string"},"link":{"type":["string","null"],"description":"Prefilled page of the site that redoes the calculation: give it to the person."},"title":{"type":"string"},"headline":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"]}},"note":{"type":["string","null"]},"data":{"type":"object","description":"Structured result (numbers)."},"source":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}}},"required":["ok","endpoint","link","title","lines","data","source"]},"Failure":{"type":"object","properties":{"ok":{"type":"boolean","const":false},"endpoint":{"type":"string"},"reason":{"type":"string"},"error":{"type":"string"},"details":{"type":"array","items":{"type":"string"}}},"required":["ok","endpoint","reason","error"]}}}}