Use this reference to build, validate, and interpret UAT assertion files. It explains every operator, scope, condition source, and count rule supported by Launch Observer.
Every UAT configuration is a JSON file with a site identifier and an array of assertion rules.
siteId (string), assertions (array)
siteName (string), global gates, per-assertion title and description
Use global to include or exclude UAT by service ID and payload-based conditions.
{
"siteId": "example-site",
"siteName": "Example Site",
"global": {
"includeServices": ["adobe-analytics", "adobe-edge"],
"excludeServices": ["meta"],
"excludeConditions": [
{
"source": "payload",
"path": "events[0].xdm.eventType",
"operator": "equals",
"expected": "web.webinteraction.linkClicks"
}
]
},
"assertions": [
{
"id": "pageview-once",
"title": "Pageview fires only once",
"conditionsLogic": "all",
"conditions": [
{
"source": "payload",
"path": "events[0].web.webPageDetails.siteSection",
"operator": "equals",
"expected": "Homepage"
}
],
"validations": [
{
"source": "payload",
"path": "events[0].xdm.eventType",
"operator": "equals",
"expected": "web.webpagedetails.pageViews"
}
],
"scope": "page",
"count": "exactly",
"value": 1
}
]
}
Use these IDs in global.includeServices or global.excludeServices.
Assertions describe what should be true for a request or a page.
| Field | Type | Required | Notes |
|---|---|---|---|
| id | string | Yes | Unique identifier for the rule. |
| title | string | No | Displayed in UI and reports. |
| description | string | No | Helpful context for teammates. |
| conditionsLogic | "all" | "any" | No | Defaults to all (applies to conditions only). |
| scope | "request" | "page" | No | Defaults to request. |
| conditions | array | No | Applicability filters (when the assertion should run). |
| validations | array | Yes | All validations must pass when applicable. |
| count | "exactly" | "at_least" | "at_most" | Only if scope=page | Use with value. |
| value | number | Only if scope=page | The expected count. |
Validations always use all logic (there is no override).
Condition objects are used in both conditions (applicability) and validations (checks that must pass).
| Field | Type | Required | Notes |
|---|---|---|---|
| source | "payload" | "query" | "headers" | "raw" | No | Defaults to payload. |
| path | string | Yes (unless source=raw) | Dotted path or array index (e.g. events[0].xdm.eventType). |
| operator | string | Yes | See operators table below. |
| expected | string | number | array | Required for most operators | Not needed for exists or not_exists. |
Use operators to express equality, matching, and numeric comparisons.
| Operator | Description | Expected type |
|---|---|---|
| exists | Value is present and not empty. | None |
| not_exists | Value is missing or empty. | None |
| equals | Exact match. | string/number |
| contains | Value includes substring. | string |
| starts_with | Value starts with substring. | string |
| ends_with | Value ends with substring. | string |
| regex | Value matches regex. | string (regex) |
| in | Value is one of expected list. | array |
| not_in | Value is not in expected list. | array |
| gt | Greater than. | number |
| gte | Greater than or equal. | number |
| lt | Less than. | number |
| lte | Less than or equal. | number |
| range | Between min and max (inclusive). | array [min, max] |
Request scope checks a single request; page scope validates the total count of matches per page view.
Validates the current request only. Use for event types, query params, headers, and payload values.
Validates how many matching requests occurred on the same page. Use with count and value.
{
"id": "pageview-once",
"conditionsLogic": "all",
"conditions": [],
"scope": "page",
"count": "exactly",
"value": 1,
"validations": [
{
"source": "payload",
"path": "events[0].xdm.eventType",
"operator": "equals",
"expected": "web.webpagedetails.pageViews"
}
]
}
Copy and adapt these patterns to your own analytics signals.
{
"id": "config-id",
"conditionsLogic": "all",
"conditions": [],
"validations": [
{
"source": "query",
"path": "configId",
"operator": "equals",
"expected": "abc123"
}
]
}
{
"id": "content-type",
"conditionsLogic": "all",
"conditions": [],
"validations": [
{
"source": "headers",
"path": "content-type",
"operator": "exists"
}
]
}
{
"id": "raw-contains",
"conditionsLogic": "all",
"conditions": [],
"validations": [
{
"source": "raw",
"path": "",
"operator": "contains",
"expected": "pageName"
}
]
}
{
"id": "event-type-any",
"conditionsLogic": "any",
"conditions": [
{
"source": "payload",
"path": "events[0].web.webPageDetails.siteSection",
"operator": "equals",
"expected": "Homepage"
},
{
"source": "payload",
"path": "events[0].web.webPageDetails.siteSection",
"operator": "equals",
"expected": "Landing"
}
],
"validations": [
{
"source": "payload",
"path": "events[0].xdm.eventType",
"operator": "equals",
"expected": "web.webpagedetails.pageViews"
},
{
"source": "payload",
"path": "events[0].xdm.eventType",
"operator": "equals",
"expected": "web.webinteraction.linkClicks"
}
]
}