Request Reach Estimate V2

Use this API to request a reach estimate or impressions opportunity forecast for a given ad group.
Users can simulate changes by overriding ad group-level settings in the request payload. The API does not modify any stored data.
Note: Currently, simulation is only supported for ad group-level attributes. Campaign-level schedules that cascade to ad groups cannot yet be simulated in this API. If budget, schedule and deliverySpeed are set at the campaign level, the API will disregard these values if passed, and the forecast provided will use the original campaign values instead.

👉

What It Does:

  • Computes potential reach ( impressions) based on the targeting and schedule settings of a given ad group.
    Allows developers to simulate changes to ad group configuration by overriding certain fields in the request payload.
  • Does not persist or modify ad group data — it is strictly a forecasting tool
  • To return a valid reach estimate, the following ad group-level attributes must be available either in the stored ad group OR passed in the request : schedule and targeting.

👉

Simulation (“What-If” analysis) support:

  • You can override ad group-level startDate, endDate and targeting in the request body to simulate changes without modifying the actual ad group.
  • Campaign-level schedules that cascade to ad groups cannot yet be simulated in this API. If budget, schedule and deliverySpeed are set at the campaign level, the API will disregard these values if passed, and the forecast provided will use the original campaign values instead.
  • All overrides are non-persistent. This API does not modify stored campaign or ad group data.

📘

URL:POST/api/v2/reachEstimate

Request Parameters

ParametersNotesTypeRequiredPossible Values
advertiserIdID of advertiser integerYUnique numeric identifier
campaignIdID of the campaignintegerYUnique numeric identifier
adGroupIdID the ad groupintegerYUnique numeric identifier
metricThe list of metrics you are requesting an estimate for.

Note: “impressions” is currently the only supported metric.
arrayYValue:
impressions, , unique_users
startDateSimulated start date for ad group scheduling

Note:
  • If startDate has been set at the campaign level for the specified ad group:
    the startDate value passed in the API request is ignored, and the forecast in the response is based on the startDate of the campaign
  • If startDate has been set at the ad group level for the specified ad group:
    the forecast is based on the startDate value in the request, not the original value set at the ad group level
datetimeNDate must follow this format:
yyyy-MM-dd'T'HH:mm:ss.SSSXXX

Note:
  • All timestamp values must be in ISO 8601 format (e.g., "2025-07-20T19:10:10-05:00").
  • All date-time values are internally converted to Eastern Time (ET) for processing and normalized to the start of the hour. This means minutes and seconds are truncated. Example: "2025-07-20T19:10:10-05:00" becomes "2025-07-20T19:00:00-05:00" in ET

Kindly take these behaviors into consideration when assigning a value to startDate in your request.
endDateSimulated end date for ad group scheduling.
For ad groups that run indefinitely, use the value:
endDate = ‘9999-12-30T00:00:00Z’
Note:
  • If endDate has been set at the campaign level for the specified ad group:
    the endDate value passed in the API request is ignored. Instead, the forecast returned in the response is based on the endDate of the campaign
  • If endDate has been set at the ad group level for the specified ad group:
    the forecast is based on the endDate value in the request, not the original value set at the ad group level.
datetimeNDate must follow this format:
yyyy-MM-dd'T'HH:mm:ss.SSSXXX

Note:
  • All timestamp values must be in ISO 8601 format (e.g., "2025-07-20T19:10:10-05:00").
  • All date-time values are internally converted to Eastern Time (ET) for processing and normalized to the start of the hour. This means minutes and seconds are truncated. Example: "2025-07-20T19:10:10-05:00" becomes "2025-07-20T19:00:00-05:00" in ET
  • The endDate must be set to a time after 12:00 PM ET. If the provided value is before 12:00 PM ET, the system will return an error.
  • Special Case: If you set endDate to exactly "00:00:00" ET (e.g., "2025-07-20T00:00:00-05:00"), it will be interpreted as the end of the previous day: "2025-07-19T23:59:59-05:00".

Kindly take these behaviors into consideration when assigning a value to startDate in your request.
  • keywords: ONLY APPLICABLE FOR KEYWORD TARGETING
    • keywordText: string data type
    • matchType: string data type (Values: broad, exact)

    Note: Only Exact match type is allowed for negative keywords.

  • contextual: ONLY APPLICABLE FOR CONTEXTUAL TARGETING
    • id: integer data type
    • reach: string data type (Values: "tier_1","tier_2","tier_3","tier_4","tier_5","tier_6","tier_7")

    Note: Tier mapping in API call vs Ad Center UI:
    low=[tier_1,tier_2], mid=[tier_3,tier_4], high=[tier_5,tier_6,tier_7]

  • behavioral: ONLY APPLICABLE FOR BEHAVIORAL TARGETING
    • audienceType: string data type (Values: retail, brand, persona, custom)
    • attribute: string data type
      • For category: historical, predictive
      • For brand: historical, predictive, lapsed_buyers
      • For persona: lifestyle, lifestage
    • id: integer data type
  • runOfSite: ONLY APPLICABLE FOR ROS TARGETING
    string data type, Value: true
  • geoTargets
    • id: integer data type

      Note:

      1. If Geo targeting is not specified, default Country (US) level targeting applies.
      2. IDs with isDisabled=true from POST/api/v1/targeting/list cannot be used for targeting.

Note: If targeting values are set at the ad group level, the forecast is based on the request values, not the original ad group settings.

objectConditional*The values:
• keywords
• contextual
• behavioral
• runOfSite
• geoTargets
timeframesSpecifies the timeframes for which forecasts should be returned. If not provided, forecasts for all available timeframes will be returned.arrayNThe values:
• daily
• 30days
• lifetime

*Conditional - required if not configured for the adGroupId

👉

Rules

  • To return a valid reach estimate, the following ad group-level attributes must be available either in the stored ad group OR passed in the request: startDate, endDate, and targeting
    If any of these are missing in the ad group and not provided in the request payload, the API returns an error.
  • If the following request parameters are set at the campaign level: startDate, endDate, the values for these parameters in the request payload are disregarded and the forecast response uses the original campaign values instead.
  • If the following request parameters are set at the ad group level: startDate, endDate, and targeting, the values provided for these parameters in the request payload override the original values set at ad group level and are used in the forecast response instead
  • Users can simulate changes by overriding ad group-level settings in the request payload. The API does not modify any stored data.
    Note: Currently, the API supports simulation only for ad group-level attributes. Campaign-level budgets or schedules that apply to ad groups are not yet supported for simulation.
  • Only daily forecasts are available for unique_users. If a 30days or lifetime forecast is requested, the API will return -1
  • unique_users forecasts returns only two fields: minValue, maxValue. scale is not applicable for unique_users forecast

Headers

Header NameDescriptionRequiredValues
AuthorizationThe token will provide you the access to the API. It is same for all advertisers you access through the APIYPlease utilize the generated auth_token shared with you at the time of partner onboarding from the Getting Started Guide. This key can be repurposed for SP API access as well.
WM_CONSUMER.IDWe will provide you the consumer ID to access the API. It is same for all advertisers you access through the API.YPlease use the generated ConsumerId shared with you at the time of partner onboarding. Refer to the Getting Started Guide for further explanation on this
WM_SEC.AUTH_SIGNATUREAuth signature as an API keyYUse the signature generator code from Getting Started Guide to generate this value
WM_CONSUMER.intimestampTimestamp for which the auth signature is generated. Use Unix epoch format for the timestampYUse the signature generator code (Getting Started Guide) to generate this value
WM_SEC.KEY_VERSIONWe will provide you with the KEY VERSION to access the API. It is same for all advertisers you access through the APIY1

Sample Request - Get impressions & unique_users estimates for an ad group with updated values for schedule and targeting

curl --location --request POST 'https://developer.api.us.walmart.com/api-proxy/service/display/api/v1/api/v2/reachEstimate' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <auth_token>' \
--header 'WM_SEC.AUTH_SIGNATURE: ***********' \
--header 'WM_CONSUMER.ID: abcde-v123-fa2r-a1fs-asd45f6qef' \
--header 'WM_SEC.KEY_VERSION: 1' \
--header 'WM_CONSUMER.intimestamp: 1565309779' \
--data '{ "advertiserId": 1627, "campaignId": 9279, "adGroupId": 2198, "metric": ["impressions", "unique_users"], "timeframes":["daily","30days","lifetime"], "startDate": "2024-06-27T00:00:00Z", "endDate": "2024-12-30T23:59:59Z", "targeting": { "and": [ { "runOfSite": true }, { "geoTargets": [ { "id": 24779 } ] } ] } }' 

Sample Request - Get unique_users estimates estimates for an ad group with updated values for schedule and targeting

curl --location --request POST 'https://developer.api.us.walmart.com/api-proxy/service/display/api/v1/api/v2/reachEstimate' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <auth_token>' \
--header 'WM_SEC.AUTH_SIGNATURE: ***********' \
--header 'WM_CONSUMER.ID: abcde-v123-fa2r-a1fs-asd45f6qef' \
--header 'WM_SEC.KEY_VERSION: 1' \
--header 'WM_CONSUMER.intimestamp: 1565309779' \
--data '{ "advertiserId": 1627, "campaignId": 9279, "adGroupId": 2198, "metric": ["unique_users"], "timeframes":["30days","lifetime"], "startDate": "2024-06-27T00:00:00Z", "endDate": "2024-12-30T23:59:59Z", "targeting": { "and": [ { "runOfSite": true }, { "geoTargets": [ { "id": 24779 } ] } ] } }' 

Response

ElementDescriptionType
codeThe response code can have following values:
  • success
  • failure
string
forecastIdforecastId for every successful responsestring
estimatesContains forecasted metrics over various time ranges. It is a nested json object that contains forecast data for:
impressions: Estimated number of ad impressions
uniqueUsers: Estimated number of unique users reached

The estimates objects are detailed below in a separate table following this one.
json
detailsDetails of the response.
Values:
  • REACH_ESTIMATE_SUCCESS
  • REACH_ESTIMATE_FAILURE
stri

estimates Objects:

The estimates object contains forecasted metrics across multiple time ranges. Each supported metric (for example, impressions, uniqueUsers) is represented as a nested object with estimated ranges. Each metric object may include one or more time-range sub-objects.

Object structure:

"estimates": { "<metric>": { "daily": { ... }, "30days": { ... }, "lifetime": { ... } }
}

Time-Range Sub-Objects: Each metric can contain the following optional sub-objects:

ElementsDescriptionType
dailyEstimated metric values per dayjson
30daysEstimated metric values for 30 daysjson
lifetimeEstimated metric values for the ad group's full lifetimejson

Estimate range Object: Each time-range object (daily, 30days, lifetime) contains the estimated range values described below ::

ElementsDescriptionType
minValueLower bound of the estimated metric rangeint
maxValueUpper bound of the estimated metric range
Note:This field is omitted when there is no defined upper bound for the estimate
int
scaleThe relative scale of the forecast
Values:
  • LOW
  • MODERATE
  • HIGH
string

Success Sample Response - Get impressions & unique_users estimates for an ad group with updated values for schedule and targeting

{ "code": "success", "forecastId": "145", "estimates": { "impressions": { "daily": { "minValue": 1, "maxValue": 15, "scale": "LOW" }, "30days": { "minValue": 5, "maxValue": 75, "scale": "MODERATE" }, "lifetime": { "minValue": 1, "maxValue": 15, "scale": "HIGH" } }, "uniqueUsers": { "daily": { "minValue": 1, "maxValue": 15 }, "30days": { "minValue": -1, "maxValue": -1 }, "lifetime": { "minValue": -1, "maxValue": -1 } } }, "details": [ "30DAYS_UNIQUE_USERS_FORECAST_UNAVAILABLE", "LIFETIME_UNIQUE_USERS_FORECAST_UNAVAILABLE" ]
} 

Failure Sample Response - Get impressions & unique_users estimates for an ad group with updated values for schedule and targeting

{ "code": "failure", "details": [ "FAILURE_FETCHING_REACH_ESTIMATE" ]
}

Failure Sample Response - Get unique_users estimates estimates for an ad group with updated values for schedule and targeting

{ "code": "failure", "details": [ "DATA_UNAVAILABLE" ]
}