Come funziona la conservazione
I tuoi documenti fiscali (fatture attive e passive) vengono conservati in modo sicuro per tutta la durata del tuo abbonamento. Puoi consultarli, scaricarli singolarmente o esportare l'intero archivio in formato ZIP. In caso di mancato rinnovo dell'abbonamento, avrai 15 giorni per scaricare il tuo archivio completo, trascorsi i quali i dati verranno rimossi dai nostri server. I documenti restano sempre disponibili sul portale Fatture e Corrispettivi dell'Agenzia delle Entrate.
Webhook notifiche real-time
Ricevi notifiche HTTP automatiche quando avvengono eventi sui tuoi documenti conservati (esibizioni pronte, audit, ecc.). Ogni notifica è firmata con HMAC SHA-256.
⚠ Il secret sarà mostrato UNA SOLA VOLTA dopo la creazione. Salvalo nel tuo sistema receiver per verificare la firma X-TF-Webhook-Signature.
Questa è l'unica volta in cui vedrai il secret in chiaro. Salvalo nel tuo sistema receiver: lo userai per calcolare HMAC SHA-256 e verificare la firma in X-TF-Webhook-Signature.
--
| Nome | URL | Eventi | Stato | Ultima delivery | Azioni |
|---|---|---|---|---|---|
| Caricamento... | |||||
Documentazione tecnica webhook
Content-Type: application/json
User-Agent: TurboFatturaConservazione/1.0 (webhook)
X-TF-Webhook-Event: dip.export
X-TF-Webhook-Delivery: a1b2c3d4e5f6a7b8 (univoco per dedup)
X-TF-Webhook-Signature: sha256=<hex> (HMAC del body)
X-TF-Webhook-Timestamp: 1730729400 (anti-replay ±300s)
chiave HMAC = SHA-256(your_secret) (32 raw bytes)
signature = "sha256=" + hex(HMAC-SHA256(chiave, raw_body))
<?php
$YOUR_SECRET = 'PASTE_YOUR_SECRET_HERE';
$body = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_TF_WEBHOOK_SIGNATURE'] ?? '';
$ts = (int)($_SERVER['HTTP_X_TF_WEBHOOK_TIMESTAMP'] ?? 0);
if (abs(time() - $ts) > 300) { http_response_code(401); exit('replay'); }
$key = hash('sha256', $YOUR_SECRET, true);
$expected = 'sha256=' . hash_hmac('sha256', $body, $key);
if (!hash_equals($expected, $sig)) { http_response_code(401); exit('bad sig'); }
$payload = json_decode($body, true);
// Idempotenza: dedup su X-TF-Webhook-Delivery
// Tua logica qui: $payload['event'], $payload['payload']
http_response_code(200);
echo '{"ok":true}';
Incolla i 3 valori dal tuo log per verificare se la firma è corretta. Calcolo HMAC eseguito 100% nel browser (Web Crypto API), il secret non viene mai inviato al server.
| Evento | Quando |
|---|---|
dip.export | Esibizione DIP costruita e pronta |
dip.cleanup | ZIP DIP scaduto rimosso (TTL) |
dip.admin_download | Admin ha scaricato la DIP per audit |
esibizione.notified | Email inviata al richiedente |
esibizione.delivered | Esibizione consegnata (download completato) |
esibizione.suspicious | Pattern sospetto rilevato |
esibizione.force_retry | Admin ha forzato retry su esibizione |
lotto.build | Nuovo pacchetto AIP costruito |
lotto.xsd_drift_detected | Drift schema XSD rilevato (regression) |
lotto.xsd_auto_validated | Pacchetto auto-validato in fase di build |
Se il tuo endpoint risponde non-2xx o va in timeout, il sistema riprova con backoff esponenziale:
Limite: max 5 webhook attivi per azienda. Dopo 5 fail consecutivi una delivery va in stato dead ma la subscription resta attiva.