Summary
A Contributor is a set of one or more dataProvider crosswalks sent as a single JSON object that defines a unique, indivisible part of an entity. Contributors are central to how Reltio manages merge and split (unmerge) operations — understanding them is essential for correctly loading, updating, and separating entity data.
What Is a Contributor?
A contributor is created when an entity is created and is identified by the entity URI. When an entity is first created, it has exactly one contributor. Additional contributors are added through merge and update operations.
Key rules:
An entity can contain an unlimited number of contributors.
The same crosswalk cannot belong to different contributors.
A contributor is indivisible — unmerge operates on entire contributors, not individual crosswalks within them.
If you attempt to POST an entity with crosswalks belonging to different contributors in the same request, the following error is returned:
{
"errors": {
"severity": "Error",
"errorMessage": "Posting two or more data provider crosswalks from different contributors within single incoming object is not allowed.",
"errorCode": 605
}
}To view contributors for an entity, use the GET /_crosswalkTree endpoint, which returns the number of contributors, their URIs, and their associated crosswalks.
Combinations of dataProvider and contributorProvider
The contributorProvider and dataProvider crosswalk flags in an update request control whether a new contributor is created or an existing one is modified.
Rule | Description |
|---|---|
1 | By default, |
2 | Both |
3 | Only one crosswalk in a set can have |
4a | If the update cannot exist separately, use |
4b | If the update should be possible to split later, use |
Global Contributor Provider
The globalContributorProvider flag moves crosswalks from one contributor to another. Only an existing crosswalk can have "globalContributorProvider": true.
How it works:
The crosswalk with
"globalContributorProvider": trueidentifies the target contributor.Other crosswalks listed with
"dataProvider": falseare moved into that target contributor.
Example: If an entity has two contributors and you want to consolidate all crosswalks into one, set "globalContributorProvider": true on the target crosswalk and list the others with "dataProvider": false:
[
{
"type": "configuration/entityTypes/HCP",
"crosswalks": [
{
"type": "configuration/sources/FB",
"value": "hcp",
"globalContributorProvider": true,
"dataProvider": false
},
{
"type": "configuration/sources/FB",
"value": "hcp2",
"dataProvider": false
},
{
"type": "configuration/sources/FB",
"value": "hcp3_new",
"dataProvider": true
}
]
}
]After this operation, unmerging all contributors produces only one entity (since all crosswalks share a single contributor).
Splitting a Single Crosswalk Out of a Contributor
Because a contributor is indivisible, you cannot unmerge just one crosswalk from a multi-crosswalk contributor. The crosswalks always move together.
When Crosswalks Share a Contributor
If an entity was created with multiple crosswalks in a single request, those crosswalks share one contributor:
[
{
"type": "configuration/entityTypes/HCP",
"crosswalks": [
{ "type": "configuration/sources/FB", "value": "hcp" },
{ "type": "configuration/sources/MedPro", "value": "medpro1" }
]
}
]Result: Contributor 1 holds both FB / hcp and MedPro / medpro1. Unmerging this contributor moves both crosswalks — you cannot detach just one.
Option 1 — Load Crosswalks as Separate Objects (Recommended)
If you regularly need to separate crosswalks, load them as separate requests so each forms its own contributor:
// Request 1 — creates Contributor 1
[
{
"type": "configuration/entityTypes/HCP",
"crosswalks": [
{ "type": "configuration/sources/FB", "value": "hcp" }
]
}
]
// Request 2 — creates Contributor 2 (merges into the same entity via match rules)
[
{
"type": "configuration/entityTypes/HCP",
"crosswalks": [
{ "type": "configuration/sources/MedPro", "value": "medpro1" }
]
}
]Each contributor can now be unmerged independently.
Option 2 — One-Time Separation via a Temporary Contributor
If crosswalks already share a contributor and you need a one-time separation, use this four-step process:
Step 1 — Attach a fake crosswalk as a new contributor
[
{
"type": "configuration/entityTypes/HCP",
"crosswalks": [
{
"type": "configuration/sources/FB",
"value": "hcp",
"dataProvider": false
},
{
"type": "configuration/sources/FAKE",
"value": "tmp_separation_1",
"dataProvider": true
}
]
}
]State: Contributor 1 (FB / hcp + MedPro / medpro1) | Contributor 2 (FAKE / tmp_separation_1)
Step 2 — Move the target crosswalk into the fake contributor
[
{
"type": "configuration/entityTypes/HCP",
"crosswalks": [
{
"type": "configuration/sources/FAKE",
"value": "tmp_separation_1",
"globalContributorProvider": true,
"dataProvider": false
},
{
"type": "configuration/sources/MedPro",
"value": "medpro1",
"dataProvider": false
}
]
}
]State: Contributor 1 (FB / hcp) | Contributor 2 (FAKE / tmp_separation_1 + MedPro / medpro1)
Step 3 — Delete the fake crosswalk
DELETE {tenantURL}/entities/{entityId}/crosswalks/{fakeCrosswalkUri}State: Contributor 1 (FB / hcp) | Contributor 2 (MedPro / medpro1)
Step 4 — Unmerge the MedPro contributor
The result is a standalone entity containing only MedPro / medpro1, while the original entity retains FB / hcp.
Comments
Please sign in to leave a comment.