# 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="/files/spda6qdyYfpdW7vaWGb4" alt=""><figcaption></figcaption></figure>

### Add an event subscription

#### Event Type

<div align="left"><figure><img src="/files/dyNlDqCBSamodIBkkqTH" 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="/files/ZOH01Ux0umDxKbdwkmYg" 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="/files/FgZ02swlntj4pvieJM9V" 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="/files/bKvbnEgpiSwDRKuCr9f6" 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](/json-schemas.md).

#### 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](/flow-content-data-format.md) 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 %}


---

# 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.formsort.com/event-subscriptions.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.
