BLG-230622 - Privacy-Safe Cooperative with Identity Streme-header

How to Set Up a Privacy-Safe Cooperative with FullContact Identity Streme™

Historically the primary beneficiary of a cooperative database was a third party that managed the cooperative. With Identity Streme, FullContact enables cooperation amongst content creators and brands without passing sensitive information amongst business partners and allows the overwhelming value of the cooperative to remain with the business partners.

With Identity Streme, you can create a multi-tenant digital data store with a collection of insights, each within a digital space with restrictions on ingress and egress, allowing data control with sensitive PII cleaned from the data flow.

Setup

We’ll assume you’ve already engaged with FullContact and we have set up your Streme(s) and supplied you with your API Key(s).

PII is cleaned upon initialization of the Streme and from all Streme operations, providing protection from data being “infected” by PII. This allows consumer data to remain private when working with partners. All Stremes will have a parent Streme where, at minimum, the global linkage is maintained. The parent Streme can also contain insights, but all other Stremes will inherit the insights from the parent. There will be use cases where you may want to restrict the insights being shared, thus children Streme containers can be utilized. Below is an example design pattern of a parent with children Stremes.

Each Streme pictured above would be managed by separate keys to control access. You can now choose how to share the insights with a partner brand.

Within the cooperative, a common PersonID replaces all PII and is the common identifier across all of your Stremes. The PersonID is the Streme’s person identifier and does not contain any embedded intelligence that could be decoded and the individual de-identified. It is unique to your Stremes.

Brand partners have their own PersonID that is completely different from your Streme’s. The Streme maps insights you permit to the PersonID of the partner brand.

Likewise, the brand can share insight tags with you.

Initialization

You could start with an empty cooperative, but oftentimes you have already started to build your first- party data asset. You can easily initialize your cooperative by calling the FullContact Resolve API for the Streme. For all individuals you want to store in your Streme, you would call the Parent Streme Resolve with the identity that you know. For example:

curl -X POST \
 https://api.fullcontact.com/v3/identity.resolve \
  -H 'Authorization: Bearer {Your API Key}' \
  -H 'Content-Type: application/json' \
  -d '{
  "emails": [
     "bart@fullcontact.com",
     "bart.lorang@fullcontact.com"
  ]
}'

The Streme receives two email addresses, resolves them against the FullContact identity graph, and replaces them with a PersonID, which is placed in your Streme. At any point in the future, you can reference the same person by either of these emails or the PersonID.

Oftentimes you will have a lot of individuals in your backend systems, like CRM, Loyalty, Customer Service, etc. Although you can add people to your Streme one-by-one synchronously, you can also create a file extract of all of those individuals from your systems and use something like the following recipe in Python to do a bulk load of your Streme through asynchronous Resolve calls:

You’ve now initialized your Streme with all of the individuals in your backend systems and you have a file of them resolved to a PersonID that is maintained in your Streme.

Maintaining the Cooperative

Mapping Internal Identifiers

You might want to reference individuals in the cooperative by internal identifiers from your source systems and contributors. A RecordID should be a unique identifier that represents where the identity data is coming from. You define this. RecordIDs, for example, typically have prefixes or suffixes to identify sources of the identity (like a loyalty system, social platform, CRM system, etc.) You can map those identifiers into the Streme to create an association with the PersonID. Here are examples of ways you can do this:

Map internal identifier BonusLoyalty:A351359XT to email addresses:
curl -X POST \
 https://api.fullcontact.com/v3/identity.map \
  -H 'Authorization: Bearer {Your API Key}' \
  -H 'Content-Type: application/json' \
  -d '{
  "emails": [
     "bart@fullcontact.com",
     "bart.lorang@fullcontact.com"
     ],
   "recordId": "BonusLoyalty:A351359XT"
}'
Map internal identifier BonusLoyalty:A351359XT to the known PersonID:
curl -X POST \
 https://api.fullcontact.com/v3/identity.map \
    -H 'Authorization: Bearer {Your API Key}' \
    -H 'Content-Type: application/json' \
    -d '{
	"personId": "Hm5Oz6r4pWM7hVTjAbbodOVfttWrzjrAbwf7CBIE62uPwcqI",
	"recordId": "BonusLoyalty:A351359XT"
}'

Now, in the future, you can refer to the individuals in the Streme by the email addresses, the RecordID, or the PersonID.

Now the fun part! You can start mapping any insights you have on individuals into the Streme. As mentioned in the Setup, you can map insights into the parent of the Stremes or one of the child Stremes, depending on how you want to restrict sharing of insights in the future.

Mapping insights requires the use of FullContact’s Map API. FullContact provides the ability to store, manage and extract by tags. This feature allows tags to be stored within your Streme for continuous updates, retrievals, and deletes across both 1st party as well as 2nd party data partnerships. For each Streme you want to assign an insight tag into, call the Tag API with the API Key for that particular Streme. Below is an example of the tagging call using the BonusLoyalty:A351359XT RecordID above and adding insight tags for loyalty tier and customer segments:.

curl -X POST https://api.fullcontact.com/v3/tags.create \
  -H "Authorization: Bearer {A Parent or Child API Key}" \
  -H "Content-Type: application/json" \
  -d '{
        "recordId": "BonusLoyalty:A351359XT",
        "tags": [
           { "key" : "loyalty", "value" : "platinum" },
           { "key" : "segment", "value" : "high-spender" },
           { "key" : "segment", "value" :  "luxury" }
] }'

You can continue to add more insight tags at any point in the future. You can also delete tags as appropriate.

curl -X POST https://api.fullcontact.com/v3/tags.delete \
  -H "Authorization: Bearer {A Parent or Child API Key}" \
  -H "Content-Type: application/json" \
  -d '{
        "recordId": "BonusLoyalty:A351359XT",
        "tags": [
           { "key" : "segment", "value" : "luxury" }
     ]
}'

And retrieve insight tags…

curl -X POST https://api.fullcontact.com/v3/tags.get \
  -H "Authorization: Bearer {A Parent or Child API Key}" \
  -H "Content-Type: application/json" \
  -d '{
        "recordId": "BonusLoyalty:A351359XT"
    }'


  Or "personId": "Hm5Oz6r4pWM7hVTjAbbodOVfttWrzjrAbwf7CBIE62uPwcqI"
  Or "email": "bart@fullcontact.com"

Sharing Insights

You’re now ready to share insights with your partner brands. FullContact sets up the sharing between a partner brand and one or more of your Identity Stremes. The brand can then issue a FullContact Resolve API call to retrieve the insight tags from the permitted Stremes. The partner can call Resolve with any combination of identifiers from individuals that they have from their systems and FullContact will perform identity resolution and determine if those individuals are present in your Streme(s). If so, the tags from the Stremes they have access to will be returned. For example:

curl -X POST \
 https://api.fullcontact.com/v3/identity.resolve \
  -H 'Authorization: Bearer {Partner API Key}' \
  -H "Content-Type: application/json" \
  -d '{
    "emails": [
      "bart@fullcontact.com",
    ],
    "phones": [
    	"+13035551234"
    ]
}'

Giving a response of…

{
  "tags": [
    { "key" : "segment", "value" : "high-spender" },
    { "key" : "loyalty", "value" :  "platinum" }
  ]
}

Note that because you can house multiple contributing tenants within your co-op, you have a lot of flexibility in how you’d like to govern the data separation. You may have many contributors that are willing to share their insights into a common co-op Streme, but others that are only okay with combining their insights with a select set of partners. Just set up a separate Streme for those partners and map their insights into tags ONLY in that partnership Streme. You can always choose which brands get access to the insight tags from which Stremes and child Stremes don’t inherit insight tags from other child Stremes unless you explicitly map those insights into the Streme, thus guaranteeing you don’t accidentally share insights with competitors or other non-permissible entities.

Combining with other FullContact Services

Customer Recognition

Often the insights that you want to map to an individual within your cooperative is derived from the online behavior on cooperative contributor’s websites. FullContact’s Customer Recognition tag is a simple solution where contributors can recognize authenticated and unauthenticated (i.e. known and unknown) visitors on their sites in real-time distilled down to your Streme PersonID and store it in a cookie or localStorage. This allows contributors to easily align visitors into segments that can then be mapped into the Streme.

Amplification

Often one of the big usages of the insight being shared from the cooperative is to create audiences that can be leveraged within activation platforms. FullContact makes this possible through our Enrich API. For example, not only could a brand get insight from the tags within your cooperative, they could then call the Enrich API with those individuals and FullContact would provide hashed emails (HEMs) and mobile Ad IDs (MAIDS) that can be used for onboarding into any number of digital activation and social media platforms for digital messaging.

Verify Match

As the world has gone more online, digital fraud has been on the rise. Bad actors are constantly looking for new ways to commit fraud using techniques such as forging synthetic identities, stealing identities, and performing account takeovers. Your cooperative data contributors may have a new account or subscriber sign-up events that need to be guarded against fraudulent activity. The more validated the identity of individuals coming into your contributor systems, the more accurate the data in your cooperative is.

The power of FullContact’s Verify Match is that it spans both the digital and terrestrial ecosystems to verify identities upon sign-up. Based upon provided contact information within the sign-up, FullContact validates the identity information and provides a risk score that can be used to determine if the person should be allowed to continue within the sign-up flow.

Conclusion

Through FullContact’s Identity Streme offering you can create a cooperative from multiple data contributors, resolve individuals from numerous distributed systems into a common PersonID, map insights from all contributors, and then enable sharing of those insights with brand partners. You can set up multiple child Stremes that protect insights from leaking to competitors or other non- permissible entities, while also not using sensitive PII amongst co-op contributors or brands.

Recent Blogs