---
title: DCP
slug: web-experimentation/api/hs2a-dcp
docTags: 
createdAt: 2026-08-05T20:56:13.000Z
---

You can use the `dcp` APIs if both of the following conditions are true:

- [Dynamic Customer Profiles](docId\:soR8SO10tJ5gwvGAxS3cA) is enabled for your account.
- One of your active and published experiments or campaigns includes an [External Attribute audience condition](docId\:hfWGpFPgoInRAVNnzkkAs).

If either of the previous do not apply, then `window.optimizely.get('dcp')` returns `undefined`.

### Syntax

```javascript
dcp = window["optimizely"].get("dcp");
```

### Parameters

| Parameter and type | Child attribute | Description |
| ------------------ | --------------- | ----------- |
| **dcp** *string*   | N/A             | Required.   |

### Return value

| Parameter and type                                           | Child Attribute                      | Description                                                                                                                                                 |
| ------------------------------------------------------------ | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *DCPObject*                                                  | N/A                                  | N/A                                                                                                                                                         |
| **getAttributeValue** *function\[getAttributeValue]*         | Child attribute of type `DCPObject`. | This API function returns the visitor's value for a content-enabled profile attribute.                                                                      |
| **waitForAttributeValue** *function\[waitForAttributeValue]* | Child attribute of type `DCPObject`. | This API function returns a `Promise` that is resolved as soon as Web Experimentation receives the visitor's value for a content-enabled profile attribute. |

### Example call

```javascript
dcp = window["optimizely"].get("dcp");
```

### Example return value

```javascript
dcp.getAttributeValue(attribute);
dcp.waitForAttributeValue(attribute);
```

## getAttributeValue()

This API function returns the visitor's value for a [content-enabled](docId\:soR8SO10tJ5gwvGAxS3cA) profile attribute.

### Syntax

```javascript
dcp.getAttributeValue(datasourceId, attributeId, attributeName);
```

### Parameters

| Parameter and type         | Child attribute | Description                                                                                                                  |
| -------------------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **datasourceId** *integer* | N/A             | Required.                                                                                                                    |
| **attributeId** *integer*  | N/A             | Required if `attributeName` is not provided.                                                                                 |
| **attributeName** *string* | N/A             | Required if `attributeId` is not provided. Does not work if descriptive names are masked in the Web Experimentation snippet. |

### Return value

| Parameter and type                           | Child attribute | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| -------------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| *number* or *Boolean* or *string* or *Error* | N/A             | The uploaded attribute value, or `undefined` if any of the following are true: (1) A customer profile still needs to be uploaded for the current user. (2) A profile has been uploaded but does not include the desired attribute. (3) The Web Experimentation snippet is waiting for fresh data from the DCP service. This function throws an error if any of the following are true: (1) The specified attribute does not exist. (2) The attribute is not content-enabled. (3) The attribute is specified by name even though names are masked in the Web Experimentation snippet. |

### Example call

```javascript
dcp.getAttributeValue(datasourceId, attributeId, attributeName);
```

## Examples

### Specify an attribute by ID

Get the value for a customer profile attribute.

```javascript
var dcp = window.optimizely.get('dcp');
var attributeValue = dcp.getAttributeValue({
  datasourceId: 123,
  attributeId: 456
});
```

### Specify an attribute by name

Get the value for a customer profile attribute.

```javascript
var dcp = window.optimizely.get('dcp');
var attributeValue = dcp.getAttributeValue({
  datasourceId: 123,
  attributeName: 'Preferred Locale'
});
```

## waitForAttributeValue()

This API function returns a `Promise` that is resolved as soon as Optimizely Web Experimentation receives the visitor's value for a [content-enabled](docId\:soR8SO10tJ5gwvGAxS3cA) profile attribute.

### Syntax

```javascript
dcp.waitForAttributeValue(datasourceId, attributeId, attributeName);
```

### Parameters

| Parameter and type         | Child attribute | Description                                                                                                                  |
| -------------------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| **datasourceId** *integer* | N/A             | Required.                                                                                                                    |
| **attributeId** *string*   | N/A             | Required if `attributeName` is not provided.                                                                                 |
| **attributeName** *string* | N/A             | Required if `attributeId` is not provided. Does not work if descriptive names are masked in the Web Experimentation snippet. |

### Return value

| Parameter and type   | Child attribute | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| -------------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *Promise* or *Error* | N/A             | An ES6-style Promise that is resolved with the uploaded attribute value, or with `undefined` if any of the following are true: (1) A customer profile still needs to be uploaded for the current user. (2) A profile has been uploaded, but it does not include the desired attribute. If your campaign does not target a DCP Audience, then it is possible that profile data will not be fetched and the Promise will not be resolved. This function throws an error if any of the following are true: (1) The specified attribute does not exist. (2) The attribute is not content-enabled. (3) The attribute is specified by name even though names are masked in the Optimizely Web Experimentation snippet. |

### Example call

```javascript
dcp.waitForAttributeValue(datasourceId, attributeId, attributeName);
```

## Examples

### Specify an attribute by ID

Receive the value for a customer profile attribute once it has been fetched from the DCP server.

```javascript
var dcp = window.optimizely.get('dcp');
dcp.waitForAttributeValue({
  datasourceId: 123,
  attributeId: 456
}).then(
  function(attributeValue) {
    ...
  }
);
```

### Specify an attribute by name

Receive the value for a customer profile attribute once it has been fetched from the DCP server.

```javascript
var dcp = window.optimizely.get('dcp');
dcp.waitForAttributeValue({
  datasourceId: 123,
  attributeName: 'Preferred Locale'
}).then(
  function(attributeValue) {
    ...
  }
);
```
