{"openapi":"3.0.0","paths":{"/status":{"get":{"operationId":"HealthController_getStatus","parameters":[],"responses":{"200":{"description":""}},"tags":["Health"]}},"/health":{"get":{"operationId":"HealthController_getHealth","parameters":[],"responses":{"200":{"description":""}},"tags":["Health"]}},"/metrics":{"get":{"operationId":"HealthController_getMetrics","parameters":[],"responses":{"200":{"description":""}},"tags":["Health"]}},"/registry/tools":{"get":{"operationId":"RegistryController_listTools","parameters":[],"responses":{"200":{"description":""}},"tags":["Registry"]}},"/registry/tools/{slug}":{"get":{"operationId":"RegistryController_getTool","parameters":[{"name":"slug","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Registry"]}},"/registry/demo/{slug}":{"post":{"tags":["Demo pubblica"],"operationId":"runPublicDemo","summary":"Esegui un tool senza account (demo pubblica K5a)","description":"Percorso anonimo, €0, nessuna chiave. Throttle 10 richieste al minuto per indirizzo IP, input cappato, niente batch. Gli `slug`/`action` ammessi sono quelli elencati nelle operazioni `/python/…` di questo documento. È la stessa route del worker che serve la versione autenticata: stesso motore, stesso risultato.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"description":"Slug del tool (es. `fisco-it-validator`)."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","maxLength":40,"description":"Azione della whitelist. Omessa, vale l'azione di default dello slug."},"input":{"type":"object","description":"I campi del tool — gli stessi dell'operazione `/python/…` gemella. Vanno annidati qui: il DTO rifiuta le proprietà sconosciute alla radice."}},"required":["input"]},"example":{"action":"cf","input":{"codice_fiscale":"RSSMRA85T10A562S"}}}}},"responses":{"200":{"description":"Il JSON dello strumento."},"404":{"description":"Slug o action fuori dalla whitelist."},"429":{"description":"Tetto anonimo per IP superato."}}}},"/mcp":{"post":{"operationId":"McpController_rpc","parameters":[],"responses":{"201":{"description":""}},"tags":["Mcp"]},"get":{"operationId":"McpController_sse","parameters":[],"responses":{"200":{"description":""}},"tags":["Mcp"]}},"/wh/{binId}":{"get":{"operationId":"WebhookCaptureController_captureWebhook_get","parameters":[{"name":"binId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WebhookCapture"]},"post":{"operationId":"WebhookCaptureController_captureWebhook_post","parameters":[{"name":"binId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WebhookCapture"]},"put":{"operationId":"WebhookCaptureController_captureWebhook_put","parameters":[{"name":"binId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WebhookCapture"]},"delete":{"operationId":"WebhookCaptureController_captureWebhook_delete","parameters":[{"name":"binId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WebhookCapture"]},"patch":{"operationId":"WebhookCaptureController_captureWebhook_patch","parameters":[{"name":"binId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WebhookCapture"]},"options":{"operationId":"WebhookCaptureController_captureWebhook_options","parameters":[{"name":"binId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WebhookCapture"]},"head":{"operationId":"WebhookCaptureController_captureWebhook_head","parameters":[{"name":"binId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WebhookCapture"]},"search":{"operationId":"WebhookCaptureController_captureWebhook_search","parameters":[{"name":"binId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["WebhookCapture"]}},"/python/italian/codice-fiscale/validate":{"post":{"tags":["Tool"],"operationId":"validate_codice_fiscale","summary":"Valida Codice Fiscale","description":"Valida un Codice Fiscale italiano (formato + carattere di controllo, con gestione omocodia).\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/fisco-it-validator` con `action: \"cf\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"codice_fiscale":{"type":"string","maxLength":32,"description":"Il Codice Fiscale da validare (es. RSSMRA85T10A562S)."}},"required":["codice_fiscale"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/codice-fiscale/generate":{"post":{"tags":["Tool"],"operationId":"generate_codice_fiscale","summary":"Genera Codice Fiscale","description":"Genera un Codice Fiscale italiano da dati anagrafici (cognome, nome, data di nascita, sesso, e comune/stato estero di nascita — oppure direttamente il codice Belfiore). Restituisce il CF \"base\" (la variante omocodica in caso di collisione è assegnata dall'Agenzia).\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/fisco-it-validator` con `action: \"gen\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cognome":{"type":"string","maxLength":64,"description":"Cognome."},"nome":{"type":"string","maxLength":64,"description":"Nome."},"data_nascita":{"type":"string","maxLength":10,"description":"Data di nascita in formato GG/MM/AAAA (es. 10/12/1985)."},"sesso":{"type":"string","enum":["M","F"],"description":"Sesso: M o F."},"comune":{"type":"string","maxLength":64,"description":"Comune (o stato estero) di nascita. In alternativa usa codice_belfiore."},"provincia":{"type":"string","maxLength":4,"description":"Sigla provincia (es. PI) per disambiguare comuni omonimi."},"codice_belfiore":{"type":"string","maxLength":4,"description":"Codice catastale/Belfiore del luogo di nascita (alternativa precisa al comune)."}},"required":["cognome","nome","data_nascita","sesso"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/partita-iva/validate":{"post":{"tags":["Tool"],"operationId":"validate_partita_iva","summary":"Valida Partita IVA","description":"Valida una Partita IVA italiana (11 cifre + checksum Luhn).\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/fisco-it-validator` con `action: \"piva\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"partita_iva":{"type":"string","maxLength":32,"description":"La Partita IVA da validare (11 cifre, es. 12345678903)."}},"required":["partita_iva"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/iban/validate":{"post":{"tags":["Tool"],"operationId":"validate_iban","summary":"Valida IBAN","description":"Valida un IBAN (checksum MOD-97) e, per gli IBAN italiani, identifica la banca dal codice ABI.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/fisco-it-validator` con `action: \"iban\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","maxLength":64,"description":"L'IBAN da validare (es. IT60X0542811101000000123456)."}},"required":["iban"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/cap/lookup":{"post":{"tags":["Tool"],"operationId":"lookup_cap","summary":"Cerca CAP","description":"Restituisce l'area/provincia INDICATIVA di un CAP italiano, derivata dal prefisso a 2 cifre (NON il comune). Approssimativo: può essere impreciso per le grandi città e per le province istituite dopo il 2004 (MB, FM, SU, VB).\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/fisco-it-validator` con `action: \"cap\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cap":{"type":"string","maxLength":8,"description":"Il CAP a 5 cifre (es. 20121)."}},"required":["cap"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/pec/validate":{"post":{"tags":["Tool"],"operationId":"validate_pec","summary":"Valida PEC","description":"Valida un indirizzo PEC italiano: formato + dominio confrontato con l'elenco dei provider certificati AGID (Aruba, InfoCert, Namirial, Poste, ecc.), con livello di confidenza.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/fisco-it-validator` con `action: \"pec\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":254,"description":"L'indirizzo PEC da validare (es. mario.rossi@pec.it)."}},"required":["email"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/ateco/lookup":{"post":{"tags":["Tool"],"operationId":"lookup_ateco","summary":"Cerca codice ATECO","description":"Cerca e valida un codice ATECO 2007 ISTAT e restituisce la descrizione dell'attività.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/ateco-lookup` con `action: \"lookup\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","pattern":"^[0-9.]{1,12}$","maxLength":12,"description":"Il codice ATECO (solo cifre e punti, es. 62.01)."}},"required":["code"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/ateco/search":{"post":{"tags":["Tool"],"operationId":"search_ateco","summary":"Cerca ATECO per attività","description":"Ricerca full-text sui codici ATECO 2007/2022 ISTAT partendo dalla DESCRIZIONE dell'attività (\"fotografo\", \"sviluppo software\", \"commercio abbigliamento\") invece che dal codice. Case/accent-insensitive, con stemming e alias colloquiali per-mestiere; accetta anche un prefisso di codice. Usa questo quando il codice NON è noto — `lookup_ateco` serve al caso opposto (codice noto → descrizione). Risultati ordinati per pertinenza.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/ateco-lookup` con `action: \"search\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"q":{"type":"string","minLength":2,"maxLength":80,"description":"Attività da cercare, in italiano (es. 'fotografo', 'idraulico', 'consulenza informatica')."},"section":{"type":"string","pattern":"^[A-Ua-u]$","description":"Filtra per sezione ATECO (lettera A–U, es. J = servizi di informazione e comunicazione, M = attività professionali). Opzionale."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Numero massimo di risultati (default 20)."}},"required":["q"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/forfettario/calculate":{"post":{"tags":["Tool"],"operationId":"calc_forfettario","summary":"Calcolatore Regime Forfettario","description":"Calcola imposta sostitutiva e contributi INPS del regime forfettario italiano dal fatturato e (opzionale) codice ATECO.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/calcolatore-forfettario` con `action: \"calculate\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ricavi":{"type":"number","minimum":0,"maximum":10000000,"description":"Ricavi/compensi annui in euro."},"ateco":{"type":"string","pattern":"^[0-9.]{1,12}$","maxLength":12,"description":"Codice ATECO da cui derivare il coefficiente di redditività. ALTERNATIVO a `coefficiente`: uno dei due è obbligatorio (senza, il calcolo non ha coefficiente e il tool risponde «Fornire 'ateco' oppure 'coefficiente'»)."},"coefficiente":{"type":"integer","minimum":1,"maximum":100,"description":"Coefficiente di redditività in % (override manuale). ALTERNATIVO ad `ateco`: uno dei due è obbligatorio."},"startup":{"type":"boolean","default":false,"description":"Aliquota startup 5% per i primi 5 anni (default false → 15%)."},"riduzione_35":{"type":"boolean","default":false,"description":"Riduzione contributiva INPS del 35% (artigiani/commercianti)."},"gestione_inps":{"type":"string","enum":["gestione_separata","artigiani","commercianti","cassa_privata"],"description":"Gestione previdenziale INPS/cassa (opzionale)."},"contributi_cassa_privata":{"type":"integer","minimum":0,"maximum":1000000,"description":"Contributi cassa privata già versati, in euro (opzionale)."}},"required":["ricavi"],"anyOf":[{"required":["ateco"]},{"required":["coefficiente"]}]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/fattura-pa/parse":{"post":{"tags":["Tool"],"operationId":"parse_fatturapa","summary":"Parser FatturaPA / SDI","description":"Estrae dati strutturati (cedente, cessionario, righe, imposte) da un XML FatturaPA/SDI. Solo parsing deterministico — nessuna verifica VIES.\n\nCosto: **5 crediti** per chiamata. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/fattura-pa-parser` con `action: \"parse\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xml_content":{"type":"string","maxLength":64000,"description":"Il contenuto XML della fattura elettronica (FatturaPA/SDI)."}},"required":["xml_content"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/fattura-pa/parse-verify":{"post":{"tags":["Tool"],"operationId":"parse_verify_fatturapa","summary":"FatturaPA: parse + verifica anti-frode del fornitore","description":"Estrae i dati strutturati da un XML FatturaPA/SDI E, nella stessa chiamata, verifica anti-frode la parte indicata (default: il CEDENTE, cioè il fornitore che incassa il bonifico). I dati verificati NON sono inferiti da un LLM: P.IVA, Codice Fiscale, ragione sociale e IBAN di pagamento sono estratti deterministicamente dall'XML, poi passati ai controlli: IBAN (checksum MOD-97 + banca dal codice ABI), P.IVA e CF (checksum) e — quando il servizio UE è raggiungibile — la ragione sociale reale via VIES live, confrontata con quella dichiarata in fattura. Restituisce il parse completo più `supplier_verification` con verdetto (ok / attenzione / alto_rischio) e red flag puntuali; se la fattura riporta più IBAN distinti lo segnala e abbassa il verdetto. È la difesa contro la truffa del cambio-IBAN sulle fatture passive. Come `verify_payee` fa I/O esterno (una sola interrogazione VIES per chiamata, non una per riga): se VIES è giù o il budget condiviso è esaurito il verdetto degrada ONESTAMENTE ad \"attenzione\", mai a un falso \"ok\". NON sostituisce la verifica out-of-band (telefonata al fornitore su un numero già noto).\n\nCosto: **5 crediti** per chiamata. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/fattura-pa-parser` con `action: \"parse-verify\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xml_content":{"type":"string","maxLength":64000,"description":"Il contenuto XML della fattura elettronica (FatturaPA/SDI). Il .p7m va scompattato prima: qui si accetta XML testuale."},"party":{"type":"string","enum":["cedente","cessionario"],"default":"cedente","description":"Parte da verificare: 'cedente' = fornitore/chi riceve il pagamento (default, il caso anti-frode); 'cessionario' = cliente. L'IBAN viene raccolto solo per il cedente, perché è lui che incassa."},"expected_country":{"type":"string","maxLength":2,"description":"Paese atteso del fornitore in ISO2. Se omesso vale il paese dichiarato dalla fattura stessa (sede del cedente), e solo in sua mancanza 'IT'. Un IBAN estero su un fornitore atteso italiano è il campanello #1 della frode."}},"required":["xml_content"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/iva/calcola":{"post":{"tags":["Tool"],"operationId":"calc_iva","summary":"Calcola IVA","description":"Calcola l'IVA italiana su un imponibile (aliquote 22/10/5/4/0/esente/fuori campo), con ritenuta d'acconto opzionale (autonomi 20%, agenti 11,5%) e regimi non imponibili (intra-UE, export extra-UE). Gestisce le DUE basi imponibili della fattura di un professionista: il contributo integrativo della cassa entra nella base IVA ma NON in quella della ritenuta, la rivalsa INPS in entrambe; `base_iva` e `base_ritenuta` sono sempre esposte separatamente.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/calcolatore-iva` con `action: \"calcola\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"imponibile":{"type":"number","description":"Compenso/corrispettivo in EUR (es. 1000), AL NETTO del contributo integrativo cassa e della rivalsa INPS: quelli si aggiungono con i due campi dedicati."},"aliquota_iva":{"type":"string","enum":["22","10","5","4","0","esente","fuori_campo"],"description":"Aliquota IVA (default 22)."},"tipo_operazione":{"type":"string","enum":["b2b","b2c","intraUE","extraUE","PA"],"description":"Tipo operazione (default b2b). intraUE/extraUE azzerano l'IVA (non imponibile)."},"con_ritenuta":{"type":"boolean","description":"Applica la ritenuta d'acconto (default false)."},"tipo_ritenuta":{"type":"string","enum":["autonomo","agente"],"description":"Tipo ritenuta se con_ritenuta=true (autonomo 20% | agente 11,5%)."},"contributo_integrativo_pct":{"type":"number","minimum":0,"maximum":5,"description":"Aliquota % del contributo integrativo della cassa professionale (default 0 = nessuna cassa). Tipicamente 4; 5 per i geometri; 2 per ENPAP/ENPAV — leggila dal regolamento della cassa: il tool non la deduce da ATECO. Entra nella base IVA ma NON in quella della ritenuta."},"rivalsa_inps_pct":{"type":"number","minimum":0,"maximum":5,"description":"Aliquota % della rivalsa INPS gestione separata addebitata in fattura (default 0). Per legge 4 (art. 1 c. 212 L. 662/1996). Entra in ENTRAMBE le basi."}},"required":["imponibile"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/iva/reverse-charge":{"post":{"tags":["Tool"],"operationId":"calc_reverse_charge","summary":"Reverse charge (inversione contabile)","description":"Calcola l'IVA che il CESSIONARIO deve autoliquidare in regime di inversione contabile e restituisce gli obblighi delle due parti con la norma applicabile. Distingue i tre casi che si confondono più spesso: reverse charge INTRACOMUNITARIO (cedente UE non-IT — art. 46 DL 331/93 per i beni, art. 17 c. 2 DPR 633/72 per i servizi), reverse charge INTERNO (cedente italiano — art. 17 c. 6, che NON è generalizzato: vale solo in settori tassativi come subappalti edili, rottami, pulizia edifici, elettronica) e paese non-UE (errore esplicito, non un ramo implicito).\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/calcolatore-iva` con `action: \"reverse-charge\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"imponibile":{"type":"number","description":"Imponibile della fattura in EUR."},"aliquota_iva":{"type":"string","enum":["22","10","5","4","0","esente","fuori_campo"],"description":"Aliquota IVA da autoliquidare (default 22)."},"paese_cedente":{"type":"string","pattern":"^[A-Za-z]{2}$","maxLength":2,"description":"Codice ISO2 del paese del CEDENTE: uno Stato membro UE (es. DE, FR, ES; 'EL' o 'GR' per la Grecia; 'XI' per l'Irlanda del Nord) per il reverse charge intracomunitario, oppure 'IT' per quello interno."}},"required":["imponibile","paese_cedente"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/iva/split-payment":{"post":{"tags":["Tool"],"operationId":"calc_split_payment","summary":"Split payment (scissione dei pagamenti)","description":"Calcola la scissione dei pagamenti per le forniture alla Pubblica Amministrazione (art. 17-ter DPR 633/72): il fornitore fattura imponibile + IVA ma incassa dalla PA il SOLO imponibile, mentre l'IVA la versa la PA direttamente all'Erario. Restituisce i due importi separati, l'impatto di liquidità per il fornitore e le istruzioni FatturaPA (EsigibilitaIVA=S; NON si usano i codici Natura N6, che sono solo del reverse charge).\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/calcolatore-iva` con `action: \"split-payment\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"imponibile":{"type":"number","description":"Imponibile della fornitura alla PA in EUR."},"aliquota_iva":{"type":"string","enum":["22","10","5","4","0","esente","fuori_campo"],"description":"Aliquota IVA esposta in fattura (default 22)."}},"required":["imponibile"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/imu/calculate":{"post":{"tags":["Tool"],"operationId":"calc_imu","summary":"Calcola IMU","description":"Calcola l'IMU italiana (L.160/2019) per fabbricati (da rendita catastale + categoria), terreni agricoli (da reddito dominicale) e aree edificabili (da valore venale), con acconto/saldo. L'aliquota (‰) è quella deliberata dal Comune.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/calcolatore-imu` con `action: \"calculate\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"aliquota_permille":{"type":"number","minimum":0,"maximum":15,"description":"Aliquota deliberata dal Comune, in per mille (es. 8.6 per 8,6‰)."},"tipo_immobile":{"type":"string","enum":["abitazione_principale_A1_A8_A9","abitazione_non_principale","immobile_produttivo","immobile_locato_canone_concordato","comodato_uso_parenti","terreno_agricolo","area_edificabile"],"description":"Tipo immobile → seleziona la formula (default abitazione_non_principale)."},"categoria_catastale":{"type":"string","enum":["A","A10","B","C1","C2_C6_C7","C3_C4_C5","D","D5","E","F"],"description":"Categoria catastale per i fabbricati (default A). Determina il moltiplicatore."},"rendita_catastale":{"type":"number","minimum":0.01,"description":"Fabbricati: rendita catastale annua in euro (da visura). OBBLIGATORIA per tutti i tipi diversi da `terreno_agricolo` e `area_edificabile` — cioè anche per il tipo di default `abitazione_non_principale`."},"reddito_dominicale":{"type":"number","minimum":0.01,"description":"Terreni agricoli: reddito dominicale da visura (base = ×1,25×135). OBBLIGATORIO con `tipo_immobile: terreno_agricolo`, tranne quando il terreno è esente (vedi i due flag)."},"valore_venale":{"type":"number","minimum":0.01,"description":"Aree edificabili: valore venale in comune commercio al 1° gennaio (€). OBBLIGATORIO con `tipo_immobile: area_edificabile`."},"mesi_possesso":{"type":"integer","minimum":1,"maximum":12,"description":"Mesi di possesso nell'anno (default 12)."},"quota_possesso_pct":{"type":"number","minimum":1,"maximum":100,"description":"Quota di possesso in % (default 100)."},"detrazione":{"type":"number","minimum":0,"description":"Detrazione in euro (solo fabbricati; es. 200 per abitazione principale di lusso)."},"coltivatore_diretto_iap":{"type":"boolean","description":"Terreni: coltivatore diretto/IAP iscritto alla previdenza agricola → esente."},"esente_montano_isola":{"type":"boolean","description":"Terreni: in comune montano/collinare o isola minore → esente."}},"required":["aliquota_permille"],"anyOf":[{"required":["rendita_catastale"]},{"properties":{"tipo_immobile":{"const":"terreno_agricolo"}},"required":["reddito_dominicale","tipo_immobile"]},{"properties":{"tipo_immobile":{"const":"area_edificabile"}},"required":["valore_venale","tipo_immobile"]},{"properties":{"tipo_immobile":{"const":"terreno_agricolo"},"coltivatore_diretto_iap":{"const":true}},"required":["coltivatore_diretto_iap","tipo_immobile"]},{"properties":{"tipo_immobile":{"const":"terreno_agricolo"},"esente_montano_isola":{"const":true}},"required":["esente_montano_isola","tipo_immobile"]}]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/f24/compose":{"post":{"tags":["Tool"],"operationId":"compose_f24","summary":"F24 Precompilato (righe Erario / INPS / IMU)","description":"Compone le RIGHE del modello F24 (sezione Erario, INPS, IMU) con i codici tributo e le causali ufficiali, a partire dagli importi già calcolati: imposta sostitutiva e contributi del regime forfettario (codici 1790/1791/1792, causali INPS PXX/AF/AP/CF/CP) oppure IMU (3912/3918/3914/3916, con lo split gruppo D 3925 Stato / 3930 Comune e il codice ente catastale del Comune) oppure l'IMPOSTA DI BOLLO sulle fatture elettroniche di un trimestre (codici 2521/2522/2523/2524, scadenze 31/05 · 30/09 · 30/11 · 28/02, con la regola di differimento sotto 5.000 €). Restituisce righe strutturate (sezione, codice, anno, importo, scadenza indicativa) + una resa testuale. COMPONIBILE: l'input tipico sono gli output di `calc_forfettario` (imposta_sostitutiva.importo, contributi_inps), `calc_imu` (imu_dovuta, acconto_giugno, saldo_dicembre) e `parse_fatturapa` (quante fatture hanno `bollo_analisi.dovuto = true`). NON genera il modello ministeriale F24 — né PDF né facsimile ufficiale: è una compilazione INDICATIVA che non sostituisce il commercialista né la verifica su Agenzia delle Entrate.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/f24-precompilato` con `action: \"compose\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["forfettario","imu","bollo"],"description":"Dominio da comporre: 'forfettario' (Erario + INPS), 'imu' (sezione IMU e altri tributi locali) oppure 'bollo' (imposta di bollo sulle fatture elettroniche di un trimestre)."},"bollo":{"type":"object","description":"Richiesto quando kind='bollo'. Chiude la catena parse → bollo → F24: conta quante fatture del trimestre risultano soggette a bollo secondo `parse_fatturapa` (campo `bollo_analisi.dovuto` di ciascuna fattura) e componi la riga di versamento.","properties":{"trimestre":{"type":"integer","minimum":1,"maximum":4,"description":"Trimestre solare di riferimento. Determina il codice tributo: 1→2521, 2→2522, 3→2523, 4→2524."},"anno":{"type":"integer","minimum":2019,"maximum":2100,"description":"Anno delle fatture (es. 2026). NB: il IV trimestre si versa entro il 28 febbraio dell'anno SUCCESSIVO."},"numero_fatture":{"type":"integer","minimum":0,"maximum":1000000,"description":"Quante fatture del trimestre sono soggette a bollo (2,00 € ciascuna). Alternativo a `importo`: fornire almeno uno dei due."},"importo":{"type":"number","minimum":0,"maximum":10000000,"description":"Importo del bollo già calcolato in euro. Alternativo a `numero_fatture`. Se passi entrambi e non tornano, vince questo e la discrepanza viene segnalata in nota."},"importo_trimestri_precedenti":{"type":"number","minimum":0,"maximum":10000000,"description":"Bollo già dovuto per i trimestri precedenti dello stesso anno (default 0). Serve alla regola di differimento, che guarda il CUMULATO: sotto 5.000 € il versamento del I trimestre può slittare al 30/09 e quello di I+II al 30/11 (art. 3 DL 73/2022). III e IV trimestre non sono mai differibili."}},"required":["trimestre","anno"],"anyOf":[{"required":["numero_fatture"]},{"required":["importo"]}],"additionalProperties":false},"forfettario":{"type":"object","description":"Richiesto quando kind='forfettario'. Campi dall'output di calc_forfettario.","properties":{"imposta":{"type":"number","minimum":0,"maximum":10000000,"description":"Imposta sostitutiva dovuta in euro — calc_forfettario → imposta_sostitutiva.importo."},"gestione_inps":{"type":"string","enum":["gestione_separata","artigiani","commercianti","cassa_privata"],"description":"Gestione previdenziale (default gestione_separata) — determina la causale INPS (PXX | AF/AP | CF/CP)."},"inps_fisso":{"type":"number","minimum":0,"maximum":1000000,"description":"Contributi INPS sul minimale/fisso in euro — calc_forfettario → contributi_inps.fisso."},"inps_variabile":{"type":"number","minimum":0,"maximum":1000000,"description":"Contributi INPS sull'eccedenza in euro — calc_forfettario → contributi_inps.variabile."},"inps_totale":{"type":"number","minimum":0,"maximum":1000000,"description":"Totale contributi INPS in euro — calc_forfettario → contributi_inps.importo. Usato solo se fisso/variabile non sono forniti."},"startup":{"type":"boolean","default":false,"description":"Aliquota startup 5% (nuova attività): nel 1° anno solo saldo, niente acconti."},"anno":{"type":"integer","minimum":2015,"maximum":2100,"description":"Anno d'imposta di riferimento (es. 2026)."}},"required":["imposta","anno"],"additionalProperties":false},"imu":{"type":"object","description":"Richiesto quando kind='imu'. Campi dall'output di calc_imu.","properties":{"imu_dovuta":{"type":"number","minimum":0,"maximum":10000000,"description":"IMU annua dovuta in euro — calc_imu → imu_dovuta."},"acconto":{"type":"number","minimum":0,"maximum":10000000,"description":"Acconto di giugno in euro — calc_imu → acconto_giugno."},"saldo":{"type":"number","minimum":0,"maximum":10000000,"description":"Saldo di dicembre in euro — calc_imu → saldo_dicembre."},"base_imponibile":{"type":"number","minimum":0,"description":"Base imponibile in euro — calc_imu → base_imponibile. Serve allo split del gruppo D."},"aliquota_permille":{"type":"number","minimum":0,"maximum":20,"description":"Aliquota deliberata dal Comune in per mille — calc_imu → parametri.aliquota_permille. Serve allo split gruppo D (7,6‰ Stato + eccedenza Comune)."},"tipo_immobile":{"type":"string","enum":["abitazione_principale_A1_A8_A9","abitazione_non_principale","immobile_produttivo","immobile_locato_canone_concordato","comodato_uso_parenti","terreno_agricolo","area_edificabile"],"description":"Tipo immobile — calc_imu → parametri.tipo_immobile. Determina il codice tributo IMU."},"categoria_catastale":{"type":"string","enum":["A","A10","B","C1","C2_C6_C7","C3_C4_C5","D","D5","E","F"],"description":"Categoria catastale (default A) — calc_imu → parametri.categoria_catastale."},"codice_comune":{"type":"string","pattern":"^[A-Za-z][0-9]{3}$","maxLength":4,"description":"Codice catastale/Belfiore del Comune = codice ente F24 (1 lettera + 3 cifre, es. H501 per Roma)."},"anno":{"type":"integer","minimum":2012,"maximum":2100,"description":"Anno d'imposta di riferimento (es. 2026)."}},"required":["imu_dovuta","acconto","saldo","tipo_immobile","codice_comune","anno"],"additionalProperties":false}},"required":["kind"],"allOf":[{"if":{"properties":{"kind":{"const":"forfettario"}},"required":["kind"]},"then":{"required":["forfettario"]}},{"if":{"properties":{"kind":{"const":"imu"}},"required":["kind"]},"then":{"required":["imu"]}},{"if":{"properties":{"kind":{"const":"bollo"}},"required":["kind"]},"then":{"required":["bollo"]}}]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/intrastat/periodicity":{"post":{"tags":["Tool"],"operationId":"intrastat_periodicity","summary":"INTRASTAT: periodicità e scadenza di presentazione","description":"Determina se un soggetto deve presentare l'elenco riepilogativo INTRASTAT e con quale periodicità (mensile / trimestrale / nessun obbligo), a partire dagli ammontari dei quattro trimestri precedenti, e calcola la SCADENZA del periodo (giorno 25 del mese successivo, con slittamento se cade di sabato, domenica o festività nazionale italiana). Ogni flusso ha soglia e criterio propri, e li restituisce insieme alla FONTE normativa: cessioni di beni e servizi resi € 50.000 con criterio di SUPERAMENTO (>) → mensile se superata, altrimenti trimestrale; acquisti di servizi € 100.000 e acquisti di beni € 2.000.000 (soglia innalzata da € 350.000 dal periodo di riferimento 01/2026, Det. ADM 84415 del 03/02/2026) con criterio UGUALE O SUPERIORE (>=) → mensile se raggiunta, altrimenti NESSUN obbligo (per gli acquisti la periodicità trimestrale è stata abrogata). L'asimmetria > / >= è voluta e rispecchia le fonti. Indicativo: non sostituisce il commercialista o il doganalista.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/intrastat` con `action: \"periodicity\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"flusso":{"type":"string","enum":["cessioni","acquisti"],"description":"'cessioni' = operazioni attive, modelli INTRA-1 (beni ceduti / servizi resi); 'acquisti' = operazioni passive, modelli INTRA-2 (beni acquistati / servizi ricevuti)."},"categoria":{"type":"string","enum":["beni","servizi"],"description":"Categoria delle operazioni. Soglia e sezione del modello dipendono da questa."},"anno":{"type":"integer","minimum":2022,"maximum":2100,"description":"Anno del periodo di RIFERIMENTO (non dell'invio). I modelli vigenti decorrono dal 2022. Determina quale soglia INTRA-2bis si applica (2.000.000 dal 2026)."},"mese":{"type":"integer","minimum":1,"maximum":12,"description":"Mese del periodo di riferimento (1–12). Se la periodicità risulta trimestrale, il trimestre viene dedotto da questo mese."},"ammontari_trimestri_precedenti":{"type":"array","items":{"type":"number","minimum":0},"minItems":1,"maxItems":4,"description":"Ammontari in EURO dei quattro trimestri PRECEDENTI per quel flusso+categoria, ordinati dal più recente al più remoto (es. [62000, 41000, 38000, 35000]). Ammessi da 1 a 4 valori: chi ha iniziato da poco ne ha meno, e la risposta lo segnala nelle note. La soglia si valuta sul MASSIMO, non sulla somma."}},"required":["flusso","categoria","anno","mese","ammontari_trimestri_precedenti"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/intrastat/compose":{"post":{"tags":["Tool"],"operationId":"intrastat_compose","summary":"INTRASTAT: composizione e validazione delle sezioni","description":"Compone le SEZIONI dell'elenco riepilogativo INTRASTAT a partire dalle righe di operazione, assegnando ciascuna riga alla sezione corretta (INTRA-1bis cessioni di beni, 1ter rettifiche, 1quater servizi resi, 1quinquies rettifiche, 1sexies call-off stock; INTRA-2bis acquisti di beni, 2ter, 2quater servizi ricevuti, 2quinquies) e VALIDANDOLE: Stato membro ammesso (l'Irlanda del Nord XI vale solo per i BENI; San Marino e Regno Unito sono fuori ambito), partita IVA della controparte (formato per Stato membro + checksum per quelle italiane), nomenclatura combinata a 8 cifre (o il codice semplificato 99500000), formato della natura della transazione e campi obbligatori per sezione. Restituisce le sezioni popolate, i totali, la scadenza e un prospetto testuale di controllo. ⚠️ NON genera il file TELEMATICO per il Servizio Telematico Doganale (Intr@Web / ADM): il tracciato record ufficiale non è riproducibile da fonte pubblica verificabile, quindi non è stato inventato. Quello che ottieni è struttura-dati + prospetto, da riportare sul canale ufficiale. Nessun default silenzioso: un dato obbligatorio mancante produce un errore esplicito, mai un riempimento arbitrario. Le partite IVA sono validate OFFLINE (formato e checksum): per la verifica VIES live della controparte usa `verify_payee`. Determina prima la periodicità con `intrastat_periodicity`. Indicativo, non sostituisce il commercialista o il doganalista.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/intrastat` con `action: \"compose\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"anno":{"type":"integer","minimum":2022,"maximum":2100,"description":"Anno del periodo di riferimento (i modelli vigenti decorrono dal 2022)."},"mese":{"type":"integer","minimum":1,"maximum":12,"description":"Mese del periodo di riferimento (1–12). Con periodicità trimestrale individua il trimestre."},"periodicita":{"type":"string","enum":["mensile","trimestrale","nessun_obbligo"],"default":"mensile","description":"Periodicità dell'elenco — determinala con `intrastat_periodicity`. Con 'nessun_obbligo' la chiamata viene RIFIUTATA con una spiegazione: sotto soglia l'elenco non va presentato."},"partita_iva_dichiarante":{"type":"string","maxLength":16,"description":"Partita IVA italiana del soggetto obbligato (11 cifre, opzionale). Se fornita viene validata col checksum."},"righe":{"type":"array","minItems":1,"maxItems":25,"description":"Righe di operazione da riepilogare. Massimo 25 sulla superficie anonima (l'API autenticata non ha questo limite). Righe di flussi/categorie diversi possono coesistere: ognuna finisce nella sua sezione.","items":{"type":"object","properties":{"flusso":{"type":"string","enum":["cessioni","acquisti"],"description":"cessioni = INTRA-1 (attive) · acquisti = INTRA-2 (passive)."},"categoria":{"type":"string","enum":["beni","servizi"],"description":"Determina quali campi sono obbligatori: i campi BENI e i campi SERVIZI si escludono."},"rettifica":{"type":"boolean","default":false,"description":"True se la riga rettifica un periodo PRECEDENTE → sezioni ter/quinquies. Richiede `anno_riferimento_rettifica`. Solo sulle rettifiche è ammesso un ammontare negativo."},"call_off_stock":{"type":"boolean","default":false,"description":"Solo cessioni di BENI: regime call-off stock (art. 17-bis Dir. 2006/112/CE) → sezione INTRA-1sexies."},"paese_controparte":{"type":"string","minLength":2,"maxLength":2,"description":"Codice ISO2 dello Stato membro della controparte (es. DE, FR, ES; EL per la Grecia, non GR). 'XI' (Irlanda del Nord) è ammesso SOLO per i beni. SM (San Marino) e GB sono fuori ambito e vengono rifiutati."},"partita_iva_controparte":{"type":"string","maxLength":24,"description":"Partita IVA della controparte, con o senza prefisso paese (es. DE123456789 o 123456789). Validata sul formato dello Stato membro; per le italiane anche col checksum. Nessuna interrogazione VIES."},"ammontare":{"type":"number","description":"Ammontare delle operazioni in EURO. Negativo ammesso solo se rettifica=true."},"nomenclatura_combinata":{"type":"string","pattern":"^\\d{8}$","maxLength":8,"description":"Solo BENI: codice NC a 8 cifre. Per spedizioni di valore inferiore a € 1.000 è ammesso il codice unico 99500000. Se ne valida il FORMATO, non l'esistenza nella NC dell'anno (la tabella NC è annuale e non è in repository)."},"massa_netta_kg":{"type":"number","minimum":0,"description":"Solo BENI: massa netta in kg."},"paese_origine":{"type":"string","minLength":2,"maxLength":2,"description":"Solo BENI: paese di origine della merce (ISO2)."},"paese_destinazione":{"type":"string","minLength":2,"maxLength":2,"description":"Solo BENI: paese di destinazione/provenienza della merce (ISO2)."},"natura_transazione":{"type":"string","maxLength":2,"description":"Solo BENI: codice natura della transazione — 1 cifra (colonna A) oppure 2 cifre (colonne A+B, obbligatorie oltre € 20.000.000 di scambi nell'anno precedente). Si valida SOLO il formato: le descrizioni dei codici sono l'Allegato XI alla Det. ADM 493869/RU/2021, non riproducibile da fonte testuale verificabile, e non vengono inventate."},"codice_servizio":{"type":"string","pattern":"^\\d{6}$","maxLength":6,"description":"Solo SERVIZI: codice CPA a 6 cifre. Validato nel formato, non l'esistenza in tabella CPA."},"modalita_erogazione":{"type":"string","enum":["I","R"],"description":"Solo SERVIZI: 'I' istantanea · 'R' a più riprese."},"modalita_incasso":{"type":"string","enum":["B","A","X"],"description":"Solo SERVIZI: 'B' bonifico · 'A' accredito · 'X' altro."},"anno_riferimento_rettifica":{"type":"integer","minimum":2022,"maximum":2100,"description":"Obbligatorio se rettifica=true: anno del periodo rettificato."},"riferimento":{"type":"string","maxLength":64,"description":"Riferimento libero (es. numero fattura). Serve solo alla tua tracciabilità: non fa parte dell'elenco."}},"required":["flusso","categoria","paese_controparte","partita_iva_controparte","ammontare"],"allOf":[{"if":{"properties":{"categoria":{"const":"beni"}},"required":["categoria"]},"then":{"required":["nomenclatura_combinata"]}},{"if":{"properties":{"categoria":{"const":"servizi"}},"required":["categoria"]},"then":{"required":["codice_servizio","modalita_erogazione","modalita_incasso"]}},{"if":{"properties":{"rettifica":{"const":true}},"required":["rettifica"]},"then":{"required":["anno_riferimento_rettifica"]}}],"additionalProperties":false}}},"required":["anno","mese","righe"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/intrastat/reference":{"post":{"tags":["Tool"],"operationId":"intrastat_reference","summary":"INTRASTAT: tabelle di riferimento e soglie vigenti","description":"Restituisce, senza alcun input, le tabelle di riferimento INTRASTAT: gli Stati membri ammessi con i loro codici, il caso dell'Irlanda del Nord (XI, solo beni) e i paesi fuori ambito (San Marino dal 01/10/2021, Regno Unito dal 01/01/2021), tutte le sezioni dei modelli con la loro descrizione, e OGNI soglia vigente con importo, criterio di confronto (> oppure >=), effetto e FONTE normativa puntuale — inclusa la soglia acquisti di beni innalzata a € 2.000.000 dal periodo 01/2026 (Det. ADM 84415 del 03/02/2026). Include anche il termine di presentazione e l'elenco ESPLICITO di ciò che questi strumenti NON producono (il file telematico ADM, le descrizioni dei codici natura della transazione, la verifica VIES live). Usalo per validare gli input prima di `intrastat_compose`, per popolare un form, o per citare la fonte di una soglia invece di ricordarla a memoria.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/intrastat` con `action: \"reference\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/nis2/tipologie":{"post":{"tags":["Tool"],"operationId":"nis2_tipologie","summary":"NIS2: elenco ufficiale delle tipologie di soggetto","description":"Elenco ufficiale delle tipologie di soggetto degli allegati I–IV del D.Lgs. 4 settembre 2024 n. 138 (recepimento NIS2), verbatim dal testo di Gazzetta Ufficiale, con ricerca testuale. Serve a trovare il `tipologia_id` da passare a `nis2_ambito`. ⚠️ NON esiste alcuna mappa codice ATECO → tipologia, e questo strumento non ne usa una: la determinazione ACN sulla piattaforma digitale (art. 10 c. 2) tiene i codici ATECO e le tipologie di soggetto SEPARATI nella stessa dichiarazione, e l'ambito si determina sulla TIPOLOGIA, definita per rinvio a una norma UE. Dedurre l'ambito NIS2 da un codice ATECO significa applicare una regola che la fonte non contiene.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/nis2` con `action: \"tipologie\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"q":{"type":"string","maxLength":120,"description":"Ricerca testuale su testo della tipologia, settore e sottosettore (accenti e maiuscole ignorati; tutti i termini devono comparire). Es. 'cloud', 'energia elettrica', 'rifiuti'. Vuoto = tutto il catalogo."},"allegato":{"type":"string","enum":["I","II","III","IV"],"description":"Filtra per allegato. I = settori ad alta criticità (51 tipologie); II = altri settori critici (15); III = pubbliche amministrazioni (15); IV = ulteriori tipologie, che rientrano solo se individuate dall'ACN (4)."},"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Numero massimo di risultati (default 200)."}},"required":[]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/nis2/valuta":{"post":{"tags":["Tool"],"operationId":"nis2_ambito","summary":"NIS2: ambito di applicazione e categoria del soggetto","description":"Dice se un soggetto rientra nel campo di applicazione del D.Lgs. 138/2024 (NIS2) e se è soggetto ESSENZIALE o IMPORTANTE, citando ARTICOLO E COMMA per ogni passo del ragionamento. Quando manca un dato che cambierebbe la risposta restituisce `esito: \"indeterminato\"` e la DOMANDA da porre, invece di una risposta inventata. Le regole su cui si sbaglia più spesso, tutte applicate qui: (1) la soglia di INGRESSO è quella della PICCOLA impresa, non della media — si è dentro con occupati >= 50 OPPURE (fatturato > 10 M€ E bilancio > 10 M€) — quindi l'ambito è molto più largo di come viene raccontato; (2) per superare un massimale servono gli occupati sopra soglia OPPURE ENTRAMBI i valori finanziari sopra soglia: 30 dipendenti con 12 M€ di fatturato e 8 M€ di bilancio è ancora PICCOLA, quindi FUORI; (3) l'art. 3 §4 della raccomandazione 2003/361/CE è DISAPPLICATO (art. 3 c. 3): una partecipazione pubblica pari o superiore al 25% non fa perdere lo stato di PMI; (4) un soggetto dell'allegato II non è MAI essenziale per dimensione — l'art. 6 c. 1 lett. a) cita solo l'allegato I — nemmeno con migliaia di dipendenti. Non registra nulla presso l'ACN: è il pre-volo della dichiarazione, la cui valutazione preliminare è svolta automaticamente dalla piattaforma ACN (art. 10 c. 5 della determinazione). Indicativo, non è un parere legale.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/nis2` con `action: \"valuta\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"tipologia_id":{"type":"string","maxLength":32,"description":"Id della tipologia dall'elenco ufficiale — ottienilo con `nis2_tipologie`. Es. 'I.1.a.1' (impresa elettrica), 'III.a.2' (Ministeri). NON è un codice ATECO."},"occupati":{"type":"integer","minimum":0,"description":"Numero di occupati (unità lavorative-anno)."},"fatturato_eur":{"type":"number","minimum":0,"description":"Fatturato annuo in euro."},"bilancio_eur":{"type":"number","minimum":0,"description":"Totale di bilancio annuo in euro."},"impresa_autonoma":{"type":"boolean","description":"false se il soggetto ha imprese collegate o associate: l'art. 3 c. 4 impone allora il consolidamento ex art. 6 §2 della raccomandazione. Omettilo se non lo sai — lo strumento chiede. Un superamento già visibile sui dati individuali resta valido (il consolidamento può solo aumentare i valori); un NON superamento no."},"dati_consolidati":{"type":"boolean","description":"true se i valori dimensionali forniti sono GIÀ consolidati di gruppo."},"soggetto_critico_cer":{"type":"boolean","description":"true se il soggetto è identificato come soggetto critico ai sensi del decreto che recepisce la direttiva (UE) 2022/2557 (CER): rientra ed è ESSENZIALE a prescindere dalla dimensione (art. 3 c. 5 lett. a; art. 6 c. 1 lett. b)."},"prestatore_fiduciario_qualificato":{"type":"boolean","description":"Solo per i prestatori di servizi fiduciari: i QUALIFICATI sono essenziali a prescindere dalla dimensione (art. 6 c. 1 lett. d), i non qualificati no."},"individuato_da_acn":{"type":"boolean","description":"true se l'Autorità nazionale competente NIS ha notificato l'individuazione (art. 3 c. 13). Per l'allegato IV è LA condizione dell'ambito: senza, non è auto-valutabile e lo strumento lo dichiara invece di indovinare."},"criteri_impresa_collegata":{"type":"array","items":{"type":"string","enum":["a","b","c","d"]},"maxItems":4,"description":"Lettere dell'art. 3 c. 10 soddisfatte quando il soggetto è impresa collegata a un soggetto essenziale o importante: a) influenza dominante sulle decisioni relative alle misure di gestione del rischio; b) detiene o gestisce i sistemi da cui dipende la fornitura del servizio; c) ne effettua le operazioni di sicurezza informatica; d) gli fornisce servizi TIC o di sicurezza. Anche una sola lettera lo fa rientrare a prescindere dalla dimensione."}},"required":["tipologia_id"]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/italian/nis2/reference":{"post":{"tags":["Tool"],"operationId":"nis2_reference","summary":"NIS2: soglie, regole e fonti","description":"Restituisce, senza alcun input, le soglie dimensionali NIS2 con la formula esatta di superamento e la fonte (raccomandazione 2003/361/CE, allegato, art. 2 §1 e §2, riprodotto testualmente nelle note all'art. 6 in Gazzetta Ufficiale), la regola di ogni comma rilevante dell'art. 3 e dell'art. 6, i quattro criteri dell'impresa collegata, la finestra di registrazione sulla piattaforma ACN (dal 1° gennaio al 28 febbraio di OGNI anno: è ricorrente, non una scadenza singola) e l'elenco ESPLICITO di ciò che questo dominio NON copre. Include il caso dei settori 3 e 4 dell'allegato I (bancario e infrastrutture dei mercati finanziari), per i quali l'art. 3 c. 14 sostituisce l'art. 17 e i Capi IV e V con il regolamento (UE) 2022/2554 (DORA). Usalo per citare la fonte di una soglia invece di ricordarla a memoria.\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/nis2` con `action: \"reference\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}},"/python/trust/verify-payee":{"post":{"tags":["Tool"],"operationId":"verify_payee","summary":"Verifica Fornitore (anti-frode pre-pagamento)","description":"Verifica anti-frode di un beneficiario PRIMA di pagare una fattura (contro la truffa del cambio-IBAN / Business Email Compromise). Controlli: IBAN (checksum MOD-97 + banca dal codice ABI), Partita IVA e Codice Fiscale (checksum), e — quando il servizio UE è raggiungibile — la ragione sociale reale via VIES live con match sul nome atteso. Restituisce un verdetto (ok / attenzione / alto_rischio) + i red flag puntuali. A differenza degli altri strumenti fa I/O esterno (VIES): se VIES è giù o il budget di verifica è temporaneamente esaurito, il verdetto degrada ONESTAMENTE ad \"attenzione\" (mai un falso \"ok\"). NON sostituisce la verifica out-of-band (telefonata al fornitore su un numero già noto).\n\nCosto: **0 crediti**. Autenticazione: header `X-API-Key` (una chiave gratuita si ottiene da https://imperioutils.com/signup e si rigenera da https://imperioutils.com/settings/profile).\n\nLa stessa operazione è provabile **senza account** su `POST /registry/demo/verifica-fornitore` con `action: \"verify\"`.","security":[{"ApiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"iban":{"type":"string","maxLength":64,"description":"IBAN del beneficiario (es. IT60X0542811101000000123456)."},"vat_number":{"type":"string","maxLength":32,"description":"Partita IVA con o senza prefisso paese (es. IT12345678901)."},"codice_fiscale":{"type":"string","maxLength":32,"description":"Codice Fiscale (persona fisica / ditta individuale)."},"expected_name":{"type":"string","maxLength":140,"description":"Ragione sociale attesa del fornitore, confrontata con quella ufficiale VIES."},"expected_country":{"type":"string","maxLength":2,"description":"Paese atteso del fornitore in ISO2 (default IT). Un IBAN estero è il campanello #1 della frode."},"ateco":{"type":"string","pattern":"^[0-9.]{1,12}$","maxLength":12,"description":"Codice ATECO dichiarato del fornitore (solo cifre e punti, opzionale)."}},"required":[],"anyOf":[{"required":["iban"]},{"required":["vat_number"]},{"required":["codice_fiscale"]}]}}}},"responses":{"200":{"description":"Il JSON dello strumento, restituito così com'è."},"401":{"description":"Nessuna credenziale o chiave rifiutata. Il corpo porta `details.header`, `details.docs` e `details.get_key`."},"402":{"description":"Crediti esauriti."},"429":{"description":"Tetto di richieste al minuto del piano superato."}}}}},"info":{"title":"Imperio Utilities — API fiscali italiane","description":"API HTTP pubbliche di Imperio Utilities: 23 tool fiscali e di compliance italiani,\ndeterministici e verificati (Codice Fiscale, Partita IVA, IBAN, FatturaPA/SDI, IMU, IVA,\nforfettario, F24, ATECO, INTRASTAT, NIS2, verifica anti-frode del fornitore).\n\n**Autenticazione**: header `X-API-Key`. Una chiave gratuita si ottiene registrandosi su https://imperioutils.com/signup\ne si rigenera da https://imperioutils.com/settings/profile. Il `Authorization: Bearer` è la sessione della web app, non l'integrazione.\n\n**Senza account**: ogni tool è provabile via `POST /registry/demo/{slug}` (10 richieste al minuto per IP)\noppure via il server MCP su `POST /mcp` (JSON-RPC 2.0, 60 richieste al minuto per IP).\n\n**Prezzi e limiti**: https://imperioutils.com/docs · **Canale agenti**: https://imperioutils.com/mcp","version":"2.0","contact":{"name":"Imperio Utilities","url":"https://imperioutils.com/docs"}},"tags":[],"servers":[{"url":"https://imperioutils.com/api","description":"Produzione"}],"components":{"securitySchemes":{"JWT":{"scheme":"bearer","bearerFormat":"JWT","type":"http"},"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"LoginDto":{"type":"object","properties":{}},"SignupDto":{"type":"object","properties":{}},"VerifyEmailDto":{"type":"object","properties":{}},"ResendVerificationDto":{"type":"object","properties":{}},"RequestPasswordResetDto":{"type":"object","properties":{}},"ConfirmPasswordResetDto":{"type":"object","properties":{}},"UpdateUserDto":{"type":"object","properties":{}},"SetAiKeyDto":{"type":"object","properties":{}},"UpdateAlertPreferencesDto":{"type":"object","properties":{}},"PlanCheckoutDto":{"type":"object","properties":{}},"BundleCheckoutDto":{"type":"object","properties":{}},"CreditPackCheckoutDto":{"type":"object","properties":{}},"UpgradePlanDto":{"type":"object","properties":{}},"DeductCreditsDto":{"type":"object","properties":{}},"GrantCreditsDto":{"type":"object","properties":{}},"UpdatePayPerUseSettingsDto":{"type":"object","properties":{}},"CreateScheduledJobDto":{"type":"object","properties":{}},"UpdateScheduledJobDto":{"type":"object","properties":{}},"CreateWorkflowDto":{"type":"object","properties":{}},"UpdateWorkflowDto":{"type":"object","properties":{}},"ScheduleWorkflowDto":{"type":"object","properties":{}},"DemoRequestDto":{"type":"object","properties":{}},"CreateMonitorDto":{"type":"object","properties":{}},"CreateSupplierMonitorDto":{"type":"object","properties":{}},"BulkCreateSupplierMonitorsDto":{"type":"object","properties":{}},"CheckIbanDto":{"type":"object","properties":{}},"UpdateIbanStatusDto":{"type":"object","properties":{}},"UpdateSupplierMonitorDto":{"type":"object","properties":{}},"CreateAddonDto":{"type":"object","properties":{}},"UpdateAddonDto":{"type":"object","properties":{}},"SubscribeAddonDto":{"type":"object","properties":{}},"UploadToolDto":{"type":"object","properties":{}},"SubmitChallengeDto":{"type":"object","properties":{}},"CreateChallengeDto":{"type":"object","properties":{}},"ScoreSubmissionDto":{"type":"object","properties":{}},"CreateLeadDto":{"type":"object","properties":{}},"CreateEnterpriseCustomerDto":{"type":"object","properties":{}},"UpdateEnterpriseCustomerDto":{"type":"object","properties":{}},"UpdateLeadDto":{"type":"object","properties":{}},"ScheduleDemoDto":{"type":"object","properties":{}},"CookieConsentDto":{"type":"object","properties":{}},"JoinWaitlistDto":{"type":"object","properties":{}}}},"externalDocs":{"description":"Documentazione, prezzi e limiti","url":"https://imperioutils.com/docs"}}