Edits history of script submission #11236 for ' Create/update ad entities in bulk (pinterest)'

  • bun
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    type Pinterest = {
      token: string;
    };
    /**
     * Create/update ad entities in bulk
     * Either create or update any combination of campaigns, ad groups, product groups, ads, or keywords.
    Note that this request will be processed asynchronously; the response will include a request_id
    that can be used to obtain the status of the request.
     */
    export async function main(
      auth: Pinterest,
      ad_account_id: string,
      body: {
        create?: {
          campaigns?: {
            ad_account_id?: string;
            name?: string;
            status?: "ACTIVE" | "PAUSED" | "ARCHIVED" | "DRAFT" | "DELETED_DRAFT";
            lifetime_spend_cap?: number;
            daily_spend_cap?: number;
            order_line_id?: string;
            tracking_urls?: {
              impression?: string[];
              click?: string[];
              engagement?: string[];
              buyable_button?: string[];
              audience_verification?: string[];
            };
            start_time?: number;
            end_time?: number;
            is_flexible_daily_budgets?: false | true;
          } & {
            default_ad_group_budget_in_micro_currency?: number;
            is_automated_campaign?: false | true;
          } & {
              is_flexible_daily_budgets?: false | true;
              is_automated_campaign?: false | true;
              status?: "ACTIVE" | "PAUSED" | "ARCHIVED" | "DRAFT" | "DELETED_DRAFT";
              objective_type:
                | "AWARENESS"
                | "CONSIDERATION"
                | "VIDEO_VIEW"
                | "WEB_CONVERSION"
                | "CATALOG_SALES"
                | "WEB_SESSIONS"
                | "VIDEO_COMPLETION";
            }[];
          ad_groups?: {
            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";
          }[];
          ads?: {
            ad_group_id?: string;
            android_deep_link?: string;
            carousel_android_deep_links?: string[];
            carousel_destination_urls?: string[];
            carousel_ios_deep_links?: string[];
            click_tracking_url?: string;
            creative_type?:
              | "REGULAR"
              | "VIDEO"
              | "SHOPPING"
              | "CAROUSEL"
              | "MAX_VIDEO"
              | "SHOP_THE_PIN"
              | "COLLECTION"
              | "IDEA"
              | "SHOWCASE"
              | "QUIZ";
            destination_url?: string;
            ios_deep_link?: string;
            is_pin_deleted?: false | true;
            is_removable?: false | true;
            name?: string;
            status?: "ACTIVE" | "PAUSED" | "ARCHIVED" | "DRAFT" | "DELETED_DRAFT";
            tracking_urls?: {
              impression?: string[];
              click?: string[];
              engagement?: string[];
              buyable_button?: string[];
              audience_verification?: string[];
            };
            view_tracking_url?: string;
            lead_form_id?: string;
            grid_click_type?: "CLOSEUP" | "DIRECT_TO_DESTINATION";
            customizable_cta_type?:
              | "ADD_TO_CART"
              | "GET_OFFER"
              | "LEARN_MORE"
              | "ORDER_NOW"
              | "SHOP_NOW"
              | "SIGN_UP"
              | "SUBSCRIBE"
              | "BUY_NOW"
              | "CONTACT_US"
              | "GET_QUOTE"
              | "VISIT_SITE"
              | "APPLY_NOW"
              | "BOOK_NOW"
              | "REQUEST_DEMO"
              | "REGISTER_NOW"
              | "FIND_A_DEALER"
              | "WATCH_NOW"
              | "READ_MORE";
            quiz_pin_data?: {
              questions?: {
                question_id?: number;
                question_text?: string;
                options?: { id?: number; text?: string }[];
              }[];
              results?: {
                organic_pin_id?: string;
                android_deep_link?: string;
                ios_deep_link?: string;
                destination_url?: string;
                result_id?: number;
              }[];
              tie_breaker_type?: "CUSTOM" | "RANDOM";
              tie_breaker_custom_result?: {
                organic_pin_id?: string;
                android_deep_link?: string;
                ios_deep_link?: string;
                destination_url?: string;
                result_id?: number;
              };
            };
          } & { pin_id?: string } & {}[];
          product_groups?: {
            ad_group_id: string;
            product_group_promotion: {
              id?: string;
              ad_group_id?: string;
              bid_in_micro_currency?: number;
              included?: false | true;
              definition?: string;
              relative_definition?: string;
              parent_id?: string;
              slideshow_collections_title?: string;
              slideshow_collections_description?: string;
              is_mdl?: false | true;
              status?: "ACTIVE" | "PAUSED" | "ARCHIVED" | "DRAFT" | "DELETED_DRAFT";
              tracking_url?: string;
              catalog_product_group_id?: string;
              catalog_product_group_name?: string;
              collections_hero_pin_id?: string;
              collections_hero_destination_url?: string;
              grid_click_type?: "CLOSEUP" | "DIRECT_TO_DESTINATION";
            } & {
              creative_type?:
                | "REGULAR"
                | "VIDEO"
                | "SHOPPING"
                | "CAROUSEL"
                | "MAX_VIDEO"
                | "SHOP_THE_PIN"
                | "COLLECTION"
                | "IDEA"
                | "SHOWCASE"
                | "QUIZ";
            }[];
          }[];
          keywords?: {
            keywords: {
              bid?: number;
              match_type:
                | "BROAD"
                | "PHRASE"
                | "EXACT"
                | "EXACT_NEGATIVE"
                | "PHRASE_NEGATIVE";
              value: string;
            }[];
            parent_id: string;
          }[];
        };
        update?: {
          campaigns?: { id?: string } & {
            ad_account_id?: string;
            name?: string;
            status?: "ACTIVE" | "PAUSED" | "ARCHIVED" | "DRAFT" | "DELETED_DRAFT";
            lifetime_spend_cap?: number;
            daily_spend_cap?: number;
            order_line_id?: string;
            tracking_urls?: {
              impression?: string[];
              click?: string[];
              engagement?: string[];
              buyable_button?: string[];
              audience_verification?: string[];
            };
            start_time?: number;
            end_time?: number;
            is_flexible_daily_budgets?: false | true;
          } & {
            default_ad_group_budget_in_micro_currency?: number;
            is_automated_campaign?: false | true;
          } & {
              is_campaign_budget_optimization?: false | true;
              objective_type?:
                | "AWARENESS"
                | "CONSIDERATION"
                | "VIDEO_VIEW"
                | "WEB_CONVERSION"
                | "CATALOG_SALES"
                | "WEB_SESSIONS"
                | "VIDEO_COMPLETION";
            }[];
          ad_groups?: {
            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[];
          } & { id: string }[];
          ads?: {
            ad_group_id?: string;
            android_deep_link?: string;
            carousel_android_deep_links?: string[];
            carousel_destination_urls?: string[];
            carousel_ios_deep_links?: string[];
            click_tracking_url?: string;
            creative_type?:
              | "REGULAR"
              | "VIDEO"
              | "SHOPPING"
              | "CAROUSEL"
              | "MAX_VIDEO"
              | "SHOP_THE_PIN"
              | "COLLECTION"
              | "IDEA"
              | "SHOWCASE"
              | "QUIZ";
            destination_url?: string;
            ios_deep_link?: string;
            is_pin_deleted?: false | true;
            is_removable?: false | true;
            name?: string;
            status?: "ACTIVE" | "PAUSED" | "ARCHIVED" | "DRAFT" | "DELETED_DRAFT";
            tracking_urls?: {
              impression?: string[];
              click?: string[];
              engagement?: string[];
              buyable_button?: string[];
              audience_verification?: string[];
            };
            view_tracking_url?: string;
            lead_form_id?: string;
            grid_click_type?: "CLOSEUP" | "DIRECT_TO_DESTINATION";
            customizable_cta_type?:
              | "ADD_TO_CART"
              | "GET_OFFER"
              | "LEARN_MORE"
              | "ORDER_NOW"
              | "SHOP_NOW"
              | "SIGN_UP"
              | "SUBSCRIBE"
              | "BUY_NOW"
              | "CONTACT_US"
              | "GET_QUOTE"
              | "VISIT_SITE"
              | "APPLY_NOW"
              | "BOOK_NOW"
              | "REQUEST_DEMO"
              | "REGISTER_NOW"
              | "FIND_A_DEALER"
              | "WATCH_NOW"
              | "READ_MORE";
            quiz_pin_data?: {
              questions?: {
                question_id?: number;
                question_text?: string;
                options?: { id?: number; text?: string }[];
              }[];
              results?: {
                organic_pin_id?: string;
                android_deep_link?: string;
                ios_deep_link?: string;
                destination_url?: string;
                result_id?: number;
              }[];
              tie_breaker_type?: "CUSTOM" | "RANDOM";
              tie_breaker_custom_result?: {
                organic_pin_id?: string;
                android_deep_link?: string;
                ios_deep_link?: string;
                destination_url?: string;
                result_id?: number;
              };
            };
          } & { id: string; pin_id?: string }[];
          product_groups?: {
            ad_group_id: string;
            product_group_promotion: {
              id?: string;
              ad_group_id?: string;
              bid_in_micro_currency?: number;
              included?: false | true;
              definition?: string;
              relative_definition?: string;
              parent_id?: string;
              slideshow_collections_title?: string;
              slideshow_collections_description?: string;
              is_mdl?: false | true;
              status?: "ACTIVE" | "PAUSED" | "ARCHIVED" | "DRAFT" | "DELETED_DRAFT";
              tracking_url?: string;
              catalog_product_group_id?: string;
              catalog_product_group_name?: string;
              collections_hero_pin_id?: string;
              collections_hero_destination_url?: string;
              grid_click_type?: "CLOSEUP" | "DIRECT_TO_DESTINATION";
            }[];
          }[];
          keywords?: { id: string; archived?: false | true; bid?: number }[];
        };
      },
    ) {
      const url = new URL(
        `https://api.pinterest.com/v5/ad_accounts/${ad_account_id}/bulk/upsert`,
      );
    
      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