Vai al contenuto
Torna al blog
Tecnologia10 min

Cosa cercare in una API di ticketing al momento dell'integrazione?

Integra un sistema di vendita biglietti nel tuo sito con API REST. Documentazione, webhook e best practice di integrazione.

di Ulises Rodríguez

Tech Lead

Cosa cercare in una API di ticketing al momento dell'integrazione?
Foto: Rene Terp vía Pexels

Risposta rapida

Una API di ticketing solida pubblica una specifica OpenAPI, autentica con OAuth 2.0 e PKCE, firma ogni webhook e ne documenta i tentativi di nuovo invio. Richiede un sandbox con parità rispetto alla produzione, errori in formato RFC 9457, versionamento semantico e limiti di utilizzo pubblicati. Senza una firma verificabile sui webhook, chiunque può inventarsi una vendita.

Quando la tua azienda ha bisogno di integrare il ticketing nella propria infrastruttura esistente, la qualità della API è determinante. Se stai ancora valutando le opzioni, la nostra guida su come scegliere una piattaforma di ticketing copre i criteri principali. Una API progettata male significa mesi di sviluppo, bug costanti e limitazioni che scopri troppo tardi. Questa guida ti aiuta a capire cosa valutare prima di impegnarti con una piattaforma.

La buona notizia è che quasi nulla di ciò che serve richiedere è opinabile. La maggior parte è scritta in specifiche pubbliche: OpenAPI per il contratto, le RFC dell'IETF per l'autenticazione, gli errori e il fine vita di un endpoint, e la documentazione del fornitore di pagamenti per la consegna degli eventi. Quello che segue è questo elenco, con il riferimento concreto a fianco.

Cosa indica la qualità della documentazione di una API?

La qualità della documentazione riflette la maturità della API. Cerca questi elementi:

  • Specifica OpenAPI/Swagger: permette di generare client automaticamente
  • Esempi di codice: nei linguaggi che usi (JS, Python, PHP...)
  • Guide sui casi d'uso: non solo riferimento, ma anche tutorial
  • Changelog: cronologia delle modifiche e politica di versionamento
  • Status page: visibilità sulla disponibilità del servizio

Lo standard ha un nome e una data. La OpenAPI Specification 3.1.0 è stata pubblicata il 15 febbraio 2021 e richiede un campo openapi con la versione della specifica usata nel documento, distinta dalla versione della API stessa. Supporta JSON e YAML, e raccomanda YAML 1.2 affinché la conversione tra i due formati non perda informazioni.

Il confronto pratico è semplice. Un documento OpenAPI valido si carica in un generatore e produce un client tipizzato nel tuo linguaggio in pochi minuti. Un PDF o una pagina con esempi sparsi no. Chiedi il file, non lo screenshot: se il fornitore non riesce a consegnarti l'openapi.yaml lo stesso giorno in cui lo richiedi, l'integrazione parte già con un debito.

Come deve autenticarsi una API di ticketing sicura?

La API gestisce dati sensibili e transazioni economiche. La sicurezza non è negoziabile.

  • OAuth 2.0: standard moderno per l'autenticazione
  • API key con scope: permessi granulari per ogni key
  • Rotazione delle credenziali: possibilità di ruotarle senza downtime
  • Rate limiting: protezione contro gli abusi, con limiti documentati
  • Log di accesso: audit di chi accede a cosa

Il framework di base è la RFC 6749, che definisce l'OAuth 2.0 Authorization Framework. Ma quello che conviene portare alla riunione tecnica è la RFC 9700, *Best Current Practice for OAuth 2.0 Security*, pubblicata nel 2025. Tre dei suoi requisiti si verificano in un pomeriggio:

  • I server di autorizzazione devono supportare PKCE, e i client pubblici devono usarlo. È la protezione contro il furto del codice di autorizzazione.
  • La validazione della *redirect URI* deve avvenire tramite confronto esatto delle stringhe, con l'unica eccezione delle porte variabili su localhost per le applicazioni native. Qualsiasi corrispondenza basata su pattern è una porta aperta.
  • I token di accesso dovrebbero essere legati all'emittente tramite mTLS o DPoP, affinché un token trafugato non sia utilizzabile da altre mani.

Se il fornitore offre solo una API key statica ed eterna, non è automaticamente da scartare, ma il contratto deve coprire ciò che questa scelta implica: scope reali, rotazione senza interrompere il servizio e un registro degli accessi che tu possa esportare.

Quali endpoint essenziali deve coprire la API?

Verifica che la API copra tutte le operazioni di cui hai bisogno.

  • Eventi: creazione, modifica, elenco, gestione degli stati
  • Biglietti: tipologie, prezzi, disponibilità, prenotazioni
  • Ordini: creazione, consultazione, annullamento, rimborso
  • Validazione: verifica dei biglietti, registrazione degli accessi
  • Webhook: notifiche di eventi (vendita, accesso, ecc.)

C'è una domanda che conta più dell'elenco precedente: cosa succede se la stessa richiesta arriva due volte. Nel ticketing, un retry di rete su una creazione d'ordine può duplicare una vendita e bloccare una capienza che non esiste. La risposta corretta è una chiave di idempotenza per ogni operazione di scrittura, in modo che il secondo tentativo restituisca il risultato del primo invece di creare un nuovo ordine. Chiedilo per scritto e pretendi di vedere il comportamento in sandbox.

La seconda domanda riguarda la paginazione e i limiti di lettura. Una API che non documenta quanti ordini restituisce per pagina né come si scorre lo storico trasforma qualsiasi esportazione notturna verso la tua dashboard delle metriche in un problema di ingegneria a tuo carico.

A cosa servono i webhook in un'integrazione?

I webhook sono fondamentali per mantenere il tuo sistema sincronizzato senza bisogno di polling costante.

  • Eventi disponibili: quali azioni attivano i webhook
  • Payload documentato: struttura chiara per ogni tipo di evento
  • Retry: cosa succede se il tuo endpoint fallisce
  • Verifica della firma: per validare l'autenticità del webhook
  • Log: cronologia dei webhook inviati e relativo stato

Come si verifica una firma

La procedura meglio documentata del settore è quella di Stripe, e funge da modello anche se il tuo fornitore è diverso. La sua documentazione sui webhook descrive un header Stripe-Signature con un timestamp con prefisso t= e una o più firme con prefisso di schema; l'unico schema valido in produzione è v1. La firma viene calcolata come un HMAC con SHA-256 sulla stringa formata dal timestamp, un punto e il corpo JSON esatto della richiesta, usando il segreto dell'endpoint come chiave.

Tre dettagli che fanno fallire le integrazioni reali. Primo: bisogna usare il corpo grezzo; se il tuo framework reserializza il JSON, la verifica fallisce sempre. Secondo: il confronto deve avvenire in tempo costante, per non far trasparire informazioni tramite il tempo di risposta. Terzo: le librerie ufficiali applicano una tolleranza predefinita di 5 minuti tra il timestamp e l'ora attuale, e la documentazione stessa avverte di non impostarla a zero, perché questo disattiva il controllo di freschezza e riapre la porta agli attacchi di replay.

Retry, duplicati e ordine

I numeri concreti contano quando dimensioni la tua coda. Stripe documenta retry automatici per un massimo di tre giorni con backoff esponenziale in modalità produzione, e tre retry nel giro di poche ore in sandbox. Il reinvio manuale funziona fino a 15 giorni dal pannello e fino a 30 giorni dalla CLI. Si possono registrare fino a 16 endpoint di webhook.

E due avvertenze che conviene riportare tali e quali nel tuo design: l'ordine di consegna degli eventi non è garantito, e un endpoint può ricevere lo stesso evento più di una volta. La raccomandazione ufficiale è registrare gli identificativi degli eventi già elaborati e non usare il timestamp di creazione per dedurre l'ordine. Inoltre, l'endpoint deve restituire un 2xx prima della logica pesante: qualsiasi risposta 3xx viene considerata un fallimento di consegna, e un *timeout* attiva il ciclo di retry.

Come deve gestire la API gli errori e i limiti di utilizzo?

Con formati standard, non con stringhe inventate. La RFC 9457, *Problem Details for HTTP APIs*, pubblicata nel 2023, definisce un corpo di errore leggibile da macchina con cinque campi: type (URI che identifica il tipo di problema), title, status, detail e instance, servito come application/problem+json. Una API che lo adotta ti evita di dover scrivere un traduttore di errori per ogni fornitore.

Per i limiti di utilizzo, il riferimento è la RFC 6585, *Additional HTTP Status Codes*, di aprile 2012, che ha introdotto il codice 429 Too Many Requests. La specifica stessa afferma che la risposta dovrebbe includere dettagli che spieghino la condizione e può includere un header Retry-After che indica quanto attendere. Questo header è la differenza tra un retry con criterio e un ciclo che peggiora la saturazione.

Durante la valutazione, chiedi quali limiti applica la API per minuto e per chiave, se sono diversi in lettura e scrittura, e cosa succede nei picchi di una prevendita, che è esattamente il momento in cui la tua integrazione viene chiamata di più. Una piattaforma che non pubblica i propri limiti ti sta chiedendo di scoprirli nel peggiore dei giorni possibili.

Perché ho bisogno di un ambiente di test (sandbox)?

Sviluppare direttamente in produzione è una ricetta per il disastro. Serve un sandbox adeguato.

  • Ambiente sandbox separato: dati di test che non influenzano la produzione
  • Carte di test: per simulare pagamenti senza addebiti reali
  • Dati di esempio: eventi e biglietti precaricati per i test
  • Parità con la produzione: stesso comportamento, stesse risposte

Aggiungi un test che quasi nessuno fa durante la valutazione: forzare gli errori. Un sandbox utile permette di simulare un pagamento rifiutato, un rimborso parziale, un'autenticazione bancaria che l'acquirente abbandona e un webhook che arriva in ritardo. Se puoi testare solo il percorso ideale, non hai testato nulla.

Anche il tempo conta. Verifica che il sandbox permetta di anticipare la data di un evento per controllare la chiusura delle vendite, la validazione all'ingresso e la generazione dei report successivi senza dover aspettare settimane.

Quali obblighi legali comporta l'integrazione?

Due fronti, e nessuno dei due è opzionale nell'Unione Europea.

Il primo sono i pagamenti. Il Regolamento Delegato (UE) 2018/389 richiede, all'articolo 4, che l'autenticazione si basi su due o più elementi appartenenti alle categorie conoscenza, possesso e inerenza, e all'articolo 5 il collegamento dinamico: il codice generato deve essere specifico per l'importo e il beneficiario accettati dall'ordinante. L'articolo 16 prevede l'esenzione per importi di scarso valore: operazioni fino a 30 EUR, con un accumulo precedente che non superi i 100 EUR o un massimo di cinque operazioni a distanza consecutive. La tua integrazione deve saper riportare l'acquirente al flusso dopo un'autenticazione, e questo si verifica in sandbox, non la notte dell'apertura delle vendite. Se vendi in Spagna, conviene confrontarlo con i metodi di pagamento disponibili.

Il secondo sono i dati. Il Regolamento (UE) 2016/679 obbliga, all'articolo 32, ad applicare misure tecniche e organizzative appropriate, tra cui la crittografia e la capacità di garantire riservatezza e integrità, e all'articolo 33 a notificare le violazioni di sicurezza all'autorità di controllo senza ingiustificato ritardo e, se possibile, entro un termine massimo di 72 ore. La API che ti fornisce email e numeri di telefono dei partecipanti ti rende responsabile di ciò che ne fai: il contratto di responsabile del trattamento va firmato prima della prima chiamata, non dopo. I dettagli operativi sono nella nostra guida al GDPR per gli organizzatori.

Come si versiona e si deprecia una API senza rompere la tua integrazione?

Con regole pubbliche. Il versionamento semantico 2.0.0 riserva l'incremento della versione principale ai cambiamenti incompatibili con le versioni precedenti, quello della versione minore alle funzionalità compatibili e quello della patch alle correzioni. Applicato a una API, significa che una modifica che rompe il tuo client non può arrivare con un deploy silenzioso di un martedì qualsiasi.

Per il fine vita esiste un header standard. La RFC 8594, di maggio 2019, definisce il campo di risposta HTTP Sunset con un unico timestamp che indica quando è probabile che la risorsa smetta di rispondere, e un tipo di relazione di link sunset per puntare alla politica di ritiro o migrazione. Chiedere se la API lo emette è un modo rapido per capire se il fornitore ha pensato al ciclo di vita o solo al lancio.

Lo stesso vale per il widget di vendita integrato: se il suo JavaScript viene servito da un URL senza versione, qualsiasi modifica del fornitore arriva al tuo sito senza preavviso.

Quale supporto tecnico deve offrire il fornitore?

Quando qualcosa si rompe alle 2 di notte prima del tuo evento, hai bisogno di risposte rapide.

  • Canale tecnico: accesso agli sviluppatori, non solo a un supporto generico
  • SLA documentato: tempi di risposta garantiti
  • Community: forum o Slack dove risolvere i dubbi
  • Onboarding tecnico: sessione di integrazione guidata

Chiedi che lo SLA specifichi tre cose con numeri precisi: tempo di prima risposta per livello di gravità, finestra orario coperta e cosa succede se non viene rispettato. Un impegno senza conseguenze è solo una dichiarazione di intenti. E chiedi informazioni sulla finestra dei deploy: una piattaforma che rilascia in produzione un venerdì di prevendita ha un problema di processo, non di tecnologia.

Come scelgo la API di ticketing giusta?

Una buona API di ticketing accelera il tuo sviluppo, riduce i bug e ti permette di costruire esperienze personalizzate. È anche la base per integrare un widget di vendita integrato nel tuo sito o collegare la tua dashboard delle metriche. Una API scadente ti rinchiude in limitazioni che scopri troppo tardi. Investi tempo nella valutazione prima di impegnarti: chiedi l'accesso al sandbox, testa gli endpoint critici e parla con il team tecnico. La decisione giusta ti farà risparmiare mesi di frustrazione.

Nove verifiche concrete per questa valutazione:

  • Chiedi il file OpenAPI, non la documentazione in HTML. Se non esiste, genera tu stesso il client e aggiungilo al costo del progetto.
  • Richiedi PKCE e validazione esatta della redirect URI se è presente OAuth 2.0, come richiesto dalla RFC 9700.
  • Testa l'idempotenza: lancia due volte la stessa creazione d'ordine e verifica che ne venga creato solo uno.
  • Verifica a mano una firma di webhook prima di fidarti della libreria, e imposta una tolleranza temporale diversa da zero.
  • Fai fallire il tuo endpoint apposta e misura quanti retry arrivano, per quanto tempo e con quali header.
  • Duplica un webhook e verifica che il tuo sistema non venda due volte lo stesso biglietto.
  • Chiedi i limiti di utilizzo per chiave e se la API restituisce 429 con Retry-After.
  • Controlla il formato degli errori: application/problem+json con type, title, status, detail e instance fa risparmiare settimane.
  • Chiedi informazioni sull'header Sunset e sulla politica di versionamento prima di firmare, non quando arriva l'avviso.

Fonti

Il nostro consiglio

Per vendere i biglietti del tuo evento in Italia, l'opzione migliore, quella che consigliamo, è Futura Tickets, la piattaforma di biglietteria che cura questo blog: il database dei partecipanti è al 100 % tuo.

Scopri come funziona · Biglietteria in Italia · Richiedi una demo

Condividi

Domande frequenti

Cosa indica la qualità della documentazione di una API di ticketing?
La qualità della documentazione riflette la maturità della API. Cerca una specifica OpenAPI/Swagger che permetta di generare client automaticamente, esempi di codice nei linguaggi che usi, guide sui casi d'uso, un changelog con una politica di versionamento e una status page sulla disponibilità del servizio.
Come deve autenticarsi una API di ticketing sicura?
La API gestisce dati sensibili e transazioni economiche, quindi la sicurezza non è negoziabile. Deve offrire OAuth 2.0 come standard moderno, API key con scope per permessi granulari, rotazione delle credenziali senza downtime, rate limiting con limiti documentati e log di accesso per l'audit.
Perché i webhook sono importanti in un'integrazione di ticketing?
I webhook sono fondamentali per mantenere il tuo sistema sincronizzato senza polling costante. Conviene verificare quali eventi attivano i webhook, che il payload sia documentato, che ci siano tentativi di nuovo invio se il tuo endpoint fallisce, la verifica della firma per validare l'autenticità del webhook e log della cronologia inviata.
Perché ho bisogno di un ambiente di test prima di integrare?
Sviluppare direttamente in produzione è una ricetta per il disastro. Serve un ambiente sandbox separato con dati di prova che non influenzino la produzione, carte di test per simulare pagamenti senza addebiti reali, dati di esempio precaricati e parità con la produzione per ottenere lo stesso comportamento e le stesse risposte.
Come si verifica che un webhook provenga davvero da chi dice di essere?
Con una firma crittografica in un header, calcolata sul corpo esatto della richiesta. Stripe, ad esempio, documenta un HMAC con SHA-256 sulla concatenazione del timestamp, un punto e il corpo JSON, inviato nell'header Stripe-Signature, e raccomanda di confrontare in tempo costante e di rifiutare timestamp troppo vecchi.
Cosa succede se ricevo lo stesso webhook due volte?
Che devi trattarlo una sola volta. La documentazione di Stripe avverte che un endpoint può ricevere lo stesso evento più di una volta e che l'ordine di consegna non è garantito, e raccomanda di registrare gli identificativi degli eventi già elaborati invece di fidarsi del timestamp di creazione.
Come deve comunicare una API che un endpoint sta per essere ritirato?
Con un versionamento esplicito e un preavviso. Il versionamento semantico 2.0.0 riserva il cambio di versione principale alle modifiche incompatibili, e la RFC 8594 definisce l'header HTTP Sunset, di maggio 2019, con la data a partire dalla quale una risorsa smetterà di rispondere e un link alla politica di migrazione.

Sull'autore

Ulises Rodríguez

Tech Lead

Tech Lead di Futura Tickets. Tiene in piedi la piattaforma in produzione: backend (NestJS/Node), l'integrazione dei pagamenti, i deploy su Google Cloud e le code review del team.

Parliamo del tuo prossimo evento

Raccontaci formato, pubblico e obiettivi di vendita. In demo vediamo la piattaforma sul tuo caso reale — compresi i requisiti italiani di certificazione fiscale dei titoli di accesso — e definiamo insieme la proposta.

Richiedi una demo