Skip to content

Aul UI d2 5559 integration page 2 #900

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: staging-identity-map-v3
Choose a base branch
from

Conversation

aulme
Copy link
Contributor

@aulme aulme commented Jun 30, 2025

No description provided.

@aulme aulme force-pushed the aul-UID2-5559-integration-page-2 branch from 9670d94 to 18174c2 Compare June 30, 2025 06:21
Copy link
Collaborator

@genwhittTTD genwhittTTD left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some copy comments. Plus there are broken links... posting in the thread.

@@ -399,6 +400,10 @@ import Link from '@docusaurus/Link';
<dd>An unencrypted alphanumeric identifier created through the UID2 APIs or SDKs with the user's <a href="#gl-dii">directly identifying information</a> (email address or phone number) as input. The raw UID2 is encrypted to create a <a href="#gl-uid2-token">UID2 token</a>. The raw UID2 is a unique value; no two raw UID2s are the same. Raw UID2s, and their associated UID2 tokens, are case sensitive.</dd>
<dd>For details, see <a href="uid-identifier-types">UID2 Identifier Types</a>.</dd>

<dt><MdxJumpAnchor id="gl-refresh-timestamp"><a href="#gl-refresh-timestamp">Refresh timestamp</a></MdxJumpAnchor></dt>
<dd>In the context of mapping <a href="#gl-dii">DII</a> to raw UID2s, a refresh timestamp is a Unix timestamp (in seconds) returned in the <code>r</code> field of the <a href="../endpoints/post-identity-map-v3">POST&nbsp;/identity/map</a> endpoint response. This timestamp indicates when the raw UID2 may refresh. It is guaranteed that the raw UID2 won't refresh before this timestamp, but it may or may not refresh after this time.</dd>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not keen on use of "may" since it has two key meanings, permission or possibility. Suggest:

In the context of mapping DII to raw UID2s, a refresh timestamp is a Unix timestamp (in seconds) returned in the r field of the POST /identity/map endpoint response. The raw UID2 is guaranteed to be valid until this timestamp. It is refreshed at some point after this time.


Metadata supplied with the UID2 generation request indicates the <Link href="../ref-info/glossary-uid#gl-salt-bucket">salt bucket</Link> used for generating the UID2. Salt buckets persist and correspond to the underlying <Link href="../ref-info/glossary-uid#gl-dii">DII</Link> used to generate a UID2. Use the [POST&nbsp;/identity/buckets](../endpoints/post-identity-buckets.md) endpoint to return which salt buckets rotated since a given timestamp. The returned rotated salt buckets inform you which UID2s to refresh.
The V3 Identity Map API provides a refresh timestamp (`r` field) in the response that indicates when each raw UID2 may refresh. Use this timestamp to determine when to regenerate raw UID2s for your stored data.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 mods: 1) move r field def, 2) reword "may". Also 3) Add a link on the mention of the API.:

The POST /identity/map endpoint provides a refresh timestamp in the response (r field) that indicates a timestamp, after which each raw UID2 might refresh. Use this timestamp to determine when to regenerate raw UID2s for your stored data.

:::info
When mapping and remapping emails, do not make any assumptions about the number of buckets, their rotation dates, or the specific bucket that an email gets assigned to.
:::note
We recommend checking for refresh opportunities daily. It is guaranteed that the raw UID2 won't refresh before the indicated timestamp. Afterward the UID2 has a chance to rotate.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Edit to second sentence:

At some point after that time, the raw UID2 is refreshed.

#### How often should UID2s be refreshed for incremental updates?

The recommended cadence for updating audiences is daily.

Even though each salt bucket is updated roughly once a year, individual bucket updates are spread over the year. This means that about 1/365th of all buckets are rotated daily. If fidelity is critical, consider calling the [POST&nbsp;/identity/buckets](../endpoints/post-identity-buckets.md) endpoint more frequently; for example, hourly.
A raw UID2 for a specific user changes at least once per year as part of the UID2 rotation process. The V3 Identity Map API provides refresh timestamps that indicate when each raw UID2 may refresh. We recommend checking these timestamps daily to ensure your UID2s remain current and valid for audience targeting.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. may > might + 2) "UID2 rotation" sounds to me as though we just rotate values -- slightly misleading. Suggest:

A raw UID2 for a specific user changes at least once per year. The V3 Identity Map API provides refresh timestamps that indicate a point after which each raw UID2 might refresh. We recommend checking these timestamps daily to ensure your UID2s remain current and valid for audience targeting.

@@ -242,7 +239,7 @@ Here are some frequently asked questions for demand-side platforms (DSPs).
- [How do I know which decryption key to apply to a UID2?](#how-do-i-know-which-decryption-key-to-apply-to-a-uid2)
- [Where do I get the decryption keys?](#where-do-i-get-the-decryption-keys)
- [How many decryption keys may be present in memory at any point?](#how-many-decryption-keys-may-be-present-in-memory-at-any-point)
- [How do I know if/when the salt bucket has rotated?](#how-do-i-know-ifwhen-the-salt-bucket-has-rotated)
- [How do I know when to refresh mapped UID2s?](#how-do-i-know-when-to-refresh-mapped-uid2s)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here we should have "raw UID2s" in the link and the title:

@@ -267,17 +264,23 @@ You can use one of the server-side SDKs (see [SDKs: Summary](../sdks/summary-sdk

There may be thousands of decryption keys present in the system at any given point.

#### How do I know if/when the salt bucket has rotated?
#### How do I know when to refresh mapped UID2s?
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do I know when to refresh mapped raw UID2s?

#### How do I know if/when the salt bucket has rotated?
#### How do I know when to refresh mapped UID2s?

If you are maintaining mapping of DII to raw UID2s, you should use the refresh timestamp returned from the [POST&nbsp;/identity/map](../endpoints/post-identity-map-v3.md) endpoint. The response includes a refresh timestamp (`r` field) that indicates when each UID2 may refresh.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

may > might


The DSP is not privy to when the UID2 salt bucket rotates. This is similar to a DSP being unaware if users cleared their cookies. Salt bucket rotation has no significant impact on the DSP.
The DSP is not privy to when the UID2 salt rotates. This is similar to a DSP being unaware if users cleared their cookies. Salt rotation has no significant impact on the DSP.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should leave salts out as much as poss (though there was a previous instance where I think we needed it). Removing it twice here:

The DSP is not privy to when the raw UID2 rotates. This is similar to a DSP being unaware if users cleared their cookies. Raw UID2 rotation has no significant impact on the DSP.

@aulme aulme force-pushed the aul-UID2-5559-integration-page-2 branch from e493fc8 to adc06fa Compare July 1, 2025 05:46
@aulme aulme force-pushed the aul-UID2-5559-integration-page-2 branch from adc06fa to cb50b6b Compare July 1, 2025 06:50
Copy link
Collaborator

@genwhittTTD genwhittTTD left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've done only a partial review. It'd be easier if I could check in mods myself. Pending input on that. Otherwise I'll finish the review... but it's more time for both of us, I think.

- [How do I know when to refresh the UID2 due to salt bucket rotation?](#how-do-i-know-when-to-refresh-the-uid2-due-to-salt-bucket-rotation)
- [Do refreshed emails get assigned to the same bucket with which they were previously associated?](#do-refreshed-emails-get-assigned-to-the-same-bucket-with-which-they-were-previously-associated)
- [How often should UID2s be refreshed for incremental updates?](#how-often-should-uid2s-be-refreshed-for-incremental-updates)
- [How do I know when to refresh a raw UID2?](#how-do-i-know-when-to-refresh-a-raw-uid2)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. This is a broken link, plus old FAQ copy that doesn't exist in the file (2 instances)

  2. It looks as though the copy was updated to "How do I know when to refresh mapped raw UID2s?" but this FAQ also appears in the DSP section. We can't have the same title twice in one file -- anchors will not work as expected. Could we adjust one slightly? Like, it doesn't need to say "mapped" maybe, you could take it out of the first one so that each is unique?


#### Should the DSP be concerned with latency?

The UID2 service does not introduce latency into the bidding process. Any latency experienced can be attributed to the network, not the UID2 service.

#### How should the DSP maintain proper frequency capping with UID2?

The UID2 has the same chance as a cookie of becoming stale. Hence, the DSP can adapt the same infrastructure currently used for cookie or deviceID-based frequency capping for UID2. For details, see [How do I know when to refresh the UID2 due to salt bucket rotation?](#how-do-i-know-when-to-refresh-the-uid2-due-to-salt-bucket-rotation).
The UID2 has the same chance as a cookie of becoming stale. Hence, the DSP can adapt the same infrastructure currently used for cookie or deviceID-based frequency capping for UID2. For details, see [How do I know when to refresh a raw UID2?](#how-do-i-know-when-to-refresh-a-raw-uid2).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. broken link

  2. no period at the end here, since the link copy has a question mark. Otherwise the output looks like this: "How do I know when to refresh a raw UID2?."

- [Do refreshed emails get assigned to the same bucket with which they were previously associated?](#do-refreshed-emails-get-assigned-to-the-same-bucket-with-which-they-were-previously-associated)
- [How often should UID2s be refreshed for incremental updates?](#how-often-should-uid2s-be-refreshed-for-incremental-updates)
- [How do I know when to refresh a raw UID2?](#how-do-i-know-when-to-refresh-a-raw-uid2)
- [How often should Raw UID2s be refreshed for incremental updates?](#how-often-should-raw-uid2s-be-refreshed-for-incremental-updates)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Raw UID2s > raw UID2s

We don't initial cap "raw" unless it's in a heading.


Metadata supplied with the UID2 generation request indicates the <Link href="../ref-info/glossary-uid#gl-salt-bucket">salt bucket</Link> used for generating the UID2. Salt buckets persist and correspond to the underlying <Link href="../ref-info/glossary-uid#gl-dii">DII</Link> used to generate a UID2. Use the [POST&nbsp;/identity/buckets](../endpoints/post-identity-buckets.md) endpoint to return which salt buckets rotated since a given timestamp. The returned rotated salt buckets inform you which UID2s to refresh.
The [POST&nbsp;/identity/map](../endpoints/post-identity-map-v3.md) endpoint provides a refresh timestamp in the response (r field) that indicates a timestamp, after which each raw UID2 might refresh. Use this timestamp to determine when to regenerate raw UID2s for your stored data.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code tag on the field title:
(r field) > (r field)

#### How do I know if/when the salt bucket has rotated?
#### How do I know when to refresh mapped raw UID2s?

If you are maintaining mapping of DII to raw UID2s, you should use the refresh timestamp returned from the [POST&nbsp;/identity/map](../endpoints/post-identity-map-v3.md) endpoint. The response includes a refresh timestamp (`r` field) that indicates when each Raw UID2 might refresh.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two things here:

  1. Raw UID2 > raw UID2

  2. "when each Raw UID2 might refresh." -- is that correct? I don't think so. It indicates a date, before which the UID2 will not update and after that timestamp it will at some point.

Also BTW I'm uneasy about using "refresh" for the salt rotation since that word is already headily used in the context of UID2, mainly for refreshing tokens.

In fact, I prefer to answer we gave earlier (line 182). We should just cross-reference to that, not have two slightly different versions of the same info.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is indeed related - refresh here is also about replacing expired tokens with non-expired ones. I get the idea though, happy to change.

Copy link
Collaborator

@genwhittTTD genwhittTTD left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some more comments marked.

I feel it's laborious for me to ask you to make these mods to conform to doc dept standards, but it's necessary. That's part of why I offered to do some of this work. Anyway, most of this looks great.

Discussed with gmsdelmundo in our last meeting... I think it would be really good if we update the text representation of POST /identity/map to include the version, since we now have two documented versions: POST /v3/identity/map and POST /v2/identity/map. I think it would add a little bit of clarity. Just a suggestion for now. I could implement it later, too.

# For Users of Older SDK/API Version

:::warning
The following information is relevant to the older integration approach and is provided for reference only. New implementations should use the main approach described above. For current best practices, refer to the [main integration guide](#high-level-steps).
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should not say "older integration approach" -- previous is fine, but also we should call it out by version. Words like older and newer are easily missed in updates. We recommend the latest, people should upgrade ASAP, but for any specific data, let's call out what version it applies to.

loop
ADP->>ADP: 5-a. Check current time against stored refresh timestamps.
ADP->>UID: 5-b. If refresh time reached, resend DII to the POST /identity/map endpoint for updated raw UID2.
UID->>ADP: 5-c. Store the new raw UID2 (u), refresh timestamp (r) and optionally previous UID2 (p) returned from the POST /identity/map endpoint.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a comma before the last item (style decision in our docs, and in technical docs in general):

   UID->>ADP: 5-c. Store the new raw UID2 (u), refresh timestamp (r), and optionally previous UID2 (p) returned from the POST /identity/map endpoint.

ADP->>UID: 6-a. Monitor for optout status using the POST /optout/status endpoint.
UID->>ADP: 6-b. Return optout status.
end

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please also store the URL for the updated diagram, as we have for previous iterations, in this file. Same for the other updated diagram.

Nice catches on the couple of things you fixed on the diagram by the way.

@@ -1,3 +1,30 @@
26/6/25: V3 API Update - Updated endpoints diagram to use V3 identity map API with refresh timestamps instead of salt bucket monitoring.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure where to comment this. But, we now have two pairs of image files and only one pair of source files. We need a source file for each image file. Plus the file naming doesn't match. Per doc guidelines we need a source file of the same name for each image file.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like the image source file has many previous iterations of the image rather than just one. Happy to separate it out though.

loop
ADP->>ADP: 5-a. Check current time against stored refresh timestamps.
ADP->>UID: 5-b. If refresh time reached, resend DII to the POST /identity/map endpoint for updated raw UID2.
UID->>ADP: 5-c. Store the new raw UID2 (u), refresh timestamp (r) and optionally previous UID2 (p) returned from the POST /identity/map endpoint.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same on line 10 and line 20: just add the comma. Here:

UID->>ADP: 5-c. Store the new raw UID2 (u), refresh timestamp (r) and optionally previous UID2 (p) returned from the POST /identity/map endpoint.

loop
ADP->>ADP: 5-a. Check current time against stored refresh timestamps.
ADP->>UID: 5-b. If refresh time reached, resend DII to get updated raw UID2.
UID->>ADP: 5-c. Store the new raw UID2 and refresh timestamp.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure why we don't include optionally the previous UID2, in this one instance?

@@ -39,15 +39,15 @@ Here are just some of the intended benefits of using UID2 as part of your advert
The following steps provide a high-level outline of the workflow intended for organizations that collect user data and push it to DSPs—for example, advertisers, identity graph providers, and third-party data providers.

The following process occurs in the background:
* The advertiser or data provider monitors the UID2 Operator for rotated salt buckets and updates UID2s as needed.
* The advertiser or data provider monitors <Link href="../ref-info/glossary-uid#gl-refresh-timestamp">refresh timestamps</Link> and updates UID2s when the current time exceeds the refresh timestamp for each stored UID2.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is good wording :-)

@@ -399,6 +400,10 @@ import Link from '@docusaurus/Link';
<dd>An unencrypted alphanumeric identifier created through the UID2 APIs or SDKs with the user's <a href="#gl-dii">directly identifying information</a> (email address or phone number) as input. The raw UID2 is encrypted to create a <a href="#gl-uid2-token">UID2 token</a>. The raw UID2 is a unique value; no two raw UID2s are the same. Raw UID2s, and their associated UID2 tokens, are case sensitive.</dd>
<dd>For details, see <a href="uid-identifier-types">UID2 Identifier Types</a>.</dd>

<dt><MdxJumpAnchor id="gl-refresh-timestamp"><a href="#gl-refresh-timestamp">Refresh timestamp</a></MdxJumpAnchor></dt>
<dd>In the context of mapping <a href="#gl-dii">DII</a> to raw UID2s, a refresh timestamp is a Unix timestamp (in seconds) returned in the <code>r</code> field of the <a href="../endpoints/post-identity-map-v3">POST&nbsp;/identity/map</a> endpoint response. The raw UID2 is guaranteed to be valid until this timestamp. It is refreshed at some point after this time.</dd>
<dd>Use the refresh timestamp to determine when to regenerate raw UID2s for your stored data. We recommend checking for refresh opportunities daily by comparing the current time with stored refresh timestamps.</dd>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

with stored refresh timestamps > with the stored refresh timestamps

@@ -28,7 +28,7 @@ The following table summarizes the functionality available with each SDK.
|Android | Client&nbsp;(Mobile) | &#8212; | &#8212; | &#9989; | &#9989; | &#8212; | &#8212; |
|iOS | Client (Mobile) | &#8212; | &#8212; | &#9989;| &#9989; |&#8212; | &#8212; |

&ast;Advertisers and Data Providers who need to generate raw UID2s from DII can also do this via Snowflake (see [Snowflake Integration Guide](../guides/integration-snowflake.md)) or by using the [POST&nbsp;/identity/map](../endpoints/post-identity-map.md) endpoint.
&ast;Advertisers and Data Providers who need to generate raw UID2s from DII can also do this via Snowflake (see [Snowflake Integration Guide](../guides/integration-snowflake.md)) or by using the [POST&nbsp;/identity/map](../endpoints/post-identity-map-v3.md) endpoint.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one needs to link to the v2 endpoint until the Snowflake docs are updated, I think.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants