Hi Ben,
Thank you for reaching out. Yes, this is possible in the API. To achieve this, you need to create a campaign criterion using the CampaignCriterionService.MutateCampaignCriteria() method and set type equal to LOCATION. After successfully creating this campaign criterion, you may then associate your campaign bid modifier to this campaign criterion.
Let me know if this helps. Feel free to write back if you have further clarifications.
Regards,
Dave
Google Ads API Team
String criteriaResourceName = CampaignCriterionServiceClient.formatCampaignCriteriaName(String.valueOf(customerId), campaignId + "~" + criteria);
CampaignCriterion.Builder criterionBuilder = CampaignCriterion.newBuilder() .setResourceName(criteriaResourceName) .setBidModifier(FloatValue.of(modifier));
CampaignCriterion criterion = criterionBuilder.build();
return CampaignCriterionOperation.newBuilder() .setUpdate(criterion) .setUpdateMask(FieldMasks.allSetFieldsOf(criterion)) .build();