API v1
Tutte le richieste (tranne preview e quote) richiedono un token: Authorization: Bearer cd_… — generalo in Token API scegliendo la scadenza.
Anteprima attributi (sì/no + data ultimo update)
GET /api/v1/preview?domain=example.com
→ { "domain": "example.com", "source": "cache|provider",
"attributes": [ { "attribute_key": "vat_number", "available": true,
"last_update": "2026-05-12T00:00:00Z" }, … ] }Preventivo
GET /api/v1/quote?domain=example.com
→ non in archivio: { "cached": false, "kind": "acquisition", "price_cents": 4900 }
→ in archivio: { "cached": true, "kind": "resale", "base_price_cents": 4900,
"total_attributes": 26, "obsolete_attributes": 4,
"discount_pct": 15, "price_cents": 4165,
"obsolete_keys": { "revenue_last_year": true, … } }Acquisto (pagamento mock)
POST /api/v1/purchases
Authorization: Bearer cd_…
{ "domain": "example.com", "mode": "cache" } // "fresh" = rilievo nuovo a prezzo pieno
→ 201 { "purchase_id": "…", "price_cents": 4165, "discount_pct": 15, "kind": "resale" }Archivio
GET /api/v1/purchases Authorization: Bearer cd_…
Download (riscaricabile senza limiti)
GET /api/v1/purchases/{id}/download?format=json|csv|xlsx|pdf
Authorization: Bearer cd_…Fields check (gratuito — solo obsoleto sì/no, mai i valori)
GET /api/v1/purchases/{id}/fields-check
Authorization: Bearer cd_…
→ { "total": 26, "obsolete": 4, "obsolete_pct": 15,
"items": [ { "key": "revenue_last_year", "label": "Fatturato ultimo anno",
"obsolete": true }, … ] }Company update (nuovo rilievo, prezzo pieno)
POST /api/v1/purchases/{id}/update
Authorization: Bearer cd_…
→ 201 { "purchase_id": "…", "kind": "update", "price_cents": 4900 }Errori
400 { "error": "invalid_domain" } 401 { "error": "unauthorized" }
401 { "error": "invalid_or_expired_token" } 404 { "error": "purchase_not_found" }