# Signature Read

API di lettura per *Ts Digital Signature per le operazioni riguardanti i documenti.* [Swagger](https://signature-read-api-test.agyo.io/api/swagger-ui.html)

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

####  

#### Descrizione API

---

##### **DOCUMENTS**

---

**Search documents**

<p class="callout info"><span class="opblock-summary-method">\[POST\] </span><span class="opblock-summary-path" data-path="/v1/documents/search">[​/v1​/documents​/search](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Documents/search)</span></p>

Permette di effettuare una ricerca filtrata per i documenti di una determinata azienda

**Query params**

- `page` numero di pagina
- `size` numero di elementi per pagina
- `sort` campo per cui ordinare i documenti

**Request body**

- `page` numero di pagina<span style="color: #ff0000;"> //TODO FIX</span>
- `size` numero di elementi per pagina <span style="color: #ff0000;">//TODO FIX</span>
- `sort` campo per cui ordinare i documenti <span style="color: #ff0000;">//TODO FIX</span>
- `managerId` identificativo dello studio a cui è connessa l'azienda, permette di visualizzare i documenti che lo studio ha creato per conto di una determinata azienda
- `documentStatusId` stato del documento
- `documentTypeId` tipo documento
- documentOwnerId
- ownerCriteria.ownerType
- ownerCriteria.searchTextCriteria
- batchId
- `multiDocumentSessionId` id del documento multi sessione creato
- `documentIntermediaryId` identificativo azienda, <span style="text-decoration: underline;">**campo obbligatorio**</span>
- `cctStatusCode` stato della conservazione del documento
- `lastTimestampFrom` timestamp da cui inizierà la ricerca dei documenti che sono stati aggiornati fino al momento della chiamata
- `minCreationDate` data di creazione del documento da cui iniziare la ricerca
- `maxCreationDate` data di creazione del documento da per finire la ricerca
- `expiryDate` data di scadenza
- `signerTextFieldsSearchCriteria` permette di effettuare una ricerca per i firmatario inseriti nei documenti, il campi in cui viene fatta la ricerca sono //chiedere a Nico

```JSON
{ //TODO FIX
  "page": {
    "page": 0,
    "size": 0,
    "sort": [
      "string"
    ]
  },
  "request": {
    "managerId": "string",
    "documentStatusId": "string",
    "documentTypeId": "string",
    "documentOwnerId": "string",
    "ownerCriteria": {
      "ownerType": "string",
      "searchTextCriteria": "string"
    },
    "batchId": "string",
    "multiDocumentSessionId": "string",
    "documentIntermediaryId": "string",
    "cctStatusCode": "string",
    "lastTimestampFrom": 0,
    "minCreationDate": "2021-02-24T23:34:28.076Z",
    "maxCreationDate": "2021-02-24T23:34:28.076Z",
    "expiryDate": "2021-02-24T23:34:28.076Z",
    "signerTextFieldsSearchCriteria": "string"
  }
}
```

---

**Retrieve detail of single document**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documents/{hubId}">[​/v1​/documents​/{hubId}](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Documents/getOne_2)</span></p>

Permette di recuperare tutte le info di un determinato documento

**Query params**

- `hubId` identificativo del documento

---

**Get document signature links**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documents/{hubId}/signatureLink">[​/v1​/documents​/{hubId}​/signatureLink](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Documents/getSignatureLink)</span></p>

Restituisce il link riguardanti una determinata sessione in stato `ALLA_FIRMA` divisi per firmatari

**Query params**

- `hubId` identificativo del documento

**Response**

```JavaScript
[
    {
        "fiscalCode": "CSAMRC80A01I829M",
        "email": "rmainini@mondora.com",
        "url": "https://b2bstaticdev.blob.core.windows.net/static-apps/b2b-firma/actions/redirect.html?sign_token=Y2NjNDYxZTgtOWEyNy00OTdmLTkwYTQtZjdlYzg1ODUzNmZl"
    },
    {
        "fiscalCode": "DBSNDR93T31B519E",
        "email": "rmainini@mondora.com",
        "url": "https://b2bstaticdev.blob.core.windows.net/static-apps/b2b-firma/actions/redirect.html?sign_token=MzFhZGE3NmItOTM2OS00YTFmLWE4MmEtNzg5ZTM5NmExODhl"
    }
]
```

---

**Get multiSessionDocument signature links**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documents/multiDocumentSession/{multiDocumentSessionId}/signatureLink">[​/v1​/documents​/multiDocumentSession​/{multiDocumentSessionId}​/signatureLink](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Documents/getMultiDocumentSessionSignatureLink)</span></p>

<span class="opblock-summary-path" data-path="/v1/documents/multiDocumentSession/{multiDocumentSessionId}/signatureLink">Restituisce il link riguardanti una determinata sessione in stato `ALLA_FIRMA` divisi per firmatari per i documenti multi sessione</span>

**Query params**

- `multiDocumentSessionId` identificativo del documento multi sessione

**Response**

```JavaScript
[
    {
        "fiscalCode": "CSAMRC80A01I829M",
        "email": "rmainini@mondora.com",
        "url": "https://b2bstaticdev.blob.core.windows.net/static-apps/b2b-firma/actions/redirect.html?sign_token=Y2NjNDYxZTgtOWEyNy00OTdmLTkwYTQtZjdlYzg1ODUzNmZl"
    },
    {
        "fiscalCode": "DBSNDR93T31B519E",
        "email": "rmainini@mondora.com",
        "url": "https://b2bstaticdev.blob.core.windows.net/static-apps/b2b-firma/actions/redirect.html?sign_token=MzFhZGE3NmItOTM2OS00YTFmLWE4MmEtNzg5ZTM5NmExODhl"
    }
]
```

---

**Download attachment as base64**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documents/{hubId}/attachment/{attachmentId}">[​/v1​/documents​/{hubId}​/attachment​/{attachmentId}](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Documents/downloadAttachmentAsBase64)</span></p>

Permette il download in base64 di eventuali allegati del documento

**Path params**

- `hubId` identificativo del documento
- `attachmentId` identificativo dell'allegato, l'id dell'allegato si trova nel json del documento alla chiave **attachments\[\].id**

---

**Download attachment**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documents/{hubId}/attachment/{attachmentId}/file">[​/v1​/documents​/{hubId}​/attachment​/{attachmentId}​/file](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Documents/downloadAttachmentFile)</span></p>

Permette il download del file di eventuali allegati del documento

**Path params**

- `hubId` identificativo del documento
- `attachmentId` identificativo dell'allegato, l'id dell'allegato si trova nel json del documento alla chiave **attachments\[\].id**

---

**Download base64 document**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documents/{hubId}/download">[​/v1​/documents​/{hubId}​/download](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Documents/downloadAsBase64)</span></p>

Permette il download in base64 del documento

**Path params**

- `hubId` identificativo del documento

**Query params**

- `signed` se messo a true verrà scaricato il documento firmato sennò il documento originale

---

**Download document**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documents/{hubId}/download/file">[​/v1​/documents​/{hubId}​/download​/file](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Documents/downloadFile)</span></p>

Permette il download del file del documento

**Path params**

- `hubId` identificativo del documento

**Query params**

- `signed` se messo a true verrà scaricato il documento firmato sennò il documento originale

---

##### **DOCUMENTS TYPES**

---

**Retrieve document type detail**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documentTypes/{id}">[​/v1​/documentTypes​/{id}](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Document%20Types/getOne)</span></p>

Restituisce il dettaglio del singolo tipo di documento

**Path params**

- `id` identificativo del tipo di documento

---

**Retrieve list of document types**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documentTypes">[​/v1​/documentTypes](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Document%20Types/getAll)</span></p>

Restituisce la lista dei tipi documento

---

##### **DOCUMENTS STATUSES**

---

**Retrieve document status detail**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documentStatuses/{id}">[​/v1​/documentStatuses​/{id}](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Document%20Statuses/getOne_1)</span></p>

Restituisce il dettaglio del singolo stato documento

**Path params**

- `id` identificativo dello stato di un documento

---

**Retrieve list of document types**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/documentStatuses">[​/v1​/documentStatuses](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Document%20Statuses/getAll_1)</span></p>

Restituisce la lista degli stati documento

---

##### **ARCHIVED DOCUMENTS**

---

**Search archived documents**

<p class="callout info"><span class="opblock-summary-method">\[POST\] </span><span class="opblock-summary-path" data-path="/v1/archivedDocuments/search">[​/v1​/archivedDocuments​/search](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Archived%20Documents/search_1)</span></p>

Permette di effettuare una ricerca filtrata per i documenti che sono stati cancellati di una determinata azienda

**Query params**

- `page` numero di pagina
- `size` numero di elementi per pagina
- `sort` campo per cui ordinare i documenti

**Request body**

- `page` numero di pagina<span style="color: #ff0000;"> //TODO FIX</span>
- `size` numero di elementi per pagina <span style="color: #ff0000;">//TODO FIX</span>
- `sort` campo per cui ordinare i documenti <span style="color: #ff0000;">//TODO FIX</span>
- `managerId` identificativo dello studio a cui è connessa l'azienda, permette di visualizzare i documenti che lo studio ha creato per conto di una determinata azienda
- `documentStatusId` stato del documento
- `documentTypeId` tipo documento
- documentOwnerId
- ownerCriteria.ownerType
- ownerCriteria.searchTextCriteria
- batchId
- `multiDocumentSessionId` id del documento multi sessione creato
- `documentIntermediaryId` identificativo azienda, <span style="text-decoration: underline;">**campo obbligatorio**</span>
- `cctStatusCode` stato della conservazione del documento
- `lastTimestampFrom` timestamp da cui inizierà la ricerca dei documenti che sono stati aggiornati fino al momento della chiamata
- `minCreationDate` data di creazione del documento da cui iniziare la ricerca
- `maxCreationDate` data di creazione del documento da per finire la ricerca
- `expiryDate` data di scadenza
- `signerTextFieldsSearchCriteria` permette di effettuare una ricerca per i firmatario inseriti nei documenti, il campi in cui viene fatta la ricerca sono //chiedere a Nico

```JSON
{ //TODO FIX
  "page": {
    "page": 0,
    "size": 0,
    "sort": [
      "string"
    ]
  },
  "request": {
    "managerId": "string",
    "documentStatusId": "string",
    "documentTypeId": "string",
    "documentOwnerId": "string",
    "ownerCriteria": {
      "ownerType": "string",
      "searchTextCriteria": "string"
    },
    "batchId": "string",
    "multiDocumentSessionId": "string",
    "documentIntermediaryId": "string",
    "cctStatusCode": "string",
    "lastTimestampFrom": 0,
    "minCreationDate": "2021-02-24T23:34:28.076Z",
    "maxCreationDate": "2021-02-24T23:34:28.076Z",
    "expiryDate": "2021-02-24T23:34:28.076Z",
    "signerTextFieldsSearchCriteria": "string"
  }
}
```

---

**Retrieve detail of single archived document**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/archivedDocuments/{hubId}">[​/v1​/archivedDocuments​/{hubId}](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Archived%20Documents/getOne_4)</span></p>

Permette di recuperare tutte le info di un determinato documento che è stato cancellato

**Query params**

- `hubId` identificativo del documento

---

##### **TEMPLATES**

---

**Get templates list**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/templates">[​/v1​/templates](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Templates/getAll_2)</span></p>

Permette di avere una lista dei template creati

**Query params**

- `page` numero di pagina
- `size` numero di elementi per pagina
- `sort` campo per cui ordinare i documenti
- `ownerId` identificativo azienda

---

**Retrieve detail of single template**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/templates/{templateId}">[​/v1​/templates​/{templateId}](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Templates/getOne_3)</span></p>

Permette di recuperare tutte le info di un determinato template

**Path params**

- `templateId` id del template

---

**Download base64 template document**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/templates/{templateId}/templateDocuments/{templateDocumentId}/download">[​/v1​/templates​/{templateId}​/templateDocuments​/{templateDocumentId}​/download](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Templates/downloadAsBase64_1)</span></p>

Permette il download in base64 di un determinato documento inserito nel template

**Path params**

- `templateId` id del template
- `templateDocumentId` in del documento

---

**Download template document**

<p class="callout info"><span class="opblock-summary-method">\[GET\] </span><span class="opblock-summary-path" data-path="/v1/templates/{templateId}/templateDocuments/{templateDocumentId}/download/file">[​/v1​/templates​/{templateId}​/templateDocuments​/{templateDocumentId}​/download​/file](https://signature-read-api-test.agyo.io/api/swagger-ui/index.html?configUrl=/api/v3/api-docs/swagger-config#/Templates/downloadFile_1)</span></p>

Permette il download del file di un determinato documento inserito nel template

**Path params**

- `templateId` id del template
- `templateDocumentId` in del documento

---

---

//TODO MUOVERE NELLA SEZIONE ESEMPI

### Esempi di utilizzo

#### Fetch documenti incrementale

Per ottenere i documenti in maniera incrementale è necessario utilizzare l'endpoint **/v1/documents/search** specificando un filtro per **lastTimestampFrom** ed un ordinamento per **lastTimestamp**.

```
POST /api/v1/documents/search?page=0&size=100&sort=lastTimestamp,ASC

body:
{ 
	"lastTimestampFrom" : 1587736390388
}
```

Il timestamp è uno unix epoch in millisecondi e la prima volta che si effettua la chiamata non è necessario specificarlo.

Ad ogni chiamata è necessario salvarsi il valore più grande del campo **lastTimestamp** presente sui documenti ottenuti all'ultima pagina richiesta (se il sorting è ascendente, in caso di sorting discendente va preso il primo documento della prima pagina).

Di seguito un esempio:

```
--- chiamata 1 ---
POST /api/v1/documents/search?page=0&size=100&sort=lastTimestamp,ASC

body: { }

response:
{
    "_embedded": {
        "documentList": [
			 ... documenti ...
        ]
    },
    "_links": {
		... links hateoas ...
    },
    "page": {
        "size": 100,
        "totalElements": 150,
        "totalPages": 2,
        "number": 0
    }
}

--- chiamata 2 ---
POST /api/v1/documents/search?page=1&size=100&sort=lastTimestamp,ASC

body: { }

response:
{
    "_embedded": {
        "documentList": [
			 ... primi 49 documenti ...,
             {
               ... campi 50° documento ...,
               "lastTimestamp": 1587736390388
             }
        ]
    },
    "_links": {
		... links hateoas ...
    },
    "page": {
        "size": 100,
        "totalElements": 150,
        "totalPages": 2,
        "number": 1
    }
}

```

Finito il primo giro di richieste paginate sarà necessario salvare il campo lastTimestamp più grande trovato nei documenti ottenuti, in questo esempio il valore **1587736390388**.

Alla richiesta successiva sarà necessario impostare il suddetto valore come filtro **lastTimestampFrom** nel body della richiesta:

```
--- chiamata 1 ---
POST /api/v1/documents/search?page=0&size=100&sort=lastTimestamp,ASC

body: 
{ 
	"lastTimestampFrom": 1587736390388
}

response:
{
    "_embedded": {
        "documentList": [
			 ... 9 documenti ...,
             {
             	... campi 10° documento ...,
                "lastTimestamp": <nuovo valore da salvare>
             }
        ]
    },
    "_links": {
		... links hateoas ...
    },
    "page": {
        "size": 100,
        "totalElements": 10,
        "totalPages": 1,
        "number": 0
    }
}
```

In questo modo ad ogni nuova chiamata saranno presenti solo documenti che hanno subito una variazione, quindi con un lastTimestamp maggiore a quello ottenuto dalla chiamata precedente.