POST /v3/universalforecasting/generate → forecastCreate

Overview

Property Value
REST endpoint POST /v3/universalforecasting/generate
GraphQL operation forecastCreate
Input type ForecastCreateInput
Output type PayloadWithErrorsOfForecast (data: Forecast, userErrors: [UserError!]!)

Parity note: forecastCreate creates a persisted forecast entity (optionally calculated asynchronously). It does not accept the REST UniversalForecastingRequest body or return the ephemeral universal forecast response from REST generate. Inputs such as bid-list arrays, forecasting audiences, Nielsen demographic settings, and budget-point generation flags are Not currently available in GraphQL. Synchronous outputs such as inline MetricResults, BudgetMetrics, and ReachCurveData are Not currently available in GraphQL on create—poll Forecast.status and read adGroupLevelForecastResults after calculation completes.

Multi-step operations

GraphQL forecastCreate creates a forecast record and may compute results asynchronously (isAsync). After creation, query the forecast by id and inspect status and adGroupLevelForecastResults for calculated metrics. REST path: /v3/universalforecasting/generate (not /v3/forecasting/universal).

Input field mapping

Input type: ForecastCreateInput

REST field GraphQL field GraphQL type Required Notes
AdvertiserId advertiserId String Required Required on REST; optional on ForecastCreateInput
TimeWindow adGroupForecastSettings.forecastDurationInDays Int! Optional Remodelled in GraphQL—only when adGroupForecastSettings is supplied; days 1–180 on REST
AverageBidCPMInAdvertiserCurrency cpm.amount / adGroupForecastSettings.cpm.amount Decimal! Optional Remodelled in GraphQL—cpm is MoneyModelInput (amount + currencyCode), not a bare decimal
CrossDeviceVendorId N/A N/A Optional Not currently available in GraphQL
UseMultipleCrossDeviceVendors N/A N/A Optional Not currently available in GraphQL
IsTargetKnownUsersEnabled adGroupForecastSettings.targetAllKnowUsers Boolean! Optional Remodelled in GraphQL—inverted semantics; only when adGroupForecastSettings is supplied
UseCrossDevice N/A N/A Optional Not currently available in GraphQL
UseCtvCrossDevice N/A N/A Optional Not currently available in GraphQL
AudienceId adGroupForecastSettings.audienceId String Optional Remodelled in GraphQL—only when adGroupForecastSettings is supplied
UniversalForecastingBidLists N/A N/A Optional Not currently available in GraphQL; see NewBidList / BidLine nested types
ExistingBidLists adGroupForecastSettings.bidLists [AdGroupForecastBidListCreateInput!]! Optional Remodelled in GraphQL—references existing bid list IDs by bidListId, not inline bid-list creation
ForecastingAudiences N/A N/A Optional Not currently available in GraphQL
PercentAboveBase N/A N/A Optional Not currently available in GraphQL
AllowOpenMarket N/A N/A Optional Not currently available in GraphQL
MockForecast N/A N/A Optional Not currently available in GraphQL
Demographic N/A N/A Optional Not currently available in GraphQL
UseTTDSegmentsOnly N/A N/A Optional Not currently available in GraphQL
UseSeparateDemoForecasts N/A N/A Optional Not currently available in GraphQL
IncludeExpectedValues N/A N/A Optional Not currently available in GraphQL
GenerateBudgetPoints N/A N/A Optional Not currently available in GraphQL
UseForecastScalingArrayApproach N/A N/A Optional Not currently available in GraphQL
N/A name String! Required Create-only; human-readable forecast name
N/A forecastMode ForecastModeInput Optional Create-only (STANDARD, LIVE_EVENTS)
N/A reachType ReachType Optional Create-only (DEVICE, PERSON, HOUSEHOLD); deprecated in favour of adGroupForecastSettings.reachType when settings supplied
N/A liveEventsForecastSettings LiveEventsForecastSettingCreateInput Optional Create-only; for forecastMode: LIVE_EVENTS
N/A isArchived Boolean Optional Create-only
N/A isAsync Boolean Optional Create-only; when true, results populate asynchronously

Output field mapping

Output type: PayloadWithErrorsOfForecast → data: Forecast

REST response field GraphQL field GraphQL type Nullable Notes
AdvertiserId data.advertiser.id ID! Not nullable Via advertiser relationship
LastCalculatedAt data.adGroupLevelForecastResults.lastCalculatedAt DateTime! Not nullable Populated after forecast calculation completes
TimeWindow data.adGroupLevelForecastResults.durationInDays Int! Not nullable Echo of forecast duration
MetricResults N/A N/A N/A Not currently available in GraphQL
PrivateContractMetricResults N/A N/A N/A Not currently available in GraphQL
PrivateContractGroupMetricResults N/A N/A N/A Not currently available in GraphQL
PrivateContractMetricGeoResults N/A N/A N/A Not currently available in GraphQL
AverageBidCPMInAdvertiserCurrency data.cpm.amount Decimal Nullable Remodelled in GraphQL—MoneyModel; deprecated in favour of adGroupForecastSettings.cpm
CrossDeviceVendorId N/A N/A N/A Not currently available in GraphQL
UseMultipleCrossDeviceVendors N/A N/A N/A Not currently available in GraphQL
TargetKnownUsers data.adGroupForecastSettings.targetAllKnowUsers Boolean! Not nullable Remodelled in GraphQL—only when settings were supplied
Audience data.adGroupForecastSettings.audience Audience Nullable Remodelled in GraphQL—audience entity, not inline REST audience payload
IncrementalForecast N/A N/A N/A Not currently available in GraphQL
ReachCurveData data.adGroupLevelForecastResults.curves [ForecastingCurveDataPoint!]! Not nullable Remodelled in GraphQL—reach curve after calculation; fields include budget, impressions, personsReach (not REST ReachCurveDataPoint shape)
ReachStrategySupported N/A N/A N/A Not currently available in GraphQL
ForecastingAudiencesToAdd N/A N/A N/A Not currently available in GraphQL
ForecastingLambdaRequest N/A N/A N/A Not currently available in GraphQL
BudgetMetrics N/A N/A N/A Not currently available in GraphQL
N/A data.id ID! Not nullable Read-only forecast identifier
N/A data.name String! Not nullable Read-only
N/A data.status ForecastStatus Nullable Read-only (QUEUED, RUNNING, COMPLETED, FAILED, TO_BE_SUBMITTED)
N/A data.forecastMode ForecastMode! Not nullable Read-only
N/A data.isAsync Boolean! Not nullable Read-only
N/A data.isArchived Boolean! Not nullable Read-only
N/A data.adGroupLevelForecastResults.availsNumber Long! Not nullable Read-only
N/A data.adGroupLevelForecastResults.spend Long Nullable Read-only
N/A data.adGroupLevelForecastResults.valuesAtInputBudget BaseForecastingCurveDataPoint! Not nullable Read-only metrics at input budget
N/A userErrors [UserError!]! Not nullable Validation / business errors (field, message)

Endpoint-specific nested types and enums

Most inputs below are Not currently available in GraphQL on forecastCreate.

BidLine (within NewBidList.BidLines)

REST BidLine objects on UniversalForecastingBidLists are Not currently available in GraphQL on forecastCreate. When creating bid lists through GraphQL bid-list mutations, use BidLineCreateInput.

REST field GraphQL field GraphQL type Required Notes
BidAdjustment bidAdjustment Decimal! Required On BidLineCreateInput
AdFormatId adFormatId ID Optional N/A
DomainFragment domainFragment String Optional N/A
UniversalCategoryTaxonomyId universalCategoryTaxonomyId ID Optional N/A
Browser browser Browser Optional On BidLineCreateInput
Browser browserId BrowserInput Optional On BidLineCreateInput
CarrierId carrierId ID Optional N/A
DeviceModelId deviceModelId ID Optional N/A
DeviceType deviceType DeviceType Optional N/A
GeoSegmentId geoSegmentId ID Optional N/A
HourOfWeek hourOfWeek Short Optional N/A
LanguageId languageId ID Optional N/A
Os osName String Optional N/A
PrivateContractId privateContractId ID Optional N/A
RecencyWindowInMinutes recencyWindowInMinutes RangeOfInt32Input Optional N/A
RenderingContext renderingContext RenderingContext Optional N/A
SupplyVendorId supplyVendorId ID Optional N/A
MaxBid maxBid Decimal Optional N/A
BidLineId N/A N/A N/A Not currently available in GraphQL

NewBidList

REST field GraphQL field GraphQL type Nullable Notes
BidListId N/A N/A N/A Not currently available in GraphQL
Name N/A N/A N/A Not currently available in GraphQL
BidListAdjustmentType N/A N/A N/A Not currently available in GraphQL
ResolutionType N/A N/A N/A Not currently available in GraphQL
BidListDimensions N/A N/A N/A Read-only on create
BidLines N/A N/A N/A Not currently available in GraphQL; see BidLine above
IsEnabled N/A N/A N/A Not currently available in GraphQL
IsDefaultForDimension N/A N/A N/A Not currently available in GraphQL

ForecastingAudience

REST field GraphQL field GraphQL type Nullable Notes
AdvertiserId N/A N/A N/A Not currently available in GraphQL
AudienceId N/A N/A N/A Read-only on create
AudienceName N/A N/A N/A Not currently available in GraphQL
Description N/A N/A N/A Not currently available in GraphQL
IncludedDataGroups N/A N/A N/A Not currently available in GraphQL; nested object
ExcludedDataGroups N/A N/A N/A Not currently available in GraphQL; nested object
IsAutoGenerated N/A N/A N/A Read-only

DataGroup (within ForecastingAudience)

REST field GraphQL field GraphQL type Nullable Notes
AdvertiserId N/A N/A N/A Not currently available in GraphQL
DataGroupId N/A N/A N/A Read-only on create
DataGroupName N/A N/A N/A Not currently available in GraphQL
Description N/A N/A N/A Not currently available in GraphQL
IsSharable N/A N/A N/A Not currently available in GraphQL
FirstPartyDataIds N/A N/A N/A Not currently available in GraphQL
ThirdPartyDataIds N/A N/A N/A Not currently available in GraphQL
SkipUnauthorizedThirdPartyData N/A N/A N/A Not currently available in GraphQL
GeoForCounts N/A N/A N/A Not currently available in GraphQL

NielsenDemographicSettings

REST field GraphQL field GraphQL type Nullable Notes
StartAge N/A N/A N/A Not currently available in GraphQL
EndAge N/A N/A N/A Not currently available in GraphQL
Gender N/A N/A N/A Not currently available in GraphQL

UniversalForecastingInsightMetricResult

REST field GraphQL field GraphQL type Nullable Notes
InsightMetricType N/A N/A N/A Not currently available in GraphQL
RangeStart N/A N/A N/A Not currently available in GraphQL
RangeEnd N/A N/A N/A Not currently available in GraphQL
IsCurrency N/A N/A N/A Not currently available in GraphQL
ExpectedValue N/A N/A N/A Not currently available in GraphQL

UniversalForecastInsightMetricType

Impressions, Spend, FrequencyUsers, FrequencyPeople, FrequencyHousehold, ReachUsers, ReachPeople, ReachHousehold, Reach, Frequency, OTP, LinearTVReach, DigitalReach, UsDemographicPercentages, SambaUniqueUserCount, and additional REST-only forecast metric fields. Not currently available in GraphQL.

UniversalForecastingContractMetricResult

REST field GraphQL field GraphQL type Nullable Notes
PrivateContractId N/A N/A N/A Not currently available in GraphQL
PrivateContractName N/A N/A N/A Not currently available in GraphQL
FloorPrice N/A N/A N/A Not currently available in GraphQL
LogoUrl N/A N/A N/A Not currently available in GraphQL
IsPremium N/A N/A N/A Not currently available in GraphQL
MetricResults N/A N/A N/A Not currently available in GraphQL

UniversalForecastingContractGroupMetricResult

REST field GraphQL field GraphQL type Nullable Notes
PrivateContractGroupId N/A N/A N/A Not currently available in GraphQL
GroupMetricResults N/A N/A N/A Not currently available in GraphQL
SubPrivateContractMetricResults N/A N/A N/A Not currently available in GraphQL

UniversalForecastingContractGeoTypeMetricResult

REST field GraphQL field GraphQL type Nullable Notes
GeoLocationType N/A N/A N/A Not currently available in GraphQL
MetricResults N/A N/A N/A Not currently available in GraphQL

UniversalForecastingContractGeoMetricResult

REST field GraphQL field GraphQL type Nullable Notes
GeoName N/A N/A N/A Not currently available in GraphQL
MetricResults N/A N/A N/A Not currently available in GraphQL

GeoSegmentFilter

CustomOnly, StandardOnly, All, Country, Region, City, Zip, Metro (Deprecated on REST), CongressionalDistrict, NielsenDma. Not currently available in GraphQL.

IncrementalForecast

REST field GraphQL field GraphQL type Nullable Notes
ReachHh N/A N/A N/A Not currently available in GraphQL
ReachUsers N/A N/A N/A Not currently available in GraphQL
ReachPeople N/A N/A N/A Not currently available in GraphQL
FrequencyHh N/A N/A N/A Not currently available in GraphQL
FrequencyUsers N/A N/A N/A Not currently available in GraphQL
FrequencyPeople N/A N/A N/A Not currently available in GraphQL
Spend N/A N/A N/A Not currently available in GraphQL
Impressions N/A N/A N/A Not currently available in GraphQL
ImpressionsForAdGroup N/A N/A N/A Not currently available in GraphQL
CtvNotExposedImpressions N/A N/A N/A Not currently available in GraphQL
ReachPerChannel N/A N/A N/A Not currently available in GraphQL
USDemographicPercentage N/A N/A N/A Not currently available in GraphQL

Range

REST field GraphQL field GraphQL type Nullable Notes
Min N/A N/A N/A Not currently available in GraphQL
Max N/A N/A N/A Not currently available in GraphQL

ReachPerChannel

REST field GraphQL field GraphQL type Nullable Notes
Ctv N/A N/A N/A Not currently available in GraphQL
Both N/A N/A N/A Not currently available in GraphQL

ReachCurveDataPoint

REST field GraphQL field GraphQL type Nullable Notes
Ratio N/A N/A N/A Not currently available in GraphQL; GraphQL curves use ForecastingCurveDataPoint
ReachRatio N/A N/A N/A Not currently available in GraphQL
SpendBudget N/A N/A N/A Not currently available in GraphQL
MinReach N/A N/A N/A Not currently available in GraphQL
MaxReach N/A N/A N/A Not currently available in GraphQL
MinFrequency N/A N/A N/A Not currently available in GraphQL
MaxFrequency N/A N/A N/A Not currently available in GraphQL
MinImpressions N/A N/A N/A Not currently available in GraphQL
MaxImpressions N/A N/A N/A Not currently available in GraphQL
AverageCpm N/A N/A N/A Not currently available in GraphQL
MinGrps N/A N/A N/A Not currently available in GraphQL
MaxGrps N/A N/A N/A Not currently available in GraphQL

UniversalForecastingScaledFrequencyMapsResult

REST field GraphQL field GraphQL type Nullable Notes
IsFCapped N/A N/A N/A Not currently available in GraphQL
Max N/A N/A N/A Not currently available in GraphQL
ExpectedValue N/A N/A N/A Not currently available in GraphQL
Min N/A N/A N/A Not currently available in GraphQL

Audience (response nested object)

REST field GraphQL field GraphQL type Nullable Notes
AdvertiserId N/A N/A N/A Not currently available in GraphQL; inline audience on generate response
AudienceId N/A N/A N/A Not currently available in GraphQL
AudienceName N/A N/A N/A Not currently available in GraphQL
Description N/A N/A N/A Not currently available in GraphQL
IncludedDataGroupIds N/A N/A N/A Not currently available in GraphQL
ExcludedDataGroupIds N/A N/A N/A Not currently available in GraphQL
LastUpdatedAtUTC N/A N/A N/A Not currently available in GraphQL
IsAutoGenerated N/A N/A N/A Not currently available in GraphQL
GeoForCounts N/A N/A N/A Not currently available in GraphQL
UniqueUserCount N/A N/A N/A Not currently available in GraphQL
WebCount N/A N/A N/A Not currently available in GraphQL
InAppCount N/A N/A N/A Not currently available in GraphQL
CtvCount N/A N/A N/A Not currently available in GraphQL
PersonsCount N/A N/A N/A Not currently available in GraphQL
HouseholdCount N/A N/A N/A Not currently available in GraphQL
ActiveIDsCountExpanded N/A N/A N/A Not currently available in GraphQL
SuccessfullyRetrievedCounts N/A N/A N/A Not currently available in GraphQL

Code examples

REST example

POST /v3/universalforecasting/generate HTTP/1.1
Content-Type: application/json
TTD-Auth: AUTH_TOKEN_PLACEHOLDER

{
  "AdvertiserId": "adv-abc123",
  "TimeWindow": 30,
  "AverageBidCPMInAdvertiserCurrency": 5.50,
  "AudienceId": "aud-xyz789",
  "UseCrossDevice": true,
  "UseCtvCrossDevice": true,
  "GenerateBudgetPoints": true,
  "Demographic": {
    "StartAge": "TwentyFive",
    "EndAge": "FortyNine",
    "Gender": "All"
  }
}

GraphQL example

POST /graphql HTTP/1.1
Content-Type: application/json
TTD-Auth: AUTH_TOKEN_PLACEHOLDER
mutation CreateForecast($input: ForecastCreateInput!) {
  forecastCreate(input: $input) {
    data {
      id
      name
      status
      isAsync
      advertiser {
        id
      }
      adGroupLevelForecastResults {
        lastCalculatedAt
        durationInDays
        availsNumber
        spend
        curves {
          budget
          impressions
          personsReach
          averageFrequency
        }
        valuesAtInputBudget {
          impressions
          personsReach
          averageFrequency
          relevance
        }
      }
    }
    userErrors {
      field
      message
    }
  }
}

Variables:

{
  "input": {
    "name": "Q3 reach forecast",
    "advertiserId": "adv-abc123",
    "forecastMode": "STANDARD",
    "reachType": "PERSON",
    "cpm": {
      "amount": 5.50,
      "currencyCode": "USD"
    },
    "isAsync": true
  }
}