async def update_ad(
ad_id: str,
status: Optional[str] = None,
bid_amount: Optional[int] = None,
tracking_specs: Optional[List[Dict[str, Any]]] = None,
ad_creative_id: Optional[str] = None,
meta_access_token: Optional[str] = None,
) -> str:
if not ad_id:
return _json({"error": "Ad ID is required"})
payload: Dict[str, Any] = {}
if status is not None:
payload["status"] = status
if bid_amount is not None:
payload["bid_amount"] = str(bid_amount)
if tracking_specs is not None:
payload["tracking_specs"] = json.dumps(tracking_specs)
if ad_creative_id is not None:
payload["creative"] = json.dumps({"ad_creative_id": ad_creative_id})
if not payload:
return _json({"error": "No update parameters provided (status, bid_amount, tracking_specs, or ad_creative_id)"})
result = await make_api_request(ad_id, meta_access_token, payload, method="POST")
return _json(result)