The Legal Seed · API publique

API v1 — Documentation

L'API publique de The Legal Seed permet aux intégrateurs tiers, cabinets partenaires et plateformes légales de réutiliser notre moteur juridique bilingue (FR/EN) : chat IA, recherche d'articles de loi marocains, annuaire d'avocats vérifiés, analyse de contrats.

https://legal-seed.com/api/v1

Authentification

Toutes les requêtes vers /api/v1/* doivent inclure une clé API valide. La clé peut être transmise via l'en-tête Authorization: Bearer ou l'en-tête x-api-key.

Format de clé

Les clés API commencent par tls_api_ et font 32 caractères.

curl https://legal-seed.com/api/v1/chat \
  -H "Authorization: Bearer tls_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"Indemnité licenciement abusif"}]}'

ou via x-api-key :

curl https://legal-seed.com/api/v1/search?q=indemnit%C3%A9+licenciement \
  -H "x-api-key: tls_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Obtenir une clé : écrivez à api@thelegalseed.ma en précisant votre cas d'usage. Les clés sont individuelles et nominatives.

Limites de débit

Chaque clé API est limitée à 100 requêtes / heure glissantes.

Les réponses incluent les en-têtes suivants lorsque la limite est proche :

HeaderDescription
Retry-AfterSecondes restantes avant reset (uniquement sur 429).

Au-delà de la limite, l'API renvoie 429 Too Many Requests avec un corps { error: "rate_limit_exceeded", retryAfterSeconds }.

Quotas Enterprise : les plans enterprise peuvent monter jusqu'à 10 000 requêtes / heure. Contactez api@thelegalseed.ma.

Codes d'erreur

Code HTTPErreurCause
400invalid_jsonLe corps n'est pas du JSON valide.
400invalid_requestChamps requis manquants ou invalides.
401unauthorizedClé API absente.
401invalid_api_keyClé API non reconnue.
403forbiddenLa clé n'a pas accès à cette ressource.
429rate_limit_exceededLimite horaire dépassée pour cette clé.
500server_errorErreur interne (rare, journalisée).
503ai_unavailableLe modèle IA est temporairement indisponible.

Toutes les erreurs renvoient un objet :

{ "error": "invalid_api_key", "detail": "The provided API key is not recognized." }

POST /chat

POST /api/v1/chat

Agent d'orientation juridique bilingue. Identifie la spécialité, pose des questions clarifiantes, et fournit une réponse accompagnée de citations d'articles de loi marocains vérifiées.

Corps de la requête

ChampTypeDescription
messagesarrayTableau de messages {role, content}. Roles acceptés : user, assistant, system.
langstringLangue de réponse. "fr" (défaut) ou "en".

Exemple de requête

POST /api/v1/chat
Authorization: Bearer tls_api_xxx
Content-Type: application/json

{
  "lang": "fr",
  "messages": [
    { "role": "user", "content": "Mon employeur me licencie après 8 ans, quelle indemnité ?" }
  ]
}

Exemple de réponse

{
  "reply": "Votre situation relève du droit du travail (spécialité: travail). En cas de licenciement abusif après 8 ans d'ancienneté, l'article 59 du Code du Travail prévoit des dommages-intérêts calculés en fonction de l'ancienneté, du salaire et du préjudice subi...",
  "citations": [
    {
      "article": "Article 59",
      "source": "Code du Travail (loi 65-99)",
      "url": "/moroccan-law/code-travail#art-59"
    },
    {
      "article": "Article 41",
      "source": "Code du Travail (loi 65-99)",
      "url": "/moroccan-law/code-travail#art-41"
    }
  ],
  "detectedSpecialty": "travail",
  "confidence": 0.92
}

Champs de la réponse

ChampTypeDescription
replystringRéponse textuelle de l'agent.
citationsarrayArticles de loi vérifiés contre la base de connaissance.
detectedSpecialtystring|nullSpécialité TLS détectée (famille, travail, penal, etc.).
confidencenumberIndice de confiance 0..1.

GET /lawyers

GET /api/v1/lawyers?city={city}&specialty={id}&limit={n}

Annuaire des avocats vérifiés The Legal Seed. Les champs PII (téléphone, email, adresse, numéro de barreau) ne sont pas exposés via l'API publique — ils requièrent un rendez-vous booked via la plateforme.

Paramètres de la requête

ParamètreTypeDéfautDescription
citystringnullFiltrer par ville (Casablanca, Rabat, Marrakech...).
specialtystringnullFiltrer par spécialité principale ou secondaire.
limitint10Nombre de résultats (max 50).

Exemple

GET /api/v1/lawyers?city=Casablanca&specialty=travail&limit=3
Authorization: Bearer tls_api_xxx

Exemple de réponse

{
  "count": 3,
  "totalAvailable": 12,
  "limit": 3,
  "filters": { "city": "Casablanca", "specialty": "travail" },
  "lawyers": [
    {
      "name": "Cabinet Alami & Associés",
      "slug": "cabinet-alami-casablanca",
      "city": "Casablanca",
      "specialties": [
        { "slug": "travail", "label": "Droit du Travail", "isPrimary": true },
        { "slug": "affaires", "label": "Droit des Affaires", "isPrimary": false }
      ],
      "consultationFee": "300 DH — 1ère consultation",
      "rating": 4.8,
      "verified": true,
      "languages": ["français", "arabe", "anglais"],
      "yearsExperience": 15,
      "availability": "Disponible cette semaine"
    }
  ]
}

POST /contracts/analyze

POST /api/v1/contracts/analyze

Analyse IA d'un contrat au regard du droit marocain. Identifie les clauses à risque (high / medium / low / info) et propose une recommandation par clause.

Corps de la requête

ChampTypeDescription
contractTextstringTexte du contrat (min 50 caractères, max 8000).

Exemple de requête

POST /api/v1/contracts/analyze
Authorization: Bearer tls_api_xxx
Content-Type: application/json

{
  "contractText": "CONTRAT DE TRAVAIL À DURÉE INDÉTERMINÉE\n\nEntre M. X (employeur) et Mme Y (salariée)...\n\nArticle 1 — Période d'essai : 6 mois renouvelable...\n\nArticle 2 — Clause de non-concurrence : pendant 5 ans après la fin du contrat sur tout le territoire marocain...\n\n..."
}

Exemple de réponse

{
  "synthesis": "Le contrat présente 2 clauses à risque élevé et 2 clauses conformes. La période d'essai de 6 mois renouvelable dépasse la limite légale. La clause de non-concurrence de 5 ans est manifestement excessive. Recommandation : réviser avant signature.",
  "clauses": [
    {
      "title": "Période d'essai",
      "risk": "high",
      "analysis": "L'article 52 du Code du Travail fixe la période d'essai à 3 mois pour les cadres, renouvelable une seule fois. 6 mois renouvelable est illicite.",
      "recommendation": "Ramener à 3 mois et préciser 'renouvellement une seule fois'."
    },
    {
      "title": "Clause de non-concurrence",
      "risk": "high",
      "analysis": "5 ans sur tout le territoire marocain est manifestement excessif. La jurisprudence considère qu'une telle clause n'est valable que si elle est limitée dans le temps (max 2 ans), dans l'espace et justifiée par l'intérêt de l'employeur.",
      "recommendation": "Ramener à 2 ans maximum et limiter géographiquement aux villes d'implantation."
    },
    {
      "title": "Durée du contrat",
      "risk": "info",
      "analysis": "CDI conforme au droit marocain.",
      "recommendation": "Aucune modification nécessaire."
    }
  ],
  "stats": { "high": 2, "medium": 0, "low": 0, "info": 1 }
}

Niveaux de risque

NiveauDéfinition
highClause manifestement illicite, nulle, ou très risquée.
mediumClause valable mais perfectible, points d'attention.
lowClause conforme, avec mineurs ajustements possibles.
infoClause standard, information neutre.

SCIM 2.0 — Provisioning entreprise

Pour les clients Enterprise, The Legal Seed expose un endpoint SCIM 2.0 permettant l'automatisation du provisioning utilisateur via Okta, Azure AD, Google Workspace, etc.

GET /api/scim/v2/Users
POST /api/scim/v2/Users

Authentification : Bearer token (Admin Token). Voir la spécification RFC 7644.

Statut : Disponible Bêta — contactez votre Account Manager

Support

Pour toute question technique : api@thelegalseed.ma
Pour les questions de sécurité : security@thelegalseed.ma
Statut des services : /security

The Legal Seed — Maroc. Les réponses de l'IA ne constituent pas un conseil juridique. Consultez un avocat inscrit au barreau pour toute décision.