# Events subscriptions

**Events** allow you to receive notifications whenever notable events happen within the Formsort ecosystem. They can be configured using **Add an event subscription** within the **Events** tab.

<figure><img src="https://1036686854-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJPnL__mOdr_mLZ8nwf%2Fuploads%2F4fd4qxy6EByMKIVSjJq6%2Fimage.png?alt=media&#x26;token=274a7e6d-3276-454e-b19a-5611347506ac" alt=""><figcaption></figcaption></figure>

### Add an event subscription

#### Event Type

<div align="left"><figure><img src="https://1036686854-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJPnL__mOdr_mLZ8nwf%2Fuploads%2F8t50LYsOYutUBsMVZkJl%2Fimage.png?alt=media&#x26;token=067334ca-6dbb-4bc2-9d22-e631ab2168b9" alt=""><figcaption></figcaption></figure></div>

As of this doc writing, the only triggering event available will be the `variant_revision_published` event. With this enabled, any variant published to any environment in any Flow, by any member of your team, will send an event notification to the destination you have configured.&#x20;

See [About the payload](#about-the-payload) for more information about the event payload sent.

#### Destination Type

<div align="left"><figure><img src="https://1036686854-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJPnL__mOdr_mLZ8nwf%2Fuploads%2FCXAH5v6uMbDuQNSUFASE%2Fimage.png?alt=media&#x26;token=54e0364a-73a8-481d-9e8a-c85d1767355a" alt=""><figcaption></figcaption></figure></div>

You can choose to have a JSON payload sent to a webhook endpoint, or you can choose to have a notification sent to your Slack space.&#x20;

#### Details about your connection

You will need to set the endpoint address for your integration type. Descriptions are optional. Once the endpoint is set, you can **Send test event** to ensure everything has been configured correctly.&#x20;

If you choose to send a JSON payload, you will have to register a webhook endpoint URL.

<div align="left"><figure><img src="https://1036686854-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJPnL__mOdr_mLZ8nwf%2Fuploads%2FxZgklfo7toAvJFK7YK1Z%2Fimage.png?alt=media&#x26;token=d92a4e63-fa96-4c91-bd32-af4fca5e6590" alt="" width="417"><figcaption></figcaption></figure></div>

If you opt to send notifications to Slack, you will have to register a Slack URL.&#x20;

<div align="left"><figure><img src="https://1036686854-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MJPnL__mOdr_mLZ8nwf%2Fuploads%2FOifsa8ci746WzucLZpqO%2Fimage.png?alt=media&#x26;token=0dc4e4f9-ece7-4b1f-bb84-e383fa27523d" alt="" width="405"><figcaption></figcaption></figure></div>

#### Signing Key

While not required, you can use a Signing Key to provide extra security for your Events payloads. Only one key can be set for Events subscriptions.&#x20;

***

### About the payload

#### jsonSchema

This is the [JSON Schema](https://json-schema.org/) representation of the answers object that this flow creates. Read more about this in the documentation about [JSON Schema at Formsort](https://docs.formsort.com/json-schemas).

#### flowContent

Flow content is a representation of the structure of the form, including the groups, steps, and questions within it. Read more about the [flow content data format](https://docs.formsort.com/flow-content-data-format) if you'd like to use it.

Below is an example webhook payload, with every component and configuration in Formsort represented.

```json
{
  "event": {
    "id": "5gQOVUsxs8o35vVHF4IKM",
    "type": "variant_revision_published",
    "createdAt": "2023-07-25T19:33:30+0000"
  },
  "payload": {
    "flowLabel": "sub-event-test",
    "environmentLabel": "production",
    "variantLabel": "main",
    "variantRevisionUuid": "5af64f19-42cb-45f6-8d69-2d1cd491016f",
    "jsonSchema": {
      "$schema": "http://json-schema.org/draft-07/schema#",
      "type": "object",
      "definitions": {
        "address": {
          "type": "object",
          "properties": {
            "raw": {
              "type": "string"
            },
            "address_1": {
              "type": "string"
            },
            "address_2": {
              "type": "string"
            },
            "city": {
              "type": "string"
            },
            "state": {
              "type": "string"
            },
            "postal_code": {
              "type": "string"
            },
            "country": {
              "type": "string"
            }
          },
          "required": [
            "address_1",
            "city",
            "state",
            "postal_code"
          ]
        }
      },
      "properties": {
        "text_multiline": {
          "type": "string"
        },
        "number": {
          "type": "number"
        },
        "date": {
          "type": "string",
          "format": "date"
        },
        "select_buttons": {
          "oneOf": [
            {
              "const": "1"
            },
            {
              "const": "0"
            },
            {
              "const": "3"
            },
            {
              "const": "4"
            },
            {
              "const": "2"
            }
          ]
        },
        "single_field_address": {
          "$ref": "#/definitions/address"
        },
        "grid_vegetables": {
          "oneOf": [
            {
              "const": "never"
            },
            {
              "const": "always"
            },
            {
              "const": "sometimes"
            }
          ]
        },
        "boolean": {
          "type": "boolean"
        },
        "this_will_load_example_com_h": {
          "type": "string"
        },
        "grid_question": {
          "type": "string"
        },
        "utm_params": {
          "type": "string"
        },
        "payment": {
          "type": "string"
        },
        "text_single_line": {
          "type": "string"
        },
        "email": {
          "type": "string",
          "format": "email"
        },
        "address": {
          "$ref": "#/definitions/address"
        },
        "api_response": {
          "type": "number"
        },
        "example_calc_var": {
          "type": "string"
        },
        "postal_code": {
          "type": "string"
        },
        "confirm": {
          "type": "boolean"
        },
        "grid_fruits": {
          "oneOf": [
            {
              "const": "never"
            },
            {
              "const": "always"
            },
            {
              "const": "sometimes"
            }
          ]
        },
        "phone_number": {
          "type": "string"
        }
      }
    },
    "publishedAt": "2023-07-25T19:33:29.072738+00:00",
    "publishedByEmail": "eric@formsort.com",
    "notes": null,
    "flowContent": {
      "groups": [
        {
          "label": "Questions",
          "id": "question-group",
          "steps": [
            {
              "questions": [
                {
                  "label": "# Boolean question",
                  "schemaKey": "boolean",
                  "id": "boolean-question",
                  "choices": [
                    {
                      "label": "Yes",
                      "value": true
                    },
                    {
                      "label": "No",
                      "value": false
                    }
                  ],
                  "optional": true,
                  "type": "boolean"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Select question",
                  "schemaKey": "select_buttons",
                  "choices": [
                    {
                      "label": "Strongly Disagree",
                      "value": "0"
                    },
                    {
                      "label": "Disagree",
                      "value": "1"
                    },
                    {
                      "label": "Undecided",
                      "value": "2"
                    },
                    {
                      "label": "Agree",
                      "value": "3"
                    },
                    {
                      "label": "Strongly Agree",
                      "value": "4"
                    }
                  ],
                  "optional": true,
                  "type": "select"
                }
              ]
            },
            {
              "label": "Step 1 label",
              "questions": [
                {
                  "label": "default address",
                  "schemaKey": "address",
                  "optional": true,
                  "type": "address"
                },
                {
                  "label": "single field address",
                  "schemaKey": "single_field_address",
                  "type": "address"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Confirm question",
                  "schemaKey": "confirm",
                  "optional": true,
                  "type": "confirm"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Custom question",
                  "type": "custom"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Date question",
                  "schemaKey": "date",
                  "optional": true,
                  "type": "date"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Email question",
                  "schemaKey": "email",
                  "optional": true,
                  "type": "email"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Grid question",
                  "optional": true,
                  "subQuestions": [
                    {
                      "label": "Fruits",
                      "schemaKey": "grid_fruits",
                      "type": "select",
                      "choices": [
                        {
                          "label": "Never",
                          "value": "never"
                        },
                        {
                          "label": "Sometimes",
                          "value": "sometimes"
                        },
                        {
                          "label": "Always",
                          "value": "always"
                        }
                      ]
                    },
                    {
                      "label": "Vegetables",
                      "schemaKey": "grid_vegetables",
                      "type": "select",
                      "choices": [
                        {
                          "label": "Never",
                          "value": "never"
                        },
                        {
                          "label": "Sometimes",
                          "value": "sometimes"
                        },
                        {
                          "label": "Always",
                          "value": "always"
                        }
                      ]
                    }
                  ],
                  "type": "grid"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Number question",
                  "schemaKey": "number",
                  "optional": true,
                  "type": "number"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Payment question",
                  "schemaKey": "payment",
                  "optional": true,
                  "type": "payment"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Phone question",
                  "schemaKey": "phone_number",
                  "optional": true,
                  "type": "phone"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Postal code question",
                  "schemaKey": "postal_code",
                  "optional": true,
                  "type": "postalCode"
                }
              ]
            },
            {
              "questions": [
                {
                  "label": "# Text question (single line)",
                  "schemaKey": "text_single_line",
                  "optional": true,
                  "type": "text"
                },
                {
                  "label": "# Text question (multi-line)",
                  "schemaKey": "text_multiline",
                  "optional": true,
                  "type": "text"
                }
              ]
            }
          ]
        },
        {
          "label": "Content",
          "id": "content-group",
          "steps": [
            {
              "questions": [
                {
                  "label": "# This is informational content",
                  "type": "informational"
                },
                {
                  "label": "",
                  "type": "divider"
                }
              ]
            }
          ]
        }
      ],
      "variables": {
        "external": {
          "utm_params": {}
        },
        "calculated": {
          "example_calc_var": "function myFunction(utm_params: string): string {\n  return utm_params\n}"
        },
        "api": {
          "api_response": {
            "apiUrl": "https://jsonplaceholder.typicode.com/todos/1",
            "apiResultAccessor": "userId"
          }
        }
      }
    }
  }
}
```

{% hint style="info" %}
This is currently in development, and may not be present for 100% of flows as we roll it out. When it's fully released as a 1.0 version, a comprehensive documentation of its structure will be provided. For now, use the above example as a guide.
{% endhint %}
