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.
https://api.giggal.ai/v1Crea 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 APIOgni risposta segue la stessa struttura JSON:
// Success
{ "success": true, "data": { ... }, "meta": { ... } }
// Error
{ "success": false, "error": "Human-readable error message" }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.
Authorization: Bearer tp_live_xxxxxxxxxxxxxxxxxxxxxxxxxX-API-Key: tp_live_xxxxxxxxxxxxxxxxxxxxxxxxxUna 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.
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-42Verifica singola
1 endpoint in questo gruppo.
/v1/verifyVerifica 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.
Verifica in blocco
3 endpoint in questo gruppo.
/v1/verify-batchInvia 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.
/v1/jobs/:jobIdOttieni 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.
/v1/jobs/:jobId/resultsOttieni 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).
Verifica catch-all
4 endpoint in questo gruppo.
/v1/catchallAvvia 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).
/v1/catchall/:taskIdOttieni 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.
/v1/catchall/:taskId/resultsOttieni 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).
/v1/catchall/:taskId/downloadScarica 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.
Account
1 endpoint in questo gruppo.
/v1/creditsOttieni 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.
Errori e limiti di frequenza
| Stato | Significato |
|---|---|
| 200 OK | Richiesta riuscita (verifica sincrona o lettura di stato e risultati). |
| 202 Accepted | Job o task asincrono creato e messo in coda. |
| 400 Bad Request | Parametri mancanti o non validi (formato email errato, array emails vuoto, jobId mancante). |
| 401 Unauthorized | Chiave API mancante, non valida o revocata. |
| 402 Payment Required | Crediti insufficienti per l'operazione richiesta. |
| 404 Not Found | L'ID del job o del task non esiste nel tuo account. |
| 409 Conflict | Il job non è nello stato richiesto (per esempio, chiedi i risultati prima che finisca). |
| 410 Gone | I risultati del job hanno superato il periodo di conservazione di 48 ore. |
| 429 Too Many Requests | Limite di frequenza superato. Aspetta e riprova. |
| 500 / 502 / 503 | Il 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.
| Categoria | Limite |
|---|---|
| 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 blocco | 50.000 |
| Conservazione dei risultati del job | 48 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.
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.
