{
  "info": {
    "name": "Askme AI — API",
    "_postman_id": "askme-ai-api-v1",
    "description": "Collection per le API REST di Askme AI (/api/v2, autenticazione con header X-Api-Key). Le cartelle raggruppano le richieste principali per servizio: Agenti e Chat, Knowledge Base, Analisi, Amministrazione, Monitoraggio. La cartella 'Agenti e Chat' e 'Knowledge Base' coprono il flusso di base: creare una KB -> aggiungere un documento -> creare un agente -> chattare con l'agente -> leggere le conversazioni. Alcune richieste salvano automaticamente gli ID generati (kb_id, document_id, agent_id, conversation_id, catalog_id) nelle variabili della collection per concatenare i passaggi.\n\nPrima dell'uso valorizza le variabili baseUrl e apiKey. La chiave API si genera dalla console: Amministrazione -> API Keys.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      {
        "key": "key",
        "value": "X-Api-Key",
        "type": "string"
      },
      {
        "key": "value",
        "value": "{{apiKey}}",
        "type": "string"
      },
      {
        "key": "in",
        "value": "header",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://ai.askme.it/api/v2",
      "type": "string",
      "description": "URL base delle API. Host della console Askme AI del tenant (es. https://ai.askme.it) con suffisso /api/v2."
    },
    {
      "key": "apiKey",
      "value": "amai_INSERISCI_LA_TUA_CHIAVE",
      "type": "string",
      "description": "API key nel formato amai_<key>. Si genera da Amministrazione -> API Keys."
    },
    {
      "key": "sourceApp",
      "value": "api_direct",
      "type": "string",
      "description": "Header X-Source-App. Per integrazioni esterne dirette il valore e api_direct (lista chiusa: askmechat, askmedesk, api_direct, askmeai, internal)."
    },
    {
      "key": "agent_id",
      "value": "",
      "type": "string",
      "description": "Popolato automaticamente dopo 'Crea agente'."
    },
    {
      "key": "kb_id",
      "value": "",
      "type": "string",
      "description": "Popolato automaticamente dopo 'Crea knowledge base'."
    },
    {
      "key": "document_id",
      "value": "",
      "type": "string",
      "description": "Popolato automaticamente dopo 'Aggiungi documento da testo'."
    },
    {
      "key": "conversation_id",
      "value": "",
      "type": "string",
      "description": "Popolato automaticamente dopo 'Invia messaggio (chat con agente)'."
    },
    {
      "key": "external_id",
      "value": "ordine-7728",
      "type": "string",
      "description": "ID di conversazione del sistema chiamante, usato per il lookup by-external-id."
    },
    {
      "key": "catalog_id",
      "value": "",
      "type": "string",
      "description": "Popolato automaticamente dopo 'Costruisci catalogo Similarity'."
    },
    {
      "key": "analysis_id",
      "value": "",
      "type": "string",
      "description": "ID di un job di analisi da consultare."
    }
  ],
  "item": [
    {
      "name": "Agenti e Chat",
      "description": "Gestione agenti conversazionali, invio messaggi (chat con RAG/MCP), storico conversazioni, server MCP e template di prompt.",
      "item": [
        {
          "name": "Crea agente",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/agents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "agents"
              ]
            },
            "description": "Crea un nuovo agente nel tenant. L'id restituito viene salvato nella variabile agent_id per i passaggi successivi.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Assistente customer care\",\n  \"description\": \"Risponde alle domande dei clienti su spedizioni e resi.\",\n  \"model_provider\": \"openai\",\n  \"model_name\": \"gpt-4o-mini\",\n  \"system_prompt\": \"Sei un assistente cortese di supporto clienti.\",\n  \"temperature\": 0.4,\n  \"max_tokens\": 1024\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const json = pm.response.json();",
                  "if (json && json.id !== undefined && json.id !== null) {",
                  "    pm.collectionVariables.set('agent_id', json.id);",
                  "    console.log('agent_id salvato:', json.id);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "Elenca agenti",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/agents?limit=20&status=active",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "agents"
              ],
              "query": [
                {
                  "key": "limit",
                  "value": "20"
                },
                {
                  "key": "status",
                  "value": "active"
                }
              ]
            },
            "description": "Elenca gli agenti del tenant in modo paginato. Filtri: search, status, model_name, include_temporary, sort_by, order."
          }
        },
        {
          "name": "Dettaglio agente",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/agents/{{agent_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "agents",
                "{{agent_id}}"
              ]
            },
            "description": "Recupera la configurazione di un agente specifico."
          }
        },
        {
          "name": "Aggiorna agente",
          "request": {
            "method": "PUT",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/agents/{{agent_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "agents",
                "{{agent_id}}"
              ]
            },
            "description": "Aggiorna l'agente (campi opzionali). Incrementa version e crea uno snapshot.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"active\",\n  \"temperature\": 0.2\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Elimina agente",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/agents/{{agent_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "agents",
                "{{agent_id}}"
              ]
            },
            "description": "Elimina l'agente e rilascia la quota agents. Risposta 204 No Content."
          }
        },
        {
          "name": "Invia messaggio (chat con agente)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/chat",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "chat"
              ]
            },
            "description": "Invia un messaggio a un agente. Sostituisci agent_id con il valore reale (es. {{agent_id}}). Imposta stream=true per ricevere lo stream SSE. Il conversation_id della risposta viene salvato nella variabile omonima.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"agent_id\": 12,\n  \"message\": \"Quali sono i tempi medi di consegna in Italia?\",\n  \"external_conversation_id\": \"{{external_id}}\",\n  \"stream\": false\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const json = pm.response.json();",
                  "if (json && json.conversation_id !== undefined && json.conversation_id !== null) {",
                  "    pm.collectionVariables.set('conversation_id', json.conversation_id);",
                  "    console.log('conversation_id salvato:', json.conversation_id);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "Elenca conversazioni",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversations?offset=0&limit=50",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversations"
              ],
              "query": [
                {
                  "key": "offset",
                  "value": "0"
                },
                {
                  "key": "limit",
                  "value": "50"
                }
              ]
            },
            "description": "Elenca le conversazioni dell'utente corrente."
          }
        },
        {
          "name": "Messaggi della conversazione",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversations/{{conversation_id}}/messages",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversations",
                "{{conversation_id}}",
                "messages"
              ]
            },
            "description": "Recupera i messaggi della conversazione (paginati)."
          }
        },
        {
          "name": "Conversazione per ID esterno",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversations/by-external-id/{{external_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversations",
                "by-external-id",
                "{{external_id}}"
              ]
            },
            "description": "Recupera la conversazione tramite l'external_id fornito al primo POST /chat."
          }
        },
        {
          "name": "Feedback su un messaggio",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/conversations/{{conversation_id}}/messages/5512/feedback",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "conversations",
                "{{conversation_id}}",
                "messages",
                "5512",
                "feedback"
              ]
            },
            "description": "Registra il feedback dell'utente finale su una risposta dell'assistente. Sostituisci l'ID messaggio nel path.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rating\": \"positive\",\n  \"comment\": \"Risposta chiara.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Registra server MCP",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/mcp-servers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "mcp-servers"
              ]
            },
            "description": "Registra un nuovo server MCP a livello tenant, associabile agli agenti.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Calendar MCP\",\n  \"description\": \"Server MCP per gestione calendario\",\n  \"transport\": \"streamable-http\",\n  \"url\": \"https://mcp.example.com/calendar\",\n  \"env\": {\n    \"Authorization\": \"Bearer ...\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Crea template prompt",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/prompt-templates",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "prompt-templates"
              ]
            },
            "description": "Crea un template di prompt riutilizzabile e versionabile.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Saluto cliente\",\n  \"content\": \"Buongiorno {{nome_cliente}}, sono l'assistente di {{azienda}}.\",\n  \"role\": \"system\",\n  \"variables\": [\n    {\n      \"name\": \"nome_cliente\",\n      \"description\": \"Nome del cliente\",\n      \"default_value\": \"\"\n    },\n    {\n      \"name\": \"azienda\",\n      \"description\": \"Nome azienda\",\n      \"default_value\": \"Askme\"\n    }\n  ],\n  \"tags\": [\n    \"welcome\",\n    \"support\"\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    },
    {
      "name": "Knowledge Base",
      "description": "Gestione knowledge base, documenti, FAQ, scraping web, sorgenti database e ricerca.",
      "item": [
        {
          "name": "Crea knowledge base",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases"
              ]
            },
            "description": "Crea una nuova knowledge base. L'id restituito viene salvato nella variabile kb_id.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Manuali tecnici\",\n  \"description\": \"Documentazione prodotto\",\n  \"type\": \"manual\",\n  \"languages\": [\n    \"it\",\n    \"en\"\n  ],\n  \"chunk_size\": 800,\n  \"chunk_overlap\": 100\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const json = pm.response.json();",
                  "if (json && json.id !== undefined && json.id !== null) {",
                  "    pm.collectionVariables.set('kb_id', json.id);",
                  "    console.log('kb_id salvato:', json.id);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "Elenca knowledge base",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases?offset=0&limit=50",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases"
              ],
              "query": [
                {
                  "key": "offset",
                  "value": "0"
                },
                {
                  "key": "limit",
                  "value": "50"
                }
              ]
            },
            "description": "Elenca le knowledge base del tenant."
          }
        },
        {
          "name": "Dettaglio knowledge base",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases/{{kb_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases",
                "{{kb_id}}"
              ]
            },
            "description": "Dettaglio della KB."
          }
        },
        {
          "name": "Aggiungi documento da testo",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases/{{kb_id}}/documents/text",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases",
                "{{kb_id}}",
                "documents",
                "text"
              ]
            },
            "description": "Crea un documento da testo grezzo. L'id restituito viene salvato nella variabile document_id.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"title\": \"Politica spedizioni\",\n  \"content\": \"Le spedizioni standard partono entro 24 ore lavorative. Le consegne avvengono entro 24-72 ore lavorative.\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const json = pm.response.json();",
                  "if (json && json.id !== undefined && json.id !== null) {",
                  "    pm.collectionVariables.set('document_id', json.id);",
                  "    console.log('document_id salvato:', json.id);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "Carica documento (file)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases/{{kb_id}}/documents/upload",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases",
                "{{kb_id}}",
                "documents",
                "upload"
              ]
            },
            "description": "Carica un file (multipart). Tipi supportati: PDF, DOCX, TXT, MD, HTML, CSV, XLSX, JSON. Seleziona il file nella tab Body. L'ingest è asincrono.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": []
                },
                {
                  "key": "priority",
                  "value": "1",
                  "type": "text"
                },
                {
                  "key": "language",
                  "value": "it",
                  "type": "text"
                }
              ]
            }
          }
        },
        {
          "name": "Elenca documenti",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases/{{kb_id}}/documents",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases",
                "{{kb_id}}",
                "documents"
              ]
            },
            "description": "Elenca i documenti della KB (paginati)."
          }
        },
        {
          "name": "Crea FAQ",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases/{{kb_id}}/faqs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases",
                "{{kb_id}}",
                "faqs"
              ]
            },
            "description": "Crea una FAQ nella KB.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"question\": \"Quali sono i tempi di consegna?\",\n  \"answer\": \"Le consegne avvengono entro 24-72 ore lavorative.\",\n  \"category\": \"spedizioni\",\n  \"priority\": 1,\n  \"variants\": [\n    \"Quando arriva il pacco?\",\n    \"Tempi di spedizione?\"\n  ],\n  \"editorial_status\": \"published\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Ricerca ibrida",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/search",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "search"
              ]
            },
            "description": "Ricerca ibrida (vettoriale + BM25 + RRF + FAQ) su una o più KB. Sostituisci knowledge_base_ids con i tuoi ID (es. [{{kb_id}}]).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"query\": \"tempi medi consegna Italia\",\n  \"knowledge_base_ids\": [\n    24\n  ],\n  \"top_k\": 5,\n  \"use_reranking\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Crea job di scraping web",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases/{{kb_id}}/scraping-jobs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases",
                "{{kb_id}}",
                "scraping-jobs"
              ]
            },
            "description": "Crea un job di scraping. L'URL può essere una pagina, una sitemap o un feed RSS/Atom.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://example.com/sitemap.xml\",\n  \"depth\": 1\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Metriche qualità KB",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/knowledge-bases/{{kb_id}}/quality-metrics",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "knowledge-bases",
                "{{kb_id}}",
                "quality-metrics"
              ]
            },
            "description": "Metriche strutturali della KB (documenti, distribuzione chunk, pagine scrapate). Nessuna chiamata LLM."
          }
        }
      ]
    },
    {
      "name": "Analisi",
      "description": "Analisi di contenuti, PDF, CV e dati, OCR e classificazione tramite catalogo Similarity.",
      "item": [
        {
          "name": "Analisi contenuto testuale",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/analysis/content",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "analysis",
                "content"
              ]
            },
            "description": "Analisi testuale generica (sentiment, entità, parole chiave, riassunto). Risponde 202 con un job pending; usa /analysis/content/sync per la variante sincrona.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Analisi recensione\",\n  \"text\": \"Il prodotto è arrivato con un giorno di ritardo ma il servizio clienti è stato ottimo.\",\n  \"options\": {\n    \"language\": \"it\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Analisi PDF",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/analysis/pdf",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "analysis",
                "pdf"
              ]
            },
            "description": "Analisi di un PDF tramite LLM. Fornisci esattamente uno tra file_content (base64) e file_path. Opzionalmente crea KB+agente temporanei (create_kb_agent).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filename\": \"contratto.pdf\",\n  \"file_content\": \"INSERISCI_IL_PDF_IN_BASE64\",\n  \"options\": {\n    \"language\": \"it\",\n    \"create_kb_agent\": true,\n    \"skip_analysis\": false\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Analisi CV",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/analysis/cv",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "analysis",
                "cv"
              ]
            },
            "description": "Scoring di un CV rispetto alle job position configurate dal tenant. Con job_position_id limiti lo scoring a una posizione.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"filename\": \"curriculum.pdf\",\n  \"file_content\": \"INSERISCI_IL_CV_IN_BASE64\",\n  \"options\": {\n    \"language\": \"it\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "OCR (immagine o PDF scansionato)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/analysis/ocr",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "analysis",
                "ocr"
              ]
            },
            "description": "Estrazione di testo da immagini o PDF scansionati (multipart). Lingue Tesseract: ita, eng, fra, deu, spa. Max 50 MB.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": []
                },
                {
                  "key": "language",
                  "value": "ita",
                  "type": "text"
                }
              ]
            }
          }
        },
        {
          "name": "Costruisci catalogo Similarity",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/analysis/catalogs/build",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "analysis",
                "catalogs",
                "build"
              ]
            },
            "description": "Avvia la build di un catalogo di classificazione. Risponde 202 (build asincrona). L'id viene salvato in catalog_id.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Triage richieste clienti\",\n  \"mode\": \"supervised\",\n  \"threshold\": 0.6,\n  \"pairs\": [\n    {\n      \"ticket\": \"Vorrei sapere quando arriva il pacco\",\n      \"label_path\": [\n        \"spedizione\"\n      ]\n    },\n    {\n      \"ticket\": \"Il prodotto è arrivato rotto\",\n      \"label_path\": [\n        \"reso\"\n      ]\n    },\n    {\n      \"ticket\": \"Posso modificare l'indirizzo di consegna?\",\n      \"label_path\": [\n        \"modifica ordine\"\n      ]\n    },\n    {\n      \"ticket\": \"Vorrei un preventivo per la versione enterprise\",\n      \"label_path\": [\n        \"vendita\"\n      ]\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const json = pm.response.json();",
                  "if (json && json.id !== undefined && json.id !== null) {",
                  "    pm.collectionVariables.set('catalog_id', json.id);",
                  "    console.log('catalog_id salvato:', json.id);",
                  "}"
                ]
              }
            }
          ]
        },
        {
          "name": "Classifica testi",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/analysis/catalogs/classify",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "analysis",
                "catalogs",
                "classify"
              ]
            },
            "description": "Classifica uno o più testi rispetto a un catalogo ready. Sostituisci catalog_id con il tuo (es. {{catalog_id}}).",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"catalog_id\": 14,\n  \"texts\": [\n    \"Quando arriva il mio ordine?\",\n    \"L'articolo è difettoso, vorrei restituirlo\"\n  ],\n  \"top_n\": 3\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Elenca job di analisi",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/analysis?offset=0&limit=50",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "analysis"
              ],
              "query": [
                {
                  "key": "offset",
                  "value": "0"
                },
                {
                  "key": "limit",
                  "value": "50"
                }
              ]
            },
            "description": "Elenca i job di analisi del tenant. Filtri: status, type."
          }
        },
        {
          "name": "Dettaglio job di analisi",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/analysis/{{analysis_id}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "analysis",
                "{{analysis_id}}"
              ]
            },
            "description": "Dettaglio del job, incluso il result (struttura specifica per tipo)."
          }
        }
      ]
    },
    {
      "name": "Amministrazione",
      "description": "Utenti, API key, quote, feature flag e piani del tenant. La maggior parte richiede un ruolo amministrativo.",
      "item": [
        {
          "name": "Profilo utente corrente",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/users/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "users",
                "me"
              ]
            },
            "description": "Profilo dell'utente autenticato dalla richiesta corrente."
          }
        },
        {
          "name": "Elenca API key",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api-keys",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api-keys"
              ]
            },
            "description": "Gestione delle API key del tenant."
          }
        },
        {
          "name": "Utilizzo quote",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/quotas/usage",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "quotas",
                "usage"
              ]
            },
            "description": "Utilizzo corrente delle quote del tenant."
          }
        },
        {
          "name": "Elenco feature flag",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/feature-flags",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "feature-flags"
              ]
            },
            "description": "Elenco dei feature flag e del loro stato per il tenant."
          }
        },
        {
          "name": "Elenco piani",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/plans",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "plans"
              ]
            },
            "description": "Elenco dei piani disponibili."
          }
        }
      ]
    },
    {
      "name": "Monitoraggio",
      "description": "Utilizzo, costi, dashboard e trend del tenant.",
      "item": [
        {
          "name": "Metriche dashboard",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dashboard/metrics",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dashboard",
                "metrics"
              ]
            },
            "description": "Metriche aggregate per la dashboard."
          }
        },
        {
          "name": "Record di utilizzo",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/usage?offset=0&limit=100",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "usage"
              ],
              "query": [
                {
                  "key": "offset",
                  "value": "0"
                },
                {
                  "key": "limit",
                  "value": "100"
                }
              ]
            },
            "description": "Elenca i record di utilizzo del tenant. Filtri: start_time, end_time, service."
          }
        },
        {
          "name": "Sintesi costi",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/costs/summary?start_time=2026-04-01T00:00:00Z&end_time=2026-04-30T23:59:59Z",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "costs",
                "summary"
              ],
              "query": [
                {
                  "key": "start_time",
                  "value": "2026-04-01T00:00:00Z"
                },
                {
                  "key": "end_time",
                  "value": "2026-04-30T23:59:59Z"
                }
              ]
            },
            "description": "Sintesi costi del periodo, con breakdown per servizio, modello, operazione, source app, cost tier e giorno."
          }
        },
        {
          "name": "Costi per categoria",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/costs/by-category?start_time=2026-04-01T00:00:00Z&end_time=2026-04-30T23:59:59Z",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "costs",
                "by-category"
              ],
              "query": [
                {
                  "key": "start_time",
                  "value": "2026-04-01T00:00:00Z"
                },
                {
                  "key": "end_time",
                  "value": "2026-04-30T23:59:59Z"
                }
              ]
            },
            "description": "Breakdown costi per operation_type (es. chat.generation, analysis.pdf)."
          }
        },
        {
          "name": "Trend conversazioni",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-Source-App",
                "value": "{{sourceApp}}"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/dashboard/trend?days=30",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "dashboard",
                "trend"
              ],
              "query": [
                {
                  "key": "days",
                  "value": "30"
                }
              ]
            },
            "description": "Trend conversazioni per giorno."
          }
        }
      ]
    }
  ]
}