Edits history of script submission #11211 for ' Create ad groups (pinterest)'

  • bun
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    type Pinterest = {
      token: string;
    };
    /**
     * Create ad groups
     * Create multiple new ad groups.
     */
    export async function main(
      auth: Pinterest,
      ad_account_id: string,
      body: {
        name?: string;
        status?: "ACTIVE" | "PAUSED" | "ARCHIVED" | "DRAFT" | "DELETED_DRAFT";
        budget_in_micro_currency?: number;
        bid_in_micro_currency?: number;
        optimization_goal_metadata?: {
          conversion_tag_v3_goal_metadata?: {
            attribution_windows?: {
              click_window_days?: number;
              engagement_window_days?: number;
              view_window_days?: number;
            };
            conversion_event?:
              | "PAGE_VISIT"
              | "SIGNUP"
              | "CHECKOUT"
              | "CUSTOM"
              | "VIEW_CATEGORY"
              | "SEARCH"
              | "ADD_TO_CART"
              | "WATCH_VIDEO"
              | "LEAD"
              | "APP_INSTALL";
            conversion_tag_id?: string;
            cpa_goal_value_in_micro_currency?: string;
            is_roas_optimized?: false | true;
            learning_mode_type?: "ACTIVE" | "NOT_ACTIVE";
          };
          frequency_goal_metadata?: {
            frequency?: number;
            timerange?:
              | "THIRTY_DAY"
              | "DAY"
              | "SEVEN_DAY"
              | "TWENTY_MINUTE"
              | "TEN_MINUTE"
              | "TWENTY_FOUR_HOUR";
          };
          scrollup_goal_metadata?: {
            scrollup_goal_value_in_micro_currency?: string;
          };
        };
        budget_type?: "DAILY" | "LIFETIME" | "CBO_ADGROUP";
        start_time?: number;
        end_time?: number;
        targeting_spec?: {
          AGE_BUCKET?:
            | "18-24"
            | "21+"
            | "25-34"
            | "35-44"
            | "45-49"
            | "50-54"
            | "55-64"
            | "65+"[];
          APPTYPE?:
            | "android_mobile"
            | "android_tablet"
            | "ipad"
            | "iphone"
            | "web"
            | "web_mobile"[];
          AUDIENCE_EXCLUDE?: string[];
          AUDIENCE_INCLUDE?: string[];
          GENDER?: "unknown" | "male" | "female"[];
          GEO?: string[];
          INTEREST?: string[];
          LOCALE?: string[];
          LOCATION?: string[];
          SHOPPING_RETARGETING?: {
            lookback_window?: number;
            tag_types?: number[];
            exclusion_window?: number;
          }[];
          TARGETING_STRATEGY?:
            | "CHOOSE_YOUR_OWN"
            | "FIND_NEW_CUSTOMERS"
            | "RECONNECT_WITH_USERS"[];
        };
        lifetime_frequency_cap?: number;
        tracking_urls?: {
          impression?: string[];
          click?: string[];
          engagement?: string[];
          buyable_button?: string[];
          audience_verification?: string[];
        };
        auto_targeting_enabled?: false | true;
        placement_group?: "SEARCH" | "ALL" | "BROWSE" | "OTHER";
        pacing_delivery_type?: "STANDARD" | "ACCELERATED";
        campaign_id?: string;
        billable_event?: "CLICKTHROUGH" | "IMPRESSION" | "VIDEO_V_50_MRC";
        bid_strategy_type?: "AUTOMATIC_BID" | "MAX_BID" | "TARGET_AVG";
        targeting_template_ids?: string[];
      } & {
        pacing_delivery_type?: "STANDARD" | "ACCELERATED";
        auto_targeting_enabled?: false | true;
        budget_type?: "DAILY" | "LIFETIME" | "CBO_ADGROUP";
      }[],
    ) {
      const url = new URL(
        `https://api.pinterest.com/v5/ad_accounts/${ad_account_id}/ad_groups`,
      );
    
      const response = await fetch(url, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Authorization: "Bearer " + auth.token,
        },
        body: JSON.stringify(body),
      });
      if (!response.ok) {
        const text = await response.text();
        throw new Error(`${response.status} ${text}`);
      }
      return await response.json();
    }
    

    Submitted by hugo697 536 days ago