{"openapi":"3.1.0","info":{"title":"Interfibra — copertura e offerte per assistenti AI","version":"1.2.0","description":"Verifica quale tecnologia (FTTH, FTTC, FWA) Interfibra può attivare a un indirizzo italiano, legge il listino e costruisce il link di attivazione già compilato. Tutto in sola lettura: nessuna operazione crea ordini o invia messaggi. Il contratto lo completa il cliente aprendo il link: documento d'identità, codice di verifica sul suo telefono e accettazione esplicita delle clausole. Le stesse funzioni sono disponibili come server MCP (https://interfibra.it/api/mcp) e come pagina HTML (https://interfibra.it/verifica). Documentazione: https://interfibra.it/assistenti-ai. Privacy: https://interfibra.it/privacy.","contact":{"name":"Interfibra S.r.l.","email":"info@interfibra.it","url":"https://interfibra.it/contatti"},"termsOfService":"https://interfibra.it/condizioni-generali"},"servers":[{"url":"https://interfibra.it"}],"externalDocs":{"url":"https://interfibra.it/assistenti-ai"},"paths":{"/api/agenti/copertura":{"get":{"operationId":"verificaCopertura","summary":"Verifica la copertura a un indirizzo","description":"Da chiamare prima di proporre un'offerta: il prezzo è uguale ovunque, la tecnologia no. Restituisce tecnologia, velocità, offerta consigliata con prezzo e link di attivazione, oppure suggerimenti se l'indirizzo non è univoco.","parameters":[{"name":"comune","in":"query","required":true,"description":"Comune italiano, es. \"Campobasso\".","schema":{"type":"string","maxLength":120}},{"name":"via","in":"query","required":true,"description":"Via o piazza, con o senza toponimo, es. \"viale Giuseppe Ferro\".","schema":{"type":"string","maxLength":120}},{"name":"civico","in":"query","required":true,"description":"Numero civico, es. \"176\" o \"12/A\".","schema":{"type":"string","maxLength":20}},{"name":"cliente","in":"query","description":"Chi firma il contratto: \"privato\" (persona, connessione di casa) o \"azienda\" (società, ditta o professionista con partita IVA). Le offerte per privati non si intestano a un'azienda e viceversa.","schema":{"type":"string","enum":["privato","azienda"]}}],"responses":{"200":{"description":"Esito. stato=\"verificata\": indirizzo riconosciuto e offerte; stato=\"non_determinata\": indirizzo non riconosciuto, con suggerimenti da proporre al cliente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Esito"}}}},"400":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"403":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"429":{"description":"Troppe richieste: riprovare dopo i secondi in Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"503":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}}}}},"/api/agenti/offerte":{"get":{"operationId":"elencoOfferte","summary":"Listino attivabile oggi","description":"Le offerte sottoscrivibili con canone, sconto e sua condizione, per chi sono (privato o azienda), velocità, allaccio e disattivazione. Prezzi dal listino del sito; fa fede la scheda di trasparenza di ciascuna.","parameters":[{"name":"pubblico","in":"query","description":"Filtra per tipo di cliente. Omesso = tutte.","schema":{"type":"string","enum":["privati","piva","imprese","pa"]}}],"responses":{"200":{"description":"Listino.","content":{"application/json":{"schema":{"type":"object","properties":{"offerte":{"type":"array","items":{"$ref":"#/components/schemas/Offerta"}},"nota":{"type":"string"}},"required":["offerte"]}}}},"400":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"429":{"description":"Troppe richieste: riprovare dopo i secondi in Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}}}}},"/api/agenti/offerte/{slug}":{"get":{"operationId":"dettaglioOfferta","summary":"Dati di una singola offerta","description":"Tutti i dati di un'offerta, dato lo slug letto dal listino. Le offerte chiuse alle nuove attivazioni rispondono 404.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Offerta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Offerta"}}}},"404":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"429":{"description":"Troppe richieste: riprovare dopo i secondi in Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}}}}},"/api/agenti/link-attivazione":{"get":{"operationId":"linkAttivazione","summary":"Link di attivazione da dare al cliente","description":"URL con indirizzo e tecnologia già compilati, da consegnare al cliente: lo completa lui con documento, codice sul telefono e accettazione. Con l'indirizzo completo ricontrolla la copertura. Non crea ordini.","parameters":[{"name":"slug","in":"query","required":true,"description":"Slug dell'offerta scelta.","schema":{"type":"string"}},{"name":"cliente","in":"query","description":"Chi firma il contratto: \"privato\" (persona, connessione di casa) o \"azienda\" (società, ditta o professionista con partita IVA). Le offerte per privati non si intestano a un'azienda e viceversa.","schema":{"type":"string","enum":["privato","azienda"]},"required":true},{"name":"comune","in":"query","required":false,"description":"Comune italiano, es. \"Campobasso\".","schema":{"type":"string","maxLength":120}},{"name":"via","in":"query","required":false,"description":"Via o piazza, con o senza toponimo, es. \"viale Giuseppe Ferro\".","schema":{"type":"string","maxLength":120}},{"name":"civico","in":"query","required":false,"description":"Numero civico, es. \"176\" o \"12/A\".","schema":{"type":"string","maxLength":20}},{"name":"provincia","in":"query","description":"Sigla, es. \"CB\".","schema":{"type":"string","maxLength":2}},{"name":"cap","in":"query","schema":{"type":"string","pattern":"^[0-9]{5}$"}}],"responses":{"200":{"description":"Link pronto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Link"}}}},"400":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"403":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"404":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"422":{"description":"Errore, con il messaggio in italiano e in inglese.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}},"429":{"description":"Troppe richieste: riprovare dopo i secondi in Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Errore"}}}}}}}},"components":{"schemas":{"Errore":{"type":"object","properties":{"errore":{"type":"object","properties":{"codice":{"type":"string"},"messaggio":{"type":"string","description":"In italiano, con i dettagli."},"message":{"type":"string","description":"In inglese."},"riprovaFraSecondi":{"type":"integer"}},"required":["codice","messaggio","message"]}},"required":["errore"]},"Offerta":{"type":"object","properties":{"slug":{"type":"string"},"nome":{"type":"string"},"tecnologia":{"type":"string","enum":["FTTH","FTTC","FWA"]},"pubblico":{"type":"array","items":{"type":"string"}},"perChi":{"type":"string","enum":["privato","azienda"]},"prezzo":{"type":"string","description":"Il prezzo come va detto al cliente, con la condizione dello sconto."},"canoneMensileEur":{"type":"number"},"canoneConAddebitoDirettoEur":{"type":"number"},"ivaInclusa":{"type":"boolean"},"downloadMbps":{"type":"number"},"uploadMbps":{"type":"number"},"contributoAllaccioEur":{"type":"number"},"costoDisattivazioneEur":{"type":"number"},"modemRichiestoPerLoSconto":{"type":"object","description":"Solo dove il canone scontato richiede il modem Interfibra (Power MAX 10): il modem si paga a parte, per questo importo e questi mesi. Va detto al cliente insieme al prezzo.","properties":{"nome":{"type":"string"},"mensileEur":{"type":"number"},"mesi":{"type":"integer"}},"required":["nome","mensileEur"]},"schedaTrasparenza":{"type":"string","format":"uri","description":"Scheda di trasparenza tariffaria (AGCom) dell'offerta, in PDF. In caso di differenza fa fede la scheda."},"sottoscrivibile":{"type":"boolean"},"soloGiaClienti":{"type":"boolean"},"paginaOfferta":{"type":"string","format":"uri"},"linkAttivazione":{"type":"string","format":"uri"}},"required":["slug","nome","tecnologia","perChi","prezzo","canoneMensileEur"]},"OffertaQui":{"allOf":[{"$ref":"#/components/schemas/Offerta"},{"type":"object","properties":{"tecnologiaQui":{"type":"string","enum":["FTTH","FTTC","FWA"]},"velocitaQuiMbps":{"type":["object","null"],"properties":{"down":{"type":"number"},"up":{"type":"number"}}}}}]},"Esito":{"type":"object","properties":{"stato":{"type":"string","enum":["verificata","non_determinata"]},"indirizzo":{"type":"object","description":"L'indirizzo come l'ha riconosciuto la banca dati di copertura.","properties":{"comune":{"type":"string"},"particella":{"type":"string","description":"Toponimo, es. \"VIALE\"."},"strada":{"type":"string"},"civico":{"type":"string"}}},"indirizzoRiconosciuto":{"type":"string"},"attivabile":{"type":"boolean"},"tecnologia":{"type":["string","null"],"enum":["FTTH","FTTC","FWA",null]},"velocitaMassimaMbps":{"type":["number","null"]},"dettaglio":{"type":"object","description":"Copertura per rete: fibra FTTH, FTTC, radio Interfibra (fwa) e radio dei partner (fwaWholesale).","properties":{"ftth":{"$ref":"#/components/schemas/Rete"},"fttc":{"$ref":"#/components/schemas/Rete"},"fwa":{"$ref":"#/components/schemas/Rete"},"fwaWholesale":{"$ref":"#/components/schemas/Rete"}}},"cliente":{"type":["string","null"],"enum":["privato","azienda",null]},"offertaConsigliata":{"oneOf":[{"$ref":"#/components/schemas/OffertaQui"},{"type":"null"}]},"offertaConsigliataAzienda":{"oneOf":[{"$ref":"#/components/schemas/OffertaQui"},{"type":"null"}]},"offerteAttivabili":{"type":"array","items":{"$ref":"#/components/schemas/OffertaQui"}},"prossimoPasso":{"type":"string"},"comeSiConclude":{"type":"string"},"cosaServeAlCliente":{"type":"array","items":{"type":"string"}},"motivo":{"type":"string"},"campo":{"type":["string","null"],"enum":["comune","via","civico",null]},"suggerimenti":{"type":"array","items":{"type":"object","properties":{"testo":{"type":"string"},"paginaVerifica":{"type":"string","format":"uri"},"api":{"type":"string","format":"uri"}}}},"cosaFare":{"type":"string"},"paginaVerifica":{"type":"string","format":"uri"},"telefonoCommerciale":{"type":"string"},"listaDAttesa":{"type":"string","format":"uri"}},"required":["stato"]},"Rete":{"type":"object","properties":{"covered":{"type":"boolean"},"maxSpeed":{"type":["number","null"],"description":"Mbps in download."}},"required":["covered"]},"Link":{"type":"object","properties":{"link":{"type":"string","format":"uri"},"cliente":{"type":"string","enum":["privato","azienda"]},"indirizzoRiconosciuto":{"type":"string"},"tecnologia":{"type":["string","null"]},"coperturaVerificata":{"type":"boolean"},"motivoCoperturaNonVerificata":{"type":"string"},"cosaServeAlCliente":{"type":"array","items":{"type":"string"}},"avvertenza":{"type":"string"}},"required":["link","cliente","coperturaVerificata"]}}}}