# Sensitive Profile Attributes

## Sensitive Profile Attributes

This mutation creates user profile attributes using **Asymmetric Encryption** each partner needs to have its Public and Private Keys 🔑

| Argument     | Type    | Required | Description                                                                |
| ------------ | ------- | -------- | -------------------------------------------------------------------------- |
| `attributes` | String! | True     | Encrypted profile attributes, this should be a valid JSON encrypted string |

```graphql
mutation {
  sensitiveProfileAttributes(
    attributes: "ZnlnY1QImbEse19xxr3tLulEzWxiRQTk4h2D4IYZkzCj+wwKhTlqQfi9PSs5I+BH4h/A2pIFiitweny3bK7dOKF2lkwtNPRKNu/VXWA423sQVdZct1w1pe6MExFhNm7r/y4rseJs+i30gsDC3EMo3tPgbiYB2UXMMKfe34cSb0xP1pnSTPHs+feyzSASojxl7bkoZ+nN9/rwpdPpsZ10ncO4CvYLVTZBiep7y/TC5HSQZCRGfHfAdFzYTYfgdD17gskvwvGUvdRJuFxEEYHZUze+uqBzg36nbQQzCLMzqyFFS0iuYTEvZt01iDprnIdZGAP+nElmc7yJGb+5yXvGdLutWjntACcQUFzqRKaX/RrWoxOg+zHQvIJ78VY51ReL0vRQrOlV4Nh83aBGki395A40tTMHMJpqUm8kDAfu7RoCZlTVWfVo09BrrRUAFnBfrAejSiIwcxIp98qZhyIQtoq8zxBl2JqxrYpgWes/DIo1AguBVN5Lwh+YTU3oL68Wfwh3ULlR6hCAQ9Cf/NsT5bUx9/F8epOY5ExhACZV+/W1qLjJwYx8NH+OKXxzIEXtbS3RAZehlxTMDj2PLqzd5tA1dhE+NR4HTiWSCFbv+mDY8xHtuw/AtRd587gynUVfBHuyNSKl0dFgLGIHydC9zG3K2z6kWbaxeR9OtVU0fTV1ulPf+wE3MeZQUlweBYqtUJP2/JZheNcU+pEfdkJlPMukqKSyRbgBkSM3ZTaXsdrGZF1eZicWiYAj+2cXv2MFZffg6kjZlGovW/PLQSAGgmnJJw7UbTIbMlxNMaZOlOnPwmUWGpsW8+j6O46BtH3fe5HF9ucu3gUpmBLmn9kJJcZ/nB+a/YuW/DUlInWo0SzpO9PJSaXXQmvgu6y5gO044maeFRQA65jlf8f3/gL0bSiEZQUwrzKGilvE7S8pBSkstaELE3HVqVFbB/RnUat/zJWIynu0wWeYxpfeu0l6X3va8/iisSLGJByEnY4SF+FElMICHBxZgTl8j88od+F67aeHY5qtJhbbzIwQqtWxNPAh8aNTjYEYe5RgIFw3YpNvs3v8NOT26iwX/AW7fqtWwq8cq4qzgLHR8BOEFSrrHTrUMh0wIuHJG1OyuK6hbqD0E2YRgmd5KYON8kgeNOpABUTcKblIDYAA4vq032VT0v9AfvILXeMyVcxZNYSrA7XMDoWWYHkjXDTcKF1xsw90IKmUIDKyKOPLwnP15fbnWObw2WZVtRl8md+Wg040iEj68zLEqML1tCHyaPFzBHltPOlS+VhUrgiwmekEy4CLUORxkXqVa1was8l/NHT6zVdpavLcrGHEOHwpO5XeekTSrfJvRg7TGqfePh0252L6IHWTpSDLaGAQIUybWKaOccyla7mehjVybiOUO1FHg2rlrKxu1eqPK71RtDtF9566VbI9INBNNSUeH0yNAjjJSV9AWuRHW9q8KEoYjst6iC/ym6P+/nh0SEZeNxbIPOFqP5DOxmWvw2/4yzzlloyCzfYHqb2nOinUfdJvAO/s+f0wPexmx6NT9Fx84kQEkPIYVEvpNUxpPUSgKq7i492Kj/reX3QXjOMAj/bMO2RTTRLqTlZZW9dfN/fpHDSgKuGHhrDiVkqAstVzMymVnECtuY9//kBUdanfjdbTXR/fN11/H80AwhJmYGX+9VnDFENRp/gWjKqYSa63rel9Agln4rpCWQ0oI3xyIA41sKjzE3s3Y8DbEYKbnhlvSC8dCxxhEjVUIIkupZBXKOY45nFshFGrmWp1rFx1Vxmn3KFTXCSjcFcaaoLirLYvG3KFLMgrI3AbGnfa00twrdQR/t3jZvc="
  ) {
    success
    errors {
      field
      messages
    }
  }
}
```

### Decrypted attributes <a href="#decrypted-attributes" id="decrypted-attributes"></a>

Attributes structure should be the same as [CustomProfileAttribute](https://docs.suggestic.com/graphql/query/mutations/user-profile/custom-attributes#profilecustomattribute)​

```javascript
[
      {
        name: "Carbohydrate Metabolism",
        dataType: STRING,
        value: "Slow"
      },
      {
        name: "Gluten Sensitivity",
        dataType: INT,
        value: 1
      },
      {
        name: "Lactose Tolerance",
        dataType: FLOAT,
        value: 1.4
        },
      {
        name: "Fiber Need",
        dataType: BOOLEAN,
        value: true
      }
]
```

### ​Generating Keys

In order to encrypt users' profile attributes will need to create a private and public key, this can be achieved using [OpenSSL](https://www.openssl.org/).&#x20;

```javascript
# Private key
openssl genrsa -out privkey.pem 2048
# Public key
openssl rsa -in privkey.pem -pubout -out pubkey.pem
```

You can now share your 🔑 pubkey.pem with Suggestic, this way we can decode users' attributes on or end.

{% hint style="warning" %}
Store securely and do not share your privkey.pem key 🔑
{% endhint %}

Once the public and private keys are created you can then use them to encode users attributes using JWT RS256

```python
import jwt
# Encoding user attr in partners end
private_key = b"-----BEGIN PRIVATE KEY-----\nMIGEAgEAMBAGByqGSM49AgEGBS..."
public_key = b"-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEAC..."
encoded = jwt.encode(
    {"name": "Carbohydrate Metabolism"},
    private_key,
    algorithm="RS256"
)
print(encoded)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg

# Decoding - this happens in Suggestic end
decoded = jwt.decode(encoded, public_key, algorithms=["RS256"])
{'name': 'Carbohydrate Metabolism'}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.suggestic.com/graphql/query/mutations/user-profile/sensitive-profile-attributes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
