docs.vario.lat
This page was machine-translated and is pending human review.

Response object reference — POST /analyze

The POST /analyze endpoint returns a JSON object with the result of the risk analysis. The object is stateless: it reflects exclusively the analysis of that specific call. vario does not store the submitted text or the result — the response object is the sole product of the call.


Field table

FieldTypeDescription
combined_scorefloat [0–10]Aggregated risk score. 0 indicates no signal; 10 indicates maximum signal.
should_alertbooleantrue if the system recommends human review for this communication.
severitystringRisk category: "critical" | "high" | "medium" | "low".
reasoningstringNarrative explanation of the analysis, in the language defined by the language field of the request. Empty if deep analysis was not available.
key_phrasesarray[string]Phrases from the text identified as relevant to the analyzed conduct.
regulatory_frameworksarray[string]Regulatory frameworks identified as potentially applicable (for example: "FCPA", "DL 211", "MAR").
conduct_typestringConduct detected by the pipeline. Open classification: may differ from the requested playbook. Closed domain of 7 values: "price_fixing" · "bid_rigging" · "bribery" · "market_manipulation" · "information_exchange" · "group_boycott" · "none". Always "none" in l1_discard. Absent in screening.
recommended_actionstringSuggested action. Closed domain, tier-dependent — fast/l2_pass/degraded: "no_action" | "monitoring" | "legal_review"; full mode (L3 passthrough): adds "open_case" | "dismiss" | "immediate_escalation". System recommendation; the reviewer decides.
confidencestringConfidence level of the complete analysis: "high" | "medium" | "low".
processing_pathstring | nullPipeline stage that produced the response. Non-breaking field: clients that do not know it ignore it without error. See the table in POST /analyze.
mode_usedstringMode effectively executed: "screening" | "fast" | "full". In screening mode the response schema is different — see the section at the end of this page.
analyzed_atstring (ISO 8601)UTC timestamp of the analysis.
pipeline_versionstringVersion of the analysis engine (opaque string — do not parse or rely on its internal structure).
bedrock_availablebooleanfalse if deep analysis was not available for this call. When false, the response is partial.

How to interpret combined_score

combined_score is a floating-point number in the range 0 to 10:

  • 0 — no signal detected for the analyzed conduct.
  • 10 — maximum signal; the communication presents very strong indicators of the conduct.

The scale is ordinal, not linear: the distance between 7 and 8 is not equivalent to the distance between 3 and 4. Do not compare scores from different calls as if they were absolute magnitudes; use them to prioritize within a corpus.

The severity field expresses the same result in qualitative categories, more useful for making triage decisions. The should_alert field is the recommended binary indicator for integration in automated workflows.


How to interpret severity

severity categorizes the risk level of the communication:

ValueMeaning
"critical"Very strong signal. The communication presents consistent and direct indicators of the analyzed conduct. Urgent review recommended.
"high"Significant signal. Indicators are clear, though not as concentrated. Priority review recommended.
"medium"Moderate signal. There are elements of interest but context is ambiguous.
"low"Weak signal. The communication does not present strong indicators.

The determination of severity is the system's responsibility; the decision to act on it is always the human reviewer's responsibility.


How to use reasoning and key_phrases

reasoning is a narrative explanation generated in the language of the analyzed text. It describes which elements of the communication contributed to the result. Its purpose is to provide context to the human reviewer — it is not a legal ruling or a definitive conclusion.

key_phrases is an array of fragments extracted from the text that the system identified as relevant to the analyzed conduct. They can be used to quickly locate the parts of the message that drove the score.

Important considerations:

  • Both reasoning and key_phrases are orientation tools for the reviewer, not substitutes for legal analysis.
  • When bedrock_available is false, reasoning may be empty or less detailed.
  • key_phrases may be an empty array ([]) if the system did not identify specific fragments with sufficient confidence.

How to use regulatory_frameworks

regulatory_frameworks lists the regulatory frameworks the system identified as potentially relevant to the analyzed communication. Examples of possible values: "FCPA", "DL 211", "MAR", "Lei Anticorrupção 12.846/2013", "CADE", "COFECE".

Important considerations:

  • This list reflects the frameworks the system associated with the detected signal. It is not a legal opinion.
  • It does not replace specialized legal advice.
  • The array may be empty ([]) if the system did not identify frameworks with sufficient confidence.

Privacy

vario does not store or retain the analyzed text. The pipeline is completely stateless: no data from the text or thread_context fields persists in vario's database.


Degradation: when bedrock_available is false

If deep analysis was not available at the time of the call, the endpoint returns 200 with bedrock_available: false. In this case:

  • reasoning may be empty.
  • confidence may be "low". To receive an explicit error instead of a partial response, include the header Prefer: deep-analysis-required. In that case, the endpoint returns 503 DEEP_ANALYSIS_UNAVAILABLE when deep analysis is not available.

Complete response example

High signal of price coordination, analyzed in full mode:

{
  "combined_score": 8.4,
  "should_alert": true,
  "severity": "critical",
  "reasoning": "El mensaje contiene una indicación explícita de coordinar el precio mínimo de venta con un competidor. La referencia directa a un valor de precio y la expectativa de que otros actores del mercado lo respetarán son indicadores consistentes con coordinación horizontal de precios.",
  "key_phrases": [
    "no bajamos de $450 la unidad",
    "los demás van a hacer lo mismo",
    "acordamos no competir por precio"
  ],
  "regulatory_frameworks": [
    "DL 211 (Chile)",
    "Lei Anticorrupção 12.846/2013 (Brasil)",
    "COFECE — Ley Federal de Competencia Económica"
  ],
  "recommended_action": "legal_review",
  "confidence": "high",
  "mode_used": "full",
  "analyzed_at": "2026-06-02T14:32:00Z",
  "pipeline_version": "1.0",
  "bedrock_available": true
}

Example in fast mode with low signal

{
  "combined_score": 1.2,
  "should_alert": false,
  "severity": "low",
  "reasoning": "No se identificaron indicadores relevantes de la conducta analizada en el texto proporcionado.",
  "key_phrases": [],
  "regulatory_frameworks": [],
  "recommended_action": "no_action",
  "confidence": "high",
  "mode_used": "fast",
  "analyzed_at": "2026-06-02T14:33:10Z",
  "pipeline_version": "1.0",
  "bedrock_available": true
}

Example with degradation (bedrock_available: false)

{
  "combined_score": 3.1,
  "should_alert": false,
  "severity": "medium",
  "reasoning": "",
  "key_phrases": [],
  "regulatory_frameworks": [],
  "recommended_action": "monitoring",
  "confidence": "low",
  "mode_used": "fast",
  "analyzed_at": "2026-06-02T15:01:42Z",
  "pipeline_version": "1.0",
  "bedrock_available": false
}

Response in screening mode

When mode_used is "screening", the response object has a different schema from fast and full modes. It only includes L1 layer results (keyword + embedding). The fields combined_score, should_alert, severity, reasoning, key_phrases, regulatory_frameworks, recommended_action, confidence, and bedrock_available are not present.

FieldTypeDescription
mode_usedstring"screening"
l1_scorefloat [0–1]Aggregated L1 score: max(l1_keyword_score, l1_embedding_score).
l1_keyword_scorefloat [0–1]Keyword detection score.
l1_embedding_scorefloat [0–1]Semantic similarity score via embeddings.
l1_matched_termsarray[string]Terms in the text that triggered L1 detection.
l1_embedding_availablebooleantrue if the embedding service was available.
playbookstringEcho of the playbook field in the request.
playbook_versionstringVersion of the playbook used.
pipeline_versionstringVersion of the analysis engine.
analyzed_atstring (ISO 8601)UTC timestamp of the analysis.
external_idstring | nullEcho of the external_id sent in the request.

Example response in screening mode:

{
  "mode_used": "screening",
  "l1_score": 0.82,
  "l1_keyword_score": 0.75,
  "l1_embedding_score": 0.82,
  "l1_matched_terms": ["acordamos no movernos del precio", "precio"],
  "l1_embedding_available": true,
  "playbook": "price_fixing",
  "playbook_version": "1.0",
  "pipeline_version": "1.0",
  "analyzed_at": "2026-06-04T10:15:00Z",
  "external_id": "email-msg-00842"
}
ℹ

For a complete analysis of documents that exceed the l1_score threshold, send a new request in fast or full mode.


Final notes

  • The output of POST /analyze is a risk signal, not a legal determination. It does not replace review by an attorney, nor does it constitute evidence before regulators.
  • vario alerts; the CCO decides. The principle of human review is part of the system's design.
The API output is a risk signal, not a legal determination. It does not substitute a lawyer's review and does not constitute evidence before regulators on its own.