---
updatedAt: 2026-03-30T09:19:02.000Z
agentTools:
  projectIndex: https://developers.bazaarvoice.com/v1.0-PRR/llms.txt
---

# API Behavioral Differences: Agrippa vs Concierge

This guide explains the key differences in how the API behaves when using Agrippa versus Concierge routing keys.

## Data Visibility

### Hidden Custom Dimension Values (CDV)

| Feature          | Agrippa                                                 | Concierge                                                    |
| ---------------- | ------------------------------------------------------- | ------------------------------------------------------------ |
| **Hidden CDVs**  | Hidden CDVs appear in API responses                     | Hidden CDVs are excluded from API responses                  |
| **Value Labels** | Value labels are shown for internal visibility passkeys | Value labels are shown only for external visibility passkeys |

***

## Response Formatting

### CDV, Badge, and Response Structure

| Feature                    | Agrippa                                                                                                                              | Concierge                                                                                                        |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
| **CDV from Contributors**  | Automatically includes CDV values (like `verifiedPurchaser`) from the Contributor/Author object directly into the main Review object | Does not automatically include CDVs from contributor/author. The CDV must exist in the main Review object itself |
| **ClientResponses Object** | If a field is unavailable, its value is set to `null`                                                                                | If a field is unavailable, it is completely removed from the response object                                     |
| **Empty Review Title**     | Returns `null` for empty review titles                                                                                               | Returns an empty string (`""`) for empty review titles                                                           |
| **Empty API Parameters**   | Accepts empty parameters in API calls                                                                                                | Throws an error when empty parameters are passed. Returns no results ⚠️                                          |

> ⚠️ **Important:** The empty parameter handling difference may break existing implementations that pass empty parameters.

#### Example: Empty API Parameters

**Agrippa Request:**

```http
https://stg.api.bazaarvoice.com/data/reviews.json?apiversion=5.4&passkey=kuy3zj9pr3n7i0wxajrzj04xo&Filter=ProductId:1000001&Include=Products&filter=&filter=
```

**Agrippa Response:**\
Returns a successful response with results:

```json
{
  "Locale": "en_US",
  "Errors": [],
  "Results": [
    {
      "UserNickname": "hju78",
      "Rating": 3,
      "ReviewText": "TESTING>>>>>TESTING>>>>>TESTING...",
      "ProductId": "1000001",
      "Title": "TESTING>>>>>TESTING>>>>>TESTING",
      "ModerationStatus": "APPROVED",
      "IsRecommended": true,
      "Id": "192613"
    }
  ],
  "TotalResults": 150,
  "Limit": 1,
  "HasErrors": false,
  "Offset": 0
}
```

**Concierge Request:**

```http
https://stg.api.bazaarvoice.com/data/reviews.json?apiversion=5.4&filter=ProductId%3Adata-gen-moppq9ekthfzbc6qff3bqokie&Offset=&Limit=&Sort=&stats=reviews&include=products&filter=&filter=&passkey=caB45h2jBqXFw1OE043qoMBD1gJC8EwFNCjktzgwncXY4
```

**Concierge Response:**\
Returns errors and no results:

```json
{
  "Limit": 0,
  "Offset": 0,
  "TotalResults": 0,
  "Locale": "en_US",
  "Results": [],
  "Includes": {},
  "HasErrors": true,
  "Errors": [
    {
      "Message": "Illegal empty filter string.",
      "Code": "ERROR_PARAM_INVALID_FILTER_ATTRIBUTE"
    },
    {
      "Message": "Illegal empty sort string: ",
      "Code": "ERROR_PARAM_INVALID_SORT_ATTRIBUTE"
    },
    {
      "Message": "Illegal empty limit string: ",
      "Code": "ERROR_PARAM_INVALID_LIMIT"
    },
    {
      "Message": "Illegal empty offset string: ",
      "Code": "ERROR_PARAM_INVALID_OFFSET"
    }
  ]
}
```

***

## Review Statistics CDV Count

### Key Difference in Statistics Calculation

**Context:**\
Only CDVs that are configured and enabled in Configuration are included in statistics. Concierge uses CDV IDs for stats calculation and is **case-sensitive**.

**Example:**\
If the configuration is set for lowercase `'under18'`, but the actual value is CamelCase `'Under18'`, then:

* **Concierge:** The value will NOT be counted in review statistics
* **Agrippa:** The value WILL be counted in review statistics

### Example Responses

#### Agrippa Response

```json
"Age": {
  "Label": "Age:",
  "Values": [
    {
      "Value": "under18",
      "Count": 1
    },
    {
      "Value": "18to24",
      "Count": 1
    },
    {
      "Value": "25to29",
      "Count": 50
    },
    {
      "Value": "30to39",
      "Count": 3
    },
    {
      "Value": "40to49",
      "Count": 4
    },
    {
      "Value": "50to60",
      "Count": 4
    },
    {
      "Value": "over60",
      "Count": 132
    }
  ]
}
```

**Note:** Includes `"under18"` with a count of 1.

#### Concierge Response

```json
"Age": {
  "Id": "Age",
  "Values": [
    {
      "Count": 1,
      "Value": "18to24",
      "ValueLabel": "18-24"
    },
    {
      "Count": 50,
      "Value": "25to29",
      "ValueLabel": "25-29"
    },
    {
      "Count": 3,
      "Value": "30to39",
      "ValueLabel": "30-39"
    },
    {
      "Count": 4,
      "Value": "40to49",
      "ValueLabel": "40-49"
    },
    {
      "Count": 4,
      "Value": "50to60",
      "ValueLabel": "50-60"
    },
    {
      "Count": 10,
      "Value": "over60",
      "ValueLabel": "Over 60"
    }
  ]
}
```

**Note:** The `"under18"` value is missing due to case-sensitivity mismatch.

***

## Email Address Access

The encryption mechanism for emails varies between the Concierge and Agrippa.