PUT /v3/additionalfees → additionalFeeCardUpdate

Overview

Property Value
REST endpoint PUT /v3/additionalfees
GraphQL operation additionalFeeCardUpdate
Input type AdditionalFeeCardUpdateInput
Output type AdditionalFeeCardUpdatePayload (data: AdditionalFeeCardUpdateResult, errors: [AdditionalFeeCardUpdateMutationError!])

Input field mapping

Input type: AdditionalFeeCardUpdateInput

REST field GraphQL field GraphQL type Required Notes
Fees fees [AdditionalFeeInput!] Required N/A
Fees[].Amount amount Decimal! Required N/A
Fees[].Description description String Optional N/A
Fees[].FeeType feeType AdditionalFeeTypeInput! Required Input enum type is AdditionalFeeTypeInput (see nested enum table).
OwnerId ownerId ID! Required N/A
OwnerType ownerType String! Required REST serializes lowercase (campaign, adgroup, advertiser); GraphQL accepts the same string values.
StartDateUtc startDateUtc DateTime! Required N/A

Output field mapping

Output type: AdditionalFeeCardUpdateResult (returned as data on AdditionalFeeCardUpdatePayload)

REST response field GraphQL field GraphQL type Nullable Notes
Fees fees [AdditionalFeeUpdateResult!]! Not nullable N/A
Fees[].Amount amount Decimal! Not nullable N/A
Fees[].Description description String! Not nullable REST allows a null description; the GraphQL response coerces null to an empty string, so callers cannot distinguish "no description" from "empty description".
Fees[].FeeType feeType AdditionalFeeType! Not nullable Output enum type is AdditionalFeeType (distinct from input AdditionalFeeTypeInput; see nested enum table).
OwnerId ownerId ID Nullable N/A
OwnerType ownerType String Nullable N/A
StartDateUtc startDate DateTime! Not nullable REST uses StartDateUtc on both request and response; the GraphQL response field is startDate (not startDateUtc). Use startDateUtc on input and read startDate on output.

Endpoint-specific nested types and enums

AdditionalFeeTypeInput and AdditionalFeeType

REST serializes fee types as PascalCase strings in JSON. GraphQL uses separate enum types on input and output with SCREAMING_SNAKE_CASE members. All ten values exist on both sides.

REST value (FeeType) GraphQL input (AdditionalFeeTypeInput) GraphQL output (AdditionalFeeType)
None NONE NONE
MediaCostPercentage MEDIA_COST_PERCENTAGE MEDIA_COST_PERCENTAGE
DataCostPercentage DATA_COST_PERCENTAGE DATA_COST_PERCENTAGE
MediaPlusDataCostPercentage MEDIA_PLUS_DATA_COST_PERCENTAGE MEDIA_PLUS_DATA_COST_PERCENTAGE
PartnerCostPercentage PARTNER_COST_PERCENTAGE PARTNER_COST_PERCENTAGE
PartnerDataCostPercentage PARTNER_DATA_COST_PERCENTAGE PARTNER_DATA_COST_PERCENTAGE
FeeCPM FEE_CPM FEE_CPM
RateCPM RATE_CPM RATE_CPM
RateCPC RATE_CPC RATE_CPC
CustomPMP_PartnerCostPercentage CUSTOM_PMP_PARTNER_COST_PERCENTAGE CUSTOM_PMP_PARTNER_COST_PERCENTAGE

Code examples

REST example

PUT /v3/additionalfees HTTP/1.1
Content-Type: application/json
TTD-Auth: AUTH_TOKEN_PLACEHOLDER

{
  "OwnerId": "abc123",
  "OwnerType": "campaign",
  "StartDateUtc": "2026-07-29T12:00:00Z",
  "Fees": [
    {
      "Amount": 5.0,
      "Description": "Partner fee",
      "FeeType": "MediaCostPercentage"
    }
  ]
}

GraphQL example

POST /graphql HTTP/1.1
Content-Type: application/json
TTD-Auth: AUTH_TOKEN_PLACEHOLDER
mutation {
  additionalFeeCardUpdate(input: {
    ownerId: "abc123"
    ownerType: "campaign"
    startDateUtc: "2026-07-29T12:00:00Z"
    fees: [
      {
        amount: 5.0
        description: "Partner fee"
        feeType: MEDIA_COST_PERCENTAGE
      }
    ]
  }) {
    data {
      ownerId
      ownerType
      startDate
      fees {
        amount
        description
        feeType
      }
    }
    errors {
      ... on RestProxyMutationError {
        message
        field
      }
    }
  }
}