# Aggiornamento di un item

<p class="callout warning">Questa documentazione è riferita alla versione 3 delle API di scrittura dell'anagrafica. Le API V2 sono deprecate e non vanno utilizzate per nuove integrazioni.</p>

L'invio di una richiesta di aggiornamento item può essere effettuato utilizzando la seguente API, dove `id` è il suo identificativo univoco:

<p class="callout info">[\[PUT\] /api/v3/items/{id}](https://registry-write-dev.agyo.io/swagger-ui.html#/API%20v3/updateItemUsingPUT_1)</p>

L'operazione di aggiornamento di un item può essere effettuata:

- dai soli utenti con ruolo WRITE globale sull'item se l'item ha almeno un utente amministratore
- da ogni utente con almeno ruolo WRITE su un'applicazione dell'item se non esiste nessun utente amministratore

#### Header

Gli header richiesti dalla chiamata sono gli [header standard di TSDigital](https://digital-docs.ts-paas.com/books/integrazione-e-utilizzo-api-tsdigital/page/linee-guida-generali-api-ts-digital "Linee guida Generali API TS-Digital").

Il `Content-Type` deve essere `application/json`

#### Body

<p class="callout danger">L'operazione di aggiornamento sostituisce interamente i vecchi dati dell'item con quelli specificati. Ogni campo che deve mantenere il proprio valore corrente deve essere necessariamente valorizzato con tale valore.</p>

Il body della richiesta deve contenere `base` e `preferences` dell'item ([Struttura di un Item](https://digital-docs.ts-paas.com/books/anagrafica/page/struttura-di-un-item "Struttura di un Item")).

```JSON
{
  "base": {
    "details": {
      "addresses": [
        {
          "city": "string",
          "country": "string",
          "province": "string",
          "streetName": "string",
          "streetNumber": "string",
          "types": [
            "REGISTERED_OFFICE"
          ],
          "zipCode": "string"
        }
      ],
      "birthDate": 0,
      "classifier": "INTERMEDIARY",
      "contacts": [
        {
          "label": "string",
          "type": "PHONE",
          "value": "string"
        }
      ],
      "description": "string",
      "economics": {
        "balanceSheetDate": 0,
        "capitalStock": "string",
        "cciaa": "string",
        "economicActivities": {
          "mainActivity": {
            "code": "string"
          }
        },
        "liquidationState": "LN",
        "rea": "string",
        "registrationDate": 0,
        "soleShareholder": "SM",
        "taxRegime": "string"
      },
      "firstName": "string",
      "gender": "string",
      "lastName": "string",
      "legalClass": "string",
      "legalForm": {
        "code": "string"
      },
      "professionalRegister": {
        "code": "string",
        "description": "string",
        "province": "string",
        "registrationDate": 0
      }
    },
    "identifier": {
      "govCode": "string",
      "taxId": "string",
      "taxRegion": "string",
      "vatNumber": "string"
    }
  },
  "preferences": {
    "enableConsole": true,
    "hidden": true,
    "invoiceRecipient": true,
    "language": "string"
  }
}

```

#### Risposte

L'operazione è avvenuta con successo se e solo se il codice HTTP della risposta è `202`. Ogni altro codice di risposta indica uno stato di errore.

##### HTTP 202

L'operazione è avvenuta con successo e il processo di aggiornamento è stato preso in carico.

Body della risposta:

```JSON
{
  "id": "string"
}
```

- **id:** identificativo dell'item

##### HTTP 400

Uno o più parametri forniti nella richiesta sono errati, o mancano dei parametri obbligatori.

##### HTTP 401

Il token autorizzativo è scaduto, invalido o non è stato specificato.

##### HTTP 403

Il token autorizzativo fornito è valido, ma l'utente non ha i permessi necessari ad aggiornare l'item

<span style="color: #222222; font-size: 1.4em; font-weight: 400;">HTTP 500</span>

Il server ha riscontrato un errore inaspettato nella creazione della richiesta di aggiornamento item

##### HTTP 502

Il server ha riscontrato un errore inaspettato nel comunicare con un servizio dal quale dipende per poter completare il processo (ad esempio, il servizio di auth non risulta essere disponibile)

Tutte le risposte d'errore condividono il seguente formato per il body di risposta:

```JSON
{
  "code": "string",
  "message": "string",
  "status": "string",
  "subErrors": [
    {}
  ],
  "timestamp": "dd-MM-yyyy HH:mm:ss"
}
```

- **code:** corrisponde al codice d'errore HTTP ritornato (es: `500`)
- **message:** messaggio d'errore (es: `Errore interno del server`)
- **status:** descrizione a parole del codice d'errore HTTP (es: `Internal Server Error`)
- **subErrors:** eventuali errori innestati in quello ritornato
- **timestamp:** data ed ora di ritorno dell'errore