# API di lettura

# Ricerca di SPID

È possibile effettuare una ricerca di tutte le richieste collegate ad un dato item tramite l'API

<p class="callout info">[\[GET\] /api/v1/spid](https://spid-read-dev.agyo.io/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config#/spid-controller/getAll)</p>

I risultati dell'API sono **paginati**.

### 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`

### Query Parameter

Campi <span style="text-decoration: underline;">sottolineati</span> sono obbligatori

- **<span style="text-decoration: underline;">itemId</span>**: identificativo anagrafico univoco dell'item associato alle richiesta SPID ricercate. Obbligatorio per le utenze personali o tecniche
- **userTaxId**: codice fiscale associato con le richieste SPID ricercate
- **fullName**: stringa che indica il nome e cognome della persona associata alle richieste SPID da ricercare. Può essere un valore parziale.
- **email**: email associata alle richieste SPID da ricercare. Può essere un valore parziale
- **channels**: elenco di canali di riconoscimento disponibili nelle richieste SPID da ricercare. Valori possibili: 
    - **CIE**
    - **CNS**
    - **FEQ**
    - **VIDEO**
    - **RAO**
- **identityTypes**: elenco di tipologie di identità disponibili nelle richieste SPID da ricercare. Valori possibili: 
    - **INDIVIDUAL**
    - **LEGAL\_ENTITY**
    - **PROFESSIONAL\_INDIVIDUAL**
    - **PROFESSIONAL\_LEGAL\_ENTITY**
- **requestedAt**: data di emissione della richiesta SPID, sotto forma di stringa. Se fornita, la porzione temporale della stringa non viene considerata
- **statsuses**: elenco di stati in cui può essere la richiesta SPID ricercata
- **fullNameOrTaxId**: campo che combina la ricerca fullName con la ricerca taxId. Ammette valori parziali
- **sortBy**: campo per il quale ordinare la richiesta. Valore di default: **requestedAt**.
- **sortDirection**: direzione di sorting. Valori possibili: **ASC**, **DESC**
- **size**: dimensione della pagina restituita. Default: **10**
- **page**: numero di pagina. Default: 0

### Body

La richiesta non ha body.

### Risposte

#### Successo

In caso di successo, l'API risponde con il codice **HTTP 200** con il seguente body:

```JSON
{
  "totalPages": 0,
  "totalElements": 0,
  "size": 0,
  "content": [
    {
      "id": "string",
      "itemId": "string",
      "type": "INDIVIDUAL",
      "status": "PENDING",
      "requestedAt": "2022-04-14T09:53:28.029Z",
      "updatedAt": "2022-04-14T09:53:28.029Z",
      "user": {
        "id": "string",
        "name": "string",
        "surname": "string",
        "email": "string",
        "taxId": "string",
        "ncsId": "string"
      },
      "slotId": 0,
      "videoSlotId": 0,
      "sessionId": "string",
      "sessionLink": "string",
      "cie": true,
      "cns": true,
      "feq": true,
      "video": true,
      "rao": true,
      "sessionExpirationDate": "2022-04-14T09:53:28.029Z",
      "raoId": "string",
      "level": "SPID_LEVEL_1"
    }
  ],
  "number": 0,
  "sort": {
    "empty": true,
    "sorted": true,
    "unsorted": true
  },
  "pageable": {
    "page": 0,
    "size": 1,
    "sort": [
      "string"
    ]
  },
  "numberOfElements": 0,
  "first": true,
  "last": true,
  "empty": true
}
```

- **totalPages**: numero totale di pagine disponibili data la **size** e i filtri correnti
- **totalElements**: numero totale di richieste SPID disponibili con i filtri forniti
- **size**: dimensione della pagina ritornata. Coincide con il parametro **size** fornito in input
- **content**: richieste SPID presenti nella pagina corrente. Vedi [Lettura di un singolo SPID](https://digital-docs.ts-paas.com/books/spid/page/lettura-di-un-singolo-spid "Lettura di un singolo SPID") per dettagli.
- **number**: numero di pagina attuale. Corrisponde con il parametro **page** fornito in input
- **sort**: informazioni sul sorting attuale
- **pageable**: informazioni sulla paginazione attuale
- **numberOfElement**: elementi presenti nella pagina attuale
- **first/last/empty**: booleani che indicano se si tratta della prima/ultima pagina o se la pagina è vuota

#### Errore

In caso di errore, l'API risponde con un body JSON avente il seguente formato:

```JSON
{
  "code": "string",
  "timestamp": "2022-04-13T13:35:16.678Z",
  "message": "string",
  "subErrors": [
    {}
  ]
}
```

- **code**: rappresentazione sotto forma di stringa del codice d'errore HTTP. Coincide con l'errore HTTP ritornato
- **tiemstamp**: data e ora della risposta, espresso sotto forma di stringa
- **message**: messaggio che esprime l'errore

Gli errori possibili sono:

- **400**: la richiesta è malformata (parametri con formato errato, parametri invalidi o inconsistenti fra loro)
- **401**: non è stato fornito un token autorizzativo o il token autorizzativo fornito non è valido (es: è scaduto)
- **403**: il token fornito è valido, ma l'utente non è autorizzato ad effettuare l'operazione
- **500**: si è verificato un errore inaspettato

# Lettura di un singolo SPID

Dato l'identificativo univoco di una sessione di riconoscimento SPID, è possibile recuperarne i dati tramite l'API

<p class="callout info">[\[GET\] /api/v1/spid/{spidId}](https://spid-read-dev.agyo.io/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config#/spid-controller/getOne)</p>

### 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`

### Path parameter

- **<span style="text-decoration: underline;">spidId</span>**: identificativo univoco della richiesta SPID

### Body

La richiesta non ha body.

### Risposte

#### Successo

In caso di successo, l'API risponde con il codice **HTTP 200** con il seguente body:

```JSON
{
  "id": "string",
  "itemId": "string",
  "type": "INDIVIDUAL",
  "status": "PENDING",
  "requestedAt": "2022-04-14T10:58:13.409Z",
  "updatedAt": "2022-04-14T10:58:13.409Z",
  "user": {
    "id": "string",
    "name": "string",
    "surname": "string",
    "email": "string",
    "taxId": "string",
    "ncsId": "string"
  },
  "slotId": 0,
  "videoSlotId": 0,
  "sessionId": "string",
  "sessionLink": "string",
  "cie": true,
  "cns": true,
  "feq": true,
  "video": true,
  "rao": true,
  "sessionExpirationDate": "2022-04-14T10:58:13.409Z",
  "raoId": "string",
  "level": "SPID_LEVEL_1"
}
```

- **id**: identificativo univoco della richiesta SPID
- **itemId**: identificativo univoco dell'item associato alla richiesta
- **type**: tipologia della richiesta SPID
- **status**: stato attuale della richiesta SPID
- **requestedAt**: stringa che esprime data e ora della richiesta
- **updatedAt**: string che esprime data e ora dell'ultimo aggiornamento della richiesta
- **user**: dati sulla persona censita nella richiesta SPID 
    - **id**: identificativo univoco della persona
    - **name**: nome della persona
    - **surname**: cognome della persona
    - **email**: indirizzo email della persona
    - **taxId**: codice fiscale della persona
    - **ncsId**: identificativo univoco dell'utente lato NCS
- **slotId**: identificativo univoco dello slot occupato lato metering dalla richiesta. Nullo nel caso di richieste di tipo INDIVIDUAL
- **videoSlotId**: identificativo univoco dello slot occupato lato metering dalla richiesta. Valorizzato solo nel caso di canale di riconoscimento video
- **sessionId**: identificativo univoco della sessione di riconoscimento SPID. Nullo in caso di richieste il cui unico canale di riconoscimento è RAO.
- **sessionLink**: URL verso cui reindirizzare l'utente per iniziare la sessione di riconoscimento. Coincide con la URL inviata via mail quando viene inoltrata la richiesta. Nullo in caso di richieste il cui unico canale di riconoscimento è RAO.
- **cie/cns/feq/video/rao**: booleani che indicano se uno specifico canale di riconoscimento è stato selezionato
- **sessionExpirationDate**: data di scadenza del link di sessione. Nullo in caso di richieste il cui unico canale di riconoscimento è RAO.
- **raoId**: identificativo anagrafico univoco del RAO scelto per il riconoscimento. Valorizzato solo se il canale RAO è stato selezionato.
- **level**: livello della richiesta SPID. Attualmente sono disponibili i livelli 1 e 2

#### Errore

In caso di errore, l'API risponde con un body JSON avente il seguente formato:

```JSON
{
  "code": "string",
  "timestamp": "2022-04-13T13:35:16.678Z",
  "message": "string",
  "subErrors": [
    {}
  ]
}
```

- **code**: rappresentazione sotto forma di stringa del codice d'errore HTTP. Coincide con l'errore HTTP ritornato
- **tiemstamp**: data e ora della risposta, espresso sotto forma di stringa
- **message**: messaggio che esprime l'errore

Gli errori possibili sono:

- **400**: la richiesta è malformata (parametri con formato errato, parametri invalidi o inconsistenti fra loro)
- **401**: non è stato fornito un token autorizzativo o il token autorizzativo fornito non è valido (es: è scaduto)
- **403**: il token fornito è valido, ma l'utente non è autorizzato ad effettuare l'operazione
- **404**: richiesta SPID con l'ID fornito non trovata
- **500**: si è verificato un errore inaspettato

# Lettura storico stati di una richiesta

Ogniqualvolta una richiesta SPID cambia stato, il vecchio stato viene memorizzato nello storico. È possibile recuperare lo storico degli stati tramite l'API

<p class="callout info">[\[GET\] /api/v1/spid/{id}/history](https://spid-read-dev.agyo.io/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config#/spid-controller/getHistory)</p>

### 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`

### Path Parameter

- <span style="text-decoration: underline;">**id**</span>: identificativo univoco della sessione di riconoscimento SPID, ottenuto al termine del [processo di creazione](https://digital-docs.ts-paas.com/books/spid/page/creazionemodifica-di-una-sessione-di-riconoscimento "Creazione/Modifica di una sessione di riconoscimento") o dalle API di lettura

### Body

La richiesta non ha body.

### Risposte

#### Successo

In caso di successo, l'API risponde con il codice **HTTP 200** con body

```JSON
{
  "totalPages": 0,
  "totalElements": 0,
  "size": 0,
  "content": [
    {
      "id": "string",
      "spidId": "string",
      "requestedAt": "2022-04-14T12:07:44.026Z",
      "status": "PENDING"
    }
  ],
  "number": 0,
  "sort": {
    "empty": true,
    "sorted": true,
    "unsorted": true
  },
  "pageable": {
    "page": 0,
    "size": 1,
    "sort": [
      "string"
    ]
  },
  "numberOfElements": 0,
  "first": true,
  "last": true,
  "empty": true
}

```

- **totalPages**: numero totale di pagine disponibili data la **size** e i filtri correnti
- **totalElements**: numero totale di richieste SPID disponibili con i filtri forniti
- **size**: dimensione della pagina ritornata. Coincide con il parametro **size** fornito in input
- **content**: storico degli stati SPID passati 
    - **id**: identificativo entry dello storico
    - **spidId**: identificativo univoco della richiesta SPID, coincide con il pathParameter **id**
    - **requestedAt**: data del cambio di stato
    - **status**: stato storicizzato
- **number**: numero di pagina attuale. Corrisponde con il parametro **page** fornito in input
- **sort**: informazioni sul sorting attuale
- **pageable**: informazioni sulla paginazione attuale
- **numberOfElement**: elementi presenti nella pagina attuale
- **first/last/empty**: booleani che indicano se si tratta della prima/ultima pagina o se la pagina è vuota

#### Errore

In caso di errore, l'API risponde con un body JSON avente il seguente formato:

```JSON
{
  "code": "string",
  "timestamp": "2022-04-13T13:35:16.678Z",
  "message": "string",
  "subErrors": [
    {}
  ]
}
```

- **code**: rappresentazione sotto forma di stringa del codice d'errore HTTP. Coincide con l'errore HTTP ritornato
- **tiemstamp**: data e ora della risposta, espresso sotto forma di stringa
- **message**: messaggio che esprime l'errore

Gli errori possibili sono:

- **400**: la richiesta è malformata (parametri con formato errato, parametri invalidi o inconsistenti fra loro)
- **401**: non è stato fornito un token autorizzativo o il token autorizzativo fornito non è valido (es: è scaduto)
- **403**: il token fornito è valido, ma l'utente non è autorizzato ad effettuare l'operazione
- **404**: non esiste una sessione con l'ID specificato
- **500**: si è verificato un errore inaspettato

# Lettura SPID di un RAO

Dato l'identificativo anagrafica di un RAO, un utente con permesso su di esso può recuperare tutte le sessioni SPID che gli son state attribuite tramite l'API:

<p class="callout info">[\[GET\] /api/v1/spid/rao/{raoId}](https://spid-read-dev.agyo.io/swagger-ui/index.html?configUrl=/v3/api-docs/swagger-config#/spid-controller/getAllByRao)</p>

Il ruolo minimo necessario per la lettura è `SPID:raoId:READ`

### 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`

### Path parameter

- **<span style="text-decoration: underline;">raoId</span>**: identificativo anagrafico univoco del RAO

### Body

La richiesta non ha body.

### Risposte

#### Successo

In caso di successo, l'API risponde con il codice **HTTP 200** con il seguente body:

```JSON
{
  "totalPages": 0,
  "totalElements": 0,
  "size": 0,
  "content": [
    {
      "id": "string",
      "itemId": "string",
      "type": "INDIVIDUAL",
      "status": "PENDING",
      "requestedAt": "2022-04-14T15:01:15.176Z",
      "updatedAt": "2022-04-14T15:01:15.176Z",
      "user": {
        "id": "string",
        "name": "string",
        "surname": "string",
        "email": "string",
        "taxId": "string",
        "ncsId": "string"
      },
      "slotId": 0,
      "videoSlotId": 0,
      "sessionId": "string",
      "sessionLink": "string",
      "cie": true,
      "cns": true,
      "feq": true,
      "video": true,
      "rao": true,
      "sessionExpirationDate": "2022-04-14T15:01:15.176Z",
      "raoId": "string",
      "level": "SPID_LEVEL_1"
    }
  ],
  "number": 0,
  "sort": {
    "empty": true,
    "sorted": true,
    "unsorted": true
  },
  "pageable": {
    "page": 0,
    "size": 1,
    "sort": [
      "string"
    ]
  },
  "numberOfElements": 0,
  "first": true,
  "last": true,
  "empty": true
}
```

- **totalPages**: numero totale di pagine disponibili data la **size** e i filtri correnti
- **totalElements**: numero totale di richieste SPID disponibili con i filtri forniti
- **size**: dimensione della pagina ritornata. Coincide con il parametro **size** fornito in input
- **content**: richieste SPID presenti nella pagina corrente. Vedi [Lettura di un singolo SPID](https://digital-docs.ts-paas.com/books/spid/page/lettura-di-un-singolo-spid "Lettura di un singolo SPID") per dettagli.
- **number**: numero di pagina attuale. Corrisponde con il parametro **page** fornito in input
- **sort**: informazioni sul sorting attuale
- **pageable**: informazioni sulla paginazione attuale
- **numberOfElement**: elementi presenti nella pagina attuale
- **first/last/empty**: booleani che indicano se si tratta della prima/ultima pagina o se la pagina è vuota

#### Errore

In caso di errore, l'API risponde con un body JSON avente il seguente formato:

```JSON
{
  "code": "string",
  "timestamp": "2022-04-13T13:35:16.678Z",
  "message": "string",
  "subErrors": [
    {}
  ]
}
```

- **code**: rappresentazione sotto forma di stringa del codice d'errore HTTP. Coincide con l'errore HTTP ritornato
- **tiemstamp**: data e ora della risposta, espresso sotto forma di stringa
- **message**: messaggio che esprime l'errore

Gli errori possibili sono:

- **400**: la richiesta è malformata (parametri con formato errato, parametri invalidi o inconsistenti fra loro)
- **401**: non è stato fornito un token autorizzativo o il token autorizzativo fornito non è valido (es: è scaduto)
- **403**: il token fornito è valido, ma l'utente non è autorizzato a leggere gli SPID associati al RAO
- **500**: si è verificato un errore inaspettato