From fe358c5fe377982675003dbba3bcbe030f40eb3c Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Sat, 20 Jun 2026 03:31:07 +0000 Subject: [PATCH 1/2] =?UTF-8?q?##=20Java=20SDK=20Changes:=20*=20`workflows?= =?UTF-8?q?.adGroup.createAdGroup()`:=20=20=20*=20=20`request`=20**Changed?= =?UTF-8?q?**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20*=20=20`response.a?= =?UTF-8?q?dGroup`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`?= =?UTF-8?q?workflows.adGroup.updateAdGroup()`:=20=20=20*=20=20`request`=20?= =?UTF-8?q?**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20=20=20*=20=20`r?= =?UTF-8?q?esponse.adGroup`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F?= =?UTF-8?q?)=20*=20`workflows.adGroup.createAdGroupsJob()`:=20=20=20*=20?= =?UTF-8?q?=20`request.input[]`=20**Changed**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`workflows.adGroup.updateAdGroupsJob()`:=20=20?= =?UTF-8?q?=20*=20=20`request.input[]`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`workflows.campaign.create()`:=20=20?= =?UTF-8?q?=20*=20=20`request.adGroups[]`=20**Changed**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20=20=20*=20=20`response.adGroups[]`=20**Ch?= =?UTF-8?q?anged**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`workflows.camp?= =?UTF-8?q?aign.updateCampaign()`:=20=20`response.adGroups[]`=20**Changed*?= =?UTF-8?q?*=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`workflows.campaign.c?= =?UTF-8?q?reateCampaignsJob()`:=20=20=20*=20=20`request.input[].adGroups[?= =?UTF-8?q?]`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`workf?= =?UTF-8?q?lows.campaign.updateCampaignsJob()`:=20=20`response.adGroups[]`?= =?UTF-8?q?=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .speakeasy/gen.lock | 141 +++--- .speakeasy/gen.yaml | 2 +- .speakeasy/workflow.lock | 12 +- README.md | 10 +- RELEASES.md | 12 +- USAGE.md | 1 + build.gradle | 42 -- docs/models/components/AdGroupROIGoal.md | 29 +- .../components/AdGroupWorkflowROIGoalInput.md | 29 +- .../DimensionalBiddingDimensions.md | 1 - docs/sdks/adgroup/README.md | 3 + docs/sdks/campaign/README.md | 2 + gradle.properties | 2 +- settings.gradle | 6 - .../build.gradle | 35 -- .../ConditionalOnPropertyPrefix.java | 41 -- .../workflows/OnPropertyPrefixCondition.java | 68 --- .../workflows/WorkflowsAutoConfig.java | 370 -------------- .../WorkflowsAutoConfigProperties.java | 460 ------------------ ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../build.gradle | 29 -- .../workflows/SDKConfiguration.java | 4 +- .../com/thetradedesk/workflows/Workflows.java | 2 +- .../models/components/AdGroupROIGoal.java | 58 ++- .../AdGroupWorkflowROIGoalInput.java | 58 ++- .../DimensionalBiddingDimensions.java | 1 - .../workflows/utils/AsyncRetries.java | 11 +- .../workflows/utils/OneOfDeserializer.java | 9 + .../thetradedesk/workflows/utils/Retries.java | 9 + .../workflows/utils/StreamingParser.java | 33 +- 30 files changed, 286 insertions(+), 1195 deletions(-) delete mode 100644 spring/workflows-spring-boot-autoconfigure/build.gradle delete mode 100644 spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/ConditionalOnPropertyPrefix.java delete mode 100644 spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/OnPropertyPrefixCondition.java delete mode 100644 spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfig.java delete mode 100644 spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfigProperties.java delete mode 100644 spring/workflows-spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports delete mode 100644 spring/workflows-spring-boot-starter/build.gradle diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 33df29f..ff86c19 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,25 +1,25 @@ lockVersion: 2.0.0 id: 3c41c678-4c1f-4986-aa2b-76f74444c11d management: - docChecksum: b28a390782065609d71232541d693b50 + docChecksum: 941adccf9bb9324e0a094264813aff88 docVersion: v1 - speakeasyVersion: 1.761.9 - generationVersion: 2.881.4 - releaseVersion: 0.13.2 - configChecksum: 6036c0ba9fe2df97c606eca433e011f2 + speakeasyVersion: 1.784.0 + generationVersion: 2.911.0 + releaseVersion: 0.13.3 + configChecksum: faff90d268bfc1c74cd9d0039b54f9ed repoURL: https://github.com/thetradedesk/ttd-workflows-java.git installationURL: https://github.com/thetradedesk/ttd-workflows-java published: true persistentEdits: - generation_id: 9a23a599-4356-44d8-a49f-4645f16ee073 - pristine_commit_hash: 0db3ab364669c9b9fdfb94565e5b4b092edbf17c - pristine_tree_hash: ab5636e95550b087e167f61865a970eb4943de68 + generation_id: b2098509-3b3d-4577-9778-65c09cea72f8 + pristine_commit_hash: a73f6060143fd4ad42e2a07c6e34a9a6ca21f544 + pristine_tree_hash: 4d7fff76b5a153c04cb5d54a8d4b7dea7300396b features: java: additionalDependencies: 0.1.0 additionalProperties: 0.0.1 constsAndDefaults: 0.1.3 - core: 3.55.23 + core: 3.55.27 flattening: 2.81.1 globalSecurity: 2.83.4 globalSecurityCallbacks: 0.1.0 @@ -27,7 +27,7 @@ features: globalServerURLs: 2.83.1 nameOverrides: 2.81.5 nullables: 0.1.0 - retries: 0.1.2 + retries: 0.1.3 sdkHooks: 1.2.0 serverIDs: 2.81.1 trackedFiles: @@ -37,12 +37,12 @@ trackedFiles: pristine_git_object: 8f8da085659bbf87d293b49b4593e43137a4acb0 USAGE.md: id: 3aed33ce6e6f - last_write_checksum: sha1:d5c76ff24298112b5d8ccd417ebf5b30ccf047cc - pristine_git_object: d25163ffde137d07ee808c226132767ddafd4408 + last_write_checksum: sha1:91384f00f8673e074472cb9e9ea5fe6e9f724f82 + pristine_git_object: 7de98f2279e9e6916017dfca834e897e824c4d9e build.gradle: id: f07866736216 - last_write_checksum: sha1:1c13f6cb09ac6da99013bbc60cb5cdbefbcd5717 - pristine_git_object: ec583249f02daa0229d89337cff80ab5b17bfcf1 + last_write_checksum: sha1:0f201f38380698de73865c57da065b1fb361568d + pristine_git_object: 36e5b29cf776a0c60b93cf733b589d3c3e0e689b docs/models/components/AdGroupAssociateBidList.md: id: 4f249ffb1be2 last_write_checksum: sha1:ccfadc26f2a548f298dd9f4e34dd0da6c6104cc8 @@ -109,8 +109,8 @@ trackedFiles: pristine_git_object: 75f6d6845515ca2f6a7f68ef9d14399d313421d3 docs/models/components/AdGroupROIGoal.md: id: de96cd5ddb9e - last_write_checksum: sha1:1fc4d321fddef5f8e7233bbf06460fc2d0fc60b0 - pristine_git_object: 640ed56bc6654d5b94943ad39b5a4f46a7ab3c03 + last_write_checksum: sha1:08c182c61f3cc63ed29c147d3040bc8f2335a62a + pristine_git_object: 0c21ff276a1c580ec352a3d927c1a1de2335f90f docs/models/components/AdGroupUpdateWorkflowInput.md: id: 27d9230e34bc last_write_checksum: sha1:d64e791d3572a2633d655bbb331de89cac79fe52 @@ -173,8 +173,8 @@ trackedFiles: pristine_git_object: 34d19edadb0cba64d59a541c3ca5fe89fb495c87 docs/models/components/AdGroupWorkflowROIGoalInput.md: id: ce32ebf4f5f6 - last_write_checksum: sha1:2c00ddc45badb65f56a4643c50bc9ac5b0832b46 - pristine_git_object: 8a4f0eeb1d336740dfc35682411b3d523e6fdbbc + last_write_checksum: sha1:03a3a033b1976ab43a4f438e86417c0b7ed2cab8 + pristine_git_object: 325bb9df27569562529ed63659c648e8e23be836 docs/models/components/AllocationType.md: id: b1a88f326bba last_write_checksum: sha1:1e90d895dd29e68f60ec09105939f41842a99877 @@ -309,8 +309,8 @@ trackedFiles: pristine_git_object: e47da5968bd226d5357bebbe119baf874429eee0 docs/models/components/DimensionalBiddingDimensions.md: id: 79549079b0f9 - last_write_checksum: sha1:3ad7ceb2ea7f65d719d7def92da4718bfac8fa00 - pristine_git_object: 246c0f6443c9bef2b44e75de4298b1e65acedbb0 + last_write_checksum: sha1:5a9fedb0d64d9df1b3f52b10c78612431374ef30 + pristine_git_object: f1b5e0230d8c0e40843b6a5416f7a75f3b39f81d docs/models/components/EnhancedNielsenReportingOptions.md: id: 2b961a459785 last_write_checksum: sha1:95418be357a42250b1199e42063fb7a198b4b47e @@ -549,12 +549,12 @@ trackedFiles: pristine_git_object: 6b83d06c1e01eee499d8df9a75ccdc6e15fc8d3f docs/sdks/adgroup/README.md: id: 8e0c2412ebea - last_write_checksum: sha1:4f80dbb4bd3f29be81d8c773a690e7e318215276 - pristine_git_object: 74299be68f5820a7ebb13532311d9289c96c31f9 + last_write_checksum: sha1:6f93cdcf412f1c9c6dc956dc00bf938de575be79 + pristine_git_object: c9a46bdea40f8277e4a60cc8f717411d35b18298 docs/sdks/campaign/README.md: id: 7c44530e0eca - last_write_checksum: sha1:d409b0499adb4daedd6cc9bc1f97886f9ea89c33 - pristine_git_object: 149cd3db947eb934f60988da31e5bd0c25566327 + last_write_checksum: sha1:3ef6e37037ccd5b319651c9bf5287e071c518c50 + pristine_git_object: 5b25183876d8c15d3fde8822caed27e89c24fec5 docs/sdks/dmp/README.md: id: 0b076a846392 last_write_checksum: sha1:e96d335e4ab89ad377548f2a2d5210df5567dec8 @@ -577,8 +577,8 @@ trackedFiles: pristine_git_object: 560783da858833f8f97fe76f90be7fc7638b3ffb gradle.properties: id: 2afbb999f001 - last_write_checksum: sha1:8dc7ab3b49c43c1a4e1c6015c636760fcbbf840f - pristine_git_object: 508a15d891b175501453caaaa659795572255870 + last_write_checksum: sha1:ce4c89ea1b18f32a5550532e2ead97729348d9af + pristine_git_object: 1ca543e017a69fff722abb4310a87e191cffe172 gradle/wrapper/gradle-wrapper.jar: id: ec27dae6e852 last_write_checksum: sha1:f725fb1467084142d74fd7cd8eab691ab3442611 @@ -601,36 +601,8 @@ trackedFiles: pristine_git_object: 612ada74d9ea1cfc6b58adef8b69e4f487e3169b settings.gradle: id: 05efc8b16577 - last_write_checksum: sha1:0c7532d780ab86e9a39696462b3749c98499f94b - pristine_git_object: c7811fbeceaa09017ec02bfa2af177c94e0930f7 - spring/workflows-spring-boot-autoconfigure/build.gradle: - id: b5eaf53fd2e1 - last_write_checksum: sha1:601ed29157d17cc241a591a478362ec98fafb19d - pristine_git_object: 46d0745d27098953ed6441184b26153f332694d1 - spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/ConditionalOnPropertyPrefix.java: - id: d2901c852261 - last_write_checksum: sha1:2626f3bde2376fc7fdb7f30f5d61f26ee7ad3e45 - pristine_git_object: af1050ba683cd67548b4b333eb39bfc5138d7f03 - spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/OnPropertyPrefixCondition.java: - id: 993fcf03a0ce - last_write_checksum: sha1:0242ab12bf9de8f3a0289e58f27ae53fbad6fbf4 - pristine_git_object: d138656099a7dd677ba5052a3bba1969ae9da600 - spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfig.java: - id: "794759041478" - last_write_checksum: sha1:2d7438da0042a2ef53f8638ed608134802a51267 - pristine_git_object: a11d62b4493436aec9ce2c4cef03d1fbfc2cad27 - spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfigProperties.java: - id: e5b6b40932d4 - last_write_checksum: sha1:bffebd0704b7d583d6c00c7aa87e91036d4a173f - pristine_git_object: dd55b3fe0e8e29a6ac05647b95b43801e197d8d5 - ? spring/workflows-spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports - : id: 61eeec9c94f4 - last_write_checksum: sha1:d43f84af55c286dd280f9f967d4f1b02491e9d71 - pristine_git_object: 1a444142b0598dfa347dcf8de5087db79bb8dc83 - spring/workflows-spring-boot-starter/build.gradle: - id: fdeb190e1106 - last_write_checksum: sha1:d91af03d16580e6dbcfc26662ff82477f9d31431 - pristine_git_object: 33a8915fc43e6b0e8c791ba00b7a5ba2e498baef + last_write_checksum: sha1:4005d0bf698788c8b382ede0816350177b9afe14 + pristine_git_object: 2d9c410601b9c45da9788cb1e124f71dc477f970 src/main/java/com/thetradedesk/workflows/AdGroup.java: id: 6d480caf178d last_write_checksum: sha1:8d72c889f71459da776c54399227897b625ea459 @@ -685,16 +657,16 @@ trackedFiles: pristine_git_object: e18b1357107cc828db09181715988ea5d51cf731 src/main/java/com/thetradedesk/workflows/SDKConfiguration.java: id: a59a881fc3b5 - last_write_checksum: sha1:f9da2f83b47edbd092809e3d9ea789d4f7451cd1 - pristine_git_object: 3761e2922821e6a892832dc3d0fbd43edf8af261 + last_write_checksum: sha1:08da167115da6546941541609b0f4c3f35ae0f13 + pristine_git_object: f0d6c58da4c544952bcd2138f125e255c125488e src/main/java/com/thetradedesk/workflows/SecuritySource.java: id: 696561dc3c53 last_write_checksum: sha1:81f51518d023f26daaaaf94cfd6a019bf96ab48b pristine_git_object: 95841de006dbfd2e112d0d4ee77583e09838583f src/main/java/com/thetradedesk/workflows/Workflows.java: id: 809add4007e0 - last_write_checksum: sha1:ce7e7cce09c5ee6ed7864dfd89759d09d11f9752 - pristine_git_object: 73a4f10c9e94ab5fb102cb7be8e06546402efb7e + last_write_checksum: sha1:d07d9e29881de93865e7ba1685c354018a9db11c + pristine_git_object: d314839d37ffd1fcfb96a09a23c503364db3261b src/main/java/com/thetradedesk/workflows/models/components/AdGroupAssociateBidList.java: id: 58844e6a64af last_write_checksum: sha1:64370d2c7b18cf97ff2d207acff41d498f493a1b @@ -761,8 +733,8 @@ trackedFiles: pristine_git_object: dca63ed513a7a3338f110602f6f8fd1d1f1cfd35 src/main/java/com/thetradedesk/workflows/models/components/AdGroupROIGoal.java: id: 032800fc0c87 - last_write_checksum: sha1:499ba3e69d447de585a613e8d9b08fa046364873 - pristine_git_object: 1aea74c410f21a6181a7d16131f70018080a7d6f + last_write_checksum: sha1:4e95c3b117f94be3fe7f1e3231cd0508f4afa163 + pristine_git_object: cfa83ef88521d01b97f34669cf3485d42b5e3b25 src/main/java/com/thetradedesk/workflows/models/components/AdGroupUpdateWorkflowInput.java: id: 3826c13b490e last_write_checksum: sha1:6b1f477d1c7408324c1b91cd4dbd2be86f7ed133 @@ -825,8 +797,8 @@ trackedFiles: pristine_git_object: e37dbdfb6d60dfba3045a5b9ba78122bbd4f5c6b src/main/java/com/thetradedesk/workflows/models/components/AdGroupWorkflowROIGoalInput.java: id: ed49458b3236 - last_write_checksum: sha1:d36a650bb104ba3cadbb85fbc45f5edbb1485ff8 - pristine_git_object: d68f8f1f4f6d6a05f444d38f7802d55b90b190f0 + last_write_checksum: sha1:739f1e4d02e9beddee1e0bcec70870931025931b + pristine_git_object: 2483986e951ba19aafbfc7eb2debc511422fac72 src/main/java/com/thetradedesk/workflows/models/components/AllocationType.java: id: 50d1b90cb347 last_write_checksum: sha1:bf0a6fa26f247c75c20148b51ef0ad59d89f9c88 @@ -961,8 +933,8 @@ trackedFiles: pristine_git_object: 6e5ace8e0d745a0e457885d1c1598e851d64bdd4 src/main/java/com/thetradedesk/workflows/models/components/DimensionalBiddingDimensions.java: id: e8de72528def - last_write_checksum: sha1:3da58f3fe9eb8fcbca6868646717fe3c9943a3f1 - pristine_git_object: 9861eea9001bda90b56dd198e53546a00a68db40 + last_write_checksum: sha1:4fc9c81bb72624b36bc42bf93872209f68ddac71 + pristine_git_object: 5dc7675548e07ef1d29c6d3dc3d39477d74682d1 src/main/java/com/thetradedesk/workflows/models/components/EnhancedNielsenReportingOptions.java: id: cc2abec07743 last_write_checksum: sha1:381934731f424e9b2920bc4b7d816f1ac506d1bc @@ -1521,8 +1493,8 @@ trackedFiles: pristine_git_object: 8599dc5ee71f6834b1562bdcc9035a52e36338e7 src/main/java/com/thetradedesk/workflows/utils/AsyncRetries.java: id: 0c88f6db615b - last_write_checksum: sha1:04376e60772146f8d14c9e8aacdb46215a8937c8 - pristine_git_object: 97ab10a668b056d495762902f914cd1cb231632a + last_write_checksum: sha1:c2c4580f5bc6be3e0498d6ed5c19e34d529b89b7 + pristine_git_object: 8341b13995b96e8a908cd8aba0c6ef3bdb48040b src/main/java/com/thetradedesk/workflows/utils/AsyncRetryableException.java: id: 3be9861cfabf last_write_checksum: sha1:a4a6228ca9750efa320479cf4e88d022447d625e @@ -1649,8 +1621,8 @@ trackedFiles: pristine_git_object: 9efbe0a02b9eaa7f2d35c6c55c6dcd403169331e src/main/java/com/thetradedesk/workflows/utils/OneOfDeserializer.java: id: 0ab6f0710e7a - last_write_checksum: sha1:9d99ed292f151081aad9074f2da956fd95430e09 - pristine_git_object: 246534a80f1a8c15bdee5b3a70df34b4585534ba + last_write_checksum: sha1:4cce3f0407bfda548e2b78ea35ea5ffec95594e7 + pristine_git_object: 42451b63c81c96c6754a3dc9429f58c006ce4f10 src/main/java/com/thetradedesk/workflows/utils/Options.java: id: fba495a6672e last_write_checksum: sha1:3e1ccdcacd2d08e226b32c449b18911c9aba84b1 @@ -1701,8 +1673,8 @@ trackedFiles: pristine_git_object: d7a22aea81da9c6519af5b9b9e995f6a999fbb1f src/main/java/com/thetradedesk/workflows/utils/Retries.java: id: fb3b9f870f25 - last_write_checksum: sha1:c65c162303b1d24780e41bf0e6c3b077e5235d8d - pristine_git_object: 4244ef2cecbaf033874264df416a87a3d6599b9c + last_write_checksum: sha1:5add3420b5126a7331dce475f00332dbef06e6da + pristine_git_object: 6ce6aa7f50128fc53013ae9f88826058e187761f src/main/java/com/thetradedesk/workflows/utils/RetryConfig.java: id: dcaa0e1cfa1a last_write_checksum: sha1:15353483bf98643d6b37611d838762d2ada040b6 @@ -1741,8 +1713,8 @@ trackedFiles: pristine_git_object: 8f0c4bf5a4b92e02fdb1660101da53883202b5ed src/main/java/com/thetradedesk/workflows/utils/StreamingParser.java: id: 803219ddc8a4 - last_write_checksum: sha1:b13b0006a894ce634a07ce4224bc4e726abb2342 - pristine_git_object: 4b2d4afd84ddb742fe133ea7f552b4bcc9fd4b11 + last_write_checksum: sha1:4e663fc71466d3af58b80cd6ef5063d023f1c9be + pristine_git_object: 47c81f026811acf5a588a115c3e4f4c006507de0 src/main/java/com/thetradedesk/workflows/utils/TypedObject.java: id: 93aa2ace8641 last_write_checksum: sha1:e7e85f46bee198c1abec224e0c94bfb0772c7674 @@ -2018,19 +1990,19 @@ examples: createAdGroup: speakeasy-default-create-ad-group: requestBody: - application/json: {"primaryInput": {"isEnabled": false, "description": "twine from gosh poor safely editor astride vice lost and", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 3786.02, "budgetInImpressions": 783190, "dailyTargetInAdvertiserCurrency": 9747.02, "dailyTargetInImpressions": 985999}, "baseBidCPMInAdvertiserCurrency": 3785.04, "maxBidCPMInAdvertiserCurrency": 7447.3, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [107263], "recencyExclusionWindowInMinutes": 90062, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": true, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 2280.31, "ctrInPercent": null, "nielsenOTPInPercent": 5175.21, "cpaInAdvertiserCurrency": 2544.37, "returnOnAdSpendPercent": 8201.47, "vcrInPercent": 4846.08, "viewabilityInPercent": null, "vcpmInAdvertiserCurrency": 4649.53, "cpcvInAdvertiserCurrency": 313.95, "miaozhenOTPInPercent": 4704.1}, "creativeIds": null, "associatedBidLists": [{"bidListId": "", "isEnabled": false, "isDefaultForDimension": true}], "name": "", "channel": "Display", "funnelLocation": "Consideration", "marketType": "PrivateMarketOnly", "programmaticGuaranteedPrivateContractId": "", "includeDefaultsFromCampaign": false}, "campaignId": "", "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": null, "demographicMemberIds": [959580, 236376], "mobileDemographicMemberIds": [664689, 827980, 21321]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [[], []], "isUseClicksAsConversionsEnabled": false, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "Site", "gender": "Male", "startAge": "TwentyFive", "endAge": "Seventeen", "countries": ["", "", ""]}, "newFrequencyConfigs": [{"counterName": null, "frequencyCap": 375286, "frequencyGoal": 534735, "resetIntervalInMinutes": 788122}], "inventoryTargeting": {"dealGroupIdsToInclude": ["", "", ""], "dealGroupIdsToExclude": ["", "", ""], "dealIdsToExclude": [117039, 278677, 217940], "dealIdsToInclude": null, "includeDefaultOnDeals": true}, "isNonDecisioned": true, "flights": [{"allocationType": "Maximum", "budgetInAdvertiserCurrency": 4070.96, "budgetInImpressions": 901477, "dailyTargetInAdvertiserCurrency": 5847.35, "dailyTargetInImpressions": 257517, "campaignFlightId": 874887}], "callerSource": ""}, "validateInputOnly": true} + application/json: {"primaryInput": {"isEnabled": false, "description": "twine from gosh poor safely editor astride vice lost and", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 3786.02, "budgetInImpressions": 783190, "dailyTargetInAdvertiserCurrency": 9747.02, "dailyTargetInImpressions": 985999}, "baseBidCPMInAdvertiserCurrency": 3785.04, "maxBidCPMInAdvertiserCurrency": 7447.3, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [107263], "recencyExclusionWindowInMinutes": 90062, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": true, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 2280.31, "ctrInPercent": null, "nielsenOTPInPercent": 5175.21, "cpaInAdvertiserCurrency": 2544.37, "returnOnAdSpendPercent": 8201.47, "vcrInPercent": 4846.08, "viewabilityInPercent": null, "vcpmInAdvertiserCurrency": 4649.53, "cpcvInAdvertiserCurrency": 313.95, "miaozhenOTPInPercent": 4704.1, "The product scope for New Buyer goal optimization": 785382}, "creativeIds": null, "associatedBidLists": [{"bidListId": "", "isEnabled": false, "isDefaultForDimension": true}], "name": "", "channel": "Display", "funnelLocation": "Consideration", "marketType": "PrivateMarketOnly", "programmaticGuaranteedPrivateContractId": "", "includeDefaultsFromCampaign": false}, "campaignId": "", "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": null, "demographicMemberIds": [959580, 236376], "mobileDemographicMemberIds": [664689, 827980, 21321]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [[], []], "isUseClicksAsConversionsEnabled": false, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "Site", "gender": "Male", "startAge": "TwentyFive", "endAge": "Seventeen", "countries": ["", "", ""]}, "newFrequencyConfigs": [{"counterName": null, "frequencyCap": 375286, "frequencyGoal": 534735, "resetIntervalInMinutes": 788122}], "inventoryTargeting": {"dealGroupIdsToInclude": ["", "", ""], "dealGroupIdsToExclude": ["", "", ""], "dealIdsToExclude": [117039, 278677, 217940], "dealIdsToInclude": null, "includeDefaultOnDeals": true}, "isNonDecisioned": true, "flights": [{"allocationType": "Maximum", "budgetInAdvertiserCurrency": 4070.96, "budgetInImpressions": 901477, "dailyTargetInAdvertiserCurrency": 5847.35, "dailyTargetInImpressions": 257517, "campaignFlightId": 874887}], "callerSource": ""}, "validateInputOnly": true} responses: "201": - application/json: {"adGroup": {"id": "", "name": "", "campaignId": "", "isEnabled": true, "description": null, "programmaticGuaranteedPrivateContractId": "", "channel": "Video", "funnelLocation": "Consideration", "budget": {"allocationType": "Fixed", "budgetInAdvertiserCurrency": 6595.23, "budgetInImpressions": 380358, "dailyTargetInAdvertiserCurrency": 6780.84, "dailyTargetInImpressions": 934353}, "baseBidCPMInAdvertiserCurrency": 1998.1, "maxBidCPMInAdvertiserCurrency": 7702.29, "marketType": "Marketplace", "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [], "recencyExclusionWindowInMinutes": 455695, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 7001.93, "ctrInPercent": 8182.44, "nielsenOTPInPercent": 1402.81, "cpaInAdvertiserCurrency": 5101.03, "returnOnAdSpendPercent": 9286.84, "vcrInPercent": null, "viewabilityInPercent": 3948.02, "vcpmInAdvertiserCurrency": 9934.57, "cpcvInAdvertiserCurrency": 7587.03, "miaozhenOTPInPercent": 1875.25}, "creativeIds": ["", ""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": true}], "flights": [], "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": 264730, "demographicMemberIds": [], "mobileDemographicMemberIds": []}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": false}, "dimensionalBiddingAutoOptimizationSettings": [["HasSupplyVendorId"], []], "isUseClicksAsConversionsEnabled": false, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "None", "gender": "Both", "startAge": "Thirteen", "endAge": "FortyFour", "countries": []}}} + application/json: {"adGroup": {"id": "", "name": "", "campaignId": "", "isEnabled": true, "description": null, "programmaticGuaranteedPrivateContractId": "", "channel": "Video", "funnelLocation": "Consideration", "budget": {"allocationType": "Fixed", "budgetInAdvertiserCurrency": 6595.23, "budgetInImpressions": 380358, "dailyTargetInAdvertiserCurrency": 6780.84, "dailyTargetInImpressions": 934353}, "baseBidCPMInAdvertiserCurrency": 1998.1, "maxBidCPMInAdvertiserCurrency": 7702.29, "marketType": "Marketplace", "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [], "recencyExclusionWindowInMinutes": 455695, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 7001.93, "ctrInPercent": 8182.44, "nielsenOTPInPercent": 1402.81, "cpaInAdvertiserCurrency": 5101.03, "returnOnAdSpendPercent": 9286.84, "vcrInPercent": null, "viewabilityInPercent": 3948.02, "vcpmInAdvertiserCurrency": 9934.57, "cpcvInAdvertiserCurrency": 7587.03, "miaozhenOTPInPercent": 1875.25, "The product scope for New Buyer goal optimization": 957698}, "creativeIds": ["", ""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": true}], "flights": [], "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": 264730, "demographicMemberIds": [], "mobileDemographicMemberIds": []}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": false}, "dimensionalBiddingAutoOptimizationSettings": [["HasSupplyVendorId"], []], "isUseClicksAsConversionsEnabled": false, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "None", "gender": "Both", "startAge": "Thirteen", "endAge": "FortyFour", "countries": []}}} "400": application/json: {"type": "", "title": "", "status": 243149, "detail": "", "instance": ""} updateAdGroup: speakeasy-default-update-ad-group: requestBody: - application/json: {"id": "", "primaryInput": {"isEnabled": null, "description": "likely upliftingly league that finally after owlishly when furthermore brush", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 2166.43, "budgetInImpressions": 508947, "dailyTargetInAdvertiserCurrency": 5830.53, "dailyTargetInImpressions": 377823}, "baseBidCPMInAdvertiserCurrency": 1710.9, "maxBidCPMInAdvertiserCurrency": 1926.83, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": true, "crossDeviceVendorListForAudience": [774064, 165155, 542528], "recencyExclusionWindowInMinutes": 740341, "targetTrackableUsersEnabled": false, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 1146.61, "ctrInPercent": 3063.1, "nielsenOTPInPercent": 411.57, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 7161.01, "vcrInPercent": 5983.85, "viewabilityInPercent": 9094.92, "vcpmInAdvertiserCurrency": 1135.94, "cpcvInAdvertiserCurrency": 6372.45, "miaozhenOTPInPercent": 8405.28}, "creativeIds": ["", "", ""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": true}], "name": "", "channel": "Native", "funnelLocation": "Conversion", "marketType": "OpenMarket"}, "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": true}, "comscoreSettings": {"isEnabled": false, "populationId": 935670, "demographicMemberIds": [873274, 940674, 350994], "mobileDemographicMemberIds": [572403, 872508, 141651]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasContentLivestream"]], "isUseClicksAsConversionsEnabled": false, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "None", "gender": "Female", "startAge": "FiftyFive", "endAge": "SixtyFourPlus", "countries": ["", ""]}, "newFrequencyConfigs": [{"counterName": "", "frequencyCap": 685969, "frequencyGoal": 448470, "resetIntervalInMinutes": 577492}], "inventoryTargeting": {"dealGroupIdsToInclude": [""], "dealGroupIdsToExclude": ["", "", ""], "dealIdsToExclude": [624775, 110078, 170675], "dealIdsToInclude": null, "includeDefaultOnDeals": false}, "isNonDecisioned": null, "flights": [{"allocationType": "Minimum", "budgetInAdvertiserCurrency": 5325.23, "budgetInImpressions": 876101, "dailyTargetInAdvertiserCurrency": 44.58, "dailyTargetInImpressions": 815686, "campaignFlightId": 528311}], "callerSource": null}, "validateInputOnly": false} + application/json: {"id": "", "primaryInput": {"isEnabled": null, "description": "likely upliftingly league that finally after owlishly when furthermore brush", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 2166.43, "budgetInImpressions": 508947, "dailyTargetInAdvertiserCurrency": 5830.53, "dailyTargetInImpressions": 377823}, "baseBidCPMInAdvertiserCurrency": 1710.9, "maxBidCPMInAdvertiserCurrency": 1926.83, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": true, "crossDeviceVendorListForAudience": [774064, 165155, 542528], "recencyExclusionWindowInMinutes": 740341, "targetTrackableUsersEnabled": false, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 1146.61, "ctrInPercent": 3063.1, "nielsenOTPInPercent": 411.57, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 7161.01, "vcrInPercent": 5983.85, "viewabilityInPercent": 9094.92, "vcpmInAdvertiserCurrency": 1135.94, "cpcvInAdvertiserCurrency": 6372.45, "miaozhenOTPInPercent": 8405.28, "The product scope for New Buyer goal optimization": 93512}, "creativeIds": ["", "", ""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": true}], "name": "", "channel": "Native", "funnelLocation": "Conversion", "marketType": "OpenMarket"}, "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": true}, "comscoreSettings": {"isEnabled": false, "populationId": 935670, "demographicMemberIds": [873274, 940674, 350994], "mobileDemographicMemberIds": [572403, 872508, 141651]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasContentLivestream"]], "isUseClicksAsConversionsEnabled": false, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "None", "gender": "Female", "startAge": "FiftyFive", "endAge": "SixtyFourPlus", "countries": ["", ""]}, "newFrequencyConfigs": [{"counterName": "", "frequencyCap": 685969, "frequencyGoal": 448470, "resetIntervalInMinutes": 577492}], "inventoryTargeting": {"dealGroupIdsToInclude": [""], "dealGroupIdsToExclude": ["", "", ""], "dealIdsToExclude": [624775, 110078, 170675], "dealIdsToInclude": null, "includeDefaultOnDeals": false}, "isNonDecisioned": null, "flights": [{"allocationType": "Minimum", "budgetInAdvertiserCurrency": 5325.23, "budgetInImpressions": 876101, "dailyTargetInAdvertiserCurrency": 44.58, "dailyTargetInImpressions": 815686, "campaignFlightId": 528311}], "callerSource": null}, "validateInputOnly": false} responses: "200": - application/json: {"adGroup": {"id": "", "name": "", "campaignId": null, "isEnabled": true, "description": null, "programmaticGuaranteedPrivateContractId": "", "channel": "Other", "funnelLocation": "Consideration", "budget": {"allocationType": "Fixed", "budgetInAdvertiserCurrency": 1639.57, "budgetInImpressions": null, "dailyTargetInAdvertiserCurrency": 501.01, "dailyTargetInImpressions": null}, "baseBidCPMInAdvertiserCurrency": 5346.53, "maxBidCPMInAdvertiserCurrency": null, "marketType": "PrivateMarketOnly", "audienceTargeting": {"audienceId": null, "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": false, "audienceExcluderEnabled": false, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [741479], "recencyExclusionWindowInMinutes": 773620, "targetTrackableUsersEnabled": false, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 3032.86, "ctrInPercent": 5100.96, "nielsenOTPInPercent": null, "cpaInAdvertiserCurrency": 3710.43, "returnOnAdSpendPercent": null, "vcrInPercent": 6055.75, "viewabilityInPercent": 1235.47, "vcpmInAdvertiserCurrency": 7609.52, "cpcvInAdvertiserCurrency": 1915.49, "miaozhenOTPInPercent": 8131.48}, "creativeIds": null, "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": false}], "flights": [{"allocationType": "Minimum", "budgetInAdvertiserCurrency": 4082.99, "budgetInImpressions": 497146, "dailyTargetInAdvertiserCurrency": 3391.02, "dailyTargetInImpressions": 637987, "campaignFlightId": 315704, "adGroupId": ""}], "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": true, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": 16979, "demographicMemberIds": [616321], "mobileDemographicMemberIds": [164686, 325659, 357053]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": false}, "dimensionalBiddingAutoOptimizationSettings": [["HasLanguageId"], []], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Both", "startAge": "Thirty", "endAge": "ThirtyNine", "countries": [""]}}} + application/json: {"adGroup": {"id": "", "name": "", "campaignId": null, "isEnabled": true, "description": null, "programmaticGuaranteedPrivateContractId": "", "channel": "Other", "funnelLocation": "Consideration", "budget": {"allocationType": "Fixed", "budgetInAdvertiserCurrency": 1639.57, "budgetInImpressions": null, "dailyTargetInAdvertiserCurrency": 501.01, "dailyTargetInImpressions": null}, "baseBidCPMInAdvertiserCurrency": 5346.53, "maxBidCPMInAdvertiserCurrency": null, "marketType": "PrivateMarketOnly", "audienceTargeting": {"audienceId": null, "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": false, "audienceExcluderEnabled": false, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [741479], "recencyExclusionWindowInMinutes": 773620, "targetTrackableUsersEnabled": false, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 3032.86, "ctrInPercent": 5100.96, "nielsenOTPInPercent": null, "cpaInAdvertiserCurrency": 3710.43, "returnOnAdSpendPercent": null, "vcrInPercent": 6055.75, "viewabilityInPercent": 1235.47, "vcpmInAdvertiserCurrency": 7609.52, "cpcvInAdvertiserCurrency": 1915.49, "miaozhenOTPInPercent": 8131.48, "The product scope for New Buyer goal optimization": 942834}, "creativeIds": null, "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": false}], "flights": [{"allocationType": "Minimum", "budgetInAdvertiserCurrency": 4082.99, "budgetInImpressions": 497146, "dailyTargetInAdvertiserCurrency": 3391.02, "dailyTargetInImpressions": 637987, "campaignFlightId": 315704, "adGroupId": ""}], "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": true, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": 16979, "demographicMemberIds": [616321], "mobileDemographicMemberIds": [164686, 325659, 357053]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": false}, "dimensionalBiddingAutoOptimizationSettings": [["HasLanguageId"], []], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Both", "startAge": "Thirty", "endAge": "ThirtyNine", "countries": [""]}}} "400": application/json: {"type": "", "title": "", "status": 861713, "detail": "", "instance": ""} archiveAdGroups: @@ -2057,7 +2029,7 @@ examples: updateAdGroupsJob: speakeasy-default-update-ad-groups-job: requestBody: - application/json: {"input": [{"id": "", "primaryInput": {"isEnabled": false, "description": "stealthily miserable imaginary er since athwart er blah marten", "budget": {"allocationType": "Minimum", "budgetInAdvertiserCurrency": 5440.47, "budgetInImpressions": null, "dailyTargetInAdvertiserCurrency": 6251.13, "dailyTargetInImpressions": 931411}, "baseBidCPMInAdvertiserCurrency": 188.02, "maxBidCPMInAdvertiserCurrency": 6077.98, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": true, "audienceExcluderEnabled": false, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [27262], "recencyExclusionWindowInMinutes": 676417, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": null, "ctrInPercent": 2972.79, "nielsenOTPInPercent": 4206.38, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 842.94, "vcrInPercent": 6307.13, "viewabilityInPercent": 9286.78, "vcpmInAdvertiserCurrency": 8251.2, "cpcvInAdvertiserCurrency": 4502.77, "miaozhenOTPInPercent": 2362.43}, "creativeIds": [""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": true}], "name": "", "channel": "TV", "funnelLocation": "None", "marketType": "OpenMarket"}, "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": true, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": true, "populationId": 907569, "demographicMemberIds": null, "mobileDemographicMemberIds": [169306, 568551]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasFrequencyAdjustmentId"]], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Female", "startAge": "FortyFive", "endAge": "ThirtyFour", "countries": ["", ""]}, "newFrequencyConfigs": [{"counterName": "", "frequencyCap": 25438, "frequencyGoal": 637221, "resetIntervalInMinutes": 375296}], "inventoryTargeting": {"dealGroupIdsToInclude": ["", "", ""], "dealGroupIdsToExclude": ["", ""], "dealIdsToExclude": [849888, 396688, 733994], "dealIdsToInclude": [690107], "includeDefaultOnDeals": false}, "isNonDecisioned": false, "flights": null, "callerSource": ""}}], "validateInputOnly": true, "callbackInput": {"callbackUrl": "https://winged-bathhouse.net", "callbackHeaders": null}} + application/json: {"input": [{"id": "", "primaryInput": {"isEnabled": false, "description": "stealthily miserable imaginary er since athwart er blah marten", "budget": {"allocationType": "Minimum", "budgetInAdvertiserCurrency": 5440.47, "budgetInImpressions": null, "dailyTargetInAdvertiserCurrency": 6251.13, "dailyTargetInImpressions": 931411}, "baseBidCPMInAdvertiserCurrency": 188.02, "maxBidCPMInAdvertiserCurrency": 6077.98, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": true, "audienceExcluderEnabled": false, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [27262], "recencyExclusionWindowInMinutes": 676417, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": null, "ctrInPercent": 2972.79, "nielsenOTPInPercent": 4206.38, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 842.94, "vcrInPercent": 6307.13, "viewabilityInPercent": 9286.78, "vcpmInAdvertiserCurrency": 8251.2, "cpcvInAdvertiserCurrency": 4502.77, "miaozhenOTPInPercent": 2362.43, "The product scope for New Buyer goal optimization": 901233}, "creativeIds": [""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": true}], "name": "", "channel": "TV", "funnelLocation": "None", "marketType": "OpenMarket"}, "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": true, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": true, "populationId": 907569, "demographicMemberIds": null, "mobileDemographicMemberIds": [169306, 568551]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasFrequencyAdjustmentId"]], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Female", "startAge": "FortyFive", "endAge": "ThirtyFour", "countries": ["", ""]}, "newFrequencyConfigs": [{"counterName": "", "frequencyCap": 25438, "frequencyGoal": 637221, "resetIntervalInMinutes": 375296}], "inventoryTargeting": {"dealGroupIdsToInclude": ["", "", ""], "dealGroupIdsToExclude": ["", ""], "dealIdsToExclude": [849888, 396688, 733994], "dealIdsToInclude": [690107], "includeDefaultOnDeals": false}, "isNonDecisioned": false, "flights": null, "callerSource": ""}}], "validateInputOnly": true, "callbackInput": {"callbackUrl": "https://winged-bathhouse.net", "callbackHeaders": null}} responses: "202": application/json: {"id": 942819} @@ -2066,27 +2038,27 @@ examples: createCampaign: speakeasy-default-create-campaign: requestBody: - application/json: {"primaryInput": {"description": "woot furthermore mentor", "campaignGroupId": 86586, "timeZone": "Europe/Ulyanovsk", "customCPAClickWeight": 2561.01, "customCPAViewthroughWeight": 5604.35, "customCPAType": "ClickViewthroughWeighting", "customRoasType": "Disabled", "impressionsOnlyBudgetingCpm": 1502.33, "endDateInUtc": null, "seedId": null, "campaignConversionReportingColumns": [{"trackingTagId": "", "includeInCustomCPA": false, "reportingColumnId": 888649, "ROASConfig": {"includeInCustomROAS": false, "customROASWeight": 4766.9, "customROASClickWeight": 3310.24, "customROASViewthroughWeight": 2919.37}, "productListReportingType": "Featured", "weight": 5369.43, "crossDeviceAttributionModelId": ""}], "isManagedByTTD": null, "secondaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 4128.35, "ctrInPercent": 4434.91, "nielsenOTPInPercent": 7433.37, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 2367.04, "vcrInPercent": 2333.15, "viewabilityInPercent": 5018.08, "vcpmInAdvertiserCurrency": 6070.6, "cpcvInAdvertiserCurrency": null, "miaozhenOTPInPercent": 4324.01, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": true, "iqviaAudienceQualityIndexAndCostPerTarget": false, "crossixCostPerTarget": true, "NewBuyerTargetValue": null}, "tertiaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 7814.79, "ctrInPercent": 7849.85, "nielsenOTPInPercent": null, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 9519.81, "vcrInPercent": 6125.66, "viewabilityInPercent": 4766.9, "vcpmInAdvertiserCurrency": 3310.24, "cpcvInAdvertiserCurrency": 2919.37, "miaozhenOTPInPercent": 5369.43, "iqviaAudienceQualityIndex": false, "crossixAudienceQualityIndex": false, "iqviaAudienceQualityIndexAndCostPerTarget": null, "crossixCostPerTarget": false, "NewBuyerTargetValue": 960101}, "advertiserId": "", "name": "", "customLabelNames": ["", ""], "primaryChannel": "DOOH", "primaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": null, "cpcInAdvertiserCurrency": 6678.34, "ctrInPercent": 5357.4, "nielsenOTPInPercent": 2741.6, "cpaInAdvertiserCurrency": 4220.63, "returnOnAdSpendPercent": 8572.83, "vcrInPercent": 8294.92, "viewabilityInPercent": 8592.21, "vcpmInAdvertiserCurrency": 8388.8, "cpcvInAdvertiserCurrency": null, "miaozhenOTPInPercent": 3033.14, "iqviaAudienceQualityIndex": false, "crossixAudienceQualityIndex": true, "iqviaAudienceQualityIndexAndCostPerTarget": true, "crossixCostPerTarget": false, "NewBuyerTargetValue": 412835}, "startDateInUtc": null, "budget": {"pacingMode": "PaceAsSoonAsPossible", "budgetInAdvertiserCurrency": 6363.35, "budgetInImpressions": 836518, "dailyTargetInAdvertiserCurrency": 7814.79, "dailyTargetInImpressions": 784985}, "campaignIncrementalReachSetting": {"iSpotReachSetting": {"id": 787894, "name": "", "isActive": false}, "realyticsReachSetting": {"id": 859221, "name": "", "isActive": false, "products": null, "realyticsEntertainmentInput": "TVS"}, "tvSquaredReachSetting": {"id": 303314, "name": null, "isActive": false}, "sambaAuReachSetting": {"id": 505888, "name": "", "isActive": true}}}, "advancedInput": {"purchaseOrderNumber": null, "flights": [{"startDateInclusiveUTC": "2024-07-08T10:52:56.944Z", "endDateExclusiveUTC": "2023-05-12T16:41:56.386Z", "budgetInAdvertiserCurrency": 5904.11, "budgetInImpressions": null, "dailyTargetInAdvertiserCurrency": 6112.24, "dailyTargetInImpressions": 333131}], "includeDefaultsFromAdvertiser": false, "passThroughFeeCard": {"startDateUtc": "2023-03-18T04:39:08.387Z", "passThroughFees": [{"type": "FeeCPM", "description": "fairly gah mortally freight since", "amount": 2122.11}]}, "callerSource": "", "frequencyConfigs": [{"counterName": "", "frequencyCap": 743337, "frequencyGoal": null, "resetIntervalInMinutes": 520097}]}, "adGroups": [{"primaryInput": {"isEnabled": false, "description": "quash lightly rot bashfully slope", "budget": {"allocationType": "Minimum", "budgetInAdvertiserCurrency": 4043.98, "budgetInImpressions": 907414, "dailyTargetInAdvertiserCurrency": 49.95, "dailyTargetInImpressions": 62363}, "baseBidCPMInAdvertiserCurrency": 1136.89, "maxBidCPMInAdvertiserCurrency": 6950.27, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": true, "audienceExcluderEnabled": false, "audiencePredictorEnabled": true, "crossDeviceVendorListForAudience": [458524, 284141], "recencyExclusionWindowInMinutes": 982426, "targetTrackableUsersEnabled": false, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": null, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 8782.74, "ctrInPercent": null, "nielsenOTPInPercent": 7930.85, "cpaInAdvertiserCurrency": 4606.89, "returnOnAdSpendPercent": 2522.83, "vcrInPercent": 5828.49, "viewabilityInPercent": 6824.44, "vcpmInAdvertiserCurrency": 7123.95, "cpcvInAdvertiserCurrency": 6233.72, "miaozhenOTPInPercent": 8437.22}, "creativeIds": [""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": false}], "name": "", "channel": "NativeVideo", "funnelLocation": "None", "marketType": "OpenMarket", "programmaticGuaranteedPrivateContractId": "", "includeDefaultsFromCampaign": true}, "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": true, "predictiveClearingEnabled": true}, "comscoreSettings": {"isEnabled": false, "populationId": 523753, "demographicMemberIds": null, "mobileDemographicMemberIds": null}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasFullReferrerUrl"], ["HasPublisherId"]], "isUseClicksAsConversionsEnabled": null, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "Site", "gender": "Female", "startAge": "ThirtyFive", "endAge": "FortyNine", "countries": []}, "newFrequencyConfigs": [{"counterName": "", "frequencyCap": 391231, "frequencyGoal": 499235, "resetIntervalInMinutes": 587736}], "inventoryTargeting": {"dealGroupIdsToInclude": [""], "dealGroupIdsToExclude": ["", ""], "dealIdsToExclude": [607060], "dealIdsToInclude": null, "includeDefaultOnDeals": true}, "isNonDecisioned": true, "includeDefaultsFromCampaign": false, "flights": [{"allocationType": "Fixed", "budgetInAdvertiserCurrency": 5340.32, "budgetInImpressions": 492382, "dailyTargetInAdvertiserCurrency": 5622.5, "dailyTargetInImpressions": 398919}]}}], "validateInputOnly": false} + application/json: {"primaryInput": {"description": "woot furthermore mentor", "campaignGroupId": 86586, "timeZone": "Europe/Ulyanovsk", "customCPAClickWeight": 2561.01, "customCPAViewthroughWeight": 5604.35, "customCPAType": "ClickViewthroughWeighting", "customRoasType": "Disabled", "impressionsOnlyBudgetingCpm": 1502.33, "endDateInUtc": null, "seedId": null, "campaignConversionReportingColumns": [{"trackingTagId": "", "includeInCustomCPA": false, "reportingColumnId": 888649, "ROASConfig": {"includeInCustomROAS": false, "customROASWeight": 4766.9, "customROASClickWeight": 3310.24, "customROASViewthroughWeight": 2919.37}, "productListReportingType": "Featured", "weight": 5369.43, "crossDeviceAttributionModelId": ""}], "isManagedByTTD": null, "secondaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 4128.35, "ctrInPercent": 4434.91, "nielsenOTPInPercent": 7433.37, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 2367.04, "vcrInPercent": 2333.15, "viewabilityInPercent": 5018.08, "vcpmInAdvertiserCurrency": 6070.6, "cpcvInAdvertiserCurrency": null, "miaozhenOTPInPercent": 4324.01, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": true, "iqviaAudienceQualityIndexAndCostPerTarget": false, "crossixCostPerTarget": true, "NewBuyerTargetValue": null}, "tertiaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 7814.79, "ctrInPercent": 7849.85, "nielsenOTPInPercent": null, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 9519.81, "vcrInPercent": 6125.66, "viewabilityInPercent": 4766.9, "vcpmInAdvertiserCurrency": 3310.24, "cpcvInAdvertiserCurrency": 2919.37, "miaozhenOTPInPercent": 5369.43, "iqviaAudienceQualityIndex": false, "crossixAudienceQualityIndex": false, "iqviaAudienceQualityIndexAndCostPerTarget": null, "crossixCostPerTarget": false, "NewBuyerTargetValue": 960101}, "advertiserId": "", "name": "", "customLabelNames": ["", ""], "primaryChannel": "DOOH", "primaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": null, "cpcInAdvertiserCurrency": 6678.34, "ctrInPercent": 5357.4, "nielsenOTPInPercent": 2741.6, "cpaInAdvertiserCurrency": 4220.63, "returnOnAdSpendPercent": 8572.83, "vcrInPercent": 8294.92, "viewabilityInPercent": 8592.21, "vcpmInAdvertiserCurrency": 8388.8, "cpcvInAdvertiserCurrency": null, "miaozhenOTPInPercent": 3033.14, "iqviaAudienceQualityIndex": false, "crossixAudienceQualityIndex": true, "iqviaAudienceQualityIndexAndCostPerTarget": true, "crossixCostPerTarget": false, "NewBuyerTargetValue": 412835}, "startDateInUtc": null, "budget": {"pacingMode": "PaceAsSoonAsPossible", "budgetInAdvertiserCurrency": 6363.35, "budgetInImpressions": 836518, "dailyTargetInAdvertiserCurrency": 7814.79, "dailyTargetInImpressions": 784985}, "campaignIncrementalReachSetting": {"iSpotReachSetting": {"id": 787894, "name": "", "isActive": false}, "realyticsReachSetting": {"id": 859221, "name": "", "isActive": false, "products": null, "realyticsEntertainmentInput": "TVS"}, "tvSquaredReachSetting": {"id": 303314, "name": null, "isActive": false}, "sambaAuReachSetting": {"id": 505888, "name": "", "isActive": true}}}, "advancedInput": {"purchaseOrderNumber": null, "flights": [{"startDateInclusiveUTC": "2024-07-08T10:52:56.944Z", "endDateExclusiveUTC": "2023-05-12T16:41:56.386Z", "budgetInAdvertiserCurrency": 5904.11, "budgetInImpressions": null, "dailyTargetInAdvertiserCurrency": 6112.24, "dailyTargetInImpressions": 333131}], "includeDefaultsFromAdvertiser": false, "passThroughFeeCard": {"startDateUtc": "2023-03-18T04:39:08.387Z", "passThroughFees": [{"type": "FeeCPM", "description": "fairly gah mortally freight since", "amount": 2122.11}]}, "callerSource": "", "frequencyConfigs": [{"counterName": "", "frequencyCap": 743337, "frequencyGoal": null, "resetIntervalInMinutes": 520097}]}, "adGroups": [{"primaryInput": {"isEnabled": false, "description": "quash lightly rot bashfully slope", "budget": {"allocationType": "Minimum", "budgetInAdvertiserCurrency": 4043.98, "budgetInImpressions": 907414, "dailyTargetInAdvertiserCurrency": 49.95, "dailyTargetInImpressions": 62363}, "baseBidCPMInAdvertiserCurrency": 1136.89, "maxBidCPMInAdvertiserCurrency": 6950.27, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": true, "audienceExcluderEnabled": false, "audiencePredictorEnabled": true, "crossDeviceVendorListForAudience": [458524, 284141], "recencyExclusionWindowInMinutes": 982426, "targetTrackableUsersEnabled": false, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": null, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 8782.74, "ctrInPercent": null, "nielsenOTPInPercent": 7930.85, "cpaInAdvertiserCurrency": 4606.89, "returnOnAdSpendPercent": 2522.83, "vcrInPercent": 5828.49, "viewabilityInPercent": 6824.44, "vcpmInAdvertiserCurrency": 7123.95, "cpcvInAdvertiserCurrency": 6233.72, "miaozhenOTPInPercent": 8437.22, "The product scope for New Buyer goal optimization": 86586}, "creativeIds": [""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": false}], "name": "", "channel": "NativeVideo", "funnelLocation": "None", "marketType": "OpenMarket", "programmaticGuaranteedPrivateContractId": "", "includeDefaultsFromCampaign": true}, "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": true, "predictiveClearingEnabled": true}, "comscoreSettings": {"isEnabled": false, "populationId": 523753, "demographicMemberIds": null, "mobileDemographicMemberIds": null}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasFullReferrerUrl"], ["HasPublisherId"]], "isUseClicksAsConversionsEnabled": null, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "Site", "gender": "Female", "startAge": "ThirtyFive", "endAge": "FortyNine", "countries": []}, "newFrequencyConfigs": [{"counterName": "", "frequencyCap": 391231, "frequencyGoal": 499235, "resetIntervalInMinutes": 587736}], "inventoryTargeting": {"dealGroupIdsToInclude": [""], "dealGroupIdsToExclude": ["", ""], "dealIdsToExclude": [607060], "dealIdsToInclude": null, "includeDefaultOnDeals": true}, "isNonDecisioned": true, "includeDefaultsFromCampaign": false, "flights": [{"allocationType": "Fixed", "budgetInAdvertiserCurrency": 5340.32, "budgetInImpressions": 492382, "dailyTargetInAdvertiserCurrency": 5622.5, "dailyTargetInImpressions": 398919}]}}], "validateInputOnly": false} responses: "201": application/json: {"campaign": {"id": "", "name": "", "campaignGroupId": 960101, "description": "commandeer following afore ghost schematise lest understated brr happily lined", "startDate": "2025-05-13T19:59:29.421Z", "endDate": "2025-09-17T08:16:44.433Z", "timeZone": "Africa/Lome", "customCPAClickWeight": 1725.54, "customCPAViewthroughWeight": 418.34, "customCPAType": "PixelWeighting", "impressionsOnlyBudgetingCpm": 3266.9, "primaryChannel": "Display", "primaryGoal": "", "seedId": "", "conversionReportingColumnsCount": 748798, "flights": [{"id": "", "startDateInclusiveUTC": "2024-03-12T14:53:08.741Z", "endDateExclusiveUTC": "2024-07-12T11:11:36.420Z", "budgetInAdvertiserCurrency": 6585.86, "budgetInImpressions": 83962, "dailyTargetInAdvertiserCurrency": 2584.64, "dailyTargetInImpressions": 910113}]}, "adGroups": [{"id": "", "name": "", "campaignId": "", "isEnabled": false, "description": "hence questioningly punctual austere beard around circumnavigate behind aboard", "programmaticGuaranteedPrivateContractId": null, "channel": "NativeVideo", "funnelLocation": "Consideration", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 4437.6, "budgetInImpressions": 663120, "dailyTargetInAdvertiserCurrency": 3765.21, "dailyTargetInImpressions": 111869}, "baseBidCPMInAdvertiserCurrency": 9802.01, "maxBidCPMInAdvertiserCurrency": 1646.69, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": false, "audienceBoosterEnabled": false, "audienceExcluderEnabled": false, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [502213, 470177, 420897], "recencyExclusionWindowInMinutes": 4504, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 6741.01, "ctrInPercent": 982.47, "nielsenOTPInPercent": 7021.23, "cpaInAdvertiserCurrency": 7395.27, "returnOnAdSpendPercent": 744.23, "vcrInPercent": 3686.93, "viewabilityInPercent": 3897.27, "vcpmInAdvertiserCurrency": 4522.49, "cpcvInAdvertiserCurrency": 2016.93, "miaozhenOTPInPercent": 3516.78}, "creativeIds": [""], "associatedBidLists": [{"bidListId": null, "isEnabled": false, "isDefaultForDimension": true}], "flights": null, "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": null, "demographicMemberIds": [339950, 676551], "mobileDemographicMemberIds": []}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": false}, "dimensionalBiddingAutoOptimizationSettings": [["HasTVQualityIndexRange"], [], ["HasDoubleVerifyBotAvoidanceCategoryId"]], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Female", "startAge": "TwentyOne", "endAge": "SixtyFour", "countries": ["", ""]}}]} "400": application/json: {"type": "", "title": "", "status": 395871, "detail": "", "instance": ""} "200": - application/json: {"campaign": {"id": "", "name": null, "campaignGroupId": 960101, "description": "authorized equate pfft that bathrobe now monumental", "startDate": "2023-05-29T12:37:28.754Z", "endDate": "2023-01-31T12:57:12.401Z", "timeZone": "Asia/Thimphu", "customCPAClickWeight": 5357.4, "customCPAViewthroughWeight": 2741.6, "customCPAType": "PixelWeighting", "impressionsOnlyBudgetingCpm": 6819.46, "primaryChannel": "NativeVideo", "primaryGoal": "", "seedId": "", "conversionReportingColumnsCount": 859221, "flights": [{"id": "", "startDateInclusiveUTC": "2023-03-22T18:44:52.808Z", "endDateExclusiveUTC": "2023-11-29T10:22:14.197Z", "budgetInAdvertiserCurrency": 296.01, "budgetInImpressions": 505888, "dailyTargetInAdvertiserCurrency": 1201.6, "dailyTargetInImpressions": 69520}], "secondaryGoal": "", "tertiaryGoal": null}, "adGroups": [{"id": "", "name": "", "campaignId": "", "isEnabled": true, "description": "chip schematise hydrant tabletop", "programmaticGuaranteedPrivateContractId": "", "channel": "Audio", "funnelLocation": "None", "budget": {"allocationType": "Fixed", "budgetInAdvertiserCurrency": 2122.11, "budgetInImpressions": 14421, "dailyTargetInAdvertiserCurrency": 6819.33, "dailyTargetInImpressions": 236683}, "baseBidCPMInAdvertiserCurrency": 4043.98, "maxBidCPMInAdvertiserCurrency": 9074.14, "marketType": "OpenMarket", "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [695027, 701346, 714268], "recencyExclusionWindowInMinutes": 551180, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 5473.9, "ctrInPercent": 2841.41, "nielsenOTPInPercent": 9824.26, "cpaInAdvertiserCurrency": 9094.99, "returnOnAdSpendPercent": 878.85, "vcrInPercent": null, "viewabilityInPercent": 683.62, "vcpmInAdvertiserCurrency": 8782.74, "cpcvInAdvertiserCurrency": null, "miaozhenOTPInPercent": 7930.85}, "creativeIds": [""], "associatedBidLists": [], "flights": [{"allocationType": "Fixed", "budgetInAdvertiserCurrency": 6824.44, "budgetInImpressions": 712395, "dailyTargetInAdvertiserCurrency": 6233.72, "dailyTargetInImpressions": 843722, "campaignFlightId": 570475, "adGroupId": null}], "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": true}, "comscoreSettings": {"isEnabled": true, "populationId": 612763, "demographicMemberIds": [46343, 170673, 930570], "mobileDemographicMemberIds": null}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasIntegralVideoViewabilityCategoryId"], []], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Female", "startAge": "Thirty", "endAge": "ThirtyNine", "countries": ["", ""]}}]} + application/json: {"campaign": {"id": "", "name": null, "campaignGroupId": 960101, "description": "authorized equate pfft that bathrobe now monumental", "startDate": "2023-05-29T12:37:28.754Z", "endDate": "2023-01-31T12:57:12.401Z", "timeZone": "Asia/Thimphu", "customCPAClickWeight": 5357.4, "customCPAViewthroughWeight": 2741.6, "customCPAType": "PixelWeighting", "impressionsOnlyBudgetingCpm": 6819.46, "primaryChannel": "NativeVideo", "primaryGoal": "", "seedId": "", "conversionReportingColumnsCount": 859221, "flights": [{"id": "", "startDateInclusiveUTC": "2023-03-22T18:44:52.808Z", "endDateExclusiveUTC": "2023-11-29T10:22:14.197Z", "budgetInAdvertiserCurrency": 296.01, "budgetInImpressions": 505888, "dailyTargetInAdvertiserCurrency": 1201.6, "dailyTargetInImpressions": 69520}], "secondaryGoal": "", "tertiaryGoal": null}, "adGroups": [{"id": "", "name": "", "campaignId": "", "isEnabled": true, "description": "chip schematise hydrant tabletop", "programmaticGuaranteedPrivateContractId": "", "channel": "Audio", "funnelLocation": "None", "budget": {"allocationType": "Fixed", "budgetInAdvertiserCurrency": 2122.11, "budgetInImpressions": 14421, "dailyTargetInAdvertiserCurrency": 6819.33, "dailyTargetInImpressions": 236683}, "baseBidCPMInAdvertiserCurrency": 4043.98, "maxBidCPMInAdvertiserCurrency": 9074.14, "marketType": "OpenMarket", "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [695027, 701346, 714268], "recencyExclusionWindowInMinutes": 551180, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 5473.9, "ctrInPercent": 2841.41, "nielsenOTPInPercent": 9824.26, "cpaInAdvertiserCurrency": 9094.99, "returnOnAdSpendPercent": 878.85, "vcrInPercent": null, "viewabilityInPercent": 683.62, "vcpmInAdvertiserCurrency": 8782.74, "cpcvInAdvertiserCurrency": null, "miaozhenOTPInPercent": 7930.85, "The product scope for New Buyer goal optimization": 960101}, "creativeIds": [""], "associatedBidLists": [], "flights": [{"allocationType": "Fixed", "budgetInAdvertiserCurrency": 6824.44, "budgetInImpressions": 712395, "dailyTargetInAdvertiserCurrency": 6233.72, "dailyTargetInImpressions": 843722, "campaignFlightId": 570475, "adGroupId": null}], "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": true}, "comscoreSettings": {"isEnabled": true, "populationId": 612763, "demographicMemberIds": [46343, 170673, 930570], "mobileDemographicMemberIds": null}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasIntegralVideoViewabilityCategoryId"], []], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Female", "startAge": "Thirty", "endAge": "ThirtyNine", "countries": ["", ""]}}]} updateCampaign: speakeasy-default-update-campaign: requestBody: application/json: {"id": "", "primaryInput": {"description": "yahoo whether frail but into form sway neck notwithstanding", "campaignGroupId": 760468, "timeZone": "Asia/Amman", "customCPAClickWeight": 1380.93, "customCPAViewthroughWeight": 3991.98, "customCPAType": "ClickViewthroughWeighting", "customRoasType": "Disabled", "impressionsOnlyBudgetingCpm": 126.57, "endDateInUtc": "2024-07-09T17:14:23.542Z", "seedId": "", "campaignConversionReportingColumns": [{"trackingTagId": "", "includeInCustomCPA": false, "reportingColumnId": 716444, "ROASConfig": {"includeInCustomROAS": true, "customROASWeight": 8307.9, "customROASClickWeight": 129.65, "customROASViewthroughWeight": 2890.82}, "productListReportingType": "Featured", "weight": 5187.48, "crossDeviceAttributionModelId": null}], "isManagedByTTD": false, "secondaryGoal": {"maximizeReach": true, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 1165.14, "ctrInPercent": 5157.73, "nielsenOTPInPercent": 3855.93, "cpaInAdvertiserCurrency": 5164.28, "returnOnAdSpendPercent": 8554.35, "vcrInPercent": 9569.97, "viewabilityInPercent": 9650.33, "vcpmInAdvertiserCurrency": 5268.69, "cpcvInAdvertiserCurrency": 7216.52, "miaozhenOTPInPercent": 6966.26, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": true, "iqviaAudienceQualityIndexAndCostPerTarget": true, "crossixCostPerTarget": true, "NewBuyerTargetValue": 869267}, "tertiaryGoal": {"maximizeReach": true, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 5149.5, "ctrInPercent": 5602.97, "nielsenOTPInPercent": 3514.56, "cpaInAdvertiserCurrency": 1.97, "returnOnAdSpendPercent": 3177.79, "vcrInPercent": 5564.63, "viewabilityInPercent": 472.11, "vcpmInAdvertiserCurrency": 4614.14, "cpcvInAdvertiserCurrency": 8553.51, "miaozhenOTPInPercent": 5511.72, "iqviaAudienceQualityIndex": false, "crossixAudienceQualityIndex": false, "iqviaAudienceQualityIndexAndCostPerTarget": null, "crossixCostPerTarget": false, "NewBuyerTargetValue": 113952}, "name": "", "primaryChannel": "Display", "primaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 8835.54, "ctrInPercent": 4975.78, "nielsenOTPInPercent": 6033.78, "cpaInAdvertiserCurrency": null, "returnOnAdSpendPercent": 5696.08, "vcrInPercent": 8315.31, "viewabilityInPercent": 1059.68, "vcpmInAdvertiserCurrency": 4588.07, "cpcvInAdvertiserCurrency": 2202.71, "miaozhenOTPInPercent": 2682.12, "iqviaAudienceQualityIndex": false, "crossixAudienceQualityIndex": true, "iqviaAudienceQualityIndexAndCostPerTarget": true, "crossixCostPerTarget": true, "NewBuyerTargetValue": 723722}, "startDateInUtc": "2024-02-29T10:31:50.069Z", "budget": {"pacingMode": "PaceAsSoonAsPossible"}}, "advancedInput": {"purchaseOrderNumber": ""}, "validateInputOnly": true} responses: "200": - application/json: {"campaign": {"id": "", "name": "", "campaignGroupId": 287698, "description": "yuppify primary lest nutritious whoa likewise bookcase traduce seriously", "startDate": "2024-06-18T22:41:27.089Z", "endDate": "2023-09-28T10:30:24.825Z", "timeZone": "Africa/Brazzaville", "customCPAClickWeight": 1420.08, "customCPAViewthroughWeight": 3419.03, "customCPAType": "Disabled", "impressionsOnlyBudgetingCpm": null, "primaryChannel": "Display", "primaryGoal": "", "seedId": "", "conversionReportingColumnsCount": 10946, "flights": [{"id": "", "startDateInclusiveUTC": "2024-06-26T03:24:17.236Z", "endDateExclusiveUTC": "2025-07-01T04:11:25.573Z", "budgetInAdvertiserCurrency": 6644.31, "budgetInImpressions": 164310, "dailyTargetInAdvertiserCurrency": 4555.64, "dailyTargetInImpressions": null}], "secondaryGoal": null, "tertiaryGoal": ""}, "adGroups": [{"id": "", "name": null, "campaignId": "", "isEnabled": false, "description": "er palatable clonk against noon blacken though", "programmaticGuaranteedPrivateContractId": "", "channel": "Display", "funnelLocation": "None", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 4400.5, "budgetInImpressions": 252235, "dailyTargetInAdvertiserCurrency": 3360.49, "dailyTargetInImpressions": 82960}, "baseBidCPMInAdvertiserCurrency": 4115.19, "maxBidCPMInAdvertiserCurrency": 9043, "marketType": "OpenMarket", "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": false, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [706430], "recencyExclusionWindowInMinutes": 773547, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": false}, "roiGoal": {"maximizeReach": null, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 8439.61, "ctrInPercent": 3120.58, "nielsenOTPInPercent": 7464.3, "cpaInAdvertiserCurrency": 6205.02, "returnOnAdSpendPercent": 9077.31, "vcrInPercent": 9134.53, "viewabilityInPercent": 7809.01, "vcpmInAdvertiserCurrency": null, "cpcvInAdvertiserCurrency": 9297.05, "miaozhenOTPInPercent": 330.19}, "creativeIds": ["", ""], "associatedBidLists": [], "flights": null, "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": true, "populationId": 34197, "demographicMemberIds": [], "mobileDemographicMemberIds": [172582, 373780]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [[], []], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "Site", "gender": "Female", "startAge": "FiftyFive", "endAge": "TwentyFour", "countries": [""]}}]} + application/json: {"campaign": {"id": "", "name": "", "campaignGroupId": 287698, "description": "yuppify primary lest nutritious whoa likewise bookcase traduce seriously", "startDate": "2024-06-18T22:41:27.089Z", "endDate": "2023-09-28T10:30:24.825Z", "timeZone": "Africa/Brazzaville", "customCPAClickWeight": 1420.08, "customCPAViewthroughWeight": 3419.03, "customCPAType": "Disabled", "impressionsOnlyBudgetingCpm": null, "primaryChannel": "Display", "primaryGoal": "", "seedId": "", "conversionReportingColumnsCount": 10946, "flights": [{"id": "", "startDateInclusiveUTC": "2024-06-26T03:24:17.236Z", "endDateExclusiveUTC": "2025-07-01T04:11:25.573Z", "budgetInAdvertiserCurrency": 6644.31, "budgetInImpressions": 164310, "dailyTargetInAdvertiserCurrency": 4555.64, "dailyTargetInImpressions": null}], "secondaryGoal": null, "tertiaryGoal": ""}, "adGroups": [{"id": "", "name": null, "campaignId": "", "isEnabled": false, "description": "er palatable clonk against noon blacken though", "programmaticGuaranteedPrivateContractId": "", "channel": "Display", "funnelLocation": "None", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 4400.5, "budgetInImpressions": 252235, "dailyTargetInAdvertiserCurrency": 3360.49, "dailyTargetInImpressions": 82960}, "baseBidCPMInAdvertiserCurrency": 4115.19, "maxBidCPMInAdvertiserCurrency": 9043, "marketType": "OpenMarket", "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": false, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [706430], "recencyExclusionWindowInMinutes": 773547, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": false}, "roiGoal": {"maximizeReach": null, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 8439.61, "ctrInPercent": 3120.58, "nielsenOTPInPercent": 7464.3, "cpaInAdvertiserCurrency": 6205.02, "returnOnAdSpendPercent": 9077.31, "vcrInPercent": 9134.53, "viewabilityInPercent": 7809.01, "vcpmInAdvertiserCurrency": null, "cpcvInAdvertiserCurrency": 9297.05, "miaozhenOTPInPercent": 330.19, "The product scope for New Buyer goal optimization": 760468}, "creativeIds": ["", ""], "associatedBidLists": [], "flights": null, "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": true, "populationId": 34197, "demographicMemberIds": [], "mobileDemographicMemberIds": [172582, 373780]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [[], []], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "Site", "gender": "Female", "startAge": "FiftyFive", "endAge": "TwentyFour", "countries": [""]}}]} "400": application/json: {"type": "", "title": "", "status": 432346, "detail": "", "instance": ""} createCampaignsJob: speakeasy-default-create-campaigns-job: requestBody: - application/json: {"input": [{"primaryInput": {"description": null, "campaignGroupId": 657704, "timeZone": "America/North_Dakota/Center", "customCPAClickWeight": 9662.9, "customCPAViewthroughWeight": 3558.78, "customCPAType": "ClickViewthroughWeighting", "customRoasType": "CompositeWeighting", "impressionsOnlyBudgetingCpm": 4427.56, "endDateInUtc": "2023-12-21T01:12:20.772Z", "seedId": "", "campaignConversionReportingColumns": [{"trackingTagId": "", "includeInCustomCPA": false, "reportingColumnId": 356532, "ROASConfig": {"includeInCustomROAS": false, "customROASWeight": 1483.03, "customROASClickWeight": 5286.76, "customROASViewthroughWeight": 8906.82}, "productListReportingType": "Halo", "weight": null, "crossDeviceAttributionModelId": ""}], "isManagedByTTD": true, "secondaryGoal": {"maximizeReach": true, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 3558.78, "ctrInPercent": 2407.01, "nielsenOTPInPercent": 2349.25, "cpaInAdvertiserCurrency": 7778.32, "returnOnAdSpendPercent": 6752.02, "vcrInPercent": 5019.36, "viewabilityInPercent": 5781.75, "vcpmInAdvertiserCurrency": 1696.34, "cpcvInAdvertiserCurrency": 5609.2, "miaozhenOTPInPercent": 5842.09, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": false, "iqviaAudienceQualityIndexAndCostPerTarget": false, "crossixCostPerTarget": null, "NewBuyerTargetValue": 38368}, "tertiaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 6123.61, "ctrInPercent": 25.32, "nielsenOTPInPercent": 4889.32, "cpaInAdvertiserCurrency": 5258.8, "returnOnAdSpendPercent": 2553.01, "vcrInPercent": 1142.91, "viewabilityInPercent": 1152.77, "vcpmInAdvertiserCurrency": 6711.38, "cpcvInAdvertiserCurrency": 4528.37, "miaozhenOTPInPercent": 9833.69, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": false, "iqviaAudienceQualityIndexAndCostPerTarget": false, "crossixCostPerTarget": true, "NewBuyerTargetValue": 373225}, "advertiserId": "", "name": "", "customLabelNames": ["", "", ""], "primaryChannel": "NativeVideo", "primaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 25.32, "ctrInPercent": 4889.32, "nielsenOTPInPercent": 5258.8, "cpaInAdvertiserCurrency": 2553.01, "returnOnAdSpendPercent": 1142.91, "vcrInPercent": 1152.77, "viewabilityInPercent": 6711.38, "vcpmInAdvertiserCurrency": 4528.37, "cpcvInAdvertiserCurrency": 9833.69, "miaozhenOTPInPercent": 1951.58, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": null, "iqviaAudienceQualityIndexAndCostPerTarget": false, "crossixCostPerTarget": true, "NewBuyerTargetValue": 355878}, "startDateInUtc": "2025-09-26T21:06:42.946Z", "budget": {"pacingMode": "PaceAhead", "budgetInAdvertiserCurrency": 5501.96, "budgetInImpressions": 629784, "dailyTargetInAdvertiserCurrency": 2524.41, "dailyTargetInImpressions": 726807}, "campaignIncrementalReachSetting": {"iSpotReachSetting": {"id": 178346, "name": "", "isActive": true}, "realyticsReachSetting": {"id": 268786, "name": "", "isActive": false, "products": [{"id": 106975, "name": ""}], "realyticsEntertainmentInput": "TVS"}, "tvSquaredReachSetting": {"id": 772731, "name": "", "isActive": false}, "sambaAuReachSetting": {"id": 403863, "name": null, "isActive": true}}}, "advancedInput": {"purchaseOrderNumber": "", "flights": [{"startDateInclusiveUTC": "2024-09-20T06:04:19.345Z", "endDateExclusiveUTC": "2024-01-18T07:43:56.299Z", "budgetInAdvertiserCurrency": 8219.9, "budgetInImpressions": 76925, "dailyTargetInAdvertiserCurrency": 9309.03, "dailyTargetInImpressions": 152838}], "includeDefaultsFromAdvertiser": false, "passThroughFeeCard": {"startDateUtc": "2024-07-24T11:58:59.190Z", "passThroughFees": [{"type": "DataCostPercentage", "description": "sweetly absent fortunately forenenst earnest who solidly wherever step-mother", "amount": 2888.48}]}, "callerSource": "", "frequencyConfigs": [{"counterName": "", "frequencyCap": 234925, "frequencyGoal": 777832, "resetIntervalInMinutes": 629784}]}, "adGroups": [{"primaryInput": {"isEnabled": true, "description": "scenario dish gracefully through tame yahoo pension husband as atop", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 2283.06, "budgetInImpressions": 301691, "dailyTargetInAdvertiserCurrency": 9268.18, "dailyTargetInImpressions": 851470}, "baseBidCPMInAdvertiserCurrency": 694.78, "maxBidCPMInAdvertiserCurrency": 6084.4, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": false, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [497890, 566253], "recencyExclusionWindowInMinutes": 742665, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 9062.02, "ctrInPercent": 7192.99, "nielsenOTPInPercent": 2823.22, "cpaInAdvertiserCurrency": 3140.25, "returnOnAdSpendPercent": 6857.21, "vcrInPercent": 2704.73, "viewabilityInPercent": 2247.4, "vcpmInAdvertiserCurrency": 8383.69, "cpcvInAdvertiserCurrency": 4755.8, "miaozhenOTPInPercent": 4575.86}, "creativeIds": ["", ""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": false}], "name": "", "channel": "Display", "funnelLocation": "Awareness", "marketType": "PrivateMarketOnly", "programmaticGuaranteedPrivateContractId": "", "includeDefaultsFromCampaign": true}, "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": true, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": 559587, "demographicMemberIds": [139340, 129935], "mobileDemographicMemberIds": null}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasAudienceReachPercentageTierId"], []], "isUseClicksAsConversionsEnabled": false, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "None", "gender": "Female", "startAge": "ThirtyFive", "endAge": "TwentyFour", "countries": ["", ""]}, "newFrequencyConfigs": null, "inventoryTargeting": {"dealGroupIdsToInclude": [""], "dealGroupIdsToExclude": ["", "", ""], "dealIdsToExclude": [169634], "dealIdsToInclude": [356532, 584209], "includeDefaultOnDeals": true}, "isNonDecisioned": false, "includeDefaultsFromCampaign": true, "flights": [{"allocationType": "Maximum", "budgetInAdvertiserCurrency": 4838.47, "budgetInImpressions": 420224, "dailyTargetInAdvertiserCurrency": 1513.78, "dailyTargetInImpressions": 735500}]}}]}], "validateInputOnly": true, "callbackInput": {"callbackUrl": "https://impeccable-pick.com/", "callbackHeaders": {"key": ""}}} + application/json: {"input": [{"primaryInput": {"description": null, "campaignGroupId": 657704, "timeZone": "America/North_Dakota/Center", "customCPAClickWeight": 9662.9, "customCPAViewthroughWeight": 3558.78, "customCPAType": "ClickViewthroughWeighting", "customRoasType": "CompositeWeighting", "impressionsOnlyBudgetingCpm": 4427.56, "endDateInUtc": "2023-12-21T01:12:20.772Z", "seedId": "", "campaignConversionReportingColumns": [{"trackingTagId": "", "includeInCustomCPA": false, "reportingColumnId": 356532, "ROASConfig": {"includeInCustomROAS": false, "customROASWeight": 1483.03, "customROASClickWeight": 5286.76, "customROASViewthroughWeight": 8906.82}, "productListReportingType": "Halo", "weight": null, "crossDeviceAttributionModelId": ""}], "isManagedByTTD": true, "secondaryGoal": {"maximizeReach": true, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 3558.78, "ctrInPercent": 2407.01, "nielsenOTPInPercent": 2349.25, "cpaInAdvertiserCurrency": 7778.32, "returnOnAdSpendPercent": 6752.02, "vcrInPercent": 5019.36, "viewabilityInPercent": 5781.75, "vcpmInAdvertiserCurrency": 1696.34, "cpcvInAdvertiserCurrency": 5609.2, "miaozhenOTPInPercent": 5842.09, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": false, "iqviaAudienceQualityIndexAndCostPerTarget": false, "crossixCostPerTarget": null, "NewBuyerTargetValue": 38368}, "tertiaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 6123.61, "ctrInPercent": 25.32, "nielsenOTPInPercent": 4889.32, "cpaInAdvertiserCurrency": 5258.8, "returnOnAdSpendPercent": 2553.01, "vcrInPercent": 1142.91, "viewabilityInPercent": 1152.77, "vcpmInAdvertiserCurrency": 6711.38, "cpcvInAdvertiserCurrency": 4528.37, "miaozhenOTPInPercent": 9833.69, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": false, "iqviaAudienceQualityIndexAndCostPerTarget": false, "crossixCostPerTarget": true, "NewBuyerTargetValue": 373225}, "advertiserId": "", "name": "", "customLabelNames": ["", "", ""], "primaryChannel": "NativeVideo", "primaryGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 25.32, "ctrInPercent": 4889.32, "nielsenOTPInPercent": 5258.8, "cpaInAdvertiserCurrency": 2553.01, "returnOnAdSpendPercent": 1142.91, "vcrInPercent": 1152.77, "viewabilityInPercent": 6711.38, "vcpmInAdvertiserCurrency": 4528.37, "cpcvInAdvertiserCurrency": 9833.69, "miaozhenOTPInPercent": 1951.58, "iqviaAudienceQualityIndex": true, "crossixAudienceQualityIndex": null, "iqviaAudienceQualityIndexAndCostPerTarget": false, "crossixCostPerTarget": true, "NewBuyerTargetValue": 355878}, "startDateInUtc": "2025-09-26T21:06:42.946Z", "budget": {"pacingMode": "PaceAhead", "budgetInAdvertiserCurrency": 5501.96, "budgetInImpressions": 629784, "dailyTargetInAdvertiserCurrency": 2524.41, "dailyTargetInImpressions": 726807}, "campaignIncrementalReachSetting": {"iSpotReachSetting": {"id": 178346, "name": "", "isActive": true}, "realyticsReachSetting": {"id": 268786, "name": "", "isActive": false, "products": [{"id": 106975, "name": ""}], "realyticsEntertainmentInput": "TVS"}, "tvSquaredReachSetting": {"id": 772731, "name": "", "isActive": false}, "sambaAuReachSetting": {"id": 403863, "name": null, "isActive": true}}}, "advancedInput": {"purchaseOrderNumber": "", "flights": [{"startDateInclusiveUTC": "2024-09-20T06:04:19.345Z", "endDateExclusiveUTC": "2024-01-18T07:43:56.299Z", "budgetInAdvertiserCurrency": 8219.9, "budgetInImpressions": 76925, "dailyTargetInAdvertiserCurrency": 9309.03, "dailyTargetInImpressions": 152838}], "includeDefaultsFromAdvertiser": false, "passThroughFeeCard": {"startDateUtc": "2024-07-24T11:58:59.190Z", "passThroughFees": [{"type": "DataCostPercentage", "description": "sweetly absent fortunately forenenst earnest who solidly wherever step-mother", "amount": 2888.48}]}, "callerSource": "", "frequencyConfigs": [{"counterName": "", "frequencyCap": 234925, "frequencyGoal": 777832, "resetIntervalInMinutes": 629784}]}, "adGroups": [{"primaryInput": {"isEnabled": true, "description": "scenario dish gracefully through tame yahoo pension husband as atop", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 2283.06, "budgetInImpressions": 301691, "dailyTargetInAdvertiserCurrency": 9268.18, "dailyTargetInImpressions": 851470}, "baseBidCPMInAdvertiserCurrency": 694.78, "maxBidCPMInAdvertiserCurrency": 6084.4, "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": false, "audienceExcluderEnabled": true, "audiencePredictorEnabled": false, "crossDeviceVendorListForAudience": [497890, 566253], "recencyExclusionWindowInMinutes": 742665, "targetTrackableUsersEnabled": true, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": false, "maximizeLtvIncrementalReach": true, "cpcInAdvertiserCurrency": 9062.02, "ctrInPercent": 7192.99, "nielsenOTPInPercent": 2823.22, "cpaInAdvertiserCurrency": 3140.25, "returnOnAdSpendPercent": 6857.21, "vcrInPercent": 2704.73, "viewabilityInPercent": 2247.4, "vcpmInAdvertiserCurrency": 8383.69, "cpcvInAdvertiserCurrency": 4755.8, "miaozhenOTPInPercent": 4575.86, "The product scope for New Buyer goal optimization": 657704}, "creativeIds": ["", ""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": false}], "name": "", "channel": "Display", "funnelLocation": "Awareness", "marketType": "PrivateMarketOnly", "programmaticGuaranteedPrivateContractId": "", "includeDefaultsFromCampaign": true}, "advancedInput": {"koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": true, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": 559587, "demographicMemberIds": [139340, 129935], "mobileDemographicMemberIds": null}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasAudienceReachPercentageTierId"], []], "isUseClicksAsConversionsEnabled": false, "isUseSecondaryConversionsEnabled": true, "nielsenTrackingAttributes": {"enhancedReportingOption": "None", "gender": "Female", "startAge": "ThirtyFive", "endAge": "TwentyFour", "countries": ["", ""]}, "newFrequencyConfigs": null, "inventoryTargeting": {"dealGroupIdsToInclude": [""], "dealGroupIdsToExclude": ["", "", ""], "dealIdsToExclude": [169634], "dealIdsToInclude": [356532, 584209], "includeDefaultOnDeals": true}, "isNonDecisioned": false, "includeDefaultsFromCampaign": true, "flights": [{"allocationType": "Maximum", "budgetInAdvertiserCurrency": 4838.47, "budgetInImpressions": 420224, "dailyTargetInAdvertiserCurrency": 1513.78, "dailyTargetInImpressions": 735500}]}}]}], "validateInputOnly": true, "callbackInput": {"callbackUrl": "https://impeccable-pick.com/", "callbackHeaders": {"key": ""}}} responses: "202": application/json: {"id": 400815} @@ -2102,7 +2074,7 @@ examples: "400": application/json: {"type": "", "title": "", "status": 182997, "detail": "", "instance": ""} "200": - application/json: {"campaign": {"id": "", "name": "", "campaignGroupId": 201033, "description": "saloon yesterday artistic doing esteemed that over apt partially", "startDate": "2023-02-25T02:45:30.882Z", "endDate": "2025-07-05T10:58:57.755Z", "timeZone": "Asia/Barnaul", "customCPAClickWeight": 7722.13, "customCPAViewthroughWeight": 1971.14, "customCPAType": "PixelWeighting", "impressionsOnlyBudgetingCpm": 6514.48, "primaryChannel": "NativeVideo", "primaryGoal": "", "seedId": "", "conversionReportingColumnsCount": 434209, "flights": [{"id": "", "startDateInclusiveUTC": "2025-06-05T22:25:11.463Z", "endDateExclusiveUTC": "2023-01-11T11:01:46.801Z", "budgetInAdvertiserCurrency": 81.58, "budgetInImpressions": 678490, "dailyTargetInAdvertiserCurrency": 2260.69, "dailyTargetInImpressions": 945903}], "secondaryGoal": null, "tertiaryGoal": ""}, "adGroups": [{"id": "", "name": "", "campaignId": "", "isEnabled": false, "description": "unabashedly analyse gladly convalesce ascertain", "programmaticGuaranteedPrivateContractId": "", "channel": "NativeDisplay", "funnelLocation": "Conversion", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 8509.65, "budgetInImpressions": 559602, "dailyTargetInAdvertiserCurrency": 6000.32, "dailyTargetInImpressions": 480090}, "baseBidCPMInAdvertiserCurrency": 7022.03, "maxBidCPMInAdvertiserCurrency": 3492.85, "marketType": "Marketplace", "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": true, "crossDeviceVendorListForAudience": null, "recencyExclusionWindowInMinutes": 641872, "targetTrackableUsersEnabled": false, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": true, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 8789.29, "ctrInPercent": 6097.83, "nielsenOTPInPercent": 97.94, "cpaInAdvertiserCurrency": 4920.96, "returnOnAdSpendPercent": 6036.6, "vcrInPercent": 7367.66, "viewabilityInPercent": 5682.26, "vcpmInAdvertiserCurrency": 2158.66, "cpcvInAdvertiserCurrency": 2909.06, "miaozhenOTPInPercent": null}, "creativeIds": ["", "", ""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": false}], "flights": [{"allocationType": "Fixed", "budgetInAdvertiserCurrency": 9067.5, "budgetInImpressions": 116224, "dailyTargetInAdvertiserCurrency": 5091.83, "dailyTargetInImpressions": 932776, "campaignFlightId": 942771, "adGroupId": ""}], "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": 784781, "demographicMemberIds": [], "mobileDemographicMemberIds": [138240, 326531]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasSellerId"], []], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Male", "startAge": "SixtyFive", "endAge": "Twenty", "countries": ["", "", ""]}}]} + application/json: {"campaign": {"id": "", "name": "", "campaignGroupId": 201033, "description": "saloon yesterday artistic doing esteemed that over apt partially", "startDate": "2023-02-25T02:45:30.882Z", "endDate": "2025-07-05T10:58:57.755Z", "timeZone": "Asia/Barnaul", "customCPAClickWeight": 7722.13, "customCPAViewthroughWeight": 1971.14, "customCPAType": "PixelWeighting", "impressionsOnlyBudgetingCpm": 6514.48, "primaryChannel": "NativeVideo", "primaryGoal": "", "seedId": "", "conversionReportingColumnsCount": 434209, "flights": [{"id": "", "startDateInclusiveUTC": "2025-06-05T22:25:11.463Z", "endDateExclusiveUTC": "2023-01-11T11:01:46.801Z", "budgetInAdvertiserCurrency": 81.58, "budgetInImpressions": 678490, "dailyTargetInAdvertiserCurrency": 2260.69, "dailyTargetInImpressions": 945903}], "secondaryGoal": null, "tertiaryGoal": ""}, "adGroups": [{"id": "", "name": "", "campaignId": "", "isEnabled": false, "description": "unabashedly analyse gladly convalesce ascertain", "programmaticGuaranteedPrivateContractId": "", "channel": "NativeDisplay", "funnelLocation": "Conversion", "budget": {"allocationType": "Maximum", "budgetInAdvertiserCurrency": 8509.65, "budgetInImpressions": 559602, "dailyTargetInAdvertiserCurrency": 6000.32, "dailyTargetInImpressions": 480090}, "baseBidCPMInAdvertiserCurrency": 7022.03, "maxBidCPMInAdvertiserCurrency": 3492.85, "marketType": "Marketplace", "audienceTargeting": {"audienceId": "", "audienceAcceleratorExclusionsEnabled": true, "audienceBoosterEnabled": true, "audienceExcluderEnabled": true, "audiencePredictorEnabled": true, "crossDeviceVendorListForAudience": null, "recencyExclusionWindowInMinutes": 641872, "targetTrackableUsersEnabled": false, "useMcIdAsPrimary": true}, "roiGoal": {"maximizeReach": true, "maximizeLtvIncrementalReach": false, "cpcInAdvertiserCurrency": 8789.29, "ctrInPercent": 6097.83, "nielsenOTPInPercent": 97.94, "cpaInAdvertiserCurrency": 4920.96, "returnOnAdSpendPercent": 6036.6, "vcrInPercent": 7367.66, "viewabilityInPercent": 5682.26, "vcpmInAdvertiserCurrency": 2158.66, "cpcvInAdvertiserCurrency": 2909.06, "miaozhenOTPInPercent": null, "The product scope for New Buyer goal optimization": 645576}, "creativeIds": ["", "", ""], "associatedBidLists": [{"bidListId": "", "isEnabled": true, "isDefaultForDimension": false}], "flights": [{"allocationType": "Fixed", "budgetInAdvertiserCurrency": 9067.5, "budgetInImpressions": 116224, "dailyTargetInAdvertiserCurrency": 5091.83, "dailyTargetInImpressions": 932776, "campaignFlightId": 942771, "adGroupId": ""}], "koaOptimizationSettings": {"areFutureKoaFeaturesEnabled": false, "predictiveClearingEnabled": false}, "comscoreSettings": {"isEnabled": false, "populationId": 784781, "demographicMemberIds": [], "mobileDemographicMemberIds": [138240, 326531]}, "contractTargeting": {"allowOpenMarketBiddingWhenTargetingContracts": true}, "dimensionalBiddingAutoOptimizationSettings": [["HasSellerId"], []], "isUseClicksAsConversionsEnabled": true, "isUseSecondaryConversionsEnabled": false, "nielsenTrackingAttributes": {"enhancedReportingOption": "Audience", "gender": "Male", "startAge": "SixtyFive", "endAge": "Twenty", "countries": ["", "", ""]}}]} archiveCampaigns: speakeasy-default-archive-campaigns: parameters: @@ -2213,6 +2185,7 @@ examples: application/json: {"type": "", "title": "", "status": 603376, "detail": "", "instance": ""} examplesVersion: 1.0.2 generatedTests: {} +releaseNotes: "## Java SDK Changes:\n* `workflows.adGroup.createAdGroup()`: \n * `request` **Changed** (Breaking ⚠️)\n * `response.adGroup` **Changed** (Breaking ⚠️)\n* `workflows.adGroup.updateAdGroup()`: \n * `request` **Changed** (Breaking ⚠️)\n * `response.adGroup` **Changed** (Breaking ⚠️)\n* `workflows.adGroup.createAdGroupsJob()`: \n * `request.input[]` **Changed** (Breaking ⚠️)\n* `workflows.adGroup.updateAdGroupsJob()`: \n * `request.input[]` **Changed** (Breaking ⚠️)\n* `workflows.campaign.create()`: \n * `request.adGroups[]` **Changed** (Breaking ⚠️)\n * `response.adGroups[]` **Changed** (Breaking ⚠️)\n* `workflows.campaign.updateCampaign()`: `response.adGroups[]` **Changed** (Breaking ⚠️)\n* `workflows.campaign.createCampaignsJob()`: \n * `request.input[].adGroups[]` **Changed** (Breaking ⚠️)\n* `workflows.campaign.updateCampaignsJob()`: `response.adGroups[]` **Changed** (Breaking ⚠️)\n" generatedFiles: - .gitattributes - USAGE.md diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 78b123f..94cdd1e 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -29,7 +29,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false java: - version: 0.13.2 + version: 0.13.3 additionalDependencies: [] additionalPlugins: [] artifactID: workflows diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 34dc05b..efe35b4 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.761.9 +speakeasyVersion: 1.784.0 sources: Workflows API: sourceNamespace: workflows-api - sourceRevisionDigest: sha256:95b72b09e864fcd1c2564c1cb1bbef8593c806300dc07447a71606ac7c5d8523 - sourceBlobDigest: sha256:c1d976784f2ca4c350a7afcc39cc3def833951dc4892326abde842531c7df47f + sourceRevisionDigest: sha256:de345b4eaf5a9ee64d56dc20846076b0f815a3a24da9e385d84238003d895037 + sourceBlobDigest: sha256:debfb845bbc7bd6a806d012674b5edcbdce5d178c256cc86112ba57021339c5c tags: - latest - v1 @@ -11,10 +11,10 @@ targets: ttd-workflows: source: Workflows API sourceNamespace: workflows-api - sourceRevisionDigest: sha256:95b72b09e864fcd1c2564c1cb1bbef8593c806300dc07447a71606ac7c5d8523 - sourceBlobDigest: sha256:c1d976784f2ca4c350a7afcc39cc3def833951dc4892326abde842531c7df47f + sourceRevisionDigest: sha256:de345b4eaf5a9ee64d56dc20846076b0f815a3a24da9e385d84238003d895037 + sourceBlobDigest: sha256:debfb845bbc7bd6a806d012674b5edcbdce5d178c256cc86112ba57021339c5c codeSamplesNamespace: workflows-api-java-code-samples - codeSamplesRevisionDigest: sha256:64a01e4ed48262c44892c110323d24ef07dc1346108c3bdfbc3cc78458e0cb9d + codeSamplesRevisionDigest: sha256:89fa203c58bb0fed6cf75cd03410a05a0c026e3906591e0bdbebeb03e8d11553 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index 0778dc9..ac66d76 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ The samples below show how a published SDK artifact is used: Gradle: ```groovy -implementation 'com.thetradedesk:workflows:0.13.2' +implementation 'com.thetradedesk:workflows:0.13.3' ``` Maven: @@ -65,7 +65,7 @@ Maven: com.thetradedesk workflows - 0.13.2 + 0.13.3 ``` @@ -593,6 +593,7 @@ public class Application { .vcpmInAdvertiserCurrency(4649.53) .cpcvInAdvertiserCurrency(313.95) .miaozhenOTPInPercent(4704.1) + .theProductScopeForNewBuyerGoalOptimization(785382) .build()) .creativeIds(JsonNullable.of(null)) .associatedBidLists(List.of( @@ -805,6 +806,7 @@ public class Application { .vcpmInAdvertiserCurrency(4649.53) .cpcvInAdvertiserCurrency(313.95) .miaozhenOTPInPercent(4704.1) + .theProductScopeForNewBuyerGoalOptimization(785382) .build()) .creativeIds(JsonNullable.of(null)) .associatedBidLists(List.of( @@ -986,6 +988,7 @@ public class Application { .vcpmInAdvertiserCurrency(4649.53) .cpcvInAdvertiserCurrency(313.95) .miaozhenOTPInPercent(4704.1) + .theProductScopeForNewBuyerGoalOptimization(785382) .build()) .creativeIds(JsonNullable.of(null)) .associatedBidLists(List.of( @@ -1166,6 +1169,7 @@ public class Application { .vcpmInAdvertiserCurrency(4649.53) .cpcvInAdvertiserCurrency(313.95) .miaozhenOTPInPercent(4704.1) + .theProductScopeForNewBuyerGoalOptimization(785382) .build()) .creativeIds(JsonNullable.of(null)) .associatedBidLists(List.of( @@ -1391,6 +1395,7 @@ public class Application { .vcpmInAdvertiserCurrency(4649.53) .cpcvInAdvertiserCurrency(313.95) .miaozhenOTPInPercent(4704.1) + .theProductScopeForNewBuyerGoalOptimization(785382) .build()) .creativeIds(JsonNullable.of(null)) .associatedBidLists(List.of( @@ -1552,6 +1557,7 @@ public class Application { .vcpmInAdvertiserCurrency(4649.53) .cpcvInAdvertiserCurrency(313.95) .miaozhenOTPInPercent(4704.1) + .theProductScopeForNewBuyerGoalOptimization(785382) .build()) .creativeIds(JsonNullable.of(null)) .associatedBidLists(List.of( diff --git a/RELEASES.md b/RELEASES.md index a5af438..e35d34f 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -228,4 +228,14 @@ Based on: ### Generated - [java v0.13.2] . ### Releases -- [Maven Central v0.13.2] https://central.sonatype.com/artifact/com.thetradedesk/workflows/0.13.2 - . \ No newline at end of file +- [Maven Central v0.13.2] https://central.sonatype.com/artifact/com.thetradedesk/workflows/0.13.2 - . + +## 2026-06-20 03:30:01 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.784.0 (2.911.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [java v0.13.3] . +### Releases +- [Maven Central v0.13.3] https://central.sonatype.com/artifact/com.thetradedesk/workflows/0.13.3 - . \ No newline at end of file diff --git a/USAGE.md b/USAGE.md index d25163f..7de98f2 100644 --- a/USAGE.md +++ b/USAGE.md @@ -60,6 +60,7 @@ public class Application { .vcpmInAdvertiserCurrency(4649.53) .cpcvInAdvertiserCurrency(313.95) .miaozhenOTPInPercent(4704.1) + .theProductScopeForNewBuyerGoalOptimization(785382) .build()) .creativeIds(JsonNullable.of(null)) .associatedBidLists(List.of( diff --git a/build.gradle b/build.gradle index ec58324..36e5b29 100644 --- a/build.gradle +++ b/build.gradle @@ -16,7 +16,6 @@ plugins { id 'signing' // V2 publishing plugin (Sonatype Central Portal) id 'cl.franciscosolis.sonatype-central-upload' version '1.0.3' - id "io.spring.dependency-management" version "1.1.6" apply false } compileJava.options.encoding = "UTF-8" @@ -85,47 +84,6 @@ dependencies { api 'org.reactivestreams:reactive-streams:1.0.4' } -ext { - springBootVersion = '2.7.18' -} - -subprojects { - if (name in [ - 'workflows-spring-boot-autoconfigure', - 'workflows-spring-boot-starter' - ]) { - // Ensure subprojects use the same group and version as root project - group = rootProject.group - version = rootProject.version - - apply { - plugin "java-library" - plugin "io.spring.dependency-management" - plugin "maven-publish" - plugin "signing" - plugin "cl.franciscosolis.sonatype-central-upload" - } - dependencyManagement { - imports { - mavenBom "org.springframework.boot:spring-boot-dependencies:${rootProject.springBootVersion}" - } - } - repositories { - mavenCentral() - } - java { - withSourcesJar() - withJavadocJar() - } - tasks.withType(JavaCompile).configureEach { - options.release = 11 - } - - // Apply publishing configuration to all subprojects - they'll check for publishingConfig internally - apply from: rootProject.file('publishing.gradle') - } -} - ext { publishingConfig = [ groupId: group, diff --git a/docs/models/components/AdGroupROIGoal.md b/docs/models/components/AdGroupROIGoal.md index 640ed56..0c21ff2 100644 --- a/docs/models/components/AdGroupROIGoal.md +++ b/docs/models/components/AdGroupROIGoal.md @@ -3,17 +3,18 @@ ## Fields -| Field | Type | Required | Description | -| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | -| `maximizeReach` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `maximizeLtvIncrementalReach` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `cpcInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `ctrInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `nielsenOTPInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `cpaInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `returnOnAdSpendPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `vcrInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `viewabilityInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `vcpmInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `cpcvInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `miaozhenOTPInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| `maximizeReach` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `maximizeLtvIncrementalReach` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `cpcInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `ctrInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `nielsenOTPInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `cpaInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `returnOnAdSpendPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `vcrInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `viewabilityInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `vcpmInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `cpcvInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `miaozhenOTPInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `theProductScopeForNewBuyerGoalOptimization` | *JsonNullable\* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/AdGroupWorkflowROIGoalInput.md b/docs/models/components/AdGroupWorkflowROIGoalInput.md index 8a4f0ee..325bb9d 100644 --- a/docs/models/components/AdGroupWorkflowROIGoalInput.md +++ b/docs/models/components/AdGroupWorkflowROIGoalInput.md @@ -3,17 +3,18 @@ ## Fields -| Field | Type | Required | Description | -| ----------------------------- | ----------------------------- | ----------------------------- | ----------------------------- | -| `maximizeReach` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `maximizeLtvIncrementalReach` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `cpcInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `ctrInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `nielsenOTPInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `cpaInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `returnOnAdSpendPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `vcrInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `viewabilityInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `vcpmInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `cpcvInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | -| `miaozhenOTPInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | -------------------------------------------- | +| `maximizeReach` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `maximizeLtvIncrementalReach` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `cpcInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `ctrInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `nielsenOTPInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `cpaInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `returnOnAdSpendPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `vcrInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `viewabilityInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `vcpmInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `cpcvInAdvertiserCurrency` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `miaozhenOTPInPercent` | *JsonNullable\* | :heavy_minus_sign: | N/A | +| `theProductScopeForNewBuyerGoalOptimization` | *JsonNullable\* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/components/DimensionalBiddingDimensions.md b/docs/models/components/DimensionalBiddingDimensions.md index 246c0f6..f1b5e02 100644 --- a/docs/models/components/DimensionalBiddingDimensions.md +++ b/docs/models/components/DimensionalBiddingDimensions.md @@ -17,7 +17,6 @@ DimensionalBiddingDimensions value = DimensionalBiddingDimensions.UNKNOWN_DIMENS | `HAS_AD_FORMAT_ID` | HasAdFormatId | | `HAS_DOMAIN_FRAGMENT_ID` | HasDomainFragmentId | | `HAS_UNIVERSAL_CATEGORY_TAXONOMY_ID` | HasUniversalCategoryTaxonomyId | -| `HAS_PLACEMENT_POSITION_RELATIVE_TO_FOLD_ID` | HasPlacementPositionRelativeToFoldId | | `HAS_ADVERTISER_TARGETING_DATA_ID` | HasAdvertiserTargetingDataId | | `HAS_BROWSER_ID` | HasBrowserId | | `HAS_CARRIER_ID` | HasCarrierId | diff --git a/docs/sdks/adgroup/README.md b/docs/sdks/adgroup/README.md index 74299be..c9a46bd 100644 --- a/docs/sdks/adgroup/README.md +++ b/docs/sdks/adgroup/README.md @@ -78,6 +78,7 @@ public class Application { .vcpmInAdvertiserCurrency(4649.53) .cpcvInAdvertiserCurrency(313.95) .miaozhenOTPInPercent(4704.1) + .theProductScopeForNewBuyerGoalOptimization(785382) .build()) .creativeIds(JsonNullable.of(null)) .associatedBidLists(List.of( @@ -258,6 +259,7 @@ public class Application { .vcpmInAdvertiserCurrency(1135.94) .cpcvInAdvertiserCurrency(6372.45) .miaozhenOTPInPercent(8405.28) + .theProductScopeForNewBuyerGoalOptimization(93512) .build()) .creativeIds(List.of( "", @@ -562,6 +564,7 @@ public class Application { .vcpmInAdvertiserCurrency(8251.2) .cpcvInAdvertiserCurrency(4502.77) .miaozhenOTPInPercent(2362.43) + .theProductScopeForNewBuyerGoalOptimization(901233) .build()) .creativeIds(List.of( "")) diff --git a/docs/sdks/campaign/README.md b/docs/sdks/campaign/README.md index 149cd3d..5b25183 100644 --- a/docs/sdks/campaign/README.md +++ b/docs/sdks/campaign/README.md @@ -235,6 +235,7 @@ public class Application { .vcpmInAdvertiserCurrency(7123.95) .cpcvInAdvertiserCurrency(6233.72) .miaozhenOTPInPercent(8437.22) + .theProductScopeForNewBuyerGoalOptimization(86586) .build()) .creativeIds(List.of( "")) @@ -723,6 +724,7 @@ public class Application { .vcpmInAdvertiserCurrency(8383.69) .cpcvInAdvertiserCurrency(4755.8) .miaozhenOTPInPercent(4575.86) + .theProductScopeForNewBuyerGoalOptimization(657704) .build()) .creativeIds(List.of( "", diff --git a/gradle.properties b/gradle.properties index 508a15d..1ca543e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ groupId=com.thetradedesk artifactId=workflows -version=0.13.2 +version=0.13.3 org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g diff --git a/settings.gradle b/settings.gradle index c7811fb..2d9c410 100644 --- a/settings.gradle +++ b/settings.gradle @@ -9,12 +9,6 @@ rootProject.name = 'workflows' -include 'workflows-spring-boot-autoconfigure' -include 'workflows-spring-boot-starter' - -project(':workflows-spring-boot-autoconfigure').projectDir = file('spring/workflows-spring-boot-autoconfigure') -project(':workflows-spring-boot-starter').projectDir = file('spring/workflows-spring-boot-starter') - // Apply additional settings if the file exists if (file('settings-extra.gradle').exists()) { apply from: 'settings-extra.gradle' diff --git a/spring/workflows-spring-boot-autoconfigure/build.gradle b/spring/workflows-spring-boot-autoconfigure/build.gradle deleted file mode 100644 index 46d0745..0000000 --- a/spring/workflows-spring-boot-autoconfigure/build.gradle +++ /dev/null @@ -1,35 +0,0 @@ -description = 'ttd-workflows Spring Boot Auto Configuration' - -// Publishing configuration overrides -ext { - publishingConfig = [ - groupId: rootProject.group, - artifactId: 'workflows-spring-boot-autoconfigure', - version: rootProject.version, - name: 'The Trade Desk Java SDK - Spring Boot Auto Configuration', - description: 'Spring Boot auto-configuration for the The Trade Desk Java SDK.', - ] -} - -dependencies { - api project(':') - implementation 'org.springframework.boot:spring-boot-autoconfigure' - annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' -} - -test { - useJUnitPlatform() -} - -jar { - dependsOn 'generatePomFileForMavenPublication' - archiveBaseName = 'workflows-spring-boot-autoconfigure' - into("META-INF/maven/com.thetradedesk/workflows-spring-boot-autoconfigure") { - from(layout.buildDirectory.file("pom.xml")) { - // Only include if it exists to avoid build ordering issues - duplicatesStrategy = DuplicatesStrategy.INCLUDE - } - } -} \ No newline at end of file diff --git a/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/ConditionalOnPropertyPrefix.java b/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/ConditionalOnPropertyPrefix.java deleted file mode 100644 index af1050b..0000000 --- a/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/ConditionalOnPropertyPrefix.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ -package com.thetradedesk.workflows; - -import org.springframework.context.annotation.Conditional; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Conditional annotation that matches when any properties exist under the specified prefix. - * This is useful for conditionally creating beans only when configuration properties - * are present under a specific prefix. - * - *

Example usage: - *

- * @Bean
- * @ConditionalOnPropertyPrefix(prefix = "myapp.security")
- * public SecuritySource securitySource() {
- *     // This bean will only be created if properties like myapp.security.* exist
- * }
- * 
- */ -@Target({ ElementType.TYPE, ElementType.METHOD }) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@Conditional(OnPropertyPrefixCondition.class) -public @interface ConditionalOnPropertyPrefix { - - /** - * The property prefix to check for. Properties starting with this prefix - * (followed by a dot) will be considered when determining if the condition matches. - * - * @return the property prefix - */ - String prefix(); -} \ No newline at end of file diff --git a/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/OnPropertyPrefixCondition.java b/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/OnPropertyPrefixCondition.java deleted file mode 100644 index d138656..0000000 --- a/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/OnPropertyPrefixCondition.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ -package com.thetradedesk.workflows; - -import org.springframework.boot.autoconfigure.condition.ConditionMessage; -import org.springframework.boot.autoconfigure.condition.ConditionOutcome; -import org.springframework.boot.autoconfigure.condition.SpringBootCondition; -import org.springframework.boot.context.properties.bind.Binder; -import org.springframework.context.annotation.ConditionContext; -import org.springframework.core.type.AnnotatedTypeMetadata; -import org.springframework.core.env.Environment; - -import java.util.Map; - -/** - * Custom condition that checks if any properties exist under a given prefix. - * This is used to conditionally create beans only when configuration properties - * are present under a specific prefix. - */ -public class OnPropertyPrefixCondition extends SpringBootCondition { - - /** - * Default constructor for OnPropertyPrefixCondition. - */ - public OnPropertyPrefixCondition() { - // Default constructor - } - - @Override - public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) { - Map attributes = metadata.getAnnotationAttributes(ConditionalOnPropertyPrefix.class.getName()); - if (attributes == null) { - return ConditionOutcome.noMatch("@ConditionalOnPropertyPrefix annotation not found"); - } - - String prefix = (String) attributes.get("prefix"); - if (prefix == null || prefix.isEmpty()) { - return ConditionOutcome.noMatch("Property prefix is empty"); - } - - Environment environment = context.getEnvironment(); - - // Check if any properties exist under the given prefix - boolean hasPropertiesUnderPrefix = hasPropertiesWithPrefix(environment, prefix); - - ConditionMessage.Builder message = ConditionMessage.forCondition(ConditionalOnPropertyPrefix.class, prefix); - - if (hasPropertiesUnderPrefix) { - return ConditionOutcome.match(message.found("properties").items(prefix + ".*")); - } else { - return ConditionOutcome.noMatch(message.didNotFind("properties").items(prefix + ".*")); - } - } - - private boolean hasPropertiesWithPrefix(Environment environment, String prefix) { - try { - // Use Spring Boot's Binder to check if any properties exist under the prefix - Binder binder = Binder.get(environment); - - // Try to bind to a Map to see if any properties exist under the prefix - return binder.bind(prefix, Map.class).isBound(); - } catch (Exception e) { - // If we can't determine, assume no properties exist - return false; - } - } -} \ No newline at end of file diff --git a/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfig.java b/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfig.java deleted file mode 100644 index a11d62b..0000000 --- a/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfig.java +++ /dev/null @@ -1,370 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ -package com.thetradedesk.workflows; - -import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import java.util.concurrent.TimeUnit; - -import com.thetradedesk.workflows.utils.BackoffStrategy; -import com.thetradedesk.workflows.utils.HTTPClient; -import com.thetradedesk.workflows.utils.RetryConfig; -import com.thetradedesk.workflows.utils.SpeakeasyHTTPClient; -import java.lang.IllegalStateException; -import java.lang.String; -import java.lang.System; -import java.util.Optional; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.function.Consumer; - - -/** - * Spring Boot Auto Configuration for ttd-workflows SDK - * This configuration class automatically configures the ttd-workflows SDK - * when Spring Boot detects it on the classpath. - */ -@AutoConfiguration -@ConditionalOnClass(Workflows.class) -@EnableConfigurationProperties(WorkflowsAutoConfigProperties.class) -public class WorkflowsAutoConfig { - - /** - * Constructor. - */ - public WorkflowsAutoConfig() { - } - - /** - * Creates a RetryConfig bean from properties if retry is enabled. - * - * @param properties the configuration properties - * @return A configured RetryConfig instance - */ - @Bean - @ConditionalOnMissingBean - @ConditionalOnProperty(prefix = "workflows.retry-config", name = "strategy") - public RetryConfig retryConfig(WorkflowsAutoConfigProperties properties) { - WorkflowsAutoConfigProperties.RetryConfig retryProps = properties.getRetryConfig(); - - if (RetryConfig.Strategy.BACKOFF.equals(retryProps.getStrategy())) { - WorkflowsAutoConfigProperties.RetryConfig.Backoff backoff = retryProps.getBackoff(); - return RetryConfig.builder() - .backoff( - BackoffStrategy.builder() - .initialInterval(backoff.getInitialInterval().toMillis(), TimeUnit.MILLISECONDS) - .maxInterval(backoff.getMaxInterval().toMillis(), TimeUnit.MILLISECONDS) - .maxElapsedTime(backoff.getMaxElapsedTime().toMillis(), TimeUnit.MILLISECONDS) - .baseFactor(backoff.getBaseFactor()) - .jitterFactor(backoff.getJitterFactor()) - .retryConnectError(backoff.isRetryConnectError()) - .retryReadTimeoutError(backoff.isRetryReadTimeoutError()) - .build() - ) - .build(); - } - - // Default retry config for other strategies - return RetryConfig.builder().build(); - } - /** - * Creates a {@code Consumer} bean for HTTP debug logging if none exists. - * This logger is used by the SpeakeasyHTTPClient for debug output when debug logging is enabled. - * By default, it logs to {@code System.out}, but can be customized by providing your own {@code Consumer} bean. - * - * @return A {@code Consumer} that logs messages to {@code System.out} - */ - @Bean - @ConditionalOnMissingBean - public Consumer httpLogger() { - return System.out::println; - } - /** - * Creates an HTTPClient bean if none exists. - * - * @param properties the configuration properties - * @param httpLogger the logger for HTTP debug output - * @return A configured HTTPClient instance - */ - @Bean - @ConditionalOnMissingBean - public HTTPClient httpClient(WorkflowsAutoConfigProperties properties, Consumer httpLogger) { - WorkflowsAutoConfigProperties.HttpClient httpClientProps = properties.getHttpClient(); - - // Configure the static logger - SpeakeasyHTTPClient.setLogger(httpLogger); - - if (httpClientProps != null) { - // Configure debug logging - SpeakeasyHTTPClient.setDebugLogging(httpClientProps.isEnableDebugLogging()); - - // Configure redacted headers - if (httpClientProps.getRedactedHeaders() != null && !httpClientProps.getRedactedHeaders().isEmpty()) { - SpeakeasyHTTPClient.setRedactedHeaders(httpClientProps.getRedactedHeaders()); - } - } - - return new SpeakeasyHTTPClient(); - } - /** - * Creates a SecuritySource bean if none exists and security properties are configured. - * - * @param properties the configuration properties - * @return A configured SecuritySource instance - */ - @Bean - @ConditionalOnMissingBean - @ConditionalOnPropertyPrefix(prefix = "workflows.security") - public SecuritySource securitySource(WorkflowsAutoConfigProperties properties) {WorkflowsAutoConfigProperties.Security securityProps = properties.getSecurity(); - com.thetradedesk.workflows.models.components.Security.Builder securityBuilder = com.thetradedesk.workflows.models.components.Security.builder(); - boolean hasAnySecurityConfiguration = false; - // Build TTD-Auth security from direct properties (primitive value) - if (securityProps.getTTDAuth() != null) { - securityBuilder.ttdAuth(securityProps.getTTDAuth()); - hasAnySecurityConfiguration = true; - } - - if (!hasAnySecurityConfiguration) { - throw new IllegalStateException("Security configuration is present but no security options are configured. " + - "Please configure at least one security option in your application properties."); - } - - return SecuritySource.of(securityBuilder.build()); - } - - /** - * Creates the SDKConfiguration bean as the single source of truth for all SDK configuration. - * - * @param properties the configuration properties - * @param httpClient the HTTP client bean - * @param hooks the hooks bean - * @param asyncHooks the async hooks bean - * @param securitySource the security source bean (optional) - * @param retryConfig the retry config bean (optional) - * @return A configured SDKConfiguration instance - */ - @Bean - @ConditionalOnMissingBean - public SDKConfiguration sdkConfiguration( - WorkflowsAutoConfigProperties properties, - HTTPClient httpClient, - com.thetradedesk.workflows.utils.Hooks hooks, - com.thetradedesk.workflows.utils.AsyncHooks asyncHooks, - SecuritySource securitySource, - Optional retryConfig) { - - SDKConfiguration sdkConfiguration = new SDKConfiguration(); - - sdkConfiguration.setClient(httpClient); - - sdkConfiguration.setHooks(hooks); - sdkConfiguration.setAsyncHooks(asyncHooks); - sdkConfiguration.setSecuritySource(securitySource); - - if (properties.getServerUrl() != null) { - sdkConfiguration.setServerUrl(properties.getServerUrl()); - } - if (properties.getServer() != null) { - sdkConfiguration.setServer(properties.getServer()); - } - - sdkConfiguration.setRetryConfig(retryConfig); - - return sdkConfiguration; - } - - /** - * Creates the main SDK bean using the configured SDKConfiguration. - * - * @param sdkConfiguration the configured SDKConfiguration bean - * @return A configured Workflows instance - */ - @Bean - @ConditionalOnMissingBean - public Workflows workflows(SDKConfiguration sdkConfiguration) { - return new Workflows(sdkConfiguration); - } - - /** - * Creates an AsyncHooks bean if none exists. - * - * @return A configured AsyncHooks instance - */ - @Bean - @ConditionalOnMissingBean - public com.thetradedesk.workflows.utils.AsyncHooks asyncHooks() { - return new com.thetradedesk.workflows.utils.AsyncHooks(); - } - - /** - * Creates a ScheduledExecutorService for async retry operations if none exists. - * - * @return A configured ScheduledExecutorService instance - */ - @Bean - @ConditionalOnMissingBean - public ScheduledExecutorService retryScheduler() { - return Executors.newSingleThreadScheduledExecutor(); - } - - /** - * Creates a Hooks configuration bean if none exists. - * - * @return A configured Hooks instance - */ - @Bean - @ConditionalOnMissingBean - public com.thetradedesk.workflows.utils.Hooks hooks() { - return new com.thetradedesk.workflows.utils.Hooks(); - } - /** - * Creates a AdGroup sub-SDK bean if none exists. - * - * @param workflows the main SDK instance - * @return A configured AdGroup instance - */ - @Bean - @ConditionalOnMissingBean - public AdGroup adGroup(Workflows workflows) { - return workflows.adGroup(); - } - /** - * Creates a Campaign sub-SDK bean if none exists. - * - * @param workflows the main SDK instance - * @return A configured Campaign instance - */ - @Bean - @ConditionalOnMissingBean - public Campaign campaign(Workflows workflows) { - return workflows.campaign(); - } - /** - * Creates a Dmp sub-SDK bean if none exists. - * - * @param workflows the main SDK instance - * @return A configured Dmp instance - */ - @Bean - @ConditionalOnMissingBean - public Dmp dmp(Workflows workflows) { - return workflows.dmp(); - } - /** - * Creates a GraphQLRequest sub-SDK bean if none exists. - * - * @param workflows the main SDK instance - * @return A configured GraphQLRequest instance - */ - @Bean - @ConditionalOnMissingBean - public GraphQLRequest graphQLRequest(Workflows workflows) { - return workflows.graphQLRequest(); - } - /** - * Creates a JobStatus sub-SDK bean if none exists. - * - * @param workflows the main SDK instance - * @return A configured JobStatus instance - */ - @Bean - @ConditionalOnMissingBean - public JobStatus jobStatus(Workflows workflows) { - return workflows.jobStatus(); - } - /** - * Creates a RESTRequest sub-SDK bean if none exists. - * - * @param workflows the main SDK instance - * @return A configured RESTRequest instance - */ - @Bean - @ConditionalOnMissingBean - public RESTRequest restRequest(Workflows workflows) { - return workflows.restRequest(); - } - - /** - * Creates the async SDK bean if none exists. - * - * @param workflows the main SDK instance - * @param sdkConfiguration the configured SDKConfiguration bean - * @return A configured AsyncWorkflows instance - */ - @Bean - @ConditionalOnMissingBean - public AsyncWorkflows asyncWorkflows(Workflows workflows, SDKConfiguration sdkConfiguration) { - return new AsyncWorkflows(workflows, sdkConfiguration); - } - /** - * Creates an AsyncAdGroup sub-SDK bean if none exists. - * - * @param asyncWorkflows the async SDK instance - * @return A configured AsyncAdGroup instance - */ - @Bean - @ConditionalOnMissingBean - public AsyncAdGroup asyncAdGroup(AsyncWorkflows asyncWorkflows) { - return asyncWorkflows.adGroup(); - } - /** - * Creates an AsyncCampaign sub-SDK bean if none exists. - * - * @param asyncWorkflows the async SDK instance - * @return A configured AsyncCampaign instance - */ - @Bean - @ConditionalOnMissingBean - public AsyncCampaign asyncCampaign(AsyncWorkflows asyncWorkflows) { - return asyncWorkflows.campaign(); - } - /** - * Creates an AsyncDmp sub-SDK bean if none exists. - * - * @param asyncWorkflows the async SDK instance - * @return A configured AsyncDmp instance - */ - @Bean - @ConditionalOnMissingBean - public AsyncDmp asyncDmp(AsyncWorkflows asyncWorkflows) { - return asyncWorkflows.dmp(); - } - /** - * Creates an AsyncGraphQLRequest sub-SDK bean if none exists. - * - * @param asyncWorkflows the async SDK instance - * @return A configured AsyncGraphQLRequest instance - */ - @Bean - @ConditionalOnMissingBean - public AsyncGraphQLRequest asyncGraphQLRequest(AsyncWorkflows asyncWorkflows) { - return asyncWorkflows.graphQLRequest(); - } - /** - * Creates an AsyncJobStatus sub-SDK bean if none exists. - * - * @param asyncWorkflows the async SDK instance - * @return A configured AsyncJobStatus instance - */ - @Bean - @ConditionalOnMissingBean - public AsyncJobStatus asyncJobStatus(AsyncWorkflows asyncWorkflows) { - return asyncWorkflows.jobStatus(); - } - /** - * Creates an AsyncRESTRequest sub-SDK bean if none exists. - * - * @param asyncWorkflows the async SDK instance - * @return A configured AsyncRESTRequest instance - */ - @Bean - @ConditionalOnMissingBean - public AsyncRESTRequest asyncRESTRequest(AsyncWorkflows asyncWorkflows) { - return asyncWorkflows.restRequest(); - } -} \ No newline at end of file diff --git a/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfigProperties.java b/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfigProperties.java deleted file mode 100644 index dd55b3f..0000000 --- a/spring/workflows-spring-boot-autoconfigure/src/main/java/com/thetradedesk/workflows/WorkflowsAutoConfigProperties.java +++ /dev/null @@ -1,460 +0,0 @@ -/* - * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. - */ -package com.thetradedesk.workflows; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -import java.time.Duration; -import java.lang.String; -import java.util.Collection; -import java.util.Set; - - -/** - * Spring Boot Configuration Properties for ttd-workflows SDK - */ -@ConfigurationProperties(prefix = "workflows") -public class WorkflowsAutoConfigProperties { - - /** - * Constructor. - */ - public WorkflowsAutoConfigProperties() { - } - - /** - * The base URL for the API server. If not specified, the SDK will use the default server URL. - */ - private String serverUrl; - - /** - * Configuration for retry behavior when API calls fail due to transient errors. - */ - private RetryConfig retryConfig = new RetryConfig(); - - /** - * HTTP client configuration for API requests. - */ - private HttpClient httpClient = new HttpClient(); - /** - * The name of the server to use from the available server configurations defined in the OpenAPI specification. - */ - private String server; - /** - * Security configuration for API authentication. - */ - private Security security = new Security(); - - /** - * Gets the base URL for the API server. - * - * @return the base URL for the API server - */ - public String getServerUrl() { - return serverUrl; - } - - /** - * Sets the base URL for the API server. - * - * @param serverUrl the base URL for the API server - */ - public void setServerUrl(String serverUrl) { - this.serverUrl = serverUrl; - } - - /** - * Gets the retry configuration for API calls that fail due to transient errors. - * - * @return the retry configuration - */ - public RetryConfig getRetryConfig() { - return retryConfig; - } - - /** - * Sets the retry configuration for API calls that fail due to transient errors. - * - * @param retryConfig the retry configuration to use - */ - public void setRetryConfig(RetryConfig retryConfig) { - this.retryConfig = retryConfig; - } - - /** - * Gets the HTTP client configuration for API requests. - * - * @return the HTTP client configuration - */ - public HttpClient getHttpClient() { - return httpClient; - } - - /** - * Sets the HTTP client configuration for API requests. - * - * @param httpClient the HTTP client configuration to use - */ - public void setHttpClient(HttpClient httpClient) { - this.httpClient = httpClient; - } - /** - * Gets the name of the server to use from the available server configurations. - * - * @return the server name - */ - public String getServer() { - return server; - } - - /** - * Sets the name of the server to use from the available server configurations. - * - * @param server the server name to use - */ - public void setServer(String server) { - this.server = server; - } - /** - * Gets the security configuration for API authentication. - * - * @return the security configuration - */ - public Security getSecurity() { - return security; - } - - /** - * Sets the security configuration for API authentication. - * - * @param security the security configuration to use - */ - public void setSecurity(Security security) { - this.security = security; - } - - /** - * Retry configuration properties - */ - public static class RetryConfig { - - /** - * Constructor. - */ - public RetryConfig() { - } - - /** - * The retry strategy to use for failed requests. - */ - private com.thetradedesk.workflows.utils.RetryConfig.Strategy strategy; - - /** - * Configuration for exponential backoff retry strategy. Only used when strategy is set to BACKOFF. - */ - private Backoff backoff = new Backoff(); - - /** - * Gets the retry strategy to use for failed requests. - * - * @return the retry strategy - */ - public com.thetradedesk.workflows.utils.RetryConfig.Strategy getStrategy() { - return strategy; - } - - /** - * Sets the retry strategy to use for failed requests. - * - * @param strategy the retry strategy to use - */ - public void setStrategy(com.thetradedesk.workflows.utils.RetryConfig.Strategy strategy) { - this.strategy = strategy; - } - - /** - * Gets the backoff configuration for exponential backoff retry strategy. - * - * @return the backoff configuration - */ - public Backoff getBackoff() { - return backoff; - } - - /** - * Sets the backoff configuration for exponential backoff retry strategy. - * - * @param backoff the backoff configuration to use - */ - public void setBackoff(Backoff backoff) { - this.backoff = backoff; - } - - /** - * Backoff retry configuration matching BackoffStrategy fields - */ - public static class Backoff { - - /** - * Constructor. - */ - public Backoff() { - } - - /** - * The initial delay before the first retry attempt. Supports duration formats like "500ms", "1s", "2m". - */ - private Duration initialInterval = Duration.ofMillis(500); - - /** - * The maximum delay between retry attempts. The backoff will not exceed this value. - */ - private Duration maxInterval = Duration.ofSeconds(60); - - /** - * The maximum total time to spend on all retry attempts. Retries will stop after this duration. - */ - private Duration maxElapsedTime = Duration.ofHours(1); - - /** - * The multiplier for exponential backoff. Each retry delay is multiplied by this factor (e.g., 1.5 means 50% increase). - */ - private double baseFactor = 1.5; - - /** - * Random jitter factor to avoid thundering herd problems. Value between 0.0 (no jitter) and 1.0 (full jitter). - */ - private double jitterFactor = 0.5; - - /** - * Whether to retry requests that fail due to connection errors (e.g., connection refused, timeout). - */ - private boolean retryConnectError = false; - - /** - * Whether to retry requests that fail due to read timeout errors (server doesn't respond within timeout). - */ - private boolean retryReadTimeoutError = false; - - /** - * Gets the initial delay before the first retry attempt. - * - * @return the initial delay duration - */ - public Duration getInitialInterval() { - return initialInterval; - } - - /** - * Sets the initial delay before the first retry attempt. - * - * @param initialInterval the initial delay duration - */ - public void setInitialInterval(Duration initialInterval) { - this.initialInterval = initialInterval; - } - - /** - * Gets the maximum delay between retry attempts. - * - * @return the maximum delay duration - */ - public Duration getMaxInterval() { - return maxInterval; - } - - /** - * Sets the maximum delay between retry attempts. - * - * @param maxInterval the maximum delay duration - */ - public void setMaxInterval(Duration maxInterval) { - this.maxInterval = maxInterval; - } - - /** - * Gets the maximum total time to spend on all retry attempts. - * - * @return the maximum elapsed time duration - */ - public Duration getMaxElapsedTime() { - return maxElapsedTime; - } - - /** - * Sets the maximum total time to spend on all retry attempts. - * - * @param maxElapsedTime the maximum elapsed time duration - */ - public void setMaxElapsedTime(Duration maxElapsedTime) { - this.maxElapsedTime = maxElapsedTime; - } - - /** - * Gets the multiplier for exponential backoff. - * - * @return the base factor for exponential backoff - */ - public double getBaseFactor() { - return baseFactor; - } - - /** - * Sets the multiplier for exponential backoff. - * - * @param baseFactor the base factor for exponential backoff - */ - public void setBaseFactor(double baseFactor) { - this.baseFactor = baseFactor; - } - - /** - * Gets the random jitter factor to avoid thundering herd problems. - * - * @return the jitter factor (0.0 to 1.0) - */ - public double getJitterFactor() { - return jitterFactor; - } - - /** - * Sets the random jitter factor to avoid thundering herd problems. - * - * @param jitterFactor the jitter factor (0.0 to 1.0) - */ - public void setJitterFactor(double jitterFactor) { - this.jitterFactor = jitterFactor; - } - - /** - * Gets whether to retry requests that fail due to connection errors. - * - * @return true if connection errors should be retried, false otherwise - */ - public boolean isRetryConnectError() { - return retryConnectError; - } - - /** - * Sets whether to retry requests that fail due to connection errors. - * - * @param retryConnectError true to retry connection errors, false otherwise - */ - public void setRetryConnectError(boolean retryConnectError) { - this.retryConnectError = retryConnectError; - } - - /** - * Gets whether to retry requests that fail due to read timeout errors. - * - * @return true if read timeout errors should be retried, false otherwise - */ - public boolean isRetryReadTimeoutError() { - return retryReadTimeoutError; - } - - /** - * Sets whether to retry requests that fail due to read timeout errors. - * - * @param retryReadTimeoutError true to retry read timeout errors, false otherwise - */ - public void setRetryReadTimeoutError(boolean retryReadTimeoutError) { - this.retryReadTimeoutError = retryReadTimeoutError; - } - } - } - - /** - * HTTP client configuration properties - */ - public static class HttpClient { - - /** - * Constructor. - */ - public HttpClient() { - } - - /** - * Whether to enable debug logging for HTTP requests and responses, including JSON body content. - */ - private boolean enableDebugLogging = false; - - /** - * Collection of header names (case-insensitive) whose values will be redacted in debug logs. - * By default, Authorization and X-API-KEY headers are redacted for security. - */ - private Collection redactedHeaders = Set.of("Authorization", "X-API-KEY"); - - /** - * Gets whether debug logging is enabled for HTTP requests and responses. - * - * @return true if debug logging is enabled, false otherwise - */ - public boolean isEnableDebugLogging() { - return enableDebugLogging; - } - - /** - * Sets whether to enable debug logging for HTTP requests and responses. - * - * @param enableDebugLogging true to enable debug logging, false otherwise - */ - public void setEnableDebugLogging(boolean enableDebugLogging) { - this.enableDebugLogging = enableDebugLogging; - } - - /** - * Gets the collection of header names whose values will be redacted in debug logs. - * - * @return the collection of header names to redact - */ - public Collection getRedactedHeaders() { - return redactedHeaders; - } - - /** - * Sets the collection of header names whose values will be redacted in debug logs. - * - * @param redactedHeaders the collection of header names to redact - */ - public void setRedactedHeaders(Collection redactedHeaders) { - this.redactedHeaders = redactedHeaders; - } - } - - /** - * Security configuration properties - */ - public static class Security { - - /** - * Constructor. - */ - public Security() { - } - /** - * TTD-Auth for authentication. - */ - private String ttdAuth; - - /** - * Gets the TTD-Auth value. - * - * @return the TTD-Auth value - */ - public String getTTDAuth() { - return ttdAuth; - } - - /** - * Sets the TTD-Auth value. - * - * @param ttdAuth the TTD-Auth value to use - */ - public void setTTDAuth(String ttdAuth) { - this.ttdAuth = ttdAuth; - } - } -} \ No newline at end of file diff --git a/spring/workflows-spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring/workflows-spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 1a44414..0000000 --- a/spring/workflows-spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -com.thetradedesk.workflows.WorkflowsAutoConfig \ No newline at end of file diff --git a/spring/workflows-spring-boot-starter/build.gradle b/spring/workflows-spring-boot-starter/build.gradle deleted file mode 100644 index 33a8915..0000000 --- a/spring/workflows-spring-boot-starter/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -description = 'ttd-workflows Spring Boot Starter' - -// Publishing configuration overrides -ext { - publishingConfig = [ - groupId: rootProject.group, - artifactId: 'workflows-spring-boot-starter', - version: rootProject.version, - name: 'The Trade Desk Java SDK - Spring Boot Starter', - description: 'Spring Boot starter for the The Trade Desk Java SDK.', - ] -} - -dependencies { - api project(':') - api project(':workflows-spring-boot-autoconfigure') - api "org.springframework.boot:spring-boot-starter:${rootProject.springBootVersion}" -} - -jar { - dependsOn 'generatePomFileForMavenPublication' - archiveBaseName = 'workflows-spring-boot-starter' - into("META-INF/maven/com.thetradedesk/workflows-spring-boot-starter") { - from(layout.buildDirectory.file("pom.xml")) { - // Only include if it exists to avoid build ordering issues - duplicatesStrategy = DuplicatesStrategy.INCLUDE - } - } -} \ No newline at end of file diff --git a/src/main/java/com/thetradedesk/workflows/SDKConfiguration.java b/src/main/java/com/thetradedesk/workflows/SDKConfiguration.java index 3761e29..f0d6c58 100644 --- a/src/main/java/com/thetradedesk/workflows/SDKConfiguration.java +++ b/src/main/java/com/thetradedesk/workflows/SDKConfiguration.java @@ -19,8 +19,8 @@ public class SDKConfiguration { private static final String LANGUAGE = "java"; public static final String OPENAPI_DOC_VERSION = "v1"; - public static final String SDK_VERSION = "0.13.2"; - public static final String GEN_VERSION = "2.881.4"; + public static final String SDK_VERSION = "0.13.3"; + public static final String GEN_VERSION = "2.911.0"; private static final String BASE_PACKAGE = "com.thetradedesk.workflows"; public static final String USER_AGENT = String.format("speakeasy-sdk/%s %s %s %s %s", diff --git a/src/main/java/com/thetradedesk/workflows/Workflows.java b/src/main/java/com/thetradedesk/workflows/Workflows.java index 73a4f10..d314839 100644 --- a/src/main/java/com/thetradedesk/workflows/Workflows.java +++ b/src/main/java/com/thetradedesk/workflows/Workflows.java @@ -268,7 +268,7 @@ public static Builder builder() { return new Builder(); } - public Workflows(SDKConfiguration sdkConfiguration) { + private Workflows(SDKConfiguration sdkConfiguration) { sdkConfiguration.initialize(); this.adGroup = new AdGroup(sdkConfiguration); this.campaign = new Campaign(sdkConfiguration); diff --git a/src/main/java/com/thetradedesk/workflows/models/components/AdGroupROIGoal.java b/src/main/java/com/thetradedesk/workflows/models/components/AdGroupROIGoal.java index 1aea74c..cfa83ef 100644 --- a/src/main/java/com/thetradedesk/workflows/models/components/AdGroupROIGoal.java +++ b/src/main/java/com/thetradedesk/workflows/models/components/AdGroupROIGoal.java @@ -11,6 +11,7 @@ import com.thetradedesk.workflows.utils.Utils; import java.lang.Boolean; import java.lang.Double; +import java.lang.Integer; import java.lang.Override; import java.lang.String; import org.openapitools.jackson.nullable.JsonNullable; @@ -77,6 +78,11 @@ public class AdGroupROIGoal { @JsonProperty("miaozhenOTPInPercent") private JsonNullable miaozhenOTPInPercent; + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("The product scope for New Buyer goal optimization") + private JsonNullable theProductScopeForNewBuyerGoalOptimization; + @JsonCreator public AdGroupROIGoal( @JsonProperty("maximizeReach") JsonNullable maximizeReach, @@ -90,7 +96,8 @@ public AdGroupROIGoal( @JsonProperty("viewabilityInPercent") JsonNullable viewabilityInPercent, @JsonProperty("vcpmInAdvertiserCurrency") JsonNullable vcpmInAdvertiserCurrency, @JsonProperty("cpcvInAdvertiserCurrency") JsonNullable cpcvInAdvertiserCurrency, - @JsonProperty("miaozhenOTPInPercent") JsonNullable miaozhenOTPInPercent) { + @JsonProperty("miaozhenOTPInPercent") JsonNullable miaozhenOTPInPercent, + @JsonProperty("The product scope for New Buyer goal optimization") JsonNullable theProductScopeForNewBuyerGoalOptimization) { Utils.checkNotNull(maximizeReach, "maximizeReach"); Utils.checkNotNull(maximizeLtvIncrementalReach, "maximizeLtvIncrementalReach"); Utils.checkNotNull(cpcInAdvertiserCurrency, "cpcInAdvertiserCurrency"); @@ -103,6 +110,7 @@ public AdGroupROIGoal( Utils.checkNotNull(vcpmInAdvertiserCurrency, "vcpmInAdvertiserCurrency"); Utils.checkNotNull(cpcvInAdvertiserCurrency, "cpcvInAdvertiserCurrency"); Utils.checkNotNull(miaozhenOTPInPercent, "miaozhenOTPInPercent"); + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); this.maximizeReach = maximizeReach; this.maximizeLtvIncrementalReach = maximizeLtvIncrementalReach; this.cpcInAdvertiserCurrency = cpcInAdvertiserCurrency; @@ -115,13 +123,15 @@ public AdGroupROIGoal( this.vcpmInAdvertiserCurrency = vcpmInAdvertiserCurrency; this.cpcvInAdvertiserCurrency = cpcvInAdvertiserCurrency; this.miaozhenOTPInPercent = miaozhenOTPInPercent; + this.theProductScopeForNewBuyerGoalOptimization = theProductScopeForNewBuyerGoalOptimization; } public AdGroupROIGoal() { this(JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), - JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined()); + JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), + JsonNullable.undefined()); } @JsonIgnore @@ -184,6 +194,11 @@ public JsonNullable miaozhenOTPInPercent() { return miaozhenOTPInPercent; } + @JsonIgnore + public JsonNullable theProductScopeForNewBuyerGoalOptimization() { + return theProductScopeForNewBuyerGoalOptimization; + } + public static Builder builder() { return new Builder(); } @@ -333,6 +348,18 @@ public AdGroupROIGoal withMiaozhenOTPInPercent(JsonNullable miaozhenOTPI return this; } + public AdGroupROIGoal withTheProductScopeForNewBuyerGoalOptimization(int theProductScopeForNewBuyerGoalOptimization) { + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); + this.theProductScopeForNewBuyerGoalOptimization = JsonNullable.of(theProductScopeForNewBuyerGoalOptimization); + return this; + } + + public AdGroupROIGoal withTheProductScopeForNewBuyerGoalOptimization(JsonNullable theProductScopeForNewBuyerGoalOptimization) { + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); + this.theProductScopeForNewBuyerGoalOptimization = theProductScopeForNewBuyerGoalOptimization; + return this; + } + @Override public boolean equals(java.lang.Object o) { if (this == o) { @@ -354,7 +381,8 @@ public boolean equals(java.lang.Object o) { Utils.enhancedDeepEquals(this.viewabilityInPercent, other.viewabilityInPercent) && Utils.enhancedDeepEquals(this.vcpmInAdvertiserCurrency, other.vcpmInAdvertiserCurrency) && Utils.enhancedDeepEquals(this.cpcvInAdvertiserCurrency, other.cpcvInAdvertiserCurrency) && - Utils.enhancedDeepEquals(this.miaozhenOTPInPercent, other.miaozhenOTPInPercent); + Utils.enhancedDeepEquals(this.miaozhenOTPInPercent, other.miaozhenOTPInPercent) && + Utils.enhancedDeepEquals(this.theProductScopeForNewBuyerGoalOptimization, other.theProductScopeForNewBuyerGoalOptimization); } @Override @@ -363,7 +391,8 @@ public int hashCode() { maximizeReach, maximizeLtvIncrementalReach, cpcInAdvertiserCurrency, ctrInPercent, nielsenOTPInPercent, cpaInAdvertiserCurrency, returnOnAdSpendPercent, vcrInPercent, viewabilityInPercent, - vcpmInAdvertiserCurrency, cpcvInAdvertiserCurrency, miaozhenOTPInPercent); + vcpmInAdvertiserCurrency, cpcvInAdvertiserCurrency, miaozhenOTPInPercent, + theProductScopeForNewBuyerGoalOptimization); } @Override @@ -380,7 +409,8 @@ public String toString() { "viewabilityInPercent", viewabilityInPercent, "vcpmInAdvertiserCurrency", vcpmInAdvertiserCurrency, "cpcvInAdvertiserCurrency", cpcvInAdvertiserCurrency, - "miaozhenOTPInPercent", miaozhenOTPInPercent); + "miaozhenOTPInPercent", miaozhenOTPInPercent, + "theProductScopeForNewBuyerGoalOptimization", theProductScopeForNewBuyerGoalOptimization); } @SuppressWarnings("UnusedReturnValue") @@ -410,6 +440,8 @@ public final static class Builder { private JsonNullable miaozhenOTPInPercent = JsonNullable.undefined(); + private JsonNullable theProductScopeForNewBuyerGoalOptimization = JsonNullable.undefined(); + private Builder() { // force use of static builder() method } @@ -570,13 +602,27 @@ public Builder miaozhenOTPInPercent(JsonNullable miaozhenOTPInPercent) { return this; } + + public Builder theProductScopeForNewBuyerGoalOptimization(int theProductScopeForNewBuyerGoalOptimization) { + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); + this.theProductScopeForNewBuyerGoalOptimization = JsonNullable.of(theProductScopeForNewBuyerGoalOptimization); + return this; + } + + public Builder theProductScopeForNewBuyerGoalOptimization(JsonNullable theProductScopeForNewBuyerGoalOptimization) { + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); + this.theProductScopeForNewBuyerGoalOptimization = theProductScopeForNewBuyerGoalOptimization; + return this; + } + public AdGroupROIGoal build() { return new AdGroupROIGoal( maximizeReach, maximizeLtvIncrementalReach, cpcInAdvertiserCurrency, ctrInPercent, nielsenOTPInPercent, cpaInAdvertiserCurrency, returnOnAdSpendPercent, vcrInPercent, viewabilityInPercent, - vcpmInAdvertiserCurrency, cpcvInAdvertiserCurrency, miaozhenOTPInPercent); + vcpmInAdvertiserCurrency, cpcvInAdvertiserCurrency, miaozhenOTPInPercent, + theProductScopeForNewBuyerGoalOptimization); } } diff --git a/src/main/java/com/thetradedesk/workflows/models/components/AdGroupWorkflowROIGoalInput.java b/src/main/java/com/thetradedesk/workflows/models/components/AdGroupWorkflowROIGoalInput.java index d68f8f1..2483986 100644 --- a/src/main/java/com/thetradedesk/workflows/models/components/AdGroupWorkflowROIGoalInput.java +++ b/src/main/java/com/thetradedesk/workflows/models/components/AdGroupWorkflowROIGoalInput.java @@ -11,6 +11,7 @@ import com.thetradedesk.workflows.utils.Utils; import java.lang.Boolean; import java.lang.Double; +import java.lang.Integer; import java.lang.Override; import java.lang.String; import org.openapitools.jackson.nullable.JsonNullable; @@ -77,6 +78,11 @@ public class AdGroupWorkflowROIGoalInput { @JsonProperty("miaozhenOTPInPercent") private JsonNullable miaozhenOTPInPercent; + + @JsonInclude(Include.NON_ABSENT) + @JsonProperty("The product scope for New Buyer goal optimization") + private JsonNullable theProductScopeForNewBuyerGoalOptimization; + @JsonCreator public AdGroupWorkflowROIGoalInput( @JsonProperty("maximizeReach") JsonNullable maximizeReach, @@ -90,7 +96,8 @@ public AdGroupWorkflowROIGoalInput( @JsonProperty("viewabilityInPercent") JsonNullable viewabilityInPercent, @JsonProperty("vcpmInAdvertiserCurrency") JsonNullable vcpmInAdvertiserCurrency, @JsonProperty("cpcvInAdvertiserCurrency") JsonNullable cpcvInAdvertiserCurrency, - @JsonProperty("miaozhenOTPInPercent") JsonNullable miaozhenOTPInPercent) { + @JsonProperty("miaozhenOTPInPercent") JsonNullable miaozhenOTPInPercent, + @JsonProperty("The product scope for New Buyer goal optimization") JsonNullable theProductScopeForNewBuyerGoalOptimization) { Utils.checkNotNull(maximizeReach, "maximizeReach"); Utils.checkNotNull(maximizeLtvIncrementalReach, "maximizeLtvIncrementalReach"); Utils.checkNotNull(cpcInAdvertiserCurrency, "cpcInAdvertiserCurrency"); @@ -103,6 +110,7 @@ public AdGroupWorkflowROIGoalInput( Utils.checkNotNull(vcpmInAdvertiserCurrency, "vcpmInAdvertiserCurrency"); Utils.checkNotNull(cpcvInAdvertiserCurrency, "cpcvInAdvertiserCurrency"); Utils.checkNotNull(miaozhenOTPInPercent, "miaozhenOTPInPercent"); + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); this.maximizeReach = maximizeReach; this.maximizeLtvIncrementalReach = maximizeLtvIncrementalReach; this.cpcInAdvertiserCurrency = cpcInAdvertiserCurrency; @@ -115,13 +123,15 @@ public AdGroupWorkflowROIGoalInput( this.vcpmInAdvertiserCurrency = vcpmInAdvertiserCurrency; this.cpcvInAdvertiserCurrency = cpcvInAdvertiserCurrency; this.miaozhenOTPInPercent = miaozhenOTPInPercent; + this.theProductScopeForNewBuyerGoalOptimization = theProductScopeForNewBuyerGoalOptimization; } public AdGroupWorkflowROIGoalInput() { this(JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), - JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined()); + JsonNullable.undefined(), JsonNullable.undefined(), JsonNullable.undefined(), + JsonNullable.undefined()); } @JsonIgnore @@ -184,6 +194,11 @@ public JsonNullable miaozhenOTPInPercent() { return miaozhenOTPInPercent; } + @JsonIgnore + public JsonNullable theProductScopeForNewBuyerGoalOptimization() { + return theProductScopeForNewBuyerGoalOptimization; + } + public static Builder builder() { return new Builder(); } @@ -333,6 +348,18 @@ public AdGroupWorkflowROIGoalInput withMiaozhenOTPInPercent(JsonNullable return this; } + public AdGroupWorkflowROIGoalInput withTheProductScopeForNewBuyerGoalOptimization(int theProductScopeForNewBuyerGoalOptimization) { + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); + this.theProductScopeForNewBuyerGoalOptimization = JsonNullable.of(theProductScopeForNewBuyerGoalOptimization); + return this; + } + + public AdGroupWorkflowROIGoalInput withTheProductScopeForNewBuyerGoalOptimization(JsonNullable theProductScopeForNewBuyerGoalOptimization) { + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); + this.theProductScopeForNewBuyerGoalOptimization = theProductScopeForNewBuyerGoalOptimization; + return this; + } + @Override public boolean equals(java.lang.Object o) { if (this == o) { @@ -354,7 +381,8 @@ public boolean equals(java.lang.Object o) { Utils.enhancedDeepEquals(this.viewabilityInPercent, other.viewabilityInPercent) && Utils.enhancedDeepEquals(this.vcpmInAdvertiserCurrency, other.vcpmInAdvertiserCurrency) && Utils.enhancedDeepEquals(this.cpcvInAdvertiserCurrency, other.cpcvInAdvertiserCurrency) && - Utils.enhancedDeepEquals(this.miaozhenOTPInPercent, other.miaozhenOTPInPercent); + Utils.enhancedDeepEquals(this.miaozhenOTPInPercent, other.miaozhenOTPInPercent) && + Utils.enhancedDeepEquals(this.theProductScopeForNewBuyerGoalOptimization, other.theProductScopeForNewBuyerGoalOptimization); } @Override @@ -363,7 +391,8 @@ public int hashCode() { maximizeReach, maximizeLtvIncrementalReach, cpcInAdvertiserCurrency, ctrInPercent, nielsenOTPInPercent, cpaInAdvertiserCurrency, returnOnAdSpendPercent, vcrInPercent, viewabilityInPercent, - vcpmInAdvertiserCurrency, cpcvInAdvertiserCurrency, miaozhenOTPInPercent); + vcpmInAdvertiserCurrency, cpcvInAdvertiserCurrency, miaozhenOTPInPercent, + theProductScopeForNewBuyerGoalOptimization); } @Override @@ -380,7 +409,8 @@ public String toString() { "viewabilityInPercent", viewabilityInPercent, "vcpmInAdvertiserCurrency", vcpmInAdvertiserCurrency, "cpcvInAdvertiserCurrency", cpcvInAdvertiserCurrency, - "miaozhenOTPInPercent", miaozhenOTPInPercent); + "miaozhenOTPInPercent", miaozhenOTPInPercent, + "theProductScopeForNewBuyerGoalOptimization", theProductScopeForNewBuyerGoalOptimization); } @SuppressWarnings("UnusedReturnValue") @@ -410,6 +440,8 @@ public final static class Builder { private JsonNullable miaozhenOTPInPercent = JsonNullable.undefined(); + private JsonNullable theProductScopeForNewBuyerGoalOptimization = JsonNullable.undefined(); + private Builder() { // force use of static builder() method } @@ -570,13 +602,27 @@ public Builder miaozhenOTPInPercent(JsonNullable miaozhenOTPInPercent) { return this; } + + public Builder theProductScopeForNewBuyerGoalOptimization(int theProductScopeForNewBuyerGoalOptimization) { + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); + this.theProductScopeForNewBuyerGoalOptimization = JsonNullable.of(theProductScopeForNewBuyerGoalOptimization); + return this; + } + + public Builder theProductScopeForNewBuyerGoalOptimization(JsonNullable theProductScopeForNewBuyerGoalOptimization) { + Utils.checkNotNull(theProductScopeForNewBuyerGoalOptimization, "theProductScopeForNewBuyerGoalOptimization"); + this.theProductScopeForNewBuyerGoalOptimization = theProductScopeForNewBuyerGoalOptimization; + return this; + } + public AdGroupWorkflowROIGoalInput build() { return new AdGroupWorkflowROIGoalInput( maximizeReach, maximizeLtvIncrementalReach, cpcInAdvertiserCurrency, ctrInPercent, nielsenOTPInPercent, cpaInAdvertiserCurrency, returnOnAdSpendPercent, vcrInPercent, viewabilityInPercent, - vcpmInAdvertiserCurrency, cpcvInAdvertiserCurrency, miaozhenOTPInPercent); + vcpmInAdvertiserCurrency, cpcvInAdvertiserCurrency, miaozhenOTPInPercent, + theProductScopeForNewBuyerGoalOptimization); } } diff --git a/src/main/java/com/thetradedesk/workflows/models/components/DimensionalBiddingDimensions.java b/src/main/java/com/thetradedesk/workflows/models/components/DimensionalBiddingDimensions.java index 9861eea..5dc7675 100644 --- a/src/main/java/com/thetradedesk/workflows/models/components/DimensionalBiddingDimensions.java +++ b/src/main/java/com/thetradedesk/workflows/models/components/DimensionalBiddingDimensions.java @@ -13,7 +13,6 @@ public enum DimensionalBiddingDimensions { HAS_AD_FORMAT_ID("HasAdFormatId"), HAS_DOMAIN_FRAGMENT_ID("HasDomainFragmentId"), HAS_UNIVERSAL_CATEGORY_TAXONOMY_ID("HasUniversalCategoryTaxonomyId"), - HAS_PLACEMENT_POSITION_RELATIVE_TO_FOLD_ID("HasPlacementPositionRelativeToFoldId"), HAS_ADVERTISER_TARGETING_DATA_ID("HasAdvertiserTargetingDataId"), HAS_BROWSER_ID("HasBrowserId"), HAS_CARRIER_ID("HasCarrierId"), diff --git a/src/main/java/com/thetradedesk/workflows/utils/AsyncRetries.java b/src/main/java/com/thetradedesk/workflows/utils/AsyncRetries.java index 97ab10a..8341b13 100644 --- a/src/main/java/com/thetradedesk/workflows/utils/AsyncRetries.java +++ b/src/main/java/com/thetradedesk/workflows/utils/AsyncRetries.java @@ -98,6 +98,15 @@ private boolean shouldRetryIOException(Throwable e, BackoffStrategy backoff) { } private static long retryAfterMs(HttpResponse response) { + String retryAfterMs = response.headers().firstValue("retry-after-ms").orElse(null); + if (retryAfterMs != null && !retryAfterMs.isEmpty()) { + try { + long milliseconds = Long.parseLong(retryAfterMs); + return milliseconds < 0 ? 0 : milliseconds; + } catch (NumberFormatException ignored) { + } + } + String retryAfter = response.headers().firstValue("retry-after").orElse(null); if (retryAfter == null || retryAfter.isEmpty()) { return 0; @@ -152,7 +161,7 @@ private void maybeRetry(Supplier>> task, String reason = e instanceof AsyncRetryableException ? "status " + ((AsyncRetryableException) e).response().statusCode() : e.getClass().getSimpleName(); - logger.trace("Async retrying due to {} - waiting {}ms before attempt {}", intervalMs, state.count() + 1); + logger.trace("Async retrying due to {} - waiting {}ms before attempt {}", reason, intervalMs, state.count() + 1); } scheduler.schedule( diff --git a/src/main/java/com/thetradedesk/workflows/utils/OneOfDeserializer.java b/src/main/java/com/thetradedesk/workflows/utils/OneOfDeserializer.java index 246534a..42451b6 100644 --- a/src/main/java/com/thetradedesk/workflows/utils/OneOfDeserializer.java +++ b/src/main/java/com/thetradedesk/workflows/utils/OneOfDeserializer.java @@ -182,6 +182,15 @@ private void countFieldsRecursive(Object obj, JsonNode jsonNode) { return; } + // Unwrap optional fields + if (obj instanceof java.util.Optional) { + java.util.Optional opt = (java.util.Optional) obj; + if (opt.isPresent()) { + countFieldsRecursive(opt.get(), jsonNode); + } + return; + } + // Handle primitives and strings if (isPrimitiveOrString(obj)) { matched++; diff --git a/src/main/java/com/thetradedesk/workflows/utils/Retries.java b/src/main/java/com/thetradedesk/workflows/utils/Retries.java index 4244ef2..6ce6aa7 100644 --- a/src/main/java/com/thetradedesk/workflows/utils/Retries.java +++ b/src/main/java/com/thetradedesk/workflows/utils/Retries.java @@ -99,6 +99,15 @@ private HttpResponse getResponse(boolean retryConnectError, boolean } private static long retryAfterMs(HttpResponse response) { + String retryAfterMs = response.headers().firstValue("retry-after-ms").orElse(null); + if (retryAfterMs != null && !retryAfterMs.isEmpty()) { + try { + long milliseconds = Long.parseLong(retryAfterMs); + return milliseconds < 0 ? 0 : milliseconds; + } catch (NumberFormatException ignored) { + } + } + String retryAfter = response.headers().firstValue("retry-after").orElse(null); if (retryAfter == null || retryAfter.isEmpty()) { return 0; diff --git a/src/main/java/com/thetradedesk/workflows/utils/StreamingParser.java b/src/main/java/com/thetradedesk/workflows/utils/StreamingParser.java index 4b2d4af..47c81f0 100644 --- a/src/main/java/com/thetradedesk/workflows/utils/StreamingParser.java +++ b/src/main/java/com/thetradedesk/workflows/utils/StreamingParser.java @@ -176,18 +176,25 @@ private static class JsonLContentProcessor implements StreamContentProcessor eventId = Optional.empty(); + // Scan state preserved across reads; offsets stay valid because the + // parser compacts and resets this state after each boundary. + private int scanPos = 0; + private int lineStart = 0; + // A trailing CR may complete to CRLF on the next read; in that case + // the LF belongs to the same line ending, not a new empty line. + private boolean pendingCRLF = false; + @Override public BoundaryInfo findBoundary(byte[] data, int limit) { - int lineStart = 0, i = lineStart; + int i = scanPos; + if (pendingCRLF) { + pendingCRLF = false; + if (i < limit && data[i] == LF && i == lineStart) { + lineStart = i + 1; + i = i + 1; + } + } while (i < limit) { for (byte[] pattern : BOUNDARY_PATTERNS) { if (matchesPattern(data, i, limit, pattern)) { @@ -229,8 +251,14 @@ public BoundaryInfo findBoundary(byte[] data, int limit) { boundStart--; } int boundLength = (lineStart - boundStart) + pattern.length; + scanPos = 0; + lineStart = 0; + pendingCRLF = false; return new BoundaryInfo(boundStart, boundLength); } + if (pattern.length == 1 && data[i] == CR && i == limit - 1) { + pendingCRLF = true; + } lineStart = i + pattern.length; i = lineStart - 1; break; @@ -238,6 +266,7 @@ public BoundaryInfo findBoundary(byte[] data, int limit) { } i++; } + scanPos = i; return new BoundaryInfo(-1, 0); } From 456665dceb4c33192eb7cde9c730a64601197b32 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 03:31:12 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow