API, MCP e agenti
Documentazione per sviluppatori
Un agente può inviare una scelta, ricevere una domanda di chiarimento e ottenere una raccomandazione motivata. Non servono account né chiavi dei fornitori.
Connessione MCP
https://dilem.si/api/v1/mcpTrasporto HTTP remoto, senza OAuth. Il token applicativo va passato agli strumenti, non alla configurazione del server. Prevedi 110 secondi per una decisione.
Scegli il tuo client. Integra l’esempio nella configurazione esistente senza sostituirla. Ricarica gli strumenti MCP e verifica che start_session, get_usage e decide siano disponibili.
Claude Code
claude mcp add --transport http dilem https://dilem.si/api/v1/mcpCodex
~/.codex/config.toml[mcp_servers.dilem]
url = "https://dilem.si/api/v1/mcp"
tool_timeout_sec = 110Cursor
.cursor/mcp.json{
"mcpServers": {
"dilem": {
"url": "https://dilem.si/api/v1/mcp"
}
}
}OpenCode
opencode.json{
"mcp": {
"dilem": {
"type": "remote",
"url": "https://dilem.si/api/v1/mcp",
"enabled": true,
"oauth": false
}
}
}Hermes Agent
hermes mcp add dilem --url https://dilem.si/api/v1/mcpMistral Vibe
~/.vibe/config.toml[[mcp_servers]]
name = "dilem"
transport = "streamable-http"
url = "https://dilem.si/api/v1/mcp"
tool_timeout_sec = 110
[mcp_servers.auth]
type = "static"
headers = {}OpenClaw
~/.openclaw/openclaw.json{
"mcp": {
"servers": {
"dilem": {
"url": "https://dilem.si/api/v1/mcp",
"transport": "streamable-http",
"enabled": true,
"connectionTimeoutMs": 10000,
"requestTimeoutMs": 110000
}
}
}
}Pi
~/.pi/agent/mcp.json{
"mcpServers": {
"dilem": {
"url": "https://dilem.si/api/v1/mcp",
"timeout": 110
}
}
}Riferimento MCP
start_session
ScritturaCreare o rinnovare l’identità privata del client.
sessionstring | nullfacoltativo · Predefinito null
Risposta: Session
POST /api/v1/session
Input
Intestazioni
AuthorizationToken di sessione inviato come Bearer <session>.
Nessun corpo della richiesta richiesto.
Risposta
200 application/json
{
"session": "OPAQUE_SESSION_KEEP_PRIVATE",
"expires_in": 7776000
}sessionToken privato del client, da conservare per le chiamate successive.
expires_inDurata della sessione, in secondi.
Valore:
7776000
Errori e ripresa
403 · 408 · 409 · 413 · 422 · 429 · 503 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo di risposta restituita.
Valore:
"error"codeCodice da leggere per gestire un rifiuto o un errore.
messageSpiegazione leggibile del rifiuto o dell’errore.
retryableIndica se è possibile valutare un nuovo tentativo.
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
get_usage
LetturaLeggere crediti, rinnovo e stato del caso.
sessionstringobbligatoriocase_idstring | nullfacoltativo · Predefinito null
Risposta: Usage
GET /api/v1/usage
Input
Intestazioni
AuthorizationToken di sessione inviato come Bearer <session>.
X-Dilem-Case-IDConserva questo identificativo per tutti i turni dello stesso dilemma.
Formato tecnico
^[a-zA-Z0-9_-]{1,80}$
Nessun corpo della richiesta richiesto.
Risposta
200 application/json
{
"day": "2026-01-01",
"resets_at": "2026-01-02T00:00:00Z",
"collective": {
"completed": 42
},
"dilemmas": {
"used": 1,
"limit": 20,
"remaining": 19
},
"case": {
"id": "my-unique-dilemma-id",
"admitted": true,
"completed": false
},
"voice": {
"seconds_used": 0,
"seconds_reserved": 0,
"seconds_remaining": 1200,
"seconds_limit": 1200,
"max_seconds": 60
},
"budget": {
"daily_usd": 5,
"available": true
}
}dayGiorno UTC dei contatori.
Data ISO 8601
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
collectiveContatore collettivo dei dilemmi completati.
Campi
completedNumero di dilemmi completati nel contatore collettivo.
dilemmasCrediti dei dilemmi usati, disponibili e consentiti.
Campi
usedCrediti già utilizzati.
Minimo: 0
limitLimite di crediti della politica attiva.
Minimo: 0
remainingCrediti ancora disponibili.
Minimo: 0
caseStato del dilemma identificato dal Case-ID fornito.
Campi
idCase-ID richiesto, oppure null se non fornito.
admittedIndica se il dilemma è già stato ammesso nella quota.
completedIndica se una prima raccomandazione ha concluso il dilemma.
voiceDurate e limiti della dettatura, in secondi.
Campi
seconds_usedSecondi di dettatura già consumati.
seconds_reservedSecondi temporaneamente riservati da una cattura in corso.
seconds_remainingSecondi di dettatura ancora disponibili.
seconds_limitLimite totale di dettatura, in secondi.
max_secondsDurata massima di una cattura, in secondi.
budgetBudget economico condiviso e disponibilità del servizio.
Campi
daily_usdLimite del budget giornaliero del servizio, in dollari USA.
availableIndica se il budget consente ancora calcoli.
Errori e ripresa
403 · 408 · 409 · 413 · 422 · 429 · 503 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo di risposta restituita.
Valore:
"error"codeCodice da leggere per gestire un rifiuto o un errore.
messageSpiegazione leggibile del rifiuto o dell’errore.
retryableIndica se è possibile valutare un nuovo tentativo.
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
decide
Calcolo IAInviare un turno: domanda, raccomandazione o errore.
sessionstringobbligatoriocase_idstringobbligatoriotextstringobbligatoriolanguage"fr" | "en" | "it" | "de" | "es" | "pt"facoltativo · Predefinito "fr"refinementsstring[] | nullfacoltativo · Predefinito nullforce_decisionbooleanfacoltativo · Predefinito falseclarification_countintegerfacoltativo · Predefinito 0clarification_version2facoltativo · Predefinito 2
Risposta: DecisionResponse
POST /api/v1/decide
Input
Intestazioni
AuthorizationToken di sessione inviato come Bearer <session>.
X-Dilem-Case-IDConserva questo identificativo per tutti i turni dello stesso dilemma.
Formato tecnico
^[a-zA-Z0-9_-]{1,80}$
Corpo application/json
{
"text": "Train or bus for my commute?",
"language": "en",
"refinements": [],
"clarification_version": 2
}textScelta iniziale, mantenuta a ogni turno.
Da 1 a 6 000 caratteri
languageLingua dell’interfaccia. Le risposte seguono le parole dell’utente.
Valori ammessi:
"fr","en","it","de","es","pt"refinementsDomande e risposte reali in ordine cronologico.
Fino a 40 elementi · Fino a 6 000 caratteri per elemento · Predefinito:
[]force_decisionSolo se l’utente chiede una raccomandazione senza altre domande.
Predefinito:
falseclarification_countNumero di risposte ai chiarimenti.
Da 0 a 20 · Predefinito:
0clarification_versionVersione del contratto, sempre 2.
Predefinito:
2· Valore:2
{
"session": "<session from start_session>",
"case_id": "my-unique-dilemma-id",
"text": "Train or car for a weekend trip?",
"language": "en"
}Risposta
200 application/json
Domanda di chiarimento Clarification
Una domanda da trasmettere o un avviso secondo purpose. insufficient_evidence indica che mancano elementi per una classifica fondata; non riprovare senza nuove informazioni dell’utente.
{
"type": "clarification",
"question": "How far is your commute?",
"choices": [],
"format": "number",
"unit": "km",
"summary": "Train or bus"
}typeTipo di risposta restituita.
Valore:
"clarification"questionDomanda da trasmettere all’utente prima di continuare.
choicesRisposte proposte, se previste dalla domanda.
Fino a 6 elementi
formatFormato di risposta previsto dalla domanda.
Valori ammessi:
"single","multiple","text","number"unitUnità di una risposta numerica, oppure null.
summarySintesi del dilemma.
purposeScopo della domanda o dell’avviso sul perimetro.
Valori ammessi:
"decision_scope","scope_notice","insufficient_evidence"metricsMetriche tecniche dell’elaborazione.
Raccomandazione Result
Raccomandazione, opzioni, motivi e fonti. I pesi sono preferenze relative, non probabilità di successo. result_id può mancare.
{
"type": "result",
"summary": "Train or bus for my commute?",
"options": [
{
"id": "train",
"label": "Take the train",
"description": "Use the direct rail connection.",
"probability": 0.7
},
{
"id": "bus",
"label": "Take the bus",
"description": "Use the bus stop near home.",
"probability": 0.3
}
],
"selected": "train",
"sources": [],
"result_id": "0123456789abcdef0123456789abcdef"
}typeTipo di risposta restituita.
Valore:
"result"summarySintesi del dilemma.
contextContesto usato per la raccomandazione.
assumptionsIpotesi usate per confrontare le opzioni.
criteriaCriteri usati per confrontare le opzioni.
optionsOpzioni confrontate e informazioni associate.
Da 2 a 8 elementi
selectedIdentificativo dell’opzione raccomandata.
sourcesFonti restituite con la raccomandazione.
cautionAvvertenza specifica, oppure null.
timingsDurate delle fasi di elaborazione.
modelsInformazioni sui modelli di questo turno.
metricsMetriche tecniche dell’elaborazione.
result_idIdentificativo del risultato appartenente a questo client.
Errore Error
Rifiuto o errore della pipeline. Controlla type anche dopo HTTP 200; MCP segnala anche isError.
{
"type": "error",
"code": "case_completed"
}typeTipo di risposta restituita.
Valore:
"error"codeCodice da leggere per gestire un rifiuto o un errore.
messageSpiegazione leggibile del rifiuto o dell’errore.
retryableIndica se è possibile valutare un nuovo tentativo.
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
Errori e ripresa
403 · 408 · 409 · 413 · 422 · 429 · 503 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo di risposta restituita.
Valore:
"error"codeCodice da leggere per gestire un rifiuto o un errore.
messageSpiegazione leggibile del rifiuto o dell’errore.
retryableIndica se è possibile valutare un nuovo tentativo.
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
export_result_card
LetturaCreare una carta dal risultato ricevuto, senza IA né archivio immagini.
sessionstringobbligatorioresultCardResultobbligatoriolanguage"fr" | "en" | "it" | "de" | "es" | "pt"facoltativo · Predefinito "fr"theme"light" | "dark"facoltativo · Predefinito "light"
Risposta: image/png
POST /api/v1/result-card
Input
Intestazioni
AuthorizationToken di sessione inviato come Bearer <session>.
Corpo application/json
{
"result": {
"summary": "Train or bus for my commute?",
"selected": "train",
"options": [
{
"id": "train",
"label": "Take the train",
"description": "Use the direct rail connection.",
"probability": 0.7
},
{
"id": "bus",
"label": "Take the bus",
"description": "Use the bus stop near home.",
"probability": 0.3
}
]
},
"language": "en",
"theme": "light"
}resultRisultato già ricevuto, da fornire per generare il PNG.
Campi
summarySintesi del dilemma.
Da 1 a 6 000 caratteri
selectedIdentificativo dell’opzione raccomandata.
Fino a 32 caratteri
optionsOpzioni confrontate e informazioni associate.
Da 2 a 8 elementi
Campi
idIdentificativo univoco dell’opzione nel risultato.
Formato tecnico
^[a-z][a-z0-9_]{0,31}$labelEtichetta dell’opzione sulla scheda.
Da 1 a 120 caratteri
descriptionBreve descrizione mostrata con l’opzione.
Fino a 240 caratteri · Predefinito:
""probabilityPeso di preferenza, non probabilità di successo.
Da 0 a 1
languageLingua di presentazione.
Valori ammessi:
"fr","en","it","de","es","pt"· Predefinito:"fr"themeTema visivo della scheda PNG.
Valori ammessi:
"light","dark"· Predefinito:"light"
Risposta
200 image/png
Allegato PNG privato. Il nome del file è restituito in Content-Disposition.
Errori e ripresa
403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo di risposta restituita.
Valore:
"error"codeCodice da leggere per gestire un rifiuto o un errore.
messageSpiegazione leggibile del rifiuto o dell’errore.
retryableIndica se è possibile valutare un nuovo tentativo.
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
get_result_feedback
LetturaLeggere il voto del client proprietario.
sessionstringobbligatorioresult_idstringobbligatorio
Risposta: Feedback
GET /api/v1/feedback/{result_id}
Input
Intestazioni
AuthorizationToken di sessione inviato come Bearer <session>.
Parametri del percorso
result_idIdentificativo del risultato appartenente a questo client.
Formato tecnico
^[0-9a-f]{32}$
Nessun corpo della richiesta richiesto.
Risposta
200 application/json
{
"result_id": "0123456789abcdef0123456789abcdef",
"helpful": false,
"reason": "missing_constraint"
}result_idIdentificativo del risultato appartenente a questo client.
Formato tecnico
^[0-9a-f]{32}$helpfulVoto registrato, oppure null se non espresso.
reasonMotivo di un voto negativo, oppure null.
Valori ammessi:
null,"misunderstood","missing_constraint","too_many_questions","too_vague"
Errori e ripresa
403 · 408 · 409 · 413 · 422 · 429 · 503 · 404 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo di risposta restituita.
Valore:
"error"codeCodice da leggere per gestire un rifiuto o un errore.
messageSpiegazione leggibile del rifiuto o dell’errore.
retryableIndica se è possibile valutare un nuovo tentativo.
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
set_result_feedback
ScritturaRegistrare il voto esplicito dell’utente, senza dedurne la soddisfazione.
sessionstringobbligatorioresult_idstringobbligatoriohelpfulbooleanobbligatorioreason"misunderstood" | "missing_constraint" | "too_many_questions" | "too_vague" | nullfacoltativo · Predefinito null
Risposta: Feedback
POST /api/v1/feedback
Input
Intestazioni
AuthorizationToken di sessione inviato come Bearer <session>.
Corpo application/json
{
"result_id": "0123456789abcdef0123456789abcdef",
"helpful": false,
"reason": "missing_constraint"
}result_idIdentificativo del risultato appartenente a questo client.
Formato tecnico
^[0-9a-f]{32}$helpfulValutazione esplicita dell’utente sulla risposta.
reasonMotivo di un voto negativo, oppure null.
Valori ammessi:
null,"misunderstood","missing_constraint","too_many_questions","too_vague"
Risposta
200 application/json
{
"result_id": "0123456789abcdef0123456789abcdef",
"helpful": false,
"reason": "missing_constraint"
}result_idIdentificativo del risultato appartenente a questo client.
Formato tecnico
^[0-9a-f]{32}$helpfulVoto registrato, oppure null se non espresso.
reasonMotivo di un voto negativo, oppure null.
Valori ammessi:
null,"misunderstood","missing_constraint","too_many_questions","too_vague"
Errori e ripresa
403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 · 404 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo di risposta restituita.
Valore:
"error"codeCodice da leggere per gestire un rifiuto o un errore.
messageSpiegazione leggibile del rifiuto o dell’errore.
retryableIndica se è possibile valutare un nuovo tentativo.
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
send_user_feedback
ScritturaInviare un messaggio o una segnalazione autorizzata.
sessionstringobbligatoriorequest_idstringobbligatoriomessagestringobbligatoriolanguage"fr" | "en" | "it" | "de" | "es" | "pt"facoltativo · Predefinito "fr"kind"general" | "response"facoltativo · Predefinito "general"emailstringfacoltativo · Predefinito ""responseobject | nullfacoltativo · Predefinito null
Risposta: FeedbackAck
POST /api/v1/user-feedback
Input
Intestazioni
AuthorizationToken di sessione inviato come Bearer <session>.
Corpo application/json
{
"request_id": "0123456789abcdef0123456789abcdef",
"kind": "general",
"message": "Please explain how the recommendation uses my constraints.",
"email": "",
"language": "en",
"source": "agent",
"version": "unknown",
"screen": "other",
"response": null
}request_idIdentificativo da conservare per deduplicare lo stesso invio.
Formato tecnico
^[0-9a-f]{32}$kindMessaggio libero o segnalazione di una risposta.
Valori ammessi:
"general","response"messageCommento fornito esplicitamente dall’utente.
Da 5 a 4 000 caratteri
emailIndirizzo di contatto, oppure stringa vuota.
Fino a 254 caratteri
languageLingua di presentazione.
Valori ammessi:
"fr","en","it","de","es","pt"sourcePunto di accesso da cui proviene il messaggio.
Valori ammessi:
"agent","menu","help","response"versionSHA dell’applicazione, oppure unknown.
Formato tecnico
^[0-9a-f]{40}$|^unknown$screenSchermata da cui viene inviato il messaggio.
Valori ammessi:
"home","clarification","result","other"responseRisposta esatta allegata alla segnalazione, altrimenti null.
Campi
nullnullRisposta allegata
ReportedResponsekindTipo di risposta allegata alla segnalazione.
Valori ammessi:
"clarification","recommendation"textTesto esatto della risposta allegata.
Da 1 a 12 000 caratteri
referenceRiferimento della risposta interessata.
Formato tecnico
^[A-Za-z0-9._:-]{1,80}$
Risposta
200 application/json
{
"ok": true
}okConferma la registrazione del messaggio.
Valore:
true
Errori e ripresa
403 · 408 · 409 · 413 · 422 · 429 · 503 · 415 application/json
{
"type": "error",
"code": "case_completed"
}typeTipo di risposta restituita.
Valore:
"error"codeCodice da leggere per gestire un rifiuto o un errore.
messageSpiegazione leggibile del rifiuto o dell’errore.
retryableIndica se è possibile valutare un nuovo tentativo.
resets_atData e ora del prossimo rinnovo dei crediti.
Data e ora ISO 8601
Avvio rapido
Richiede curl e Python 3. Crea l’identità una sola volta, conserva il token in privato e riutilizzalo nelle visite successive.
Crea una sessione e conserva il valore session. Usalo in Authorization: Bearer *** nelle chiamate successive. Vale 90 giorni; rinnovalo con la stessa chiamata e lo stesso token.
DILEM_SESSION=$(curl --fail-with-body --silent --show-error --max-time 15 \
https://dilem.si/api/v1/session \
-H 'Content-Type: application/json' -d '{}' | \
python3 -c 'import json, sys; print(json.load(sys.stdin)["session"])')curl --fail-with-body --max-time 15 https://dilem.si/api/v1/usage \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H 'X-Dilem-Case-ID: my-unique-dilemma-id'Scegli un Case-ID per il dilemma e mantienilo durante la conversazione. Ricevi una domanda o una raccomandazione. Per rispondere, aggiungi domanda e risposta a refinements e aumenta clarification_count di 1.
curl --fail-with-body --max-time 110 --output result.json https://dilem.si/api/v1/decide \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H 'X-Dilem-Case-ID: my-unique-dilemma-id' \
-H 'Content-Type: application/json' \
-d '{"text":"Train or car for a weekend trip?","language":"en","refinements":[],"clarification_count":0,"clarification_version":2}'Sessione e autenticazione
Senza token, start_session crea un’identità. Con session rinnova la stessa identità per 90 giorni. Un token non valido o scaduto viene rifiutato, mai sostituito in silenzio. REST e MCP condividono il token; non leggono i cookie del browser.
Un Case-ID univoco per dilemma fino al risultato: da 1 a 80 caratteri tra a-z, A-Z, 0-9, _ e -. Identifica il caso, ma non rende il calcolo idempotente.
Ciclo di un dilemma
- Invia la scelta iniziale con un nuovo Case-ID.
- Con clarification, leggi purpose: insufficient_evidence è un avviso da mostrare, non una domanda né un invito a inventare una classifica. Altrimenti poni la domanda e attendi la risposta reale; aggiungi domanda + risposta a refinements e aumenta clarification_count.
- Con result, conserva il JSON: il caso è concluso. Usa un nuovo Case-ID per un altro calcolo.
- Con error, leggi code e retryable. Non ripetere automaticamente un calcolo dall’esito ambiguo.
L’agente ti trasmette le domande e aspetta le tue risposte, senza inventare le informazioni mancanti. Puoi chiedergli una raccomandazione senza altre domande.
Parametri della decisione
textobbligatorioScelta iniziale, mantenuta a ogni turno.
string · 1–6000languageobbligatorioLingua dell’interfaccia. Le risposte seguono le parole dell’utente.
fr | en | it | de | es | ptrefinementsfacoltativoDomande e risposte reali in ordine cronologico.
array · ≤40 × 6000clarification_countfacoltativoNumero di risposte ai chiarimenti.
integer · 0–20clarification_versionfacoltativoVersione del contratto, sempre 2.
2force_decisionfacoltativoSolo se l’utente chiede una raccomandazione senza altre domande.
boolean
Testo + precisazioni: 24 000 caratteri totali. Corpo HTTP: 300 000 byte in 10 secondi; un payload del fornitore troppo grande può essere rifiutato prima del consumo.
Risposte
Domanda di chiarimento type: clarification
Una domanda da trasmettere o un avviso secondo purpose. insufficient_evidence indica che mancano elementi per una classifica fondata; non riprovare senza nuove informazioni dell’utente.
type, question, choices, format, unit, summary, purpose, metrics
Raccomandazione type: result
Raccomandazione, opzioni, motivi e fonti. I pesi sono preferenze relative, non probabilità di successo. result_id può mancare.
type, summary, context, assumptions, criteria, options, selected, sources, caution, timings, models, metrics, result_id
Errore type: error
Rifiuto o errore della pipeline. Controlla type anche dopo HTTP 200; MCP segnala anche isError.
type, code, message, retryable, resets_at
{
"type": "clarification",
"question": "How far is your commute?",
"choices": [],
"format": "number",
"unit": "km",
"summary": "Train or bus"
}Risultati e feedback
Esportare il risultato in PNG
Passa il risultato ricevuto in result, con language e theme (light o dark). PNG privato, nome in Content-Disposition e Cache-Control: no-store. Nessun credito o pubblicazione. MCP restituisce un’immagine nativa e metadati del file.
python3 -c 'import json, sys; print(json.dumps({"result": json.load(sys.stdin), "language": "fr", "theme": "light"}))' < result.json > card-input.jsoncurl --fail-with-body --max-time 15 https://dilem.si/api/v1/result-card \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H "Content-Type: application/json" \
--data-binary @card-input.json --output dilem.pngLeggere o registrare un voto
result_id appartiene a questa identità. helpful è booleano; reason è facoltativo solo per un voto negativo: misunderstood, missing_constraint, too_many_questions o too_vague. Risultati assenti, scaduti o altrui danno lo stesso 404.
GET /api/v1/feedback/{result_id}{"result_id": "<result_id from your result>", "helpful": false, "reason": "missing_constraint"}curl --fail-with-body --max-time 15 https://dilem.si/api/v1/feedback \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H "Content-Type: application/json" \
--data-binary @feedback-input.jsonInviare un messaggio o segnalare una risposta
request_id: 32 caratteri esadecimali minuscoli. message: almeno 5 caratteri non bianchi, massimo 4 000. kind=general per un messaggio; kind=response per una segnalazione con risposta esatta allegata. Email facoltativa. Mantieni ID e contenuto; nessuna ripetizione automatica dopo un errore ambiguo.
{
"request_id": "<32 lowercase hex characters>",
"kind": "general",
"message": "<user-authorized message>",
"email": "",
"language": "fr",
"source": "agent",
"version": "unknown",
"screen": "other",
"response": null
}curl --fail-with-body --max-time 15 https://dilem.si/api/v1/user-feedback \
-H "Authorization: Bearer ${DILEM_SESSION:?}" \
-H "Content-Type: application/json" \
--data-binary @user-feedback-input.jsonCrediti
Un credito copre il dilemma fino alla prima raccomandazione, chiarimenti compresi. Ogni nuovo calcolo successivo usa un altro credito.
Usa get_usage tramite MCP o GET /api/v1/usage tramite REST per conoscere i crediti rimasti e quando si rinnovano.
I limiti provengono dalla politica attiva, non da valori fissi in questa guida. Esportazione PNG e feedback non consumano crediti, ma mantengono limiti tecnici e antiabuso.
Errori e ripresa
403: sessione assente, non valida o scaduta, origine rifiutata o cookie vietati. 408/413/422: tempo, dimensione o dati non validi. 409: caso concluso. 429: quota, budget o capacità. 503: servizio indisponibile. Controlla anche type: la pipeline può fallire dopo l’ammissione. Non ripetere automaticamente un calcolo dopo un errore ambiguo; Case-ID non è una chiave di idempotenza.
Una disconnessione può lasciare lavoro già consumato. La lettura dei consumi non ricostruisce una risposta persa.
Agenti nel browser
In un browser compatibile, WebMCP permette all’agente di usare la pagina aperta con la tua cronologia e i tuoi crediti. Altrimenti usa MCP remoto o l’API. L’accesso remoto accetta testo; la dettatura resta disponibile nell’app.
Leggi prima get_dilemma. submit_dilemma invia scelta o risposta; recommend_dilemma chiede una raccomandazione senza altre domande. Le azioni usano il caso visibile, non il token remoto.
WebMCP aggiunge esportazione locale con anteprima, voti e segnalazioni, oltre a list_saved_dilemmas e get_saved_dilemma per la cronologia di questo browser. L’URL dell’immagine scade alla chiusura dell’anteprima. Cronologia e cookie non vengono condivisi con MCP remoto.
Riferimento tecnico
Gli schemi OpenAPI descrivono corpi e risposte completi. La guida Markdown è il punto d’ingresso per gli agenti; catalogo e Server Card espongono la scoperta MCP.
Il servizio conserva gli scambi testuali per 30 giorni. La cronologia del browser resta sul tuo dispositivo e non viene condivisa con l’agente remoto.
Privacy e fornitori