# Consents

## **Create consent**

To create a consent use the following endpoint: `POST /api/Consent`

### **Input**


```json
//POST /api/Consent
{
  "agreementGroupGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "consentGroupGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "userIp": "string",
  "externalID": "string",
  "environment": 0,
  "screenshot": "string",
  "clauses": [
    {
      "tag": "my_tag",
      "accepted": true
    }
  ],
  "fieldCollection": {
    "name": "name",
    "surname": "surname",
    "email": "name.surname@gmail.com"
  }
}
```

| Field | Description |
|  --- | --- |
| AgreementGroupGuid | Agreement group connected to the consent |
| ConsentGroupGuid | This parameter is used if you want to update a previously expressed consent. If you create a new consent or you don't need to modify a previous consent, it can be set to null or to an empty guid. If the agreement feature "Can this agreement be modified?" isn't enabled, this value will be ignored |
| UserIp | The IP address of the user |
| ExternalId | The key used in your software that represents the user |
| Environment | 0: staging, 1: production |
| Screenshot | Byte array of an image corresponding to the consent. If the agreement feature "Capture Screenshot" isn't enabled, this value will be ignored |
| Clauses | The list of conditions set in the agreement |
| FieldCollection | A JSON where the recipient information is saved or other information you might want to save and associate with the consent |


### **Output**


```json
{
  "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "agreement": {
    "version": "string",
    "enviroment": 0,
    "groupGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "nameOfAgreement": "string"
  },
  "fieldCollection": "string",
  "consentDate": "2023-05-03T10:35:07.421Z",
  "platform": "string",
  "userIdentifier": "string",
  "clauses": [
    {
      "tag": "my_tag",
      "accepted": true
    }
  ],
  "agreementHash": "string",
  "externalID": "string",
  "consentGroupGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "screenshot": "string",
  "userIp": "string"
}
```

| Field | Description |
|  --- | --- |
| Guid | The auto generated consent guid |
| Agreement | The agreement linked to the consent |
| Agreement.Version | The version of the agreement |
| Agreement.Enviroment | 0 = staging, 1 = production |
| Agreement.GroupGuid | Unique identifier that binds all the versions of a specific agreement |
| Agreement.NameOfAgreement | Name of the agreement |
| FieldCollection | The same collection as input |
| ConsentDate | Creation date of the consent |
| Platform | Platform on which the consent is created (Windows, Android, Macintosh, iPhone, iPad, BlackBerry, CrOS, Linux, Symbian, Others) |
| UserIdentifier | Identifier of the user who has given the consent; it is automatically extracted from the field collection if there's a field named "email" or "mail" or "e-mail", otherwise it will be saved as an empty string |
| Clauses | The same collection as input |
| AgreementHash | The hash that will be sent on the blockchain |
| ExternalID | The same as input |
| ConsentGroupGuid | Auto generated guid, useful to modify a consent with this API |
| Screenshot | The same as input |
| UserIp | The same as input |


## **Get consents**

To get the consents you use the following endpoint: `POST /api/Consent/List`

### **Input**


```json
//POST /api/Consent/List
{
  "agreementGroupGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "externalID": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "userIdentifier": "string",
  "dateFrom": "2020-04-01T00:00:00.0000000",
  "dateTo": "2030-04-01T00:00:00.0000000",
  "platform": "string",
  "enviroment": 0,
  "version": "string",
  "getScreenshot": true,
  "page": 1,
  "itemsPerPage": 20
}
```

| Field | Description |
|  --- | --- |
| AgreementGroupGuid | If set, retrieves the consents related to this specific agreement group guid |
| ExternalId | If set, retrieves the consents related to this specific ExternalId |
| UserIdentifier | If set, retrieves the consents related to this specific UserIdentifier |
| DateFrom | If set, retrieves the consents created starting from this date |
| DateTo | If set, retrieves the consents created up to this date |
| Platform | If set, retrieves the consents of this specific platform |
| Enviroment | If set, retrieves consents of a specific environment (0: staging, 1: production) |
| Version | If set, retrieves consents related to a specific version of the agreement |
| GetScreenshot | If set, retrieves the screenshot linked to the consent |
| Page | Page number |
| ItemsPerPage | Items per page |


The only required parameters are `page` and `itemsPerPage`.
The result collection doesn't include consents related to deleted agreements.
The output is a list of consents corresponding to the search crtiteria.

### **Output**


```json
[
  {
    "guid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "agreement": {
      "version": "string",
      "enviroment": 0,
      "groupGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "nameOfAgreement": "string"
    },
    "fieldCollection": "string",
    "consentDate": "2023-05-03T10:55:32.675Z",
    "platform": "string",
    "userIdentifier": "string",
    "clauses": [
      {
        "tag": "my_tag",
        "accepted": true
      }
    ],
    "blockchainProcessId": "string",
    "blockchainTxHash": "string",
    "agreementHash": "string",
    "blockchainStatus": 0,
    "blockchainStatusDate": "2023-05-03T10:55:32.675Z",
    "externalID": "string",
    "blockchainUuid": "string",
    "screenshot": "string",
    "consentGroupGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "userIp": "string"
  }
]
```

| Field | Description |
|  --- | --- |
| Guid | The auto generated consent guid |
| Agreement | The agreement linked to the consent |
| Agreement.Version | The version of the agreement |
| Agreement.Enviroment | 0 = staging, 1 = production |
| Agreement.GroupGuid | Unique identifier that binds all the versions of a specific agreement |
| Agreement.NameOfAgreement | Name of the agreement |
| FieldCollection | The JSON given as input in the integrator's APIs or compiled by the user with the required field in the website snippet |
| ConsentDate | Consent creation date |
| Platform | Platform on which the agreement is created (Windows, Android, Macintosh, iPhone, iPad, BlackBerry, CrOS, Linux, Symbian, Others) |
| UserIdentifier | Identifier of the user who has given the consent; it is automatically extracted from the field collection if there's a field named "email" or "mail" or "e-mail", otherwise an empty string |
| Clauses | The clauses list |
| Clauses.ClausesTag | The tag you have created in the agreement |
| Clauses.ClausesAccepted | If the user accepted or denied |
| BlockchainProcessId | The id of the process on the blockchain |
| BlockchainTxHash | The final hash that represents the success on the consent save on the blockchain (the blockchain may take a bit of time and it may not be valorized immediately after the creation of a consent) |
| AgreementHash | The agreement hash that will be sent on the blockchain |
| BlockchainStatus | Save status on the blockchain (Registered = 0, Queued = 1, ProcessCreated = 2, Notarized = 3, Error = 4) |
| BlockchainStatusDate | When the status of the save on the blockchain changes |
| ExternalID | The key used in your software that represents the user |
| BlockchainUuid | UUID generated by the blockchain |
| Screenshot | The screenshot generated by creating a consent, if in the agreement the option Capture screenshot is flagged. If there's no screenshot the output is an empty byte array. |
| ConsentGroupGuid | Group guid of the consent |
| UserIp | The IP address of the user |


## **Get audit trail PDF**

To get the audit trail PDF document you can use the following endpoint:

`GET /api/Consent/GetAuditTrail/{consentGuid}`

### **Output**

The Audit Trail PDF file.