async def create_ad(
ad_account_id: str,
name: str,
ad_set_id: str,
ad_creative_id: str,
status: str = "PAUSED",
bid_amount: Optional[int] = None,
tracking_specs: Optional[List[Dict[str, Any]]] = None,
meta_access_token: Optional[str] = None,
) -> str:
if not ad_account_id:
return _json({"error": "No account ID provided"})
if not name:
return _json({"error": "No ad name provided"})
if not ad_set_id:
return _json({"error": "No ad set ID provided"})
if not ad_creative_id:
return _json({"error": "No creative ID provided"})
payload: Dict[str, Any] = {
"name": name,
"ad_set_id": ad_set_id,
"creative": {"ad_creative_id": ad_creative_id},
"status": status,
}
if bid_amount is not None:
payload["bid_amount"] = str(bid_amount)
encoded_tracking = _build_tracking_specs(tracking_specs)
if encoded_tracking is not None:
payload["tracking_specs"] = encoded_tracking
result = await make_api_request(f"{ad_account_id}/ads", meta_access_token, payload, method="POST")
return _json(result)