---
title: "Attesta un'impronta SHA-256"
method: POST
path: "/api/hash"
---

# Attesta un'impronta SHA-256

`POST /api/hash`

Percorso primario (dalla 1.15.0): riceve l'impronta calcolata sul client (full privacy). Percorso legacy: file inline base64 in `image` (hash calcolato dal server, tetto 100 MB). Se assente una credenziale agente valida (vedi agentBearer), è richiesto `turnstile_token` quando TURNSTILE_SECRET è configurato.

## Request body

- object
  - `sha256` string — Impronta calcolata sul client (percorso primario)
  - `image` string, byte — File inline base64 (percorso legacy, tetto 100 MB)
  - `name` string
  - `type` string — MIME dichiarato
  - `size` integer — Dimensione dichiarata in byte (solo percorso client)
  - `titolo` string
  - `autore` string
  - `anno` string
  - `note` string
  - `turnstile_token` string — Richiesto se non c'è credenziale agente e TURNSTILE_SECRET è configurato
  - `lang` 'it' | 'en' — Lingua dei messaggi d'errore (P41). Facoltativo, default 'it'; in mancanza si legge Accept-Language. Non influisce sul contenuto attestato né sulla firma HMAC.

## Response `200`

Attestazione emessa

- object
  - `sha256` string
  - `dimensione_bytes` integer, nullable
  - `tipo_mime` string
  - `titolo` string
  - `autore` string
  - `anno` string
  - `note` string
  - `timestamp_iso` string, date-time
  - `timestamp_leggibile` string
  - `attestazione` string
  - `emesso_da` string
  - `hmac` string, nullable
  - `fascia` 'base' | 'sviluppatore' | 'convenzione' — Fascia effettiva dell'emissione (P25)
  - `fascia_motivo` 'null' | 'pool_esaurito' | 'tetto_individuale', nullable — Presente solo se una convenzione è stata degradata a 'base'
  - `convenzione` object, nullable — Presente solo se fascia è 'convenzione'
    - `id` string
    - `name` string

## Other responses

- `400` — Campo mancante o malformato
- `403` — Credenziale agente invalida, o verifica anti-bot non superata
- `413` — File troppo grande (solo percorso legacy, max 100 MB)
- `429` — Quota credenziale esaurita, o rate limit per-IP (60/60s)

---

[API](https://skmtc.net/spaziogenesi/apis/imgauth-api-di-attestazione-opere-digitali.md) · [All operations](https://skmtc.net/spaziogenesi/apis/imgauth-api-di-attestazione-opere-digitali/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/spaziogenesi/imgauth-api-di-attestazione-opere-digitali/revisions/99eac1f4f861/schema)
