Aiwen Legal API

Integrate AI-powered contract risk analysis into your workflow

🔐 Authentication

All API requests require a Bearer token. Generate your API key from the Settings page.

Authorization: Bearer cg_live_YOUR_API_KEY

📡 Endpoints

MethodEndpointDescriptionAuth
POST/api/v1/analyzeAnalyze a contract (applies your rules + legal RAG)API Key
GET/api/v1/contractsList past analysesAPI Key
GET/api/v1/contracts/:idGet single analysisAPI Key
GET/api/contractsContract portfolio (with deadlines)Session
PATCH/api/contracts/:idUpdate contract (status, dates, value)Session
GET/api/deadlinesUpcoming deadlinesSession
POST/api/rulesCreate a compliance ruleSession
GET/api/legalSearch the legal librarySession
GET/api/auditAudit trail (paginated)Session
GET/api/audit/exportExport audit trail as CSVSession
GET/api/healthSystem health checkNone
POST/api/keysCreate API keySession

📋 Supported Contract Types

ndasaasserviceemploymentfreelancepartnershipleasevendorlicensedistributionjoint_venturemergerloanconstructionfranchiseagencysupply_chainreal_estatesettlementtosdparesellerother

💻 Integration Examples

curl -X POST https://your-domain.com/api/v1/analyze \
  -H "Authorization: Bearer cg_live_YOUR_KEY" \
  -F "file=@contract.pdf" \
  -F "contractType=saas"

⚡ Rate Limits & Errors

Rate Limit30 requests/minute per API key
Max File Size10 MB
Timeout120 seconds
401Invalid or missing API key
403Monthly contract limit reached
429Rate limit exceeded

📦 Response Format

{
  "contractId": "clx...",
  "overallRiskGrade": "C",      // deprecated alias, kept for backwards compatibility - A (safe) → F (critical)
  "overallRiskScore": 54,       // deprecated alias - 0-100, higher = riskier
  "contractGrade": "C",         // same letter as overallRiskGrade
  "contractScore": 46,          // 100 - overallRiskScore, 0-100, higher = better - shown throughout the dashboard, use this one
  "executiveSummary": "...",
  "detectedJurisdiction": "US",
  "businessContext": "B2B",
  "modelUsed": "aiwen-legal-v1",
  "processingTimeMs": 649,
  "enginesRun": ["Extraction", "Classification", ...],
  "clauses": [{
    "clauseType": "Unlimited Liability",
    "riskLevel": "critical",    // critical|high|medium|low|safe
    "riskScore": 9,             // 0-10
    "originalText": "...",
    "explanation": "...",
    "recommendation": "...",
    "confidence": 0.95
  }],
  "clauses": [{
    "clauseType": "Liquidated Damages",
    "riskScore": 8,
    "summary": "Plain-language explanation of the clause...",   // Summary engine
    "legalCitations": [{                                         // Legal RAG engine
      "kind": "statute",
      "citation": "Code civil, art. 1231-5",
      "summary": "Judges may reduce a manifestly excessive penalty...",
      "url": "https://www.legifrance.gouv.fr/..."
    }, {
      "kind": "case",                                            // Judilibre live case law - only present when JUDILIBRE_API_KEY is configured, never a placeholder
      "citation": "Cour de cassation, chambre commerciale, ..., n° ...",
      "summary": "...",
      "url": "https://www.courdecassation.fr/decision/..."
    }]
  }],
  "missingClauses": [{ "type": "...", "criticality": "mandatory" }],
  "consistencyIssues": [{ "clauseA": "...", "clauseB": "...", "type": "contradiction" }],
  "deviationReport": [{ "clauseType": "...", "deviationScore": 97 }],
  "gapReport": [{ "clauseType": "...", "status": "mandatory_missing" }],
  "clauseRewrites": [{ "clauseType": "...", "safe": "...", "balanced": "..." }],
  "scoreBreakdown": { "clauseScore": 45, "gapScore": 20, "grade": "C" },

  "legalRagReport": {                          // statutes & case law per clause
    "appliedJurisdictions": ["FR", "EU"],
    "clauseCitations": [{ "clauseType": "...", "citations": [...] }],
    "generalProvisions": [...]
  },
  "metadata": {                                // extracted contract data
    "parties": [{ "name": "ACME SAS", "siret": "55210055400013", "role": "Provider" }],
    "totalValue": 120000, "currency": "EUR",
    "dates": { "startDate": "2026-01-01", "endDate": "2028-01-01",
               "noticePeriodDays": 90, "autoRenews": true },
    "paymentTermDays": 90
  },
  "policyReport": {                            // your custom compliance rules
    "verdict": "blocked",                      // pass | warning | blocked
    "violations": [{ "ruleName": "...", "action": "block", "matchedOn": "..." }]
  }
}