Unify and manage your data

Validate object filters

Learn how to validate and debug object filters and event payloads using the Object Filter Validation API and its tracked filter tree enhancement.

This API enables you to validate object filters and simulate match operations on event payloads without needing to trigger the full streaming pipeline. Use this endpoint to test filters, analyze matching behavior, and inspect detailed node-level match results.

Object filter validation API

Request

Operation Endpoint:

POST /reltio/api/{tenantId}/objectFilter/validate
Table 1. Parameters
ParameterRequiredDescription
HeadersAuthorizationYesAccess token in the format "Bearer <accessToken>". See topic Authentication API.
EnvironmentURLYesReltio environment URL.
BodymatchNoIf true, performs matching in addition to validation. If false or omitted, only validation is performed.
objectFilterNoFilter expression to validate and match.
Note: This parameter is only mandatory if the parameter match is set to true. Its absence will return a validation error.
typeFilterNoType-level filter to refine the match.
Note: This parameter is only mandatory if the parameter match is set to true. Its absence will return a validation error.
payloadTypeNoPayload classification. Valid values: DELTAS, SNAPSHOT, SNAPSHOT_WITH_DELTA.
Note: This parameter is only mandatory if the parameter match is set to true. Its absence will return a validation error.
payloadNoEvent payload JSON used for validation and matching.
Note: This parameter is only mandatory if the parameter match is set to true. Its absence will return a validation error.
readSourceObjectFromDBNoIf true, reads the source object from the database when it’s not present in the payload.
sourceObjectUriNoURI of the source object to use when reading from the database. Overrides the URI contained in the payload.

Response

Standard response fields:

Table 2. Parameters
ParameterDescription
validObjectFilterIf this is true the objectFilter is syntactically valid.
validTypeFilterIf this is true the typeFilter is syntactically valid.
validEventPayloadIf this is true the payloadType and payload are valid.
matchIf this is true the payload matches the provided filters.
detailsmessagesArray of warnings or errors produced during validation or matching.
matcherMatcher implementation used, for example none, json, object, or delta.
matchedObjectThe object that the service evaluated during matching.

Tracked object filter validation API

The ObjectFilterTreeNode object is returned in the response of the Object filter validation API. It represents the objectFilter as a tree structure, showing the state of each node after evaluation. This makes it possible to understand in detail how the filter was applied to the event payload.

During evaluation, the service parses the filter string into a tree of ObjectFilterTreeNode elements. The algorithm begins at the root node and traverses through each child node. Due to its intelligent design, not all nodes are guaranteed to be processed. For example, if the filter is equals(type, 'configuration/entityTypes/HCP') and equals(uri, 'entities/hcp1'), and the object type is not HCP, the uri will not be evaluated. Nodes that were skipped are returned with matched: null.

The valuesToMatch array provides the actual values from the event payload that the system compared against the filter condition.

There are two kinds of nodes in the ObjectFilterTreeNode tree:

  • Logical Operator nodes: These nodes group child conditions but are not evaluated on their own. They contain logicalOperator, operands, notRequest, and matched.
  • Conditional nodes: These nodes represent a single condition to evaluate, such as equals(type, ...). They include notRequest, property, value, conditionType, matched, and valuesToMatch.
Table 3. ObjectFilterTreeNode fields
FieldTypeDescription
logicalOperatorStringIf present, one of and, or, or not. Indicates how child nodes are combined.
operandsArrayArray of child ObjectFilterTreeNode nodes.
notRequestBooleanIf true, the node result is inverted.
propertyStringName of the property that is evaluated by the condition.
valueStringThe reference value used in the filter condition.
conditionTypeStringCondition type, such as equals, lte, contains, or changes.
matchedBoolean / NullTri-state result: true (match), false (no match), or null (not evaluated).
valuesToMatchArrayValues from the event payload that were compared against the condition.

Sample request

{
  "typeFilter": "ENTITY_CREATED",
  "objectFilter": "equals(type, 'configuration/entityTypes/HCP') and equals(uri, 'entities/hcp2') or contains(attributes.FirstName, 'FN*') and (equals(createdBy, 'test') or equals(id, 'hcp2'))",
  "payloadType": "DELTAS",
  "payload": {
    "type": "ENTITY_CREATED",
    "uri": "entities/hcp1",
    "deltas": {
      "ovChanged": false,
      "delta": [
        {
          "type": "ENTITY_CREATED",
          "newValue": {
            "uri": "entities/hcp1",
            "type": "configuration/entityTypes/HCP",
            "createdBy": "test",
            "createdTime": 1674122053900,
            "updatedBy": "test",
            "updatedTime": 1674122053900,
            "attributes": {
              "FirstName": [
                {
                  "type": "configuration/entityTypes/HCP/attributes/FirstName",
                  "ov": true,
                  "value": "FN1",
                  "uri": "entities/hcp1/attributes/FirstName/0"
                }
              ],
              "LastName": [
                {
                  "type": "configuration/entityTypes/HCP/attributes/LastName",
                  "ov": true,
                  "value": "LN1",
                  "uri": "entities/hcp1/attributes/LastName/1"
                }
              ]
            },
            "crosswalks": [
              {
                "uri": "entities/hcp1/crosswalks/2",
                "type": "configuration/sources/NPI",
                "sourceTable": "source_table",
                "value": "NPI_HCP1",
                "reltioLoadDate": "2023-01-19T09:54:13.900Z",
                "createDate": "2023-01-19T09:54:13.900Z",
                "updateDate": "2023-01-19T09:54:13.900Z",
                "attributes": [
                  "entities/hcp1/attributes/FirstName/0",
                  "entities/hcp1/attributes/LastName/1"
                ],
                "singleAttributeUpdateDates": {}
              }
            ],
            "analyticsAttributes": {},
            "label": "FN1 LN1",
            "secondaryLabel": ""
          }
        }
      ],
      "entityType": "HCP"
    }
  },
  "match": true,
  "readSourceObjectFromDB": false
}

Sample response

{
  "validObjectFilter": true,
  "validTypeFilter": true,
  "validEventPayload": true,
  "match": true,
  "details": {
    "matcher": "object",
    "matchedObject": {
      "uri": "entities/hcp1",
      "type": "configuration/entityTypes/HCP",
      "createdBy": "test",
      "createdTime": 1720773510454,
      "updatedBy": "test",
      "updatedTime": 1720773510454,
      "attributes": {
        "FirstName": [
          {
            "type": "configuration/entityTypes/HCP/attributes/FirstName",
            "ov": true,
            "value": "FN1",
            "uri": "entities/hcp1/attributes/FirstName/0"
          }
        ],
        "LastName": [
          {
            "type": "configuration/entityTypes/HCP/attributes/LastName",
            "ov": true,
            "value": "LN1",
            "uri": "entities/hcp1/attributes/LastName/1"
          }
        ]
      },
      "crosswalks": [
        {
          "uri": "entities/hcp1/crosswalks/2",
          "type": "configuration/sources/NPI",
          "sourceTable": "source_table",
          "value": "NPI_HCP1",
          "reltioLoadDate": "2024-07-12T08:38:30.454Z",
          "createDate": "2024-07-12T08:38:30.454Z",
          "updateDate": "2024-07-12T08:38:30.454Z",
          "attributes": [
            "entities/hcp1/attributes/FirstName/0",
            "entities/hcp1/attributes/LastName/1"
          ],
          "singleAttributeUpdateDates": {}
        }
      ],
      "analyticsAttributes": {},
      "label": "FN1 LN1",
      "secondaryLabel": ""
    },
    "objectFilterTreeNode": {
      "logicalOperator": "or",
      "operands": [
        {
          "logicalOperator": "and",
          "operands": [
            {
              "notRequest": false,
              "property": "type",
              "value": "configuration/entityTypes/HCP",
              "conditionType": "equals",
              "matched": true,
              "valuesToMatch": [
                "configuration/entityTypes/HCP"
              ]
            },
            {
              "notRequest": false,
              "property": "uri",
              "value": "entities/hcp2",
              "conditionType": "equals",
              "matched": false,
              "valuesToMatch": [
                "entities/hcp1",
                "hcp1"
              ]
            }
          ],
          "notRequest": false,
          "matched": false
        },
        {
          "logicalOperator": "and",
          "operands": [
            {
              "notRequest": false,
              "property": "attributes.FirstName",
              "value": "FN*",
              "conditionType": "contains",
              "matched": true,
              "valuesToMatch": [
                "FN1"
              ]
            },
            {
              "logicalOperator": "or",
              "operands": [
                {
                  "notRequest": false,
                  "property": "createdBy",
                  "value": "test",
                  "conditionType": "equals",
                  "matched": true,
                  "valuesToMatch": [
                    "test"
                  ]
                },
                {
                  "notRequest": false,
                  "property": "id",
                  "value": "hcp2",
                  "conditionType": "equals"
                }
              ],
              "notRequest": false,
              "matched": true
            }
          ],
          "notRequest": false,
          "matched": true
        }
      ],
      "notRequest": false,
      "matched": true
    }
  }
}

Example: payloadtype: SNAPSHOT

The following example shows a validation for the SNAPSHOT payload type.

{
  "typeFilter": "ENTITY_CHANGED",
  "objectFilter": "equals(type, 'configuration/entityTypes/HCP')",
  "payloadType": "SNAPSHOT",
  "payload": {
    "type": "ENTITY_CHANGED",
    "object": {
      "uri": "entities/hcp1",
      "type": "configuration/entityTypes/HCP",
      "createdBy": "test",
      "createdTime": 1720773510454,
      "updatedBy": "test",
      "updatedTime": 1720773510454,
      "attributes": {
        "FirstName": [
          {
            "type": "configuration/entityTypes/HCP/attributes/FirstName",
            "ov": true,
            "value": "FN1",
            "uri": "entities/hcp1/attributes/FirstName/0"
          }
        ],
        "LastName": [
          {
            "type": "configuration/entityTypes/HCP/attributes/LastName",
            "ov": true,
            "value": "LN1",
            "uri": "entities/hcp1/attributes/LastName/1"
          }
        ]
      },
      "crosswalks": [
        {
          "uri": "entities/hcp1/crosswalks/2",
          "type": "configuration/sources/NPI",
          "sourceTable": "source_table",
          "value": "NPI_HCP1",
          "reltioLoadDate": "2024-07-12T08:38:30.454Z",
          "createDate": "2024-07-12T08:38:30.454Z",
          "updateDate": "2024-07-12T08:38:30.454Z",
          "attributes": [
            "entities/hcp1/attributes/FirstName/0",
            "entities/hcp1/attributes/LastName/1"
          ],
          "singleAttributeUpdateDates": {}
        },
        {
          "uri": "entities/hcp1/crosswalks/9",
          "type": "configuration/sources/Reltio",
          "value": "hcp1",
          "reltioLoadDate": "2024-07-12T08:38:30.454Z",
          "createDate": "2024-07-12T08:38:30.454Z",
          "updateDate": "2024-07-12T08:38:30.454Z",
          "attributes": [],
          "singleAttributeUpdateDates": {}
        }
      ],
      "analyticsAttributes": {},
      "label": "FN1 LN1",
      "secondaryLabel": "AL1"
    }
  },
  "match": true,
  "readSourceObjectFromDB": false
}

Example: payloadtype: SNAPSHOT_WITH_DELTA

The following example shows a validation for the SNAPSHOT_WITH_DELTA payload type.

{
  "typeFilter": "RELATIONSHIP_CREATED",
  "objectFilter": "equals(type, 'configuration/relationTypes/HasAddress')",
  "payloadType": "SNAPSHOT_WITH_DELTA",
  "payload": {
    "type": "RELATIONSHIP_CREATED",
    "object": {
      "uri": "relations/rel1",
      "type": "configuration/relationTypes/HasAddress",
      "createdBy": "test",
      "createdTime": 1720773510454,
      "updatedBy": "test",
      "updatedTime": 1720773510454,
      "startRefPinned": false,
      "startRefIgnored": false,
      "endRefPinned": false,
      "endRefIgnored": false,
      "analyticsAttributes": {},
      "crosswalks": [
        {
          "uri": "relations/rel1/crosswalks/8",
          "type": "configuration/sources/NPI",
          "sourceTable": "source_table",
          "value": "NPI_REL1",
          "reltioLoadDate": "2024-07-12T08:38:30.454Z",
          "createDate": "2024-07-12T08:38:30.454Z",
          "updateDate": "2024-07-12T08:38:30.454Z",
          "attributes": [
            "relations/rel1/attributes/AddressType/7"
          ],
          "singleAttributeUpdateDates": {}
        }
      ],
      "startObject": {
        "objectURI": "entities/hcp1",
        "crosswalks": [
          {
            "uri": "entities/hcp1/crosswalks/9",
            "type": "configuration/sources/Reltio",
            "value": "hcp1"
          }
        ]
      },
      "endObject": {
        "objectURI": "entities/loc1",
        "crosswalks": [
          {
            "uri": "entities/loc1/crosswalks/10",
            "type": "configuration/sources/Reltio",
            "value": "loc1"
          }
        ]
      }
    },
    "uri": "relations/rel1",
    "deltas": {
      "ovChanged": false,
      "relationType": "HasAddress",
      "startObjectUri": "entities/hcp1",
      "endObjectUri": "entities/loc1",
      "delta": [
        {
          "type": "RELATIONSHIP_CREATED",
          "newValue": {
            "uri": "relations/rel1",
            "type": "configuration/relationTypes/HasAddress",
            "createdBy": "test",
            "createdTime": 1720773510454,
            "updatedBy": "test",
            "updatedTime": 1720773510454,
            "startRefPinned": false,
            "startRefIgnored": false,
            "endRefPinned": false,
            "endRefIgnored": false,
            "analyticsAttributes": {},
            "crosswalks": [
              {
                "uri": "relations/rel1/crosswalks/8",
                "type": "configuration/sources/NPI",
                "sourceTable": "source_table",
                "value": "NPI_REL1",
                "reltioLoadDate": "2024-07-12T08:38:30.454Z",
                "createDate": "2024-07-12T08:38:30.454Z",
                "updateDate": "2024-07-12T08:38:30.454Z",
                "attributes": [
                  "relations/rel1/attributes/AddressType/7"
                ],
                "singleAttributeUpdateDates": {}
              }
            ],
            "startObject": {
              "objectURI": "entities/hcp1",
              "crosswalks": [
                {
                  "uri": "entities/hcp1/crosswalks/9",
                  "type": "configuration/sources/Reltio",
                  "value": "hcp1"
                }
              ]
            },
            "endObject": {
              "objectURI": "entities/loc1",
              "crosswalks": [
                {
                  "uri": "entities/loc1/crosswalks/10",
                  "type": "configuration/sources/Reltio",
                  "value": "loc1"
                }
              ]
            }
          }
        }
      ],
      "startObjectType": "HCP",
      "endObjectType": "Location"
    }
  },
  "match": true,
  "readSourceObjectFromDB": false
}