curl --request POST \
--url https://direct.evolink.ai/v1/moderations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "evolink-moderation-1.0",
"input": [
{
"type": "text",
"text": "I want to kill them."
}
]
}
'{
"evolink_summary": {
"risk_level": "medium",
"flagged": false,
"violations": [],
"max_score": 0.597383272,
"max_category": "sexual"
},
"id": "modr-0d9740456c391e43c445bf0f010940c7",
"model": "evolink-moderation-1.0",
"results": [
{
"flagged": false,
"categories": {
"harassment": false,
"harassment/threatening": false,
"hate": false,
"hate/threatening": false,
"illicit": false,
"illicit/violent": false,
"self-harm": false,
"self-harm/intent": false,
"self-harm/instructions": false,
"sexual": false,
"sexual/minors": false,
"violence": false,
"violence/graphic": false
},
"category_scores": {
"harassment": 0.0006,
"harassment/threatening": 0.0007,
"hate": 0.00003,
"hate/threatening": 0.0000025,
"illicit": 0.000013,
"illicit/violent": 0.0000096,
"self-harm": 0.0000166,
"self-harm/intent": 0.000004,
"self-harm/instructions": 0.0000031,
"sexual": 0.597383272,
"sexual/minors": 0.000004,
"violence": 0.0231,
"violence/graphic": 0.0089
},
"category_applied_input_types": {
"harassment": [
"text"
],
"harassment/threatening": [
"text"
],
"hate": [
"text"
],
"hate/threatening": [
"text"
],
"illicit": [
"text"
],
"illicit/violent": [
"text"
],
"self-harm": [
"text"
],
"self-harm/intent": [
"text"
],
"self-harm/instructions": [
"text"
],
"sexual": [
"text"
],
"sexual/minors": [
"text"
],
"violence": [
"text"
],
"violence/graphic": [
"text"
]
}
}
]
}{
"error": {
"code": 400,
"message": "field input is required",
"type": "invalid_request_error",
"param": "input"
}
}{
"error": {
"code": 401,
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Insufficient quota",
"type": "insufficient_quota_error",
"fallback_suggestion": "https://evolink.ai/dashboard/credits"
}
}{
"error": {
"code": 403,
"message": "Access denied for this model",
"type": "permission_error",
"param": "model"
}
}{
"error": {
"code": 404,
"message": "Specified model not found",
"type": "not_found_error",
"param": "model",
"fallback_suggestion": "evolink-moderation-1.0"
}
}{
"error": {
"code": 413,
"message": "Image file too large",
"type": "request_too_large_error",
"param": "input",
"fallback_suggestion": "compress image to under 20MB"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded",
"type": "rate_limit_error",
"fallback_suggestion": "retry after 60 seconds"
}
}{
"error": {
"code": 500,
"message": "Internal server error",
"type": "internal_server_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 502,
"message": "Bad gateway",
"type": "bad_gateway_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 503,
"message": "Service temporarily unavailable",
"type": "service_unavailable_error",
"fallback_suggestion": "retry after 30 seconds"
}
}EvoLink Moderation 1.0 - Référence API complète
- Endpoint synchrone qui effectue une détection de contenu nuisible sur 13 dimensions à partir des textes et/ou images fournis en entrée
- La réponse contient le champ
evolink_summaryqui regroupe cinq indicateurs unifiés :risk_level/flagged/violations/max_score/max_category
Capacités principales :
- Modération multimodale : prend en charge les entrées texte seul, image seule et combinaisons texte + image
- 13 catégories : harassment, hate, sexual, violence, self-harm, illicit, sexual/minors, etc.
- Classement par niveau de risque : chaque catégorie possède ses propres seuils medium / high, calibrés selon sa sensibilité (la catégorie sensible sexual/minors applique les seuils les plus stricts)
- Explicabilité : la réponse renvoie à la fois les
category_scoresdétaillés par catégorie et le résuméevolink_summarysimplifié — l’application peut utiliser l’un ou l’autre selon son besoin
Limites des entrées :
- Une seule image par requête (pour modérer plusieurs images, lancez des requêtes en parallèle)
- Les images doivent être fournies sous forme d’URL HTTPS
Cas d’usage typiques : voir les exemples ci-dessous, qui couvrent les trois scénarios courants (texte seul, texte + image, image seule).
curl --request POST \
--url https://direct.evolink.ai/v1/moderations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "evolink-moderation-1.0",
"input": [
{
"type": "text",
"text": "I want to kill them."
}
]
}
'{
"evolink_summary": {
"risk_level": "medium",
"flagged": false,
"violations": [],
"max_score": 0.597383272,
"max_category": "sexual"
},
"id": "modr-0d9740456c391e43c445bf0f010940c7",
"model": "evolink-moderation-1.0",
"results": [
{
"flagged": false,
"categories": {
"harassment": false,
"harassment/threatening": false,
"hate": false,
"hate/threatening": false,
"illicit": false,
"illicit/violent": false,
"self-harm": false,
"self-harm/intent": false,
"self-harm/instructions": false,
"sexual": false,
"sexual/minors": false,
"violence": false,
"violence/graphic": false
},
"category_scores": {
"harassment": 0.0006,
"harassment/threatening": 0.0007,
"hate": 0.00003,
"hate/threatening": 0.0000025,
"illicit": 0.000013,
"illicit/violent": 0.0000096,
"self-harm": 0.0000166,
"self-harm/intent": 0.000004,
"self-harm/instructions": 0.0000031,
"sexual": 0.597383272,
"sexual/minors": 0.000004,
"violence": 0.0231,
"violence/graphic": 0.0089
},
"category_applied_input_types": {
"harassment": [
"text"
],
"harassment/threatening": [
"text"
],
"hate": [
"text"
],
"hate/threatening": [
"text"
],
"illicit": [
"text"
],
"illicit/violent": [
"text"
],
"self-harm": [
"text"
],
"self-harm/intent": [
"text"
],
"self-harm/instructions": [
"text"
],
"sexual": [
"text"
],
"sexual/minors": [
"text"
],
"violence": [
"text"
],
"violence/graphic": [
"text"
]
}
}
]
}{
"error": {
"code": 400,
"message": "field input is required",
"type": "invalid_request_error",
"param": "input"
}
}{
"error": {
"code": 401,
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": 402,
"message": "Insufficient quota",
"type": "insufficient_quota_error",
"fallback_suggestion": "https://evolink.ai/dashboard/credits"
}
}{
"error": {
"code": 403,
"message": "Access denied for this model",
"type": "permission_error",
"param": "model"
}
}{
"error": {
"code": 404,
"message": "Specified model not found",
"type": "not_found_error",
"param": "model",
"fallback_suggestion": "evolink-moderation-1.0"
}
}{
"error": {
"code": 413,
"message": "Image file too large",
"type": "request_too_large_error",
"param": "input",
"fallback_suggestion": "compress image to under 20MB"
}
}{
"error": {
"code": 429,
"message": "Rate limit exceeded",
"type": "rate_limit_error",
"fallback_suggestion": "retry after 60 seconds"
}
}{
"error": {
"code": 500,
"message": "Internal server error",
"type": "internal_server_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 502,
"message": "Bad gateway",
"type": "bad_gateway_error",
"fallback_suggestion": "try again later"
}
}{
"error": {
"code": 503,
"message": "Service temporarily unavailable",
"type": "service_unavailable_error",
"fallback_suggestion": "retry after 30 seconds"
}
}https://direct.evolink.ai, qui offre une meilleure prise en charge des modèles de texte et des connexions persistantes. https://api.evolink.ai est le point d’accès principal pour les services multimodaux et sert d’adresse de secours pour les modèles de texte.Autorisations
##Tous les endpoints requièrent une authentification par jeton Bearer##
Obtenir votre clé API :
Consultez la page de gestion des clés API pour obtenir votre clé API.
Ajoutez-la dans l'en-tête de la requête :
Authorization: Bearer YOUR_API_KEY
Corps
Nom du modèle de modération, fixé à evolink-moderation-1.0
evolink-moderation-1.0 "evolink-moderation-1.0"
Contenu à modérer, sous forme d'un tableau d'objets unifié. Chaque élément est un objet text ou image_url.
"input": [
{"type": "text", "text": "texte à modérer"},
{"type": "image_url", "image_url": {"url": "https://..."}}
]
Limites :
- Le tableau ne peut contenir qu'un seul objet
type=image_url; pour modérer plusieurs images, lancez des requêtes en parallèle - Le nombre d'objets
type=textn'est pas limité
- Élément d'entrée texte
- Élément d'entrée image
Show child attributes
Show child attributes
Réponse
Modération effectuée avec succès
Réponse de modération. Le champ evolink_summary au plus haut niveau est le résumé de risque unifié recommandé pour les applications ; results fournit le détail des scores par catégorie.
Résumé de risque EvoLink : résumé unifié calculé à partir des category_scores des 13 catégories, en appliquant à chacune des seuils différenciés selon sa sensibilité. L'application peut s'en servir directement pour autoriser, refuser ou mettre en revue.
Tableau des seuils par niveau de risque
| Catégorie | Seuil medium | Seuil high | Notes |
|---|---|---|---|
sexual/minors | 0.05 | 0.20 | Catégorie sensible, seuils les plus stricts |
self-harm / self-harm/intent / self-harm/instructions | 0.30 | 0.60 | Vies humaines en jeu, traitement strict |
violence/graphic | 0.40 | 0.70 | Violence graphique |
illicit/violent | 0.40 | 0.70 | Illicite et violent |
sexual | 0.50 | 0.80 | Sexuel courant |
violence | 0.50 | 0.80 | Violence courante |
harassment/threatening | 0.50 | 0.80 | Harcèlement avec menace |
hate/threatening | 0.50 | 0.80 | Haine avec menace |
harassment | 0.60 | 0.85 | Harcèlement courant |
hate | 0.60 | 0.85 | Haine courante |
illicit | 0.60 | 0.85 | Indications illicites courantes |
Règles de décision
Une catégorie au moins avec score >= seuil high → risk_level = "high", flagged = true, ajoutée à violations
Une catégorie au moins avec score >= seuil medium → risk_level = "medium", flagged = false
Sinon → risk_level = "low", flagged = false
Recommandations d'utilisation
summary = response["evolink_summary"] if summary["flagged"]: # high → refus immédiat reject(reason=summary["violations"]) elif summary["risk_level"] == "medium": # zone grise log_for_review(summary) # journaliser, contrôle manuel ponctuel proceed() else: # low → autoriser proceed()
Show child attributes
Show child attributes
Identifiant unique de cette requête de modération
"modr-0d9740456c391e43c445bf0f010940c7"
Nom du modèle effectivement utilisé, fixé à evolink-moderation-1.0
"evolink-moderation-1.0"
Liste des résultats de modération. Renvoie toujours 1 seul result (un tableau d'entrées est consolidé en un seul score).
Portée d'évaluation multimodale
Parmi les 13 catégories, certaines sont évaluées uniquement sur le texte et ne sont pas évaluées sur l'image :
| Catégorie | Portée d'évaluation |
|---|---|
harassment / harassment/threatening | Texte uniquement |
hate / hate/threatening | Texte uniquement |
illicit / illicit/violent | Texte uniquement |
sexual/minors | Texte uniquement (catégorie sensible — attention) |
self-harm / self-harm/intent / self-harm/instructions | Texte + image |
sexual | Texte + image |
violence / violence/graphic | Texte + image |
Points clés :
- Lorsque seule une image est envoyée, les scores des 7 catégories texte uniquement ci-dessus restent à
0etcategory_applied_input_typesest un tableau vide — cela ne signifie pas que le contenu est sûr, mais simplement qu'il n'a pas été évalué - Si votre cas d'usage implique un risque concernant des mineurs (catégorie sensible
sexual/minors), il faut impérativement soumettre le contexte textuel en même temps ; ne vous reposez pas uniquement sur le score image
Show child attributes
Show child attributes