/api/v1/outils-ia/corriger-texteAPI Correcteur orthographe & grammaire
Détecte les fautes d'orthographe, de grammaire, de ponctuation et de style dans un texte français et propose des corrections.
Tapez au moins 2 caractères pour lancer la recherche.
Présentation
Cet endpoint analyse un texte français et renvoie la liste des problèmes détectés, chacun avec sa position exacte, le fragment concerné, une explication courte et des suggestions de remplacement.
L'analyse s'appuie sur LanguageTool, un correcteur open source, hébergé par Websource. Chaque anomalie est classée (orthographe, grammaire, ponctuation, style) et le champ counts donne le total par catégorie. Le texte n'est pas modifié : c'est à votre application d'appliquer les remplacements, offset et length permettant de localiser chaque anomalie dans le texte envoyé. Jusqu'à 5 suggestions par anomalie.
Utile pour relire des contenus avant envoi (e-mails, articles, descriptions produit), pour contrôler des contenus générés en masse, ou pour ajouter une aide à la saisie dans votre propre application.
Utilisation pas à pas
- 1Envoyez le texte à analyser (3 à 10 000 caractères) dans le champ text.
- 2Parcourez le tableau matches : chaque entrée indique où (offset, length) et pourquoi (message, type).
- 3Appliquez si besoin l'une des replacements proposées à l'emplacement indiqué.
Limites à connaître
- Texte de 3 à 10 000 caractères, en français.
- Les positions (offset, length) sont exprimées en caractères Unicode.
Endpoint et authentification
Chaque requête porte votre jeton dans l'en-tête Authorization, et le corps est envoyé en JSON (Content-Type: application/json). Le jeton est gratuit, sur demande depuis votre compte (formulaire en bas de page).
Authorization: Bearer VOTRE_JETONParamètres du corps (JSON)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| text | string | Requis | Texte à corriger (3 à 10 000 caractères). |
Exemples de code
Le même appel en plusieurs langages. Remplacez VOTRE_JETON par le jeton reçu par e-mail et gardez-le côté serveur (variable d'environnement), jamais dans un dépôt public.
curl -X POST https://www.websource.fr/api/v1/outils-ia/corriger-texte \
-H "Authorization: Bearer VOTRE_JETON" \
-H "Content-Type: application/json" \
-d '{"text":"Je suis aller au marché hier et j'\''ai acheter des pomme."}'<?php
$ch = curl_init('https://www.websource.fr/api/v1/outils-ia/corriger-texte');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer VOTRE_JETON',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'text' => 'Je suis aller au marché hier et j\'ai acheter des pomme.',
], JSON_UNESCAPED_UNICODE),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);
import requests
response = requests.post(
"https://www.websource.fr/api/v1/outils-ia/corriger-texte",
headers={"Authorization": "Bearer VOTRE_JETON"},
json={
"text": "Je suis aller au marché hier et j'ai acheter des pomme."
},
timeout=60,
)
print(response.json())
// Node.js 18+ (fetch natif)
const response = await fetch("https://www.websource.fr/api/v1/outils-ia/corriger-texte", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.WEBSOURCE_API_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"text": "Je suis aller au marché hier et j'ai acheter des pomme."
}),
});
const data = await response.json();
console.log(data);
// ⚠️ Ne placez jamais votre jeton dans du code exécuté dans le navigateur.
// Appelez l'API depuis votre serveur (route API Next.js, Express…) et
// laissez React appeler cette route : ici "/api/websource/corriger-texte".
import { useState } from "react";
export default function CorrigerTexte() {
const [result, setResult] = useState(null);
const [loading, setLoading] = useState(false);
async function run() {
setLoading(true);
const response = await fetch("/api/websource/corriger-texte", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"text": "Je suis aller au marché hier et j'ai acheter des pomme."
}),
});
setResult(await response.json());
setLoading(false);
}
return (
<div>
<button onClick={run} disabled={loading}>
{loading ? "Traitement…" : "Lancer"}
</button>
{result && <pre>{JSON.stringify(result, null, 2)}</pre>}
</div>
);
}
require "net/http"
require "json"
uri = URI("https://www.websource.fr/api/v1/outils-ia/corriger-texte")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer VOTRE_JETON"
request["Content-Type"] = "application/json"
request.body = <<~JSON
{
"text": "Je suis aller au marché hier et j'ai acheter des pomme."
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.parse(response.body)
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
payload := []byte(`{"text":"Je suis aller au marché hier et j'ai acheter des pomme."}`)
req, _ := http.NewRequest("POST", "https://www.websource.fr/api/v1/outils-ia/corriger-texte", bytes.NewBuffer(payload))
req.Header.Set("Authorization", "Bearer VOTRE_JETON")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
using System.Net.Http;
using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer VOTRE_JETON");
var json = """
{
"text": "Je suis aller au marché hier et j'ai acheter des pomme."
}
""";
var response = await client.PostAsync(
"https://www.websource.fr/api/v1/outils-ia/corriger-texte",
new StringContent(json, Encoding.UTF8, "application/json"));
Console.WriteLine(await response.Content.ReadAsStringAsync());
// Java 15+ (java.net.http et blocs de texte)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
String json = """
{
"text": "Je suis aller au marché hier et j'ai acheter des pomme."
}
""";
HttpRequest request = HttpRequest.newBuilder(URI.create("https://www.websource.fr/api/v1/outils-ia/corriger-texte"))
.header("Authorization", "Bearer VOTRE_JETON")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
Réponses
Réponse en cas de succès (code 200) :
{
"success": true,
"matches": [
{
"offset": 3,
"length": 5,
"original": "suis aller",
"message": "…",
"type": "grammaire",
"typeLabel": "Grammaire",
"replacements": ["suis allé", "suis allée"]
}
],
"counts": { "orthographe": 1, "grammaire": 2, "ponctuation": 0, "style": 0 }
}| Code | Signification | Que faire |
|---|---|---|
| 400 | Paramètre manquant ou invalide | Lisez le champ error, il précise la limite dépassée. |
| 401 | Jeton absent, invalide ou révoqué | Vérifiez l'en-tête Authorization. |
| 429 | Limite horaire atteinte | Attendez l'échéance indiquée dans Retry-After. |
| 503 | Service momentanément indisponible | Réessayez après quelques instants. |
Toute erreur a la forme {"success": false, "error": "…"}. Limite par défaut : 60 requêtes par heure et par jeton (ajustable sur demande).
Demander un accès API
Gratuit. Un jeton vous est envoyé par e-mail une fois la demande approuvée. Il donne accès à tous les outils de cette API.
Pour demander un accès, connectez-vous ou créez un compte gratuit. Vous reviendrez ensuite directement sur ce formulaire.