Documentation
HomeRequest DemoContact

Webhooks

Send notifications as webhook payload to an HTTP endpoint.

Webhook Configuration Parameters

Field / OptionDescription
Channel typeSelect Webhook as the channel type to send notifications to.
NameIdentifier for the channel, used to configure notification rules.
Webhook URLWebhook URL to the specified HTTP endpoint.
Auth header(Optional) Signature to include in the authorization header sent to the HTTP endpoint.
Application link URLURL to your Validio application instance, used to send notifications.

Note: This is predefined based on the web browser URL.

📘

Note

There is no timeout for Validio webhook requests. However, failed message requests will be retried.

Webhook Payload

Webhook payload is data embedded in a HTTP POST as JSON format. When your Notification rule is triggered, the webhook payload is sent to the specified HTTP endpoint. The payload structure varies depending on the notification type.

📘

Note

Validio does not send notifications for backfilled incidents.

Validator Incidents

Validator incidents occur when your data breaches a configured Threshold. The payload structure varies depending on Segmentation and Threshold type.

{
  "type": "ValidatorIncident",
  "title": "1 incident triggered on: demo_source (DynamicThreshold threshold)",
  "validatorUrl": "https://your-validio-instance.com/observe/sources/SRC_123/validators/VAL_13",
  "source": {
    "id": "SRC_123",
    "name": "demo_source"
  },
  "validator": {
    "id": "MTR_13",
    "name": "numeric_validator"
  },
  "segmentation": {
    "id": "SGM_123",
    "name": "Unsegmented"
  },
  "incidents": [
    {
      "endTime": "2024-01-01 0:00:01 UTC",
      "message": "placeholder",
      "incident_id": "TAT_123",
      "incident_group_id": "IGP_123",
      "segment": {
        "segmentFields": [
          {
            "field": "Age",
            "value": "123"
          }
        ],
        "segmentId": "PRT_123"
      },
      "startTime": "2024-01-01 0:00:01 UTC",
      "threshold": {
        "backfillMode": false,
        "decisionBoundsType": "UPPER_AND_LOWER",
        "lowerBound": 0,
        "sensitivity": 3,
        "severity": "LOW",
        "thresholdType": "DynamicThreshold",
        "upperBound": 1,
        "value": 0
      },
      "url": "http://your-validio-instance.com/issues/incidents/IGP_123"
    }
  ]
}

Dynamic Threshold

The payload structure for dynamic thresholds include the value, boundary, and decisionBoundsType: LOWER, UPPER, or UPPER_AND_LOWER.

"threshold": {
    "thresholdType": "DynamicThreshold",
    "value": 90,
    "decisionBoundsType": "UPPER_AND_LOWER",
    "lowerBound": 80.47892,
    "upperBound": 84.3383
}
"threshold": {
    "thresholdType": "DynamicThreshold",
    "value": 81,
    "decisionBoundsType": "LOWER",
    "lowerBound": 81.62181
}

Fixed Threshold

The payload structure for fixed thresholds include the comparison value, value, and comparison operator: LESS, LESS_EQUAL, EQUAL, NOT_EQUAL, GREATER, or GREATER_EQUAL.

"threshold": {
    "thresholdType": "FixedThreshold",
    "operator": "LESS",
    "comparisonValue": 8,
    "value": 6
}
"threshold": {
    "thresholdType": "FixedThreshold",
    "operator": "LESS_EQUAL",
    "comparisonValue": 30,
    "value": 24
}

Difference Threshold

The payload structure for difference thresholds include the difference_type which contains either ABSOLUTE or PERCENTAGE.

"threshold": {
  "thresholdType": "DifferenceThreshold",
  "lowerBound": 42.0,
  "upperBound": 42.1,
  "differenceType": "PERCENTAGE",
  "value": 42.2,
  "numberOfWindows": 42
}

Schema Changes

Validio can send notifications about changes in your schema. changeTypes can include one of the following: Nullability, MissingField, JtdType, or UnderlyingType.

{
  "type": "SchemaChangeSourceError",
  "title": "1 schema change found on: demo_source (DemoSource).",
  "sourceUrl": "https://your-validio-instance.com/observe/sources/SRC_123",
  "sourceId": "SRC_123",
  "source": {
    "id": "SRC_123",
    "name": "demo_source"
  },
  "incidents": [
    {
      "changes": {
        "Age": {
          "changeTypes": ["Nullability", "JtdType", "UnderlyingType", "Index"],
          "new": {
            "fieldIndex": 5,
            "name": "Age",
            "nullable": true,
            "type": "float64",
            "underlyingType": "int"
          },
          "old": {
            "fieldIndex": 2,
            "name": "Age",
            "nullable": false,
            "type": "float64",
            "underlyingType": "int"
          }
        },
        "Credit_score": {
          "changeTypes": ["JtdType"],
          "new": {
            "name": "Credit_score",
            "nullable": false,
            "type": "string",
            "underlyingType": "float64"
          },
          "old": {
            "name": "Credit_score",
            "nullable": false,
            "type": "float64",
            "underlyingType": "float64"
          }
        },
        "age2": {
          "changeTypes": ["MissingField"],
          "new": {
            "name": "",
            "nullable": false,
            "type": "",
            "underlyingType": ""
          },
          "old": {
            "name": "age",
            "nullable": true,
            "type": "float64",
            "underlyingType": "FLOAT"
          }
        },
        "age3": {
          "changeTypes": ["JtdType"],
          "new": {
            "name": "age3",
            "nullable": false,
            "type": "float64",
            "underlyingType": "string"
          }
        },
        "buy_cycle": {
          "changeTypes": ["MissingField"],
          "new": {
            "name": "",
            "nullable": false,
            "type": "",
            "underlyingType": ""
          },
          "old": {
            "name": "buy_cycle",
            "nullable": true,
            "type": "float64",
            "underlyingType": "INTEGER"
          }
        },
        "country": {
          "changeTypes": ["AddedField"],
          "new": {
            "name": "country",
            "nullable": false,
            "type": "string",
            "underlyingType": "string"
          },
          "old": {
            "name": "",
            "nullable": false,
            "type": "",
            "underlyingType": ""
          }
        },
        "exam_28d": {
          "changeTypes": ["MissingField"],
          "new": {
            "name": "",
            "nullable": false,
            "type": "",
            "underlyingType": ""
          },
          "old": {
            "name": "exam_28d",
            "nullable": true,
            "type": "float64",
            "underlyingType": "INTEGER"
          }
        },
        "exam_7d": {
          "changeTypes": ["MissingField"],
          "new": {
            "name": "",
            "nullable": false,
            "type": "",
            "underlyingType": ""
          },
          "old": {
            "name": "exam_7d",
            "nullable": true,
            "type": "float64",
            "underlyingType": "INTEGER"
          }
        },
        "gender": {
          "changeTypes": ["MissingField"],
          "new": {
            "name": "",
            "nullable": false,
            "type": "",
            "underlyingType": ""
          },
          "old": {
            "name": "gender",
            "nullable": true,
            "type": "float64",
            "underlyingType": "INTEGER"
          }
        },
        "new_nps": {
          "changeTypes": ["MissingField"],
          "new": {
            "name": "",
            "nullable": false,
            "type": "",
            "underlyingType": ""
          },
          "old": {
            "name": "new_nps",
            "nullable": true,
            "type": "float64",
            "underlyingType": "FLOAT"
          }
        }
      }
    }
  ]
}

Segment Limits

{
  "type": "SegmentLimitExceededSourceError",
  "title": "1 segment limit exceeded on: demo_source (DemoSource).",
  "sourceUrl": "https://your-validio-instance.com/observe/sources/SRC_123",
  "sourceId": "SRC_123",
  "source": {
    "id": "SRC_123",
    "name": "demo_source"
  },
  "incidents": [
    {
      "limit": 1000,
      "segmentation": {
        "id": "SGM_123",
        "name": "Unsegmented"
      },
      "segmentationUrl": "https://your-validio-instance.com/observe/sources/SRC_123/segmentations/SGM_123"
    }
  ]
}

Source Errors

{
  "type": "GenericSourceError",
  "title": "1 source error found on: demo_source (DemoSource).",
  "sourceUrl": "https://your-validio-instance.com/observe/sources/SRC_123",
  "sourceId": "SRC_123",
  "source": {
    "id": "SRC_123",
    "name": "demo_source"
  },
  "incidents": [
    {
      "message": "An unknown error has occurred in the source."
    }
  ]
}