Cerchi una panoramica? Leggi la pagina sull'API di verifica email o sull'API di validazione email per i moduli di iscrizione.

Documentazione API di verifica email

Verifica email singole, avvia batch in blocco e controlla a fondo gli indirizzi catch-all e protetti da SEG. Tutti gli endpoint usano JSON, si autenticano con una chiave API e ti addebitano solo le verifiche riuscite.

Introduzione

L'API di Giggal.ai ti permette di verificare singoli indirizzi email, avviare batch fino a 50.000 email per job e controllare a fondo gli indirizzi catch-all e protetti da SEG, con una semplice REST API in JSON. Ogni verifica riuscita usa crediti del tuo account.

URL di base
https://api.giggal.ai/v1
Ottieni una chiave API

Crea una chiave API dalla dashboard di Giggal.ai: apri la scheda Developer API nella barra laterale e clicca Create API Key. Ogni chiave è legata al tuo account, registra il proprio utilizzo e puoi revocarla in qualsiasi momento.

Apri la scheda Developer API
Struttura della risposta

Ogni risposta segue la stessa struttura JSON:

// Success
{ "success": true, "data": { ... }, "meta": { ... } }

// Error
{ "success": false, "error": "Human-readable error message" }
Avvio rapido: verifica una email con cURL
curl -X POST https://api.giggal.ai/v1/verify \
  -H "Authorization: Bearer tp_live_xxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"email":"info@giggal.ai"}'

Autenticazione

Invia la tua chiave API con ogni richiesta, in uno di questi due header. Funzionano entrambi.

Opzione 1: token Bearer
Authorization: Bearer tp_live_xxxxxxxxxxxxxxxxxxxxxxxxx
Opzione 2: header X-API-Key
X-API-Key: tp_live_xxxxxxxxxxxxxxxxxxxxxxxxx

Una chiave mancante, non valida o revocata restituisce HTTP 401. Non mettere mai le chiavi API nel codice lato client. Fai passare le chiamate dal tuo backend.

Idempotenza (verifica in blocco e catch-all)

Per POST /v1/verify-batch e POST /v1/catchall, invia un header Idempotency-Key. I nuovi tentativi con la stessa chiave restituiscono la risposta originale, senza creare un job doppio e senza addebitare due volte i crediti.

Idempotency-Key: 2026-07-24-list-batch-42

Verifica singola

1 endpoint in questo gruppo.

POST/v1/verify

Verifica una singola email

Verifica un indirizzo email in modo sincrono. Costa 1 credito. Se il dominio è catch-all, la verifica approfondita parte subito e la risposta include catch_all_score e catch_all_verdict.

Autorizzazioni
api_key_auth
Corpo della richiesta
email
Obbligatorio
string
L'indirizzo email da verificare.

Verifica in blocco

3 endpoint in questo gruppo.

POST/v1/verify-batch

Invia un job di verifica in blocco

Invia fino a 50.000 email per job. L'elaborazione è asincrona, quindi interroga GET /v1/jobs/:jobId per vedere l'avanzamento. Invia un header Idempotency-Key per ripetere in sicurezza la creazione del job senza addebiti doppi.

Autorizzazioni
api_key_auth
Corpo della richiesta
emails
Obbligatorio
string[]
Array di indirizzi email da verificare. Massimo 50.000 per job. I duplicati e gli indirizzi con formato errato vengono rimossi dal server.
name
string
Etichetta leggibile opzionale per il job. Compare nella tua dashboard.
GET/v1/jobs/:jobId

Ottieni lo stato di un job in blocco

Interroga questo endpoint per controllare l'avanzamento. Passaggi di stato: processing → completed (oppure failed). Intervallo consigliato tra le richieste: da 10 a 15 secondi. I batch piccoli (meno di 50 email) di solito finiscono entro 30 secondi.

Autorizzazioni
api_key_auth
Parametri di percorso e di query
jobId
Obbligatorio
string
L'ID del job restituito da POST /v1/verify-batch.
GET/v1/jobs/:jobId/results

Ottieni i risultati di un job in blocco

Quando lo stato è "completed", recupera i risultati per ogni email. I risultati sono paginati, quindi invia i parametri di query page e limit. I risultati restano disponibili per 48 ore (vedi resultsExpiresAt nel job).

Autorizzazioni
api_key_auth
Parametri di percorso e di query
jobId
Obbligatorio
string
L'ID del job.
page
integer
Numero di pagina, predefinito 1.
limit
integer
Risultati per pagina, predefinito 25, massimo 500.

Verifica catch-all

4 endpoint in questo gruppo.

POST/v1/catchall

Avvia un task di verifica catch-all

Avvia la verifica catch-all approfondita per un job in blocco completato. Vengono ricontrollati solo gli indirizzi segnati come catch-all nel job di origine. Costa 1 credito per indirizzo (vedi creditsRequired nella risposta).

Autorizzazioni
api_key_auth
Corpo della richiesta
jobId
Obbligatorio
string
L'ID di un job di verifica in blocco completato. Solo gli indirizzi catch-all di quel job ricevono la verifica approfondita.
name
string
Etichetta leggibile opzionale per il task.
GET/v1/catchall/:taskId

Ottieni lo stato di un task catch-all

Interroga questo endpoint per controllare l'avanzamento e i conteggi aggiornati in verdictCounts. I task catch-all di solito finiscono in un tempo che va da pochi secondi a pochi minuti, in base al volume.

Autorizzazioni
api_key_auth
Parametri di percorso e di query
taskId
Obbligatorio
string
L'ID del task restituito da POST /v1/catchall.
GET/v1/catchall/:taskId/results

Ottieni i risultati di un task catch-all

Recupera i risultati paginati per ogni email, con il dettaglio del punteggio (segnali di analisi del dominio ed età del dominio).

Autorizzazioni
api_key_auth
Parametri di percorso e di query
taskId
Obbligatorio
string
L'ID del task.
page
integer
Numero di pagina, predefinito 1.
limit
integer
Risultati per pagina, predefinito 25, massimo 500.
verdict
string
Filtra per risultato: valid | invalid.
GET/v1/catchall/:taskId/download

Scarica i risultati catch-all in CSV

Scarica tutti i risultati di un task catch-all completato in un file CSV con le colonne Email, Score e Verdict. Il Content-Type è text/csv.

Autorizzazioni
api_key_auth
Parametri di percorso e di query
taskId
Obbligatorio
string
L'ID del task.
verdict
string
Filtra per risultato: valid | invalid.

Account

1 endpoint in questo gruppo.

GET/v1/credits

Ottieni il saldo crediti attuale

Restituisce il saldo del tuo account: crediti disponibili, riservati (bloccati per i job in corso) e totali storici. Le verifiche con risultato "unknown" vengono rimborsate in automatico e compaiono qui.

Autorizzazioni
api_key_auth

Errori e limiti di frequenza

StatoSignificato
200 OKRichiesta riuscita (verifica sincrona o lettura di stato e risultati).
202 AcceptedJob o task asincrono creato e messo in coda.
400 Bad RequestParametri mancanti o non validi (formato email errato, array emails vuoto, jobId mancante).
401 UnauthorizedChiave API mancante, non valida o revocata.
402 Payment RequiredCrediti insufficienti per l'operazione richiesta.
404 Not FoundL'ID del job o del task non esiste nel tuo account.
409 ConflictIl job non è nello stato richiesto (per esempio, chiedi i risultati prima che finisca).
410 GoneI risultati del job hanno superato il periodo di conservazione di 48 ore.
429 Too Many RequestsLimite di frequenza superato. Aspetta e riprova.
500 / 502 / 503Il server o il servizio di verifica a monte non è disponibile per il momento.

Limiti di frequenza

Ogni risposta include gli header RateLimit-Limit, RateLimit-Remaining e RateLimit-Reset (con le maiuscole dello standard RFC), così puoi regolare il ritmo delle richieste. RateLimit-Reset indica i secondi che mancano al reset della finestra attuale.

CategoriaLimite
Tutti gli endpoint (predefinito)300 richieste / 15 minuti
Creazione di batch (POST /v1/verify-batch, POST /v1/catchall)30 richieste / 15 minuti
Controllo dei job (GET /v1/jobs/:id, GET /v1/jobs/:id/results)600 richieste / 15 minuti
Email massime per job in blocco50.000
Conservazione dei risultati del job48 ore

I limiti sono divisi in tre livelli perché i controlli di stato sono più frequenti della creazione di batch. Mentre un job è in corso puoi controllarlo ogni pochi secondi. Il limite di 600 / 15 min (circa 40 al minuto) ti lascia margine senza sovraccaricare il backend.

Ti servono limiti più alti?

Alziamo spesso i limiti per i partner di integrazione verificati.

Parla con noi

Formato della risposta 429

Quando superi un limite di frequenza, l'API restituisce HTTP 429 con questo corpo:

{
  "success": false,
  "message": "Developer API rate limit exceeded"
}

Prima di riprovare, aspetta il numero di secondi indicato nell'header RateLimit-Reset (i secondi che mancano al reset della finestra).

Pronto a integrare?

Crea la tua chiave API in pochi secondi. Sono inclusi crediti di prova gratuiti, così puoi provare l'integrazione completa prima di pagare.