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" }
companiesdownload.com