curl --request POST \
--url https://core.locusmedical.fr/v2/retrieve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"include_usage": false,
"patient_ehr": "<string>",
"history": [
{
"question": "",
"answer_short": "",
"precisions": [
"<string>"
]
}
],
"concept_k": 5,
"chunk_k": 10,
"mku_k": 12,
"logic_min_similarity": 0.6,
"drug_k": 4,
"mku_weight": 0.75,
"table_k": 5,
"deliberate": false,
"orchestrate": false,
"slot_answers": [
{
"key": "<string>",
"values": [
"<string>"
],
"skipped": false,
"provenance": "élicité",
"preuve": "",
"absents": [
"<string>"
],
"label": ""
}
],
"elicitation_round": 0,
"contexte": {
"reformulated": "",
"ehr_summary": "",
"turn_kind": "",
"ehr_additions": "",
"concept_terms": [
"<string>"
],
"rubric_codes": [
"<string>"
],
"intent": "<string>",
"routes": [
"<string>"
],
"named_mku_id": "<string>",
"concepts": [
{}
],
"mkus": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"chunks": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"tables": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
]
},
"authority_min_similarity": 0.8,
"max_elicitation_rounds": 1,
"answer_system_prompt": "<string>",
"use_cross_refs": false,
"concept_mku_k": 60,
"cross_ref_hops": 1,
"cross_ref_seeds": 40,
"cross_ref_k": 400,
"logic_answers": [
{
"mku_id": "",
"mku_key": "",
"answers": {},
"checked": [
"<string>"
],
"level": "<string>"
}
],
"source_weights": {},
"sources": [
"<string>"
],
"exclude_sources": [
"<string>"
],
"app_version": "<string>",
"app_build": "<string>",
"app_platform": "<string>",
"app_surface": "<string>",
"conversation_id": "<string>",
"app_session_id": "<string>"
}
'import requests
url = "https://core.locusmedical.fr/v2/retrieve"
payload = {
"query": "<string>",
"include_usage": False,
"patient_ehr": "<string>",
"history": [
{
"question": "",
"answer_short": "",
"precisions": ["<string>"]
}
],
"concept_k": 5,
"chunk_k": 10,
"mku_k": 12,
"logic_min_similarity": 0.6,
"drug_k": 4,
"mku_weight": 0.75,
"table_k": 5,
"deliberate": False,
"orchestrate": False,
"slot_answers": [
{
"key": "<string>",
"values": ["<string>"],
"skipped": False,
"provenance": "élicité",
"preuve": "",
"absents": ["<string>"],
"label": ""
}
],
"elicitation_round": 0,
"contexte": {
"reformulated": "",
"ehr_summary": "",
"turn_kind": "",
"ehr_additions": "",
"concept_terms": ["<string>"],
"rubric_codes": ["<string>"],
"intent": "<string>",
"routes": ["<string>"],
"named_mku_id": "<string>",
"concepts": [{}],
"mkus": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"chunks": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"tables": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
]
},
"authority_min_similarity": 0.8,
"max_elicitation_rounds": 1,
"answer_system_prompt": "<string>",
"use_cross_refs": False,
"concept_mku_k": 60,
"cross_ref_hops": 1,
"cross_ref_seeds": 40,
"cross_ref_k": 400,
"logic_answers": [
{
"mku_id": "",
"mku_key": "",
"answers": {},
"checked": ["<string>"],
"level": "<string>"
}
],
"source_weights": {},
"sources": ["<string>"],
"exclude_sources": ["<string>"],
"app_version": "<string>",
"app_build": "<string>",
"app_platform": "<string>",
"app_surface": "<string>",
"conversation_id": "<string>",
"app_session_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: '<string>',
include_usage: false,
patient_ehr: '<string>',
history: [{question: '', answer_short: '', precisions: ['<string>']}],
concept_k: 5,
chunk_k: 10,
mku_k: 12,
logic_min_similarity: 0.6,
drug_k: 4,
mku_weight: 0.75,
table_k: 5,
deliberate: false,
orchestrate: false,
slot_answers: [
{
key: '<string>',
values: ['<string>'],
skipped: false,
provenance: 'élicité',
preuve: '',
absents: ['<string>'],
label: ''
}
],
elicitation_round: 0,
contexte: {
reformulated: '',
ehr_summary: '',
turn_kind: '',
ehr_additions: '',
concept_terms: ['<string>'],
rubric_codes: ['<string>'],
intent: '<string>',
routes: ['<string>'],
named_mku_id: '<string>',
concepts: [{}],
mkus: [{id: '<string>', score: 123, similarity: 123, via: ''}],
chunks: [{id: '<string>', score: 123, similarity: 123, via: ''}],
tables: [{id: '<string>', score: 123, similarity: 123, via: ''}]
},
authority_min_similarity: 0.8,
max_elicitation_rounds: 1,
answer_system_prompt: '<string>',
use_cross_refs: false,
concept_mku_k: 60,
cross_ref_hops: 1,
cross_ref_seeds: 40,
cross_ref_k: 400,
logic_answers: [
{mku_id: '', mku_key: '', answers: {}, checked: ['<string>'], level: '<string>'}
],
source_weights: {},
sources: ['<string>'],
exclude_sources: ['<string>'],
app_version: '<string>',
app_build: '<string>',
app_platform: '<string>',
app_surface: '<string>',
conversation_id: '<string>',
app_session_id: '<string>'
})
};
fetch('https://core.locusmedical.fr/v2/retrieve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://core.locusmedical.fr/v2/retrieve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => '<string>',
'include_usage' => false,
'patient_ehr' => '<string>',
'history' => [
[
'question' => '',
'answer_short' => '',
'precisions' => [
'<string>'
]
]
],
'concept_k' => 5,
'chunk_k' => 10,
'mku_k' => 12,
'logic_min_similarity' => 0.6,
'drug_k' => 4,
'mku_weight' => 0.75,
'table_k' => 5,
'deliberate' => false,
'orchestrate' => false,
'slot_answers' => [
[
'key' => '<string>',
'values' => [
'<string>'
],
'skipped' => false,
'provenance' => 'élicité',
'preuve' => '',
'absents' => [
'<string>'
],
'label' => ''
]
],
'elicitation_round' => 0,
'contexte' => [
'reformulated' => '',
'ehr_summary' => '',
'turn_kind' => '',
'ehr_additions' => '',
'concept_terms' => [
'<string>'
],
'rubric_codes' => [
'<string>'
],
'intent' => '<string>',
'routes' => [
'<string>'
],
'named_mku_id' => '<string>',
'concepts' => [
[
]
],
'mkus' => [
[
'id' => '<string>',
'score' => 123,
'similarity' => 123,
'via' => ''
]
],
'chunks' => [
[
'id' => '<string>',
'score' => 123,
'similarity' => 123,
'via' => ''
]
],
'tables' => [
[
'id' => '<string>',
'score' => 123,
'similarity' => 123,
'via' => ''
]
]
],
'authority_min_similarity' => 0.8,
'max_elicitation_rounds' => 1,
'answer_system_prompt' => '<string>',
'use_cross_refs' => false,
'concept_mku_k' => 60,
'cross_ref_hops' => 1,
'cross_ref_seeds' => 40,
'cross_ref_k' => 400,
'logic_answers' => [
[
'mku_id' => '',
'mku_key' => '',
'answers' => [
],
'checked' => [
'<string>'
],
'level' => '<string>'
]
],
'source_weights' => [
],
'sources' => [
'<string>'
],
'exclude_sources' => [
'<string>'
],
'app_version' => '<string>',
'app_build' => '<string>',
'app_platform' => '<string>',
'app_surface' => '<string>',
'conversation_id' => '<string>',
'app_session_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://core.locusmedical.fr/v2/retrieve"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"include_usage\": false,\n \"patient_ehr\": \"<string>\",\n \"history\": [\n {\n \"question\": \"\",\n \"answer_short\": \"\",\n \"precisions\": [\n \"<string>\"\n ]\n }\n ],\n \"concept_k\": 5,\n \"chunk_k\": 10,\n \"mku_k\": 12,\n \"logic_min_similarity\": 0.6,\n \"drug_k\": 4,\n \"mku_weight\": 0.75,\n \"table_k\": 5,\n \"deliberate\": false,\n \"orchestrate\": false,\n \"slot_answers\": [\n {\n \"key\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"skipped\": false,\n \"provenance\": \"élicité\",\n \"preuve\": \"\",\n \"absents\": [\n \"<string>\"\n ],\n \"label\": \"\"\n }\n ],\n \"elicitation_round\": 0,\n \"contexte\": {\n \"reformulated\": \"\",\n \"ehr_summary\": \"\",\n \"turn_kind\": \"\",\n \"ehr_additions\": \"\",\n \"concept_terms\": [\n \"<string>\"\n ],\n \"rubric_codes\": [\n \"<string>\"\n ],\n \"intent\": \"<string>\",\n \"routes\": [\n \"<string>\"\n ],\n \"named_mku_id\": \"<string>\",\n \"concepts\": [\n {}\n ],\n \"mkus\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"chunks\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"tables\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ]\n },\n \"authority_min_similarity\": 0.8,\n \"max_elicitation_rounds\": 1,\n \"answer_system_prompt\": \"<string>\",\n \"use_cross_refs\": false,\n \"concept_mku_k\": 60,\n \"cross_ref_hops\": 1,\n \"cross_ref_seeds\": 40,\n \"cross_ref_k\": 400,\n \"logic_answers\": [\n {\n \"mku_id\": \"\",\n \"mku_key\": \"\",\n \"answers\": {},\n \"checked\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n }\n ],\n \"source_weights\": {},\n \"sources\": [\n \"<string>\"\n ],\n \"exclude_sources\": [\n \"<string>\"\n ],\n \"app_version\": \"<string>\",\n \"app_build\": \"<string>\",\n \"app_platform\": \"<string>\",\n \"app_surface\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"app_session_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://core.locusmedical.fr/v2/retrieve")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"include_usage\": false,\n \"patient_ehr\": \"<string>\",\n \"history\": [\n {\n \"question\": \"\",\n \"answer_short\": \"\",\n \"precisions\": [\n \"<string>\"\n ]\n }\n ],\n \"concept_k\": 5,\n \"chunk_k\": 10,\n \"mku_k\": 12,\n \"logic_min_similarity\": 0.6,\n \"drug_k\": 4,\n \"mku_weight\": 0.75,\n \"table_k\": 5,\n \"deliberate\": false,\n \"orchestrate\": false,\n \"slot_answers\": [\n {\n \"key\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"skipped\": false,\n \"provenance\": \"élicité\",\n \"preuve\": \"\",\n \"absents\": [\n \"<string>\"\n ],\n \"label\": \"\"\n }\n ],\n \"elicitation_round\": 0,\n \"contexte\": {\n \"reformulated\": \"\",\n \"ehr_summary\": \"\",\n \"turn_kind\": \"\",\n \"ehr_additions\": \"\",\n \"concept_terms\": [\n \"<string>\"\n ],\n \"rubric_codes\": [\n \"<string>\"\n ],\n \"intent\": \"<string>\",\n \"routes\": [\n \"<string>\"\n ],\n \"named_mku_id\": \"<string>\",\n \"concepts\": [\n {}\n ],\n \"mkus\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"chunks\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"tables\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ]\n },\n \"authority_min_similarity\": 0.8,\n \"max_elicitation_rounds\": 1,\n \"answer_system_prompt\": \"<string>\",\n \"use_cross_refs\": false,\n \"concept_mku_k\": 60,\n \"cross_ref_hops\": 1,\n \"cross_ref_seeds\": 40,\n \"cross_ref_k\": 400,\n \"logic_answers\": [\n {\n \"mku_id\": \"\",\n \"mku_key\": \"\",\n \"answers\": {},\n \"checked\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n }\n ],\n \"source_weights\": {},\n \"sources\": [\n \"<string>\"\n ],\n \"exclude_sources\": [\n \"<string>\"\n ],\n \"app_version\": \"<string>\",\n \"app_build\": \"<string>\",\n \"app_platform\": \"<string>\",\n \"app_surface\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"app_session_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.locusmedical.fr/v2/retrieve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"include_usage\": false,\n \"patient_ehr\": \"<string>\",\n \"history\": [\n {\n \"question\": \"\",\n \"answer_short\": \"\",\n \"precisions\": [\n \"<string>\"\n ]\n }\n ],\n \"concept_k\": 5,\n \"chunk_k\": 10,\n \"mku_k\": 12,\n \"logic_min_similarity\": 0.6,\n \"drug_k\": 4,\n \"mku_weight\": 0.75,\n \"table_k\": 5,\n \"deliberate\": false,\n \"orchestrate\": false,\n \"slot_answers\": [\n {\n \"key\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"skipped\": false,\n \"provenance\": \"élicité\",\n \"preuve\": \"\",\n \"absents\": [\n \"<string>\"\n ],\n \"label\": \"\"\n }\n ],\n \"elicitation_round\": 0,\n \"contexte\": {\n \"reformulated\": \"\",\n \"ehr_summary\": \"\",\n \"turn_kind\": \"\",\n \"ehr_additions\": \"\",\n \"concept_terms\": [\n \"<string>\"\n ],\n \"rubric_codes\": [\n \"<string>\"\n ],\n \"intent\": \"<string>\",\n \"routes\": [\n \"<string>\"\n ],\n \"named_mku_id\": \"<string>\",\n \"concepts\": [\n {}\n ],\n \"mkus\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"chunks\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"tables\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ]\n },\n \"authority_min_similarity\": 0.8,\n \"max_elicitation_rounds\": 1,\n \"answer_system_prompt\": \"<string>\",\n \"use_cross_refs\": false,\n \"concept_mku_k\": 60,\n \"cross_ref_hops\": 1,\n \"cross_ref_seeds\": 40,\n \"cross_ref_k\": 400,\n \"logic_answers\": [\n {\n \"mku_id\": \"\",\n \"mku_key\": \"\",\n \"answers\": {},\n \"checked\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n }\n ],\n \"source_weights\": {},\n \"sources\": [\n \"<string>\"\n ],\n \"exclude_sources\": [\n \"<string>\"\n ],\n \"app_version\": \"<string>\",\n \"app_build\": \"<string>\",\n \"app_platform\": \"<string>\",\n \"app_surface\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"app_session_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"query": "<string>",
"trace_id": "",
"usage": {
"calls": 123,
"prompt_tokens": 123,
"completion_tokens": 123,
"total_tokens": 123,
"cost_eur": 123,
"cost_is_estimate": true,
"untariffed_models": [
"<string>"
],
"by_model": [
{
"model": "<string>",
"calls": 123,
"prompt_tokens": 123,
"completion_tokens": 123
}
]
},
"core_version": "",
"reformulated": "",
"ehr_summary": "",
"turn_kind": "",
"ehr_additions": "",
"answer": "",
"answer_short": "",
"answer_format": "markdown",
"mkus": [
{
"id": "<string>",
"verbatim": "<string>",
"criteria": "",
"directive": "",
"mku_class": "<string>",
"population": [
"<string>"
],
"type": "directive",
"key": "<string>",
"url": "<string>",
"d_apres": "<string>",
"doc_id": "<string>",
"doc_title": "<string>",
"section_title": "<string>",
"score": 0,
"via": ""
}
],
"chunks": [
{
"id": "<string>",
"text": "<string>",
"score": 123,
"doc_id": "<string>",
"doc_title": "<string>",
"section_title": "<string>",
"d_apres": [
"<string>"
]
}
],
"tables": [
{
"id": "<string>",
"label": "",
"number": 123,
"caption": "",
"html": "",
"footnotes": "",
"score": 0,
"doc_id": "<string>",
"doc_title": "<string>",
"section_title": "<string>",
"via": "direct",
"matched_mkus": [
"<string>"
]
}
],
"docs": [
{
"id": "<string>",
"title": "<string>",
"year": 123,
"url": "<string>",
"summary": "<string>",
"reco_id": "<string>",
"source_id": "<string>",
"source_name": "<string>"
}
],
"source_scope": {
"include": [
"<string>"
],
"exclude": [
"<string>"
]
},
"drugs": [
{
"concept_id": "<string>",
"dci": "",
"aliases": [
"<string>"
],
"atc": [
"<string>"
],
"via": "mku",
"mentions": [
"<string>"
],
"from_mku_ids": [
"<string>"
],
"reference": {
"cis": "<string>",
"label": "",
"forme": "<string>",
"voie": "<string>",
"salt": "<string>",
"dosage": "<string>",
"dosage_source": "<string>",
"molecules_associees": [
"<string>"
],
"atc": [
"<string>"
],
"n_rubrics": 0,
"rubrics": [
{
"id": "<string>",
"code": "",
"label": "",
"text": "",
"truncated": false,
"blocks": [
{
"kind": "prose",
"text": "",
"table": {
"columns": [
"<string>"
],
"rows": [
[
"<string>"
]
]
}
}
],
"source": "<string>",
"source_url": "<string>",
"source_ref": "<string>"
}
],
"unavailable_reason": "<string>",
"rcp_external_url": "<string>"
},
"others": [
{
"cis": "<string>",
"label": "",
"forme": "<string>",
"voie": "<string>",
"salt": "<string>",
"dosage": "<string>",
"dosage_source": "<string>",
"molecules_associees": [
"<string>"
],
"atc": [
"<string>"
],
"n_rubrics": 0,
"rubrics": [
{
"id": "<string>",
"code": "",
"label": "",
"text": "",
"truncated": false,
"blocks": [
{
"kind": "prose",
"text": "",
"table": {
"columns": [
"<string>"
],
"rows": [
[
"<string>"
]
]
}
}
],
"source": "<string>",
"source_url": "<string>",
"source_ref": "<string>"
}
],
"unavailable_reason": "<string>",
"rcp_external_url": "<string>"
}
],
"others_total": 0
}
],
"elicitations": [
{
"mku_id": "<string>",
"type": "<string>",
"mku_key": "",
"titre": "",
"famille": "<string>",
"total_max": 123,
"url": "<string>",
"d_apres": "<string>",
"expanded": true,
"steps": [
{
"kind": "<string>",
"key": "<string>",
"label": "",
"detail": "",
"options": [
{
"label": "<string>",
"value": "<string>",
"detail": "",
"points": 123,
"leads_to": "<string>",
"to": "<string>",
"default": false,
"variantes": [
"<string>"
]
}
],
"answered": "<string>"
}
],
"bands": [
{
"rang": 123,
"quand": [
{
"op": "<string>",
"valeur": 123
}
],
"condition": "<string>",
"pur_total": true,
"libelle": "<string>"
}
],
"graph": {
"nodes": [
{
"id": "<string>",
"label": "<string>",
"forme": "<string>"
}
],
"edges": [
{
"de": "<string>",
"vers": "<string>",
"condition": "<string>",
"optionnel": false
}
],
"entries": [
"<string>"
],
"outcomes": [
"<string>"
],
"cyclique": false
},
"variantes": [
"<string>"
],
"computed": {
"total": 123,
"outcome": "<string>",
"outcome_id": "<string>",
"description": "<string>",
"path": [
"<string>"
],
"path_ids": [
"<string>"
],
"retained": [
{}
],
"reason": "<string>",
"updated": "<string>",
"sources": [
{}
],
"url": "<string>"
},
"note": "<string>"
}
],
"rcp": [
{
"id": "<string>",
"concept_id": "",
"dci": "",
"cis": "",
"specialite": "",
"code": "",
"label": "",
"text": "",
"excerpt": false,
"via": "nom",
"score": 0,
"url": "<string>",
"source_id": "ANSM (BDPM)",
"source_name": "ANSM — base publique du médicament"
}
],
"cross_refs": [
{
"id1": "<string>",
"id2": "<string>",
"polarity": "<string>"
}
],
"concepts": [
{
"id": "<string>",
"label": "<string>"
}
],
"deliberation": {
"sufficient": false,
"checks": [
{
"mku_id": "",
"criterion": "",
"status": "",
"evidence": "",
"blocking": false
}
],
"gaps": [
{
"what": "",
"why": ""
}
],
"rounds": [
{
"index": 0,
"modality": "",
"query": "",
"seeds": [
"<string>"
],
"rationale": "",
"gained": {},
"gained_ids": {}
}
],
"judgements": [
{
"index": 0,
"sufficient": false,
"saw": {},
"checks": [
{
"mku_id": "",
"criterion": "",
"status": "",
"evidence": "",
"blocking": false
}
],
"gaps": [
{
"what": "",
"why": ""
}
],
"probe": {
"modality": "",
"query": "",
"seeds": [
"<string>"
],
"rationale": ""
},
"asked": false
}
],
"define_queries": [
"<string>"
],
"passes": 0,
"clarification": {
"question": "",
"why": "",
"criterion": "",
"options": [
{
"label": "<string>",
"value": "<string>"
}
]
}
},
"orchestration": {
"decision": "<string>",
"reason": "",
"round": 0,
"max_rounds": 2,
"form": [
{
"key": "<string>",
"kind": "<string>",
"label": "<string>",
"question": "<string>",
"skip": {
"label": "<string>",
"value": "<string>"
},
"detail": "",
"options": [
{
"label": "<string>",
"value": "<string>"
}
],
"multiple": false,
"unit_ids": [
"<string>"
],
"depends_any": [
{
"key": "<string>",
"values": [
"<string>"
]
}
],
"depends_on": {
"key": "<string>",
"values": [
"<string>"
]
}
}
],
"units": [
{
"mku_id": "<string>",
"status": "<string>",
"mku_key": "",
"type": "",
"titre": "",
"outcome": "<string>",
"blocking": [
"<string>"
],
"skipped": [
"<string>"
],
"settled_despite": [
"<string>"
],
"provenance": {}
}
],
"precisions": [
{}
],
"route": {},
"autorite": {},
"divergences": [
{}
],
"deduites": [
{
"key": "<string>",
"values": [
"<string>"
],
"skipped": false,
"provenance": "élicité",
"preuve": "",
"absents": [
"<string>"
],
"label": ""
}
],
"defauts": [
"<string>"
],
"non_renseignes": [
"<string>"
],
"a_venir": [
"<string>"
],
"contexte": {
"reformulated": "",
"ehr_summary": "",
"turn_kind": "",
"ehr_additions": "",
"concept_terms": [
"<string>"
],
"rubric_codes": [
"<string>"
],
"intent": "<string>",
"routes": [
"<string>"
],
"named_mku_id": "<string>",
"concepts": [
{}
],
"mkus": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"chunks": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"tables": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
]
},
"trace": [
{}
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}GraphRAG retrieving (MKF 0.1.3, LangGraph 2-paths)
Query maker → (semantic ‖ concept+graph) → context → frontier answer. No judge, no safety sweep. Traced in LangSmith.
answer is Markdown. Content negotiation on Accept:
application/json(default) — full payload, answer + provenance;text/markdown— answer and provenance as one Markdown document;text/html— the same, rendered as a readable page.
402 CREDITS_EXHAUSTED when the account has no credit left and LOCUS_CREDITS_ENABLED is on — X-Locus-User-Ref is then required (400 CREDITS_USER_REF_REQUIRED otherwise).
curl --request POST \
--url https://core.locusmedical.fr/v2/retrieve \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"include_usage": false,
"patient_ehr": "<string>",
"history": [
{
"question": "",
"answer_short": "",
"precisions": [
"<string>"
]
}
],
"concept_k": 5,
"chunk_k": 10,
"mku_k": 12,
"logic_min_similarity": 0.6,
"drug_k": 4,
"mku_weight": 0.75,
"table_k": 5,
"deliberate": false,
"orchestrate": false,
"slot_answers": [
{
"key": "<string>",
"values": [
"<string>"
],
"skipped": false,
"provenance": "élicité",
"preuve": "",
"absents": [
"<string>"
],
"label": ""
}
],
"elicitation_round": 0,
"contexte": {
"reformulated": "",
"ehr_summary": "",
"turn_kind": "",
"ehr_additions": "",
"concept_terms": [
"<string>"
],
"rubric_codes": [
"<string>"
],
"intent": "<string>",
"routes": [
"<string>"
],
"named_mku_id": "<string>",
"concepts": [
{}
],
"mkus": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"chunks": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"tables": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
]
},
"authority_min_similarity": 0.8,
"max_elicitation_rounds": 1,
"answer_system_prompt": "<string>",
"use_cross_refs": false,
"concept_mku_k": 60,
"cross_ref_hops": 1,
"cross_ref_seeds": 40,
"cross_ref_k": 400,
"logic_answers": [
{
"mku_id": "",
"mku_key": "",
"answers": {},
"checked": [
"<string>"
],
"level": "<string>"
}
],
"source_weights": {},
"sources": [
"<string>"
],
"exclude_sources": [
"<string>"
],
"app_version": "<string>",
"app_build": "<string>",
"app_platform": "<string>",
"app_surface": "<string>",
"conversation_id": "<string>",
"app_session_id": "<string>"
}
'import requests
url = "https://core.locusmedical.fr/v2/retrieve"
payload = {
"query": "<string>",
"include_usage": False,
"patient_ehr": "<string>",
"history": [
{
"question": "",
"answer_short": "",
"precisions": ["<string>"]
}
],
"concept_k": 5,
"chunk_k": 10,
"mku_k": 12,
"logic_min_similarity": 0.6,
"drug_k": 4,
"mku_weight": 0.75,
"table_k": 5,
"deliberate": False,
"orchestrate": False,
"slot_answers": [
{
"key": "<string>",
"values": ["<string>"],
"skipped": False,
"provenance": "élicité",
"preuve": "",
"absents": ["<string>"],
"label": ""
}
],
"elicitation_round": 0,
"contexte": {
"reformulated": "",
"ehr_summary": "",
"turn_kind": "",
"ehr_additions": "",
"concept_terms": ["<string>"],
"rubric_codes": ["<string>"],
"intent": "<string>",
"routes": ["<string>"],
"named_mku_id": "<string>",
"concepts": [{}],
"mkus": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"chunks": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"tables": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
]
},
"authority_min_similarity": 0.8,
"max_elicitation_rounds": 1,
"answer_system_prompt": "<string>",
"use_cross_refs": False,
"concept_mku_k": 60,
"cross_ref_hops": 1,
"cross_ref_seeds": 40,
"cross_ref_k": 400,
"logic_answers": [
{
"mku_id": "",
"mku_key": "",
"answers": {},
"checked": ["<string>"],
"level": "<string>"
}
],
"source_weights": {},
"sources": ["<string>"],
"exclude_sources": ["<string>"],
"app_version": "<string>",
"app_build": "<string>",
"app_platform": "<string>",
"app_surface": "<string>",
"conversation_id": "<string>",
"app_session_id": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: '<string>',
include_usage: false,
patient_ehr: '<string>',
history: [{question: '', answer_short: '', precisions: ['<string>']}],
concept_k: 5,
chunk_k: 10,
mku_k: 12,
logic_min_similarity: 0.6,
drug_k: 4,
mku_weight: 0.75,
table_k: 5,
deliberate: false,
orchestrate: false,
slot_answers: [
{
key: '<string>',
values: ['<string>'],
skipped: false,
provenance: 'élicité',
preuve: '',
absents: ['<string>'],
label: ''
}
],
elicitation_round: 0,
contexte: {
reformulated: '',
ehr_summary: '',
turn_kind: '',
ehr_additions: '',
concept_terms: ['<string>'],
rubric_codes: ['<string>'],
intent: '<string>',
routes: ['<string>'],
named_mku_id: '<string>',
concepts: [{}],
mkus: [{id: '<string>', score: 123, similarity: 123, via: ''}],
chunks: [{id: '<string>', score: 123, similarity: 123, via: ''}],
tables: [{id: '<string>', score: 123, similarity: 123, via: ''}]
},
authority_min_similarity: 0.8,
max_elicitation_rounds: 1,
answer_system_prompt: '<string>',
use_cross_refs: false,
concept_mku_k: 60,
cross_ref_hops: 1,
cross_ref_seeds: 40,
cross_ref_k: 400,
logic_answers: [
{mku_id: '', mku_key: '', answers: {}, checked: ['<string>'], level: '<string>'}
],
source_weights: {},
sources: ['<string>'],
exclude_sources: ['<string>'],
app_version: '<string>',
app_build: '<string>',
app_platform: '<string>',
app_surface: '<string>',
conversation_id: '<string>',
app_session_id: '<string>'
})
};
fetch('https://core.locusmedical.fr/v2/retrieve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://core.locusmedical.fr/v2/retrieve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => '<string>',
'include_usage' => false,
'patient_ehr' => '<string>',
'history' => [
[
'question' => '',
'answer_short' => '',
'precisions' => [
'<string>'
]
]
],
'concept_k' => 5,
'chunk_k' => 10,
'mku_k' => 12,
'logic_min_similarity' => 0.6,
'drug_k' => 4,
'mku_weight' => 0.75,
'table_k' => 5,
'deliberate' => false,
'orchestrate' => false,
'slot_answers' => [
[
'key' => '<string>',
'values' => [
'<string>'
],
'skipped' => false,
'provenance' => 'élicité',
'preuve' => '',
'absents' => [
'<string>'
],
'label' => ''
]
],
'elicitation_round' => 0,
'contexte' => [
'reformulated' => '',
'ehr_summary' => '',
'turn_kind' => '',
'ehr_additions' => '',
'concept_terms' => [
'<string>'
],
'rubric_codes' => [
'<string>'
],
'intent' => '<string>',
'routes' => [
'<string>'
],
'named_mku_id' => '<string>',
'concepts' => [
[
]
],
'mkus' => [
[
'id' => '<string>',
'score' => 123,
'similarity' => 123,
'via' => ''
]
],
'chunks' => [
[
'id' => '<string>',
'score' => 123,
'similarity' => 123,
'via' => ''
]
],
'tables' => [
[
'id' => '<string>',
'score' => 123,
'similarity' => 123,
'via' => ''
]
]
],
'authority_min_similarity' => 0.8,
'max_elicitation_rounds' => 1,
'answer_system_prompt' => '<string>',
'use_cross_refs' => false,
'concept_mku_k' => 60,
'cross_ref_hops' => 1,
'cross_ref_seeds' => 40,
'cross_ref_k' => 400,
'logic_answers' => [
[
'mku_id' => '',
'mku_key' => '',
'answers' => [
],
'checked' => [
'<string>'
],
'level' => '<string>'
]
],
'source_weights' => [
],
'sources' => [
'<string>'
],
'exclude_sources' => [
'<string>'
],
'app_version' => '<string>',
'app_build' => '<string>',
'app_platform' => '<string>',
'app_surface' => '<string>',
'conversation_id' => '<string>',
'app_session_id' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://core.locusmedical.fr/v2/retrieve"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"include_usage\": false,\n \"patient_ehr\": \"<string>\",\n \"history\": [\n {\n \"question\": \"\",\n \"answer_short\": \"\",\n \"precisions\": [\n \"<string>\"\n ]\n }\n ],\n \"concept_k\": 5,\n \"chunk_k\": 10,\n \"mku_k\": 12,\n \"logic_min_similarity\": 0.6,\n \"drug_k\": 4,\n \"mku_weight\": 0.75,\n \"table_k\": 5,\n \"deliberate\": false,\n \"orchestrate\": false,\n \"slot_answers\": [\n {\n \"key\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"skipped\": false,\n \"provenance\": \"élicité\",\n \"preuve\": \"\",\n \"absents\": [\n \"<string>\"\n ],\n \"label\": \"\"\n }\n ],\n \"elicitation_round\": 0,\n \"contexte\": {\n \"reformulated\": \"\",\n \"ehr_summary\": \"\",\n \"turn_kind\": \"\",\n \"ehr_additions\": \"\",\n \"concept_terms\": [\n \"<string>\"\n ],\n \"rubric_codes\": [\n \"<string>\"\n ],\n \"intent\": \"<string>\",\n \"routes\": [\n \"<string>\"\n ],\n \"named_mku_id\": \"<string>\",\n \"concepts\": [\n {}\n ],\n \"mkus\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"chunks\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"tables\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ]\n },\n \"authority_min_similarity\": 0.8,\n \"max_elicitation_rounds\": 1,\n \"answer_system_prompt\": \"<string>\",\n \"use_cross_refs\": false,\n \"concept_mku_k\": 60,\n \"cross_ref_hops\": 1,\n \"cross_ref_seeds\": 40,\n \"cross_ref_k\": 400,\n \"logic_answers\": [\n {\n \"mku_id\": \"\",\n \"mku_key\": \"\",\n \"answers\": {},\n \"checked\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n }\n ],\n \"source_weights\": {},\n \"sources\": [\n \"<string>\"\n ],\n \"exclude_sources\": [\n \"<string>\"\n ],\n \"app_version\": \"<string>\",\n \"app_build\": \"<string>\",\n \"app_platform\": \"<string>\",\n \"app_surface\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"app_session_id\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://core.locusmedical.fr/v2/retrieve")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"include_usage\": false,\n \"patient_ehr\": \"<string>\",\n \"history\": [\n {\n \"question\": \"\",\n \"answer_short\": \"\",\n \"precisions\": [\n \"<string>\"\n ]\n }\n ],\n \"concept_k\": 5,\n \"chunk_k\": 10,\n \"mku_k\": 12,\n \"logic_min_similarity\": 0.6,\n \"drug_k\": 4,\n \"mku_weight\": 0.75,\n \"table_k\": 5,\n \"deliberate\": false,\n \"orchestrate\": false,\n \"slot_answers\": [\n {\n \"key\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"skipped\": false,\n \"provenance\": \"élicité\",\n \"preuve\": \"\",\n \"absents\": [\n \"<string>\"\n ],\n \"label\": \"\"\n }\n ],\n \"elicitation_round\": 0,\n \"contexte\": {\n \"reformulated\": \"\",\n \"ehr_summary\": \"\",\n \"turn_kind\": \"\",\n \"ehr_additions\": \"\",\n \"concept_terms\": [\n \"<string>\"\n ],\n \"rubric_codes\": [\n \"<string>\"\n ],\n \"intent\": \"<string>\",\n \"routes\": [\n \"<string>\"\n ],\n \"named_mku_id\": \"<string>\",\n \"concepts\": [\n {}\n ],\n \"mkus\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"chunks\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"tables\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ]\n },\n \"authority_min_similarity\": 0.8,\n \"max_elicitation_rounds\": 1,\n \"answer_system_prompt\": \"<string>\",\n \"use_cross_refs\": false,\n \"concept_mku_k\": 60,\n \"cross_ref_hops\": 1,\n \"cross_ref_seeds\": 40,\n \"cross_ref_k\": 400,\n \"logic_answers\": [\n {\n \"mku_id\": \"\",\n \"mku_key\": \"\",\n \"answers\": {},\n \"checked\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n }\n ],\n \"source_weights\": {},\n \"sources\": [\n \"<string>\"\n ],\n \"exclude_sources\": [\n \"<string>\"\n ],\n \"app_version\": \"<string>\",\n \"app_build\": \"<string>\",\n \"app_platform\": \"<string>\",\n \"app_surface\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"app_session_id\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://core.locusmedical.fr/v2/retrieve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"include_usage\": false,\n \"patient_ehr\": \"<string>\",\n \"history\": [\n {\n \"question\": \"\",\n \"answer_short\": \"\",\n \"precisions\": [\n \"<string>\"\n ]\n }\n ],\n \"concept_k\": 5,\n \"chunk_k\": 10,\n \"mku_k\": 12,\n \"logic_min_similarity\": 0.6,\n \"drug_k\": 4,\n \"mku_weight\": 0.75,\n \"table_k\": 5,\n \"deliberate\": false,\n \"orchestrate\": false,\n \"slot_answers\": [\n {\n \"key\": \"<string>\",\n \"values\": [\n \"<string>\"\n ],\n \"skipped\": false,\n \"provenance\": \"élicité\",\n \"preuve\": \"\",\n \"absents\": [\n \"<string>\"\n ],\n \"label\": \"\"\n }\n ],\n \"elicitation_round\": 0,\n \"contexte\": {\n \"reformulated\": \"\",\n \"ehr_summary\": \"\",\n \"turn_kind\": \"\",\n \"ehr_additions\": \"\",\n \"concept_terms\": [\n \"<string>\"\n ],\n \"rubric_codes\": [\n \"<string>\"\n ],\n \"intent\": \"<string>\",\n \"routes\": [\n \"<string>\"\n ],\n \"named_mku_id\": \"<string>\",\n \"concepts\": [\n {}\n ],\n \"mkus\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"chunks\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ],\n \"tables\": [\n {\n \"id\": \"<string>\",\n \"score\": 123,\n \"similarity\": 123,\n \"via\": \"\"\n }\n ]\n },\n \"authority_min_similarity\": 0.8,\n \"max_elicitation_rounds\": 1,\n \"answer_system_prompt\": \"<string>\",\n \"use_cross_refs\": false,\n \"concept_mku_k\": 60,\n \"cross_ref_hops\": 1,\n \"cross_ref_seeds\": 40,\n \"cross_ref_k\": 400,\n \"logic_answers\": [\n {\n \"mku_id\": \"\",\n \"mku_key\": \"\",\n \"answers\": {},\n \"checked\": [\n \"<string>\"\n ],\n \"level\": \"<string>\"\n }\n ],\n \"source_weights\": {},\n \"sources\": [\n \"<string>\"\n ],\n \"exclude_sources\": [\n \"<string>\"\n ],\n \"app_version\": \"<string>\",\n \"app_build\": \"<string>\",\n \"app_platform\": \"<string>\",\n \"app_surface\": \"<string>\",\n \"conversation_id\": \"<string>\",\n \"app_session_id\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"query": "<string>",
"trace_id": "",
"usage": {
"calls": 123,
"prompt_tokens": 123,
"completion_tokens": 123,
"total_tokens": 123,
"cost_eur": 123,
"cost_is_estimate": true,
"untariffed_models": [
"<string>"
],
"by_model": [
{
"model": "<string>",
"calls": 123,
"prompt_tokens": 123,
"completion_tokens": 123
}
]
},
"core_version": "",
"reformulated": "",
"ehr_summary": "",
"turn_kind": "",
"ehr_additions": "",
"answer": "",
"answer_short": "",
"answer_format": "markdown",
"mkus": [
{
"id": "<string>",
"verbatim": "<string>",
"criteria": "",
"directive": "",
"mku_class": "<string>",
"population": [
"<string>"
],
"type": "directive",
"key": "<string>",
"url": "<string>",
"d_apres": "<string>",
"doc_id": "<string>",
"doc_title": "<string>",
"section_title": "<string>",
"score": 0,
"via": ""
}
],
"chunks": [
{
"id": "<string>",
"text": "<string>",
"score": 123,
"doc_id": "<string>",
"doc_title": "<string>",
"section_title": "<string>",
"d_apres": [
"<string>"
]
}
],
"tables": [
{
"id": "<string>",
"label": "",
"number": 123,
"caption": "",
"html": "",
"footnotes": "",
"score": 0,
"doc_id": "<string>",
"doc_title": "<string>",
"section_title": "<string>",
"via": "direct",
"matched_mkus": [
"<string>"
]
}
],
"docs": [
{
"id": "<string>",
"title": "<string>",
"year": 123,
"url": "<string>",
"summary": "<string>",
"reco_id": "<string>",
"source_id": "<string>",
"source_name": "<string>"
}
],
"source_scope": {
"include": [
"<string>"
],
"exclude": [
"<string>"
]
},
"drugs": [
{
"concept_id": "<string>",
"dci": "",
"aliases": [
"<string>"
],
"atc": [
"<string>"
],
"via": "mku",
"mentions": [
"<string>"
],
"from_mku_ids": [
"<string>"
],
"reference": {
"cis": "<string>",
"label": "",
"forme": "<string>",
"voie": "<string>",
"salt": "<string>",
"dosage": "<string>",
"dosage_source": "<string>",
"molecules_associees": [
"<string>"
],
"atc": [
"<string>"
],
"n_rubrics": 0,
"rubrics": [
{
"id": "<string>",
"code": "",
"label": "",
"text": "",
"truncated": false,
"blocks": [
{
"kind": "prose",
"text": "",
"table": {
"columns": [
"<string>"
],
"rows": [
[
"<string>"
]
]
}
}
],
"source": "<string>",
"source_url": "<string>",
"source_ref": "<string>"
}
],
"unavailable_reason": "<string>",
"rcp_external_url": "<string>"
},
"others": [
{
"cis": "<string>",
"label": "",
"forme": "<string>",
"voie": "<string>",
"salt": "<string>",
"dosage": "<string>",
"dosage_source": "<string>",
"molecules_associees": [
"<string>"
],
"atc": [
"<string>"
],
"n_rubrics": 0,
"rubrics": [
{
"id": "<string>",
"code": "",
"label": "",
"text": "",
"truncated": false,
"blocks": [
{
"kind": "prose",
"text": "",
"table": {
"columns": [
"<string>"
],
"rows": [
[
"<string>"
]
]
}
}
],
"source": "<string>",
"source_url": "<string>",
"source_ref": "<string>"
}
],
"unavailable_reason": "<string>",
"rcp_external_url": "<string>"
}
],
"others_total": 0
}
],
"elicitations": [
{
"mku_id": "<string>",
"type": "<string>",
"mku_key": "",
"titre": "",
"famille": "<string>",
"total_max": 123,
"url": "<string>",
"d_apres": "<string>",
"expanded": true,
"steps": [
{
"kind": "<string>",
"key": "<string>",
"label": "",
"detail": "",
"options": [
{
"label": "<string>",
"value": "<string>",
"detail": "",
"points": 123,
"leads_to": "<string>",
"to": "<string>",
"default": false,
"variantes": [
"<string>"
]
}
],
"answered": "<string>"
}
],
"bands": [
{
"rang": 123,
"quand": [
{
"op": "<string>",
"valeur": 123
}
],
"condition": "<string>",
"pur_total": true,
"libelle": "<string>"
}
],
"graph": {
"nodes": [
{
"id": "<string>",
"label": "<string>",
"forme": "<string>"
}
],
"edges": [
{
"de": "<string>",
"vers": "<string>",
"condition": "<string>",
"optionnel": false
}
],
"entries": [
"<string>"
],
"outcomes": [
"<string>"
],
"cyclique": false
},
"variantes": [
"<string>"
],
"computed": {
"total": 123,
"outcome": "<string>",
"outcome_id": "<string>",
"description": "<string>",
"path": [
"<string>"
],
"path_ids": [
"<string>"
],
"retained": [
{}
],
"reason": "<string>",
"updated": "<string>",
"sources": [
{}
],
"url": "<string>"
},
"note": "<string>"
}
],
"rcp": [
{
"id": "<string>",
"concept_id": "",
"dci": "",
"cis": "",
"specialite": "",
"code": "",
"label": "",
"text": "",
"excerpt": false,
"via": "nom",
"score": 0,
"url": "<string>",
"source_id": "ANSM (BDPM)",
"source_name": "ANSM — base publique du médicament"
}
],
"cross_refs": [
{
"id1": "<string>",
"id2": "<string>",
"polarity": "<string>"
}
],
"concepts": [
{
"id": "<string>",
"label": "<string>"
}
],
"deliberation": {
"sufficient": false,
"checks": [
{
"mku_id": "",
"criterion": "",
"status": "",
"evidence": "",
"blocking": false
}
],
"gaps": [
{
"what": "",
"why": ""
}
],
"rounds": [
{
"index": 0,
"modality": "",
"query": "",
"seeds": [
"<string>"
],
"rationale": "",
"gained": {},
"gained_ids": {}
}
],
"judgements": [
{
"index": 0,
"sufficient": false,
"saw": {},
"checks": [
{
"mku_id": "",
"criterion": "",
"status": "",
"evidence": "",
"blocking": false
}
],
"gaps": [
{
"what": "",
"why": ""
}
],
"probe": {
"modality": "",
"query": "",
"seeds": [
"<string>"
],
"rationale": ""
},
"asked": false
}
],
"define_queries": [
"<string>"
],
"passes": 0,
"clarification": {
"question": "",
"why": "",
"criterion": "",
"options": [
{
"label": "<string>",
"value": "<string>"
}
]
}
},
"orchestration": {
"decision": "<string>",
"reason": "",
"round": 0,
"max_rounds": 2,
"form": [
{
"key": "<string>",
"kind": "<string>",
"label": "<string>",
"question": "<string>",
"skip": {
"label": "<string>",
"value": "<string>"
},
"detail": "",
"options": [
{
"label": "<string>",
"value": "<string>"
}
],
"multiple": false,
"unit_ids": [
"<string>"
],
"depends_any": [
{
"key": "<string>",
"values": [
"<string>"
]
}
],
"depends_on": {
"key": "<string>",
"values": [
"<string>"
]
}
}
],
"units": [
{
"mku_id": "<string>",
"status": "<string>",
"mku_key": "",
"type": "",
"titre": "",
"outcome": "<string>",
"blocking": [
"<string>"
],
"skipped": [
"<string>"
],
"settled_despite": [
"<string>"
],
"provenance": {}
}
],
"precisions": [
{}
],
"route": {},
"autorite": {},
"divergences": [
{}
],
"deduites": [
{
"key": "<string>",
"values": [
"<string>"
],
"skipped": false,
"provenance": "élicité",
"preuve": "",
"absents": [
"<string>"
],
"label": ""
}
],
"defauts": [
"<string>"
],
"non_renseignes": [
"<string>"
],
"a_venir": [
"<string>"
],
"contexte": {
"reformulated": "",
"ehr_summary": "",
"turn_kind": "",
"ehr_additions": "",
"concept_terms": [
"<string>"
],
"rubric_codes": [
"<string>"
],
"intent": "<string>",
"routes": [
"<string>"
],
"named_mku_id": "<string>",
"concepts": [
{}
],
"mkus": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"chunks": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
],
"tables": [
{
"id": "<string>",
"score": 123,
"similarity": 123,
"via": ""
}
]
},
"trace": [
{}
]
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Locus API key — paste the raw lsk_… value (no 'Bearer ' prefix) — or a B2B session token minted by POST /v2/session-token.
Headers
Le compte, tel que l'intégrateur le nomme — pour l'app Locus, l'identifiant Clerk. REQUIS quand le quota de crédits est actif (LOCUS_CREDITS_ENABLED) ; ignoré sinon, comme aujourd'hui.
Inutile avec un jeton de session B2B : le jeton porte déjà le compte, SIGNÉ — c'est alors lui qui fait foi (cf. resolve_user_ref).
1 - 200Body
Rendre le bloc usage : tokens consommés et coût estimé de CET échange. Le comptage a lieu de toute façon — il part dans la trace serveur quoi qu'il arrive ; ce drapeau ne décide que de l'exposer au client, qui n'a pas toujours de quoi l'afficher.
Coût d'une CONVERSATION : la réponse ne porte que le delta du dernier échange, jamais un cumul. Le serveur ne conserve pas la conversation, et un cumul qu'il calculerait sur la seule history reçue serait faux dès qu'un client tronque ses tours. Au client d'additionner ce qu'il stocke.
Dossier patient libre (EHR)
Tours précédents, du plus ancien au plus récent. Sert UNIQUEMENT au query-maker, pour qualifier ce que le dernier message apporte : une nouvelle question, une précision, ou un fait patient. Les réponses antérieures ne sont jamais données au modèle de rédaction — elles n'ont pas de règle derrière elles et ne peuvent pas faire source.
Show child attributes
Show child attributes
1 <= x <= 200 = pas de chemin documentaire
0 <= x <= 50Top-k MKU vectoriel ; 0 = pas de chemin MKU
0 <= x <= 50Plancher de similarité d'une UNITÉ LOGIQUE proposée sous la réponse — cosinus normalisé dans [0,1], 0,5 = orthogonal. Le tri principal est fait par l'ANCRAGE (l'unité ne sort que si la réponse cite son document) ; ce plancher n'écarte que ce que l'ancrage laisserait passer par accident. Valeur NON MESURÉE, posée bas — c'est un axe de campagne.
0 <= x <= 1Passages de RCP versés au CONTEXTE de rédaction — la lane connaissance médicament. 4 par défaut (config promue, cf. REFERENCE_CONFIG) ; 0 coupe le chemin et redonne le point de fonctionnement d'avant promotion. À ne pas confondre avec drugs en réponse, qui est la CARTE : elle est collectée après la rédaction et ne l'alimente pas.
0 <= x <= 12Pondération hybride d'accès aux MKU : 0 = concepts seuls (un MKU n'est atteignable que par les termes de son propre verbatim), 1 = vecteurs seuls (sur l'embedding contextualisé doc+section), 0.5 = les deux. Défaut 0.75 : la config PROMUE par l'ajustement (run #50, hybrid·w0.75·x1·c10·m12·k5·t5). Voir REFERENCE_CONFIG.
0 <= x <= 1Top-k tables de décision (vecteur) ; 0 = pas de tables directes
0 <= x <= 20Seconde lecture : confronte les critères des règles au dossier, va chercher une définition manquante, et ne pose une question qu'en dernier recours. Hors du point de fonctionnement de référence — l'activer change le coût et n'est pas encore mesuré par les évals.
Orchestration : les unités logiques (score, arbre) sont résolues AVANT la rédaction — par ce que la question et le dossier écrivent, puis par évaluation partielle — et une ambiguïté de la question qui change les règles applicables est repérée. Quand une donnée manquante peut changer la conduite, la réponse est un FORMULAIRE (orchestration.form) et answer est vide : renvoyer la même question avec slot_answers remplis et elicitation_round incrémenté. Hors du point de fonctionnement de référence — non mesuré par les évals.
Les réponses au formulaire du tour précédent (orchestration.form), par key. Sans état : le serveur ne garde pas le formulaire, le client le renvoie rempli.
Show child attributes
Show child attributes
Combien de formulaires ont DÉJÀ été posés dans ce fil. Tenu par le client : orchestration.round + 1 après un formulaire.
0 <= x <= 10À la reprise d'un formulaire : le orchestration.contexte rendu avec lui, renvoyé tel quel. La reprise prolonge alors ce contexte — relu par identifiant, complété par une recherche ciblée sur les précisions — au lieu de refaire l'analyse et la recherche.
Show child attributes
Show child attributes
Avec orchestrate : la similarité au-dessus de laquelle une source d'AUTORITÉ (Antibioclic) est dite couvrir la question. Ses unités de la pathologie la mieux classée passent alors en tête, l'arbre d'abord — rien n'est retiré. En dessous, la pipeline par défaut répond seule. Valeur non mesurée.
0 <= x <= 1Au-delà, on répond toujours — conditionnellement sur ce qui reste ouvert. 0 = jamais de formulaire (l'orchestration calcule et désambiguïse sans rien demander). UN par défaut : un formulaire pose tout le chemin d'un coup ; un second tour lassait le praticien.
0 <= x <= 5Le mode de réponse. approfondi : raisonnement approfondi — avec orchestrate, questions de précision quand elles changent la conduite. rapide : réponse directe. Les moyens de chaque mode sont choisis par le serveur. Absent : le défaut du serveur.
approfondi, rapide Remplace INTÉGRALEMENT le prompt système de RÉDACTION pour CETTE requête — le chemin pour comparer deux formulations sur la même question et le même graphe, sans redéployer. Le prompt par défaut se lit sur GET /v2/answer-prompt, qui est le point de départ naturel d'une variante.
Remplacement, pas supplément : les consignes de citation, de rang des sources et d'interdits cliniques partent avec l'original si la variante ne les reprend pas. C'est voulu — on compare des prompts ENTIERS, pas des rustines — et c'est exactement pourquoi le champ n'est ouvert que HORS du canal prod (cf. LOCUS_CHANNEL) — 400 PROMPT_OVERRIDE_DISABLED ailleurs, jamais un silence. None = le prompt du serveur.
20000Étendre le résultat aux MKU voisins par CROSS_REF. Défaut False : les arêtes du corpus portent trop de liens superflus et d'erreurs pour qu'on serve ce signal (2 septembre 2026). Passer à true réactive l'expansion — utile pour mesurer ce que la coupure coûte une fois la passe de cross-ref assainie.
Top-k MKU du chemin CONCEPTUEL, classés par nombre de concepts touchés.
1 <= x <= 400Profondeur du voisinage CROSS_REF. Coût EXPONENTIEL : l'expansion énumère des chemins. 3 était le défaut servi, et c'est lui qui a bloqué la prod quand le graphe a grossi.
1 <= x <= 3MKU primaires (les mieux classés) semant l'expansion CROSS_REF.
1 <= x <= 200Arêtes CROSS_REF rendues au plus ; celles entre primaires d'abord.
1 <= x <= 2000Ce que le praticien a répondu aux unités LOGIQUES (score, arbre) retrouvées au tour précédent (elicitations). Le serveur ne devine rien : sans réponses, un score est PROPOSÉ (ses questions sont rendues) ; avec elles, il est CALCULÉ par le moteur, et c'est le résultat calculé qui entre dans le contexte de rédaction — jamais une somme faite de tête par le modèle.
Show child attributes
Show child attributes
Multiplicateur de score par ÉDITEUR ({"recomedicales": 1.2}), appliqué à TOUTES les lanes classantes : chunks, tables, et les deux chemins d'accès aux MKU. Une source absente vaut 1.0.
Un poids ≠ 1 déclenche un SUR-TIRAGE des recherches vectorielles (on demande plus que k, on pondère, puis on coupe à k) : sans lui, la pondération ne pourrait que réordonner ce que le cosinus a déjà laissé passer, jamais faire entrer ce qu'il avait écarté. À poids neutres, aucun sur-tirage et aucun changement de comportement.
À ne pas confondre avec sources / exclude_sources, qui décident ce que le corpus CONTIENT pour cette requête : un poids ne retire rien, il déplace dans le classement. Les deux se cumulent.
Show child attributes
Show child attributes
Ne retenir que ces éditeurs (« HAS », « ebmfrance »… — cf. GET /v2/sources). Absent = tout le corpus. Une liste VIDE est refusée : « aucune source cochée » et « toutes les sources » sont deux intentions opposées, et les confondre servirait le corpus entier à un client qui croyait l'avoir restreint.
1 - 32 elementsÉcarter ces éditeurs. Appliqué APRÈS sources — utile pour retirer un éditeur sans avoir à énumérer tous les autres.
1 - 32 elementsVersion publiée de l'app appelante (p.ex. 1.4.2).
64Le build EXACT : SHA git court sur le web, numéro de build natif sur iOS/Android. C'est lui qui distingue deux binaires d'une même version publiée — sans lui, 1.4.2 désigne plusieurs binaires et un bug n'est pas rejouable.
64web | ios | android.
32D'OÙ la question est posée : app (l'app Locus), embed (un widget intégré chez un client), console (l'essai depuis une console partenaire), ou ce que vous voudrez.
À ne pas confondre avec app_platform, qui dit sur quel SOCLE le binaire tourne. Un widget intégré est du web comme l'app : sans ce champ, les deux sont indiscernables dans les traces, et « quelle part de l'usage passe par le widget » n'a pas de réponse — sinon en la déduisant du client, ce qui cesse de marcher le jour où un intégrateur appelle AUSSI l'API depuis son serveur.
32Le FIL auquel cette question appartient, tel que le client le nomme. Déclaratif et journalisé tel quel, comme les champs ci-dessous : le serveur ne s'en sert pour rien, et surtout pas pour retrouver un contexte — l'historique qui alimente le query-maker voyage dans history, explicitement, à chaque requête.
Il existe pour la RELECTURE. Sans lui, la seule façon de rapprocher deux réponses d'un même échange était la session d'analytique (app_session_id), qui n'est pas un fil : elle en contient parfois deux, et un fil repris le lendemain est dans une autre session. C'est le même identifiant que celui de /v2/conversations — dont la payload, elle, reste opaque au serveur.
64L'identifiant de SESSION de l'analytique du client ($session_id de PostHog), s'il y en a une. Déclaratif et journalisé tel quel, comme les trois champs ci-dessus : le serveur ne s'en sert pour rien.
Il existe pour une seule raison, et elle vaut la colonne : c'est ce qui relie une réponse notée à l'ENREGISTREMENT de la session où elle a été lue. Sans lui, un pouce baissé dit ce que le moteur a répondu mais pas ce que la personne faisait, ni ce qu'elle a vu avant de le baisser — et il faut alors retrouver la session à la main, par l'heure, ce que personne ne fait deux fois.
Jamais d'identité : l'identifiant de session est opaque et tournant. Le distinct_id, lui, ne passe pas.
128Response
Successful Response
L'identifiant de CETTE réponse, frappé par le serveur avant de la rendre. C'est la clé à renvoyer à POST /v2/feedback pour attacher un retour utilisateur — sans lui, un pouce levé ne désigne rien.
Vide quand la journalisation des traces est coupée (LOCUS_TRACES_ENABLED=false) : le client doit alors simplement ne pas proposer le retour, plutôt que de poster dans le vide.
Consommation de cet échange. Présent uniquement si la requête portait include_usage: true — absent ne veut donc pas dire gratuit.
Show child attributes
Show child attributes
La version du core qui a produit cette réponse, lisible : 0.2.0+a1b2c3d (r:4f9e2b71) — version applicative, commit déployé, empreinte du chemin de lecture. Rendue AUSSI dans la payload (et pas seulement écrite en base) pour qu'un client puisse l'afficher dans un rapport de bug sans avoir à interroger /health.
nouvelle_question | precision_question | fait_patient
Le fait clinique nouveau apporté par ce tour. À APPENDRE au dossier côté client : c'est là qu'il sera confronté aux critères des règles. Un fait resté dans la question ne change aucune recommandation.
Réponse rédigée, en Markdown (titres, listes, tableaux, citations). En JSON les sauts de ligne sont échappés en \n : lire avec jq -r '.answer', ou demander Accept: text/markdown pour recevoir le Markdown brut, ou Accept: text/html pour une page lisible.
La conduite à tenir en une phrase, DÉRIVÉE de answer (son titre de niveau 1). Champ de confort : answer reste le Markdown complet, titre compris, donc rien ne casse pour un client qui l'ignore.
Format de answer. Déclaré pour qu'un client sache le rendre.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Documents mobilisés, dédupliqués — métadonnées et lien profond.
Show child attributes
Show child attributes
La restriction d'éditeurs sous laquelle CETTE réponse a été produite, en identifiants canoniques. null = tout le corpus, ce qui est le cas par défaut — rien ne change pour un client qui n'en demande pas.
Show child attributes
Show child attributes
Médicaments rattachés aux règles citées — lane SÉPARÉE des MKU (contrat C4) : une rubrique de RCP n'est jamais promue en unité citable, et n'entre pas dans le contexte de rédaction.
Show child attributes
Show child attributes
Les unités logiques retrouvées (score, tree) et ce qu'elles demandent. Vide quand aucune n'a remonté. Un client qui ignore ce champ ne casse pas : les mêmes unités restent dans mkus.
Show child attributes
Show child attributes
Passages de RCP VERSÉS au contexte de rédaction, et donc citables sous [rcp:{id}]. Vide quand la lane est coupée (drug_k: 0, le défaut) ou quand la question n'appelle aucune donnée d'AMM. Distinct de drugs, qui est la carte et n'alimente pas la réponse.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Présent uniquement si deliberate était demandé.
Show child attributes
Show child attributes
Présent uniquement si orchestrate était demandé.
Show child attributes
Show child attributes