Vai al contenuto principale
Riferimento API v1

I bandi italiani in JSON, con una chiave API.

Un endpoint in sola lettura restituisce il catalogo dei bandi approvati, 50 per pagina, con territori, codici ATECO 2025, categorie, spese ammissibili e allegati.

Prima chiamataGET /grants
terminale
curl -s "https://api.bandoeasy.it/v1/grants?limit=1" \
  -H "X-API-Key: be_live_…"
Autenticazione

Base URL e chiave API.

Base URL

https://api.bandoeasy.it/v1. L'indirizzo https://api.bandoeasy.it/api/v1 è un alias equivalente.

Chiave API

Invia la chiave nell'header X-API-Key oppure come Authorization: Bearer. Le chiavi iniziano con be_live_ e si creano dalla pagina Chiavi API della dashboard.

Solo lato server

Usa la chiave dal tuo backend: le chiamate dal browser di altri domini non sono abilitate e la chiave resterebbe visibile a chiunque.

Chiavi con scadenza

Ogni risposta riporta la scadenza della chiave nell'header X-API-Key-Expires-At e nel campo api_key.expires_at.

Endpoint

GET /grants

Restituisce i bandi dal più recente al meno recente. Per scaricare tutto il catalogo segui pagination.has_next finché è false.

ParametroTipoPredefinitoDescrizione
pageintero ≥ 11Pagina da restituire.
limitintero 1–5050Bandi per pagina.
regionestringa—Filtra per territorio: una regione oppure Italia, Europa, Mondo. Include anche i bandi nazionali ed europei collegati a quel territorio. Maiuscole e minuscole sono indifferenti.
paginazione.mjs
const grants = []
let page = 1
let hasNext = true

while (hasNext) {
  const response = await fetch(`https://api.bandoeasy.it/v1/grants?page=${page}`, {
    headers: { 'X-API-Key': process.env.BANDOEASY_API_KEY }
  })
  const { data, pagination } = await response.json()
  grants.push(...data)
  hasNext = pagination.has_next
  page += 1
}
Esempi

La stessa chiamata in tre linguaggi.

cURL · richiesta.sh
curl -s "https://api.bandoeasy.it/v1/grants?regione=Veneto&limit=10" \
  -H "X-API-Key: be_live_…"
Node.js · richiesta.mjs
const response = await fetch('https://api.bandoeasy.it/v1/grants?regione=Veneto&limit=10', {
  headers: { 'X-API-Key': process.env.BANDOEASY_API_KEY }
})
const { data, pagination } = await response.json()
Python · richiesta.py
import os
import requests

response = requests.get("https://api.bandoeasy.it/v1/grants?regione=Veneto&limit=10",
                        headers={"X-API-Key": os.environ["BANDOEASY_API_KEY"]},
                        timeout=30)
payload = response.json()
Risposta

Busta della risposta e campi.

Ogni risposta contiene data (i bandi), pagination e api_key. Qui sotto un estratto di un bando reale.

200 OK · estratto
{
  "data": [
    {
      "id": "012eb540-54b1-4fdd-9a6a-5ecb8bce29b7",
      "nome_del_bando": "Piemonte - Interessi su prestiti agricoli 2026",
      "promotore": "Regione Piemonte",
      "emanazione": "Regionale",
      "tipo": "Procedura a sportello",
      "stato_del_bando": "Attivo",
      "fondi_esauriti": false,
      "data_di_apertura": "2026-06-23",
      "scadenza": null,
      "scadenza_interna": "2026-12-31",
      "dotazione": 1450000,
      "regime_di_aiuto": "De Minimis",
      "link_al_sito_del_bando": "https://bandi.regione.piemonte.it/contributi-finanziamenti/contributi-negli-interessi-sui-prestiti-contratti-cooperative-agricole-altre-forme-associative",
      "codici_ateco_2025": [
        "01",
        "01.1",
        "01.11.0"
      ],
      "localita": [
        "Piemonte"
      ],
      "categorie": [
        "Tasso Agevolato"
      ],
      "created_at": "2026-09-24T13:58:53.52923"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 1,
    "total": 2635,
    "total_pages": 2635,
    "has_next": true
  },
  "api_key": {
    "expires_at": "2026-12-31T23:59:59+00:00",
    "max_grants": null,
    "regione": null
  }
}
CampoTipoDescrizione
iduuidIdentificativo univoco e stabile del bando.
nome_del_bandostringaTitolo del bando.
promotorestringa o nullEnte che promuove il bando.
emanazionestringa o nullLivello dell'ente emanante, testo libero (es. «Regionale», «Nazionale», «CCIAA (camera di commercio)»). Può contenere più valori separati da virgola o essere vuoto.
tipostringa o nullModalità di assegnazione, testo libero (es. «Procedura a sportello», «Esaurimento fondi», «Clickday»). Può essere vuoto.
descrizione_brevestringa o nullSintesi del bando.
descrizione_del_bandostringa o nullDescrizione estesa del bando.
stato_del_bandostringa o nullStato: Attivo, In scadenza, In uscita, Chiuso oppure Fondi esauriti.
fondi_esauritibooleano o nulltrue se le risorse del bando risultano esaurite.
data_di_aperturadata AAAA-MM-GG o nullData di apertura delle domande.
scadenzastringa o nullScadenza come testo, così come pubblicata dalla fonte.
scadenza_internadata AAAA-MM-GG o nullScadenza normalizzata come data, da usare per ordinare e confrontare.
richiesta_minimanumero o nullImporto minimo richiedibile, in euro.
richiesta_massimanumero o nullImporto massimo richiedibile, in euro.
dotazionenumero o nullDotazione complessiva del bando, in euro.
percentuale_fondo_perdutonumero o nullQuota a fondo perduto, in percentuale.
descrizione_tipo_agevolazionestringa o nullDescrizione del tipo di agevolazione.
modalita_di_erogazionestringa o nullCome viene erogata l'agevolazione.
regime_di_aiutostringa o nullRegime di aiuto, testo libero (es. «De Minimis», «GBER»). Può essere vuoto.
cumulabilitabooleano o nulltrue se l'agevolazione è cumulabile con altre.
a_chi_si_rivolge_descrizionestringa o nullDescrizione dei beneficiari.
spese_ammissibili_descrizionestringa o nullDescrizione delle spese ammissibili.
esempi_progetti_ammissibilistringa o nullEsempi di progetti ammissibili.
iter_presentazione_domandastringa o nullCome si presenta la domanda.
documentazione_necessariastringa o nullDocumenti richiesti per la domanda.
link_al_sito_del_bandostringa o nullLink alla pagina ufficiale del bando.
sede_non_richiestabooleano o nulltrue se il bando non richiede una sede nel territorio.
ateco_non_applicabilebooleanotrue se per il bando i codici ATECO non si applicano.
max_company_age_monthsintero o nullEtà massima dell'impresa in mesi. Oggi sempre null.
min_balance_sheets_requiredintero o nullNumero minimo di bilanci depositati richiesto.
created_atdata e ora UTC senza fuso o nullInserimento nel catalogo, in UTC senza indicazione del fuso.
updated_atdata e ora UTC senza fuso o nullUltimo aggiornamento, in UTC senza indicazione del fuso.
codici_ateco_2025elenco di stringheCodici ATECO 2025 ammessi. Elenco vuoto se il bando non ne indica.
allegatielenco di allegatiAllegati: tipo_allegato (compilativo, documento, informativo), numero, nome_file, url.
localitaelenco di stringheTerritori del bando: regioni oppure «Italia», «Europa», «Mondo».
provinceelenco di { codice, nome }Province interessate, con codice e nome.
categorieelenco di stringheTipologie di agevolazione (es. Fondo Perduto, Voucher, Tasso Agevolato).
a_chi_si_rivolgeelenco di stringheCategorie di beneficiari.
settorielenco di stringheSettori economici interessati.
spese_ammissibilielenco di stringheCategorie di spese ammissibili.
dimensioni_beneficiarielenco di stringheDimensioni d'impresa ammesse.
Errori

Codici di errore.

Gli errori hanno sempre lo stesso formato: il codice è in data.code.

HTTPCodiceSignificato
400unknown_parameterParametro non previsto. La risposta elenca quelli ammessi.
400invalid_parameterValore non valido, per esempio limit oltre 50.
400unknown_regioneTerritorio non riconosciuto. La risposta elenca quelli ammessi.
401api_key_missingChiave assente.
401api_key_invalidChiave inesistente o disattivata.
401api_key_expiredChiave scaduta. La risposta indica la data di scadenza.
429rate_limitPiù di 60 richieste al minuto. Attendi i secondi indicati in Retry-After.
502grants_query_failedErrore temporaneo: riprova tra qualche secondo.
400 Bad Request
{
  "error": true,
  "statusCode": 400,
  "statusMessage": "unknown_parameter",
  "message": "unknown_parameter",
  "data": {
    "code": "unknown_parameter",
    "unknown": [
      "ateco"
    ],
    "allowed": [
      "page",
      "limit",
      "regione"
    ]
  }
}
Limiti e dati

Cosa aspettarsi.

Limiti

  • 60 richieste al minuto per chiave; oltre, risposta 429 con Retry-After.
  • Al massimo 50 bandi per pagina.
  • Account di prova: 14 giorni e 10 bandi di esempio, sempre gli stessi a ogni chiamata, indicati in api_key.max_grants. Account completo: tutti i bandi fino alla data concordata.
  • Le chiavi si creano dalla pagina Chiavi API della dashboard, al massimo 2 attive per account.

Dati e aggiornamento

  • Il catalogo si aggiorna ogni 5 minuti dal lavoro editoriale di Bando Easy.
  • Molti campi possono essere null: gestiscili sempre.
  • Verifica requisiti e scadenze sul sito ufficiale del bando (link_al_sito_del_bando) prima di presentare una domanda.

Versioni

Questa è la versione v1. Le modifiche incompatibili arriveranno con un nuovo percorso di versione, annunciato in anticipo.

Supporto

Scrivi a sales@bandoeasy.it indicando l'header X-API-Key-Expires-At e l'orario della richiesta, mai la chiave.