Skip to content

Ads

An ad belongs to one ad group and contains the creative shown to a user.

{
"id": "ad_67f480795c61f3e66f163c24",
"ad_group_id": "adgrp_67f480455c61f3e66f163c23",
"campaign_id": "cmpn_67f480125c61f3e66f163c22",
"name": "Planner launch card",
"status": "paused",
"review_status": "in_review",
"review": {
"status": "in_review"
},
"creative": {
"title": "Plan work faster",
"body": "Bring tasks, docs, and meetings together.",
"target_url": "https://example.com/workspace-planner",
"image_url": "https://example.com/assets/planner-card.png",
"price": "$12/month"
},
"created_at": 1744070521,
"updated_at": 1744070521
}
FieldTypeDescription
idstringAd ID, prefixed with ad_.
ad_group_idstringParent ad-group ID.
campaign_idstringParent campaign ID.
namestringInternal ad name.
statusstringactive, paused, or archived.
review_statusstringCreative review status. New ads are in_review.
review.statusstringThe same creative review status.
creativeobjectThe complete creative.
created_atintegerCreation time as a Unix timestamp in seconds.
updated_atintegerLast update time as a Unix timestamp in seconds.

POST /ads

FieldTypeRequiredDescription
ad_group_idstringYesParent ad-group ID in the current ad account.
namestringYesFrom 3 to 1,000 characters.
creativeobjectYesThe complete creative object.
creative.titlestringYesFrom 3 to 50 characters.
creative.bodystringYesFrom 1 to 100 characters.
creative.target_urlstringYesAn HTTP or HTTPS URL, up to 2,048 characters.
creative.image_urlstringNoAn HTTP or HTTPS image URL.
creative.pricestringNoOptional price text.
statusstringNoactive or paused. Defaults to paused.
Terminal window
curl -X POST "https://api.withgrowl.com/v1/adm/ads" \
-H "Authorization: Bearer $ELO_ADS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ad_group_id": "adgrp_67f480455c61f3e66f163c23",
"name": "Planner launch card",
"status": "paused",
"creative": {
"title": "Plan work faster",
"body": "Bring tasks, docs, and meetings together.",
"target_url": "https://example.com/workspace-planner",
"image_url": "https://example.com/assets/planner-card.png",
"price": "$12/month"
}
}'

GET /ads

The endpoint supports the shared limit, after, before, and order pagination parameters. Pass ad_group_id to return only the ads under one ad group. The filter is optional.

Terminal window
curl "https://api.withgrowl.com/v1/adm/ads?ad_group_id=adgrp_67f480455c61f3e66f163c23&limit=20" \
-H "Authorization: Bearer $ELO_ADS_API_KEY"

GET /ads/{ad_id}

Terminal window
curl "https://api.withgrowl.com/v1/adm/ads/ad_67f480795c61f3e66f163c24" \
-H "Authorization: Bearer $ELO_ADS_API_KEY"

POST /ads/{ad_id}

You can update name and creative. When changing a creative, send the complete creative object, including title, body, and target_url.

The parent ad group cannot be changed. Use a state action instead of including status in an update.

Terminal window
curl -X POST "https://api.withgrowl.com/v1/adm/ads/ad_67f480795c61f3e66f163c24" \
-H "Authorization: Bearer $ELO_ADS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Planner launch card v2",
"creative": {
"title": "Organize work in one place",
"body": "Bring tasks, docs, and meetings together.",
"target_url": "https://example.com/workspace-planner",
"image_url": "https://example.com/assets/planner-card-v2.png",
"price": "$12/month"
}
}'

Each endpoint returns the updated ad object.

  • POST /ads/{ad_id}/activate
  • POST /ads/{ad_id}/pause
  • POST /ads/{ad_id}/archive
Terminal window
curl -X POST "https://api.withgrowl.com/v1/adm/ads/ad_67f480795c61f3e66f163c24/activate" \
-H "Authorization: Bearer $ELO_ADS_API_KEY"

Archiving is permanent. Repeating the archive action succeeds, but other updates and state changes on an archived ad return 422.