Understanding Reltio Contributors: Merge, Split, and Crosswalk Management

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, dataProvider = true and contributorProvider = false

2

Both dataProvider and contributorProvider cannot be true for the same crosswalk

3

Only one crosswalk in a set can have "contributorProvider": true

4a

If the update cannot exist separately, use "contributorProvider": true for an existing crosswalk and "dataProvider": true for the new crosswalk

4b

If the update should be possible to split later, use "dataProvider": false for an existing crosswalk and "dataProvider": true for the new crosswalk


Global Contributor Provider

The globalContributorProvider flag moves crosswalks from one contributor to another. Only an existing crosswalk can have "globalContributorProvider": true.

How it works:

  1. The crosswalk with "globalContributorProvider": true identifies the target contributor.

  2. Other crosswalks listed with "dataProvider": false are 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.


Was this article helpful?
0 out of 0 found this helpful

Comments

0 comments

Please sign in to leave a comment.