API Documentation
Le API di BandiUp ti permettono di accedere a tutti i bandi e le notizie in formato JSON. Sono gratuite, non richiedono autenticazione e sono compatibili con qualsiasi tool di automazione.
Quick Start
Come funziona
- Tutte le API sono REST e rispondono in JSON
- Nessuna autenticazione richiesta (API Key non necessaria)
- CORS abilitato — puoi chiamarle da qualsiasi dominio, browser o tool
- I dati vengono aggiornati in tempo reale automaticamente
- Compatibili con Make, Zapier, Power Automate, curl, Python, JavaScript e qualsiasi client HTTP
Prova subito. Apri il terminale e copia questo comando:
curl "https://bandiup.it/api/bandi?limit=5"Questo restituisce i primi 5 bandi disponibili in formato JSON.
Base URL
https://bandiup.it/apiTutti gli endpoint iniziano con questo URL base.
Endpoint disponibili
/api/bandi/api/bandi/:id/api/notizie/api/stats/api/contattiGET /api/bandi
Restituisce la lista dei bandi. Puoi filtrare per fonte, categoria, stato, regione, importo e testo libero.
Parametri query
| Parametro | Tipo | Descrizione |
|---|---|---|
q | string | Ricerca testuale nel titolo, descrizione, tags e destinatari |
fonte | string | Filtra per fonte. Valori: "eu", "nazionale", "regionale", "pnrr" |
categoria | string | Filtra per categoria. Valori: "innovazione", "digitalizzazione", "sostenibilita", "agricoltura", "cultura", "formazione", "infrastrutture", "sociale", "ricerca", "pmi", "startup", "altro" |
stato | string | Filtra per stato. Valori: "aperto", "in_scadenza", "prossimo" |
regione | string | Filtra per regione. Es: "Lombardia", "Lazio", "Campania" |
importoMin | number | Importo minimo in euro. Es: 10000 |
importoMax | number | Importo massimo in euro. Es: 500000 |
tipoAgevolazione | string | Tipo agevolazione. Valori: "fondo_perduto", "credito_imposta", "finanziamento_agevolato", "garanzia", "voucher", "appalto", "misto" |
certificazione | string | Certificazioni richieste (separare con virgola per multi-select). Valori: "iso_9001", "iso_14001", "iso_27001", "iso_45001", "soa", "soa_og1"..."soa_og13", "soa_os1"..."soa_os35", "durc", "antimafia", "rating_legalita", "dnsh", "parita_genere". La classificazione avviene tramite analisi semantica del testo dei bandi. |
sottocategoria | string | Filtra per settore specifico. Valori: "software", "hardware", "cloud", "cybersecurity", "intelligenza_artificiale", "iot", "blockchain", "robotica", "ecommerce", "energia_rinnovabile", "efficienza_energetica", "mobilita_sostenibile", "edilizia", "turismo", "export", "brevetti", "macchinari", "formazione_digitale", "sanita", "agroalimentare", "ambiente" |
page | number | Numero pagina (default: 1) |
limit | number | Risultati per pagina (default: 20, max: 200) |
Esempi
Tutti i bandi europei aperti:
curl "https://bandiup.it/api/bandi?fonte=eu&stato=aperto"Bandi per startup in Lombardia con importo fino a 100K:
curl "https://bandiup.it/api/bandi?categoria=startup®ione=Lombardia&importoMax=100000"Cerca bandi con parola chiave "digitale", pagina 2:
curl "https://bandiup.it/api/bandi?q=digitale&page=2&limit=50"Bandi PNRR in scadenza:
curl "https://bandiup.it/api/bandi?fonte=pnrr&stato=in_scadenza"Appalti edilizia con certificazione SOA OG1 (edifici):
curl "https://bandiup.it/api/bandi?certificazione=soa_og1&tipoAgevolazione=appalto"Bandi che richiedono più certificazioni (ISO 14001 + parità di genere):
curl "https://bandiup.it/api/bandi?certificazione=iso_14001,parita_genere"Risposta
{
"success": true,
"data": [
{
"id": "eu-HORIZON-2025-001",
"titolo": "Horizon Europe - Cluster 4 Digital",
"descrizione": "Bando per progetti di ricerca...",
"descrizioneBreve": "Bando Horizon Europe...",
"fonte": "eu",
"fonteNome": "Commissione Europea",
"fonteUrl": "https://ec.europa.eu",
"categoria": "ricerca",
"importoMin": 500000,
"importoMax": 3000000,
"dataApertura": "2025-01-15",
"dataScadenza": "2026-06-30",
"stato": "aperto",
"destinatari": ["Universita", "Enti di ricerca", "PMI"],
"regione": null,
"tipoAgevolazione": "fondo_perduto",
"certificazioni": ["durc", "dnsh"],
"sottocategorie": ["energia_rinnovabile"],
"tags": ["horizon", "ricerca", "digitale"],
"urlBando": "https://ec.europa.eu/...",
"ultimoAggiornamento": "2026-03-27T10:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"totale": 2400,
"pagine": 120
},
"fonti": [
"Commissione Europea",
"TED - Tenders Electronic Daily",
"Ministeri e Agenzie Nazionali",
"Incentivi.gov.it",
"ANAC - Bandi di Gara",
"Gazzetta Ufficiale - Contratti Pubblici",
"Regioni Italiane",
"MePA / Consip",
"Net4market"
],
"ultimoAggiornamento": "2026-04-14T10:00:00.000Z"
}GET /api/bandi/:id
Restituisce i dettagli completi di un singolo bando. L'ID lo trovi nel campo id della lista bandi.
curl "https://bandiup.it/api/bandi/eu-HORIZON-2025-001"Risposta
{
"success": true,
"data": {
"id": "eu-HORIZON-2025-001",
"titolo": "Horizon Europe - Cluster 4 Digital",
"descrizione": "...",
...tutti i campi del bando
}
}Errore 404:Se il bando non esiste, la risposta sarà{"success": false, "error": "Bando non trovato"}
GET /api/notizie
Restituisce le ultime notizie su bandi e incentivi da fonti istituzionali italiane.
Parametri query
| Parametro | Tipo | Descrizione |
|---|---|---|
q | string | Ricerca testuale |
fonte | string | Valori: "mimit", "mise", "pnrr", "regionale" |
categoria | string | Stesse categorie dei bandi |
regione | string | Es: "Lombardia", "Campania" |
page | number | Numero pagina (default: 1) |
limit | number | Risultati per pagina (default: 20, max: 200) |
# Ultime notizie PNRR
curl "https://bandiup.it/api/notizie?fonte=pnrr&limit=10"
# Notizie regionali della Lombardia
curl "https://bandiup.it/api/notizie?fonte=regionale®ione=Lombardia"
# Cerca "digitalizzazione"
curl "https://bandiup.it/api/notizie?q=digitalizzazione"Risposta
{
"success": true,
"data": [
{
"id": "news-pnrr-horizon-europe-001",
"titolo": "PNRR: nuovi fondi per la digitalizzazione delle PMI",
"descrizione": "Il MIMIT ha stanziato 500 milioni...",
"descrizioneBreve": "Il MIMIT ha stanziato 500 milioni...",
"fonte": "pnrr",
"fonteNome": "PNRR - Amministrazioni",
"fonteUrl": "https://www.italiadomani.gov.it",
"categoria": "digitalizzazione",
"dataPubblicazione": "2026-03-25",
"tags": ["PNRR", "digitale", "PMI", "finanziamento", "MIMIT"],
"url": "https://www.italiadomani.gov.it/...",
"regione": null
}
],
"pagination": {
"page": 1,
"limit": 20,
"totale": 256,
"pagine": 13
},
"fonti": ["MIMIT", "PNRR - Amministrazioni", ...]
}GET /api/stats
Restituisce le statistiche aggregate: totale bandi, suddivisione per fonte, stato e categoria.
curl "https://bandiup.it/api/stats"Risposta
{
"success": true,
"data": {
"bandi": {
"totale": 1309,
"perFonte": {
"eu": 434,
"nazionale": 804,
"regionale": 18,
"pnrr": 53
},
"perStato": {
"aperto": 1135,
"in_scadenza": 87,
"prossimo": 75
},
"perCategoria": {
"digitalizzazione": 120,
"pmi": 340,
"innovazione": 89,
...
}
},
"notizie": {
"totale": 256
},
"fonti": ["Commissione Europea", "TED - Tenders Electronic Daily", "ANAC - Bandi di Gara", "Net4market", ...],
"ultimoAggiornamento": "2026-04-14T10:00:00.000Z"
}
}POST /api/contatti
Invia un messaggio di contatto. Il body deve essere JSON con i campi obbligatori.
Body (JSON)
| Campo | Tipo | Descrizione |
|---|---|---|
nome* | string | Nome del mittente |
email* | string | Email valida del mittente |
oggetto | string | Oggetto del messaggio (opzionale) |
messaggio* | string | Testo del messaggio (max 5000 caratteri) |
curl -X POST "https://bandiup.it/api/contatti" \
-H "Content-Type: application/json" \
-d '{
"nome": "Mario Rossi",
"email": "mario@esempio.it",
"oggetto": "Richiesta informazioni API",
"messaggio": "Vorrei sapere di più sulle API..."
}'Risposta
{
"success": true,
"message": "Messaggio ricevuto. Ti risponderemo il prima possibile."
}Esempi di integrazione
Le API funzionano con qualsiasi linguaggio o piattaforma. Ecco come usarle nei tool più comuni.
JavaScript / TypeScript
// Tutti i bandi europei aperti
const response = await fetch(
"https://bandiup.it/api/bandi?fonte=eu&stato=aperto"
);
const { data, pagination } = await response.json();
console.log(`Trovati ${pagination.totale} bandi EU aperti`);
for (const bando of data) {
console.log(`- ${bando.titolo}`);
console.log(` Scadenza: ${bando.dataScadenza}`);
console.log(` Importo: ${bando.importoMax}€`);
console.log(` Link: ${bando.urlBando}`);
}Python
import requests
# Bandi per startup con importo max 50K
response = requests.get(
"https://bandiup.it/api/bandi",
params={
"categoria": "startup",
"importoMax": 50000,
"stato": "aperto",
"limit": 100
}
)
data = response.json()
print(f"Trovati {data['pagination']['totale']} bandi")
for bando in data["data"]:
print(f"- {bando['titolo']}")
print(f" Fonte: {bando['fonteNome']}")
print(f" Scadenza: {bando.get('dataScadenza', 'N/D')}")
print()
# Esporta in CSV
import csv
with open("bandi_startup.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["Titolo", "Fonte", "Scadenza", "Importo Max", "URL"])
for b in data["data"]:
writer.writerow([
b["titolo"],
b["fonteNome"],
b.get("dataScadenza", ""),
b.get("importoMax", ""),
b["urlBando"]
])Make (ex Integromat)
Modulo: HTTP - Make a request
URL: https://bandiup.it/api/bandi
Method: GET
Query string:
fonte = nazionale
stato = aperto
limit = 50
Modulo successivo: Iterator
Array: {{body.data}}
Modulo successivo: Google Sheets - Add a Row
Valori:
Titolo: {{item.titolo}}
Fonte: {{item.fonteNome}}
Scadenza: {{item.dataScadenza}}
URL: {{item.urlBando}}Zapier
Trigger: Schedule by Zapier
Frequenza: Ogni giorno
Action 1: Webhooks by Zapier (GET)
URL: https://bandiup.it/api/bandi?stato=in_scadenza&limit=5
Action 2: Filter by Zapier
Condizione: pagination__totale > 0
Action 3: Gmail - Send Email
To: tuaemail@esempio.com
Subject: Bandi in scadenza ({{pagination__totale}})
Body: {{data}}Power Automate (Microsoft)
Trigger: Ricorrenza
Frequenza: Giorno
Intervallo: 1
Azione: HTTP
Metodo: GET
URI: https://bandiup.it/api/bandi?stato=aperto&categoria=pmi&limit=20
Azione: Parse JSON
Contenuto: @body('HTTP')
Schema: (incolla la risposta di esempio)
Azione: Applica a ogni elemento -> @body('Parse_JSON')?['data']
Azione interna: Invia un messaggio di posta elettronica (V2)
A: tuaemail@outlook.com
Oggetto: Nuovo bando - @items('Applica_a_ogni_elemento')?['titolo']
Corpo: @items('Applica_a_ogni_elemento')?['descrizioneBreve']Google Apps Script
function importaBandi() {
const url = "https://bandiup.it/api/bandi?stato=aperto&limit=200";
const response = UrlFetchApp.fetch(url);
const json = JSON.parse(response.getContentText());
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName("Bandi") || SpreadsheetApp.getActiveSpreadsheet()
.insertSheet("Bandi");
// Header
sheet.clear();
sheet.appendRow([
"Titolo", "Fonte", "Categoria", "Stato",
"Scadenza", "Importo Max", "Regione", "URL"
]);
// Dati
for (const b of json.data) {
sheet.appendRow([
b.titolo,
b.fonteNome,
b.categoria,
b.stato,
b.dataScadenza || "",
b.importoMax || "",
b.regione || "",
b.urlBando
]);
}
Logger.log("Importati " + json.data.length + " bandi");
}
// Imposta un trigger per eseguirlo ogni giorno:
// Edit > Current project's triggers > Add Trigger
// Function: importaBandi, Time-driven: Day timercURL avanzato
# Tutti i bandi aperti, salva in file JSON
curl -s "https://bandiup.it/api/bandi?stato=aperto&limit=200" \
| python3 -m json.tool > bandi_aperti.json
# Solo i titoli dei bandi EU
curl -s "https://bandiup.it/api/bandi?fonte=eu" \
| python3 -c "
import json, sys
data = json.load(sys.stdin)
for b in data['data']:
print(f"- {b['titolo']} (scade: {b.get('dataScadenza', 'N/D')})")"
# Statistiche rapide
curl -s "https://bandiup.it/api/stats" | python3 -m json.tool
# Controlla se ci sono bandi in scadenza (utile per cron jobs)
BANDI=$(curl -s "https://bandiup.it/api/bandi?stato=in_scadenza" \
| python3 -c "import json,sys; print(json.load(sys.stdin)['pagination']['totale'])")
if [ "$BANDI" -gt 0 ]; then
echo "⚠️ $BANDI bandi in scadenza!"
fiBest practices
Cache i risultati
I dati vengono aggiornati in tempo reale. Imposta i tuoi workflow per eseguire ogni 1-6 ore per un buon compromesso tra aggiornamento e performance.
Usa la paginazione
Se hai bisogno di tutti i bandi, usa limit=200 e incrementa il parametro page fino a coprire tutte le pagine indicate inpagination.pagine.
Filtra lato server
Usa i parametri query per filtrare i risultati. È più veloce e usa meno banda rispetto a scaricare tutto e filtrare lato client.
Gestisci gli errori
Controlla sempre il campo successnella risposta. In caso di errore sarà false con un campoerror che descrive il problema.
Riferimento campi
Oggetto Bando
| Campo | Tipo | Descrizione |
|---|---|---|
id | string | Identificativo univoco del bando |
titolo | string | Titolo del bando (max 250 caratteri) |
descrizione | string | Descrizione completa |
descrizioneBreve | string | Descrizione breve (max 200 caratteri) |
fonte | string | "eu" | "nazionale" | "regionale" | "pnrr" |
fonteNome | string | Nome leggibile della fonte (es. "Commissione Europea") |
fonteUrl | string | URL del sito della fonte |
categoria | string | Categoria tematica del bando |
importoMin | number | null | Importo minimo in euro |
importoMax | number | null | Importo massimo in euro |
dataApertura | string | null | Data apertura (formato YYYY-MM-DD) |
dataScadenza | string | null | Data scadenza (formato YYYY-MM-DD) |
stato | string | "aperto" | "in_scadenza" | "prossimo" |
destinatari | string[] | Lista destinatari (es. ["PMI", "Startup"]) |
regione | string | null | Regione (solo per bandi regionali) |
tipoAgevolazione | string | null | "fondo_perduto" | "credito_imposta" | "finanziamento_agevolato" | "garanzia" | "voucher" | "appalto" | "misto" |
certificazioni | string[] | Certificazioni richieste (es. ["durc", "iso_14001"]) |
tags | string[] | Tag tematici |
urlBando | string | Link diretto al bando ufficiale |
ultimoAggiornamento | string | Data ultimo aggiornamento (ISO 8601) |
Oggetto Notizia
| Campo | Tipo | Descrizione |
|---|---|---|
id | string | Identificativo univoco |
titolo | string | Titolo della notizia |
descrizione | string | Testo completo |
descrizioneBreve | string | Anteprima (max 200 caratteri) |
fonte | string | "mimit" | "mise" | "pnrr" | "regionale" |
fonteNome | string | Nome della fonte |
categoria | string | Categoria tematica |
dataPubblicazione | string | null | Data pubblicazione (YYYY-MM-DD) |
tags | string[] | Tag tematici auto-generati (es. "PNRR", "green", "fondo perduto", "PMI", "Lombardia") |
url | string | Link alla notizia originale |
regione | string | null | Regione (se regionale) |
Accesso per AI e Crawler
Le API di BandiUp sono progettate per essere facilmente accessibili da crawler AI e agenti automatici. Le risposte JSON sono strutturate e autodescrittive. Il CORS è aperto e non serve autenticazione.
Per ottenere una panoramica completa in una singola chiamata, usa l'endpoint/api/stats. Per scaricare tutti i dati, usa/api/bandi?limit=200 e pagina con&page=2, &page=3, ecc.
Hai bisogno di aiuto?
Prova subito le API nel browser. Basta cliccare uno dei link qui sotto per vedere la risposta JSON.
