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
Parameter | Required | Description | |
---|---|---|---|
Headers | Authorization | Yes | Access token in the format "Bearer <accessToken>" . See topic Authentication API. |
EnvironmentURL | Yes | Reltio environment URL. | |
Body | match | No | If true , performs matching in addition to validation. If false or omitted, only validation is performed. |
objectFilter | No | Filter 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. | |
typeFilter | No | Type-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. | |
payloadType | No | Payload 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. | |
payload | No | Event 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. | |
readSourceObjectFromDB | No | If true , reads the source object from the database when it’s not present in the payload. | |
sourceObjectUri | No | URI of the source object to use when reading from the database. Overrides the URI contained in the payload. |
Response
Standard response fields:
Parameter | Description | |
---|---|---|
validObjectFilter | If this is true the objectFilter is syntactically valid. | |
validTypeFilter | If this is true the typeFilter is syntactically valid. | |
validEventPayload | If this is true the payloadType and payload are valid. | |
match | If this is true the payload matches the provided filters. | |
details | messages | Array of warnings or errors produced during validation or matching. |
matcher | Matcher implementation used, for example none , json , object , or delta . | |
matchedObject | The 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
, andmatched
. - Conditional nodes: These nodes represent a single condition to evaluate, such as
equals(type, ...)
. They includenotRequest
,property
,value
,conditionType
,matched
, andvaluesToMatch
.
Field | Type | Description |
---|---|---|
logicalOperator | String | If present, one of and , or , or not . Indicates how child nodes are combined. |
operands | Array | Array of child ObjectFilterTreeNode nodes. |
notRequest | Boolean | If true , the node result is inverted. |
property | String | Name of the property that is evaluated by the condition. |
value | String | The reference value used in the filter condition. |
conditionType | String | Condition type, such as equals , lte , contains , or changes . |
matched | Boolean / Null | Tri-state result: true (match), false (no match), or null (not evaluated). |
valuesToMatch | Array | Values 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
}