Create and modify data segments

  • Data segments can be created using the curators.dataSegments.create method and are active upon creation, allowing for targeting in deals or packages.

  • To make data segments visible for targeting by media planners, you must enable Segment visibility in the Curation UI.

  • When creating a data segment, the request body must include a unique curatorDataSegmentId in the name field for targeting.

  • Existing data segments can be modified using the curators.dataSegments.patch method, for example, to adjust the CPM fee.

This guide describes the methods you can use to create or modify a data segment.

Before you begin

Before you continue, you must set up authentication.

Create a new data segment

You can create a new data segment using the curators.dataSegments.create method. After creation, your data segment is in the ACTIVE state, enabling deals or packages that serve in Real-time Bidding to target the data segment.

To make data segments visible to media planners for deal or package targeting, you must enable Segment visibility in the Data segment settings tab of the Curation UI.

The following example makes a POST request to the curators.dataSegments.create method with a JSON body containing a DataSegment object. This request creates a data segment with the specified configuration.

REST

Request

curl --request POST \
'https://authorizedbuyersmarketplace.googleapis.com/v1beta/curators/ACCOUNT_ID/dataSegments' \
--header 'Authorization: Bearer ACCESS_TOKEN' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"cpmFee":{"nanos":100,"units":0,"currencyCode":"USD"},"name":"curators/ACCOUNT_ID/dataSegments/test-data-segment-2"}' \
--compressed

Replace the following:

  • ACCOUNT_ID: your account ID
  • ACCESS_TOKEN: your access token.

Response

{
  "name": "curators/ACCOUNT_ID/dataSegments/test-data-segment-2",
  "createTime": "2025-08-14T17:45:08.744379Z",
  "updateTime": "2025-08-14T17:45:08.744379Z",
  "cpmFee": {
    "currencyCode": "USD",
    "nanos": 100
  },
  "state": "ACTIVE"
}

Java

/*
 * Copyright (c) 2026 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the
License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express
 * or implied. See the License for the specific language governing permissions and limitations
under
 * the License.
 */

package com.google.api.services.samples.authorizedbuyers.marketplace.v1beta.curators.dataSegments;

import com.google.api.services.authorizedbuyersmarketplace.v1beta.AuthorizedBuyersMarketplace;
import com.google.api.services.authorizedbuyersmarketplace.v1beta.model.DataSegment;
import com.google.api.services.authorizedbuyersmarketplace.v1beta.model.Money;
import com.google.api.services.samples.authorizedbuyers.marketplace.v1beta.Utils;
import java.io.IOException;
import java.security.GeneralSecurityException;
import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;

public class CreateDataSegment {

  private CreateDataSegment() {}

  /**
   * Executes the create operation for a data segment.
   *
   * @param marketplaceClient the initialized Marketplace API client.
   * @param accountId the account ID of the curator that is creating the data segment
   * @param dataSegmentId the id of the data segment to be created
   * @param cpmFeeCurrencyCode the currency code of the data segment's CPM fee
   * @param cpmFeeUnits the whole units of the data segment's CPM fee
   * @param cpmFeeNanos the nanos of the data segment's CPM fee, representing a fraction of the
   *     specified currency.
   */
  public static void execute(
      AuthorizedBuyersMarketplace marketplaceClient,
      Long accountId,
      String dataSegmentId,
      String cpmFeeCurrencyCode,
      Long cpmFeeUnits,
      Integer cpmFeeNanos) throws IOException {

    // Create the required objects to call the create method.
    DataSegment dataSegmentToCreate =
        new DataSegment()
            .setName(String.format("curators/%d/dataSegments/%s", accountId, dataSegmentId))
            .setCpmFee(
                new Money()
                    .setCurrencyCode(cpmFeeCurrencyCode)
                    .setUnits(cpmFeeUnits)
                    .setNanos(cpmFeeNanos));

    String parent = String.format("curators/%d", accountId);

    // Call the API to create the data segment.
    DataSegment createdDataSegment =
        marketplaceClient.curators().dataSegments().create(parent, dataSegmentToCreate).execute();

    System.out.println("Successfully created data segment:");
    Utils.jsonPrettyPrint(createdDataSegment);
  }

  /**
   * Creates and configures the ArgumentParser for this sample.
   *
   * @return the configured ArgumentParser.
   */
  private static ArgumentParser createArgumentParser() {
    ArgumentParser parser =
        ArgumentParsers.newFor("CreateDataSegment")
            .build()
            .defaultHelp(true)
            .description("Creates a new data segment for the given curator account.");

    // Required arguments.
    parser
        .addArgument("-a", "--account_id")
        .help("The account ID of the curator that will create the curated package.")
        .required(true)
        .type(Long.class);
    parser
        .addArgument("-d", "--data_segment_id")
        .help(
            "The identifier to be used in the name of the data segment to be created."
                + " The final name will be curators/{account_id}/dataSegments/{data_segment_id}")
        .required(true);
    parser
        .addArgument("--cpm_fee_currency_code")
        .help("The three-letter currency code defined in ISO 4217. For example, \"USD\".")
        .required(true);
    parser
        .addArgument("--cpm_fee_units")
        .help(
            "The whole units of the CPM fee. For example, if `currencyCode` were set to \"USD\", "
                + "a value of \"1\" would be $1 USD for 1,000 views. ")
        .type(Long.class)
        .required(true);
    parser
        .addArgument("--cpm_fee_nanos")
        .help(
            "The nano units of the CPM fee, representing a fraction of the specified "
                + "currency. For example, if `currencyCode` were set to \"USD\", a value of "
                + "\"20000000\" would be $0.02 USD for 1,000 views. ")
        .type(Integer.class)
        .required(true);

    return parser;
  }

  public static void main(String[] args) {
    ArgumentParser parser = createArgumentParser();
    Namespace parsedArgs = null;
    try {
      parsedArgs = parser.parseArgs(args);
    } catch (ArgumentParserException e) {
      parser.handleError(e);
      System.exit(1);
    }

    AuthorizedBuyersMarketplace client = null;
    try {
      client = Utils.getMarketplaceClient();
    } catch (IOException ex) {
      System.out.printf("Unable to create Marketplace API service:%n%s", ex);
      System.out.println("Did you specify a valid path to a service account key file?");
      System.exit(1);
    } catch (GeneralSecurityException ex) {
      System.out.printf("Unable to establish secure HttpTransport:%n%s", ex);
      System.exit(1);
    }

    // Parse arguments.
    Long accountId = parsedArgs.getLong("account_id");
    String dataSegmentId = parsedArgs.getString("data_segment_id");
    String cpmFeeCurrencyCode = parsedArgs.getString("cpm_fee_currency_code");
    Long cpmFeeUnits = parsedArgs.getLong("cpm_fee_units");
    Integer cpmFeeNanos = parsedArgs.getInt("cpm_fee_nanos");

    try {
      execute(client, accountId, dataSegmentId, cpmFeeCurrencyCode, cpmFeeUnits, cpmFeeNanos);
    } catch (Exception e) {
      System.out.printf("Marketplace API returned error response:%n%s", e);
      System.exit(1);
    }
  }
}

Modify an existing data segment

To modify an existing data segment, you can use the curators.dataSegments.patch method. For example, use this method to adjust the cpmFee field for the data segment.

The following example makes a PATCH request to the curators.dataSegments.patch method with a JSON body containing a DataSegment object. This request modifies the specified data segment, altering only the fields specified in the updateMask query parameter.

REST

Request

curl --request PATCH \
  'https://authorizedbuyersmarketplace.googleapis.com/v1beta/curators/ACCOUNT_ID/dataSegments/test-data-segment-2?updateMask=cpmFee.nanos' \
  --header 'Authorization: Bearer ACCESS_TOKEN' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json'  \
  --data '{"cpmFee":{"nanos":50}}' \
  --compressed

Response

{
  "name": "curators/ACCOUNT_ID/dataSegments/test-data-segment-2",
  "createTime": "2025-08-14T17:45:08.744Z",
  "updateTime": "2025-08-14T17:56:02.200619Z",
  "cpmFee": {
    "currencyCode": "USD",
    "nanos": 50
  },
  "state": "ACTIVE"
}

Java

/*
 * Copyright (c) 2026 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the
License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express
 * or implied. See the License for the specific language governing permissions and limitations
under
 * the License.
 */

package com.google.api.services.samples.authorizedbuyers.marketplace.v1beta.curators.dataSegments;

import com.google.api.services.authorizedbuyersmarketplace.v1beta.AuthorizedBuyersMarketplace;
import com.google.api.services.authorizedbuyersmarketplace.v1beta.model.DataSegment;
import com.google.api.services.authorizedbuyersmarketplace.v1beta.model.Money;
import com.google.api.services.samples.authorizedbuyers.marketplace.v1beta.Utils;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.List;
import net.sourceforge.argparse4j.ArgumentParsers;
import net.sourceforge.argparse4j.inf.ArgumentParser;
import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;

public class PatchDataSegment {

  private PatchDataSegment() {}

  /**
   * Executes the patch operation for a data segment.
   *
   * @param marketplaceClient the initialized Marketplace API client.
   * @param accountId the account ID of the curator that created the data segment.
   * @param dataSegmentId the resource ID of the data segment to update.
   * @param cpmFeeUnits the modified value of `DataSegment.cpmFee.units` (or null if the field is
   *     not being modified).
   * @param cpmFeeNanos the modified value of `DataSegment.cpmFee.nanos` (or null if the field is
   *     not being modified).
   */
  public static void execute(
      AuthorizedBuyersMarketplace marketplaceClient,
      Long accountId,
      String dataSegmentId,
      Long cpmFeeUnits,
      Integer cpmFeeNanos)
      throws IOException {

    // Construct resources needed for the patch request.
    String name = String.format("curators/%d/dataSegments/%s", accountId, dataSegmentId);

    List<String> patchedFields = new ArrayList<>();
    DataSegment patchedDataSegment = new DataSegment();
    Money cpmFee = new Money();
    if (cpmFeeUnits != null) {
      cpmFee.setUnits(cpmFeeUnits);
      patchedFields.add("cpmFee.units");
    }
    if (cpmFeeNanos != null) {
      cpmFee.setNanos(cpmFeeNanos);
      patchedFields.add("cpmFee.nanos");
    }
    patchedDataSegment.setCpmFee(cpmFee);
    String updateMask = String.join(",", patchedFields);

    // Patch the data segment.
    DataSegment returnedDataSegment =
        marketplaceClient
            .curators()
            .dataSegments()
            .patch(name, patchedDataSegment)
            .setUpdateMask(updateMask)
            .execute();

    System.out.println("Successfully patched data segment:");
    Utils.jsonPrettyPrint(returnedDataSegment);
  }

  /**
   * Creates and configures the ArgumentParser for this sample.
   *
   * @return the configured ArgumentParser.
   */
  private static ArgumentParser createArgumentParser() {
    ArgumentParser parser =
        ArgumentParsers.newFor("PatchDataSegment")
            .build()
            .defaultHelp(true)
            .description(
                "Updates a specific data segment. To modify the state of a "
                    + "data segment, use the curators.dataSegments.activate or "
                    + "curators.dataSegments.deactivate methods instead.");

    // Required arguments.
    parser
        .addArgument("-a", "--account_id")
        .help("The account ID of the curator that created the data segment.")
        .required(true)
        .type(Long.class);
    parser
        .addArgument("-d", "--data_segment_id")
        .help("The resource ID of the data segment to update.")
        .required(true);

    // Optional arguments.
    // (Note: the currency code of the cpm fee is not modifiable, and thus is not included here.)
    parser
        .addArgument("--cpm_fee_units")
        .help(
            "The modified value of `DataSegment.cpmFee.units`. This represents the whole units of "
                + "the CPM fee. For example, if `currencyCode` were set to \"USD\", "
                + "a value of \"1\" would be $1 USD for 1,000 views. ")
        .type(Long.class);
    parser
        .addArgument("--cpm_fee_nanos")
        .help(
            "The modified value of `DataSegment.cpmFee.nanos`. This represents the nano units of "
                + "the CPM fee, representing a fraction of the specified currency. "
                + "For example, if `currencyCode` were set to \"USD\", a value of "
                + "\"20000000\" would be $0.02 USD for 1,000 views. ")
        .type(Integer.class);

    return parser;
  }

  public static void main(String[] args) {
    ArgumentParser parser = createArgumentParser();
    Namespace parsedArgs = null;
    try {
      parsedArgs = parser.parseArgs(args);
    } catch (ArgumentParserException e) {
      parser.handleError(e);
      System.exit(1);
    }

    AuthorizedBuyersMarketplace client = null;
    try {
      client = Utils.getMarketplaceClient();
    } catch (IOException ex) {
      System.out.printf("Unable to create Marketplace API service:%n%s", ex);
      System.out.println("Did you specify a valid path to a service account key file?");
      System.exit(1);
    } catch (GeneralSecurityException ex) {
      System.out.printf("Unable to establish secure HttpTransport:%n%s", ex);
      System.exit(1);
    }

    // Get parsed arguments.
    Long accountId = parsedArgs.getLong("account_id");
    String dataSegmentId = parsedArgs.getString("data_segment_id");
    Long cpmFeeUnits = parsedArgs.getLong("cpm_fee_units");
    Integer cpmFeeNanos = parsedArgs.getInt("cpm_fee_nanos");

    try {
      execute(client, accountId, dataSegmentId, cpmFeeUnits, cpmFeeNanos);
    } catch (Exception e) {
      System.out.printf("Marketplace API returned error response:%n%s", e);
      System.exit(1);
    }
  }
}

Next steps