Skip to content

Ads API

The Elo Ads API lets you create and manage an ad account’s campaigns, ad groups, and ads with JSON requests.

Send requests to:

https://api.withgrowl.com/v1/adm

Pass your Elo Ads API key as a bearer token on every request:

Terminal window
Authorization: Bearer $ELO_ADS_API_KEY

Each key is scoped to one ad account. Keep it on your server and never expose it in browser or mobile code. See Authentication for an example request.

ResourceUse for
CampaignsDefine a budget, country targeting, schedule, and state.
Ad groupsConfigure click bidding and contextual hints within a campaign.
AdsManage the copy, destination, image, price, and state of a creative.
InsightsQuery reporting scopes through the preview Insights contract.
FilesUse the preview upload contract for creative assets.

Ads belong to ad groups, and ad groups belong to campaigns:

Campaign
└── Ad group
└── Ad

Start with the Quickstart to create the complete hierarchy. See Unsupported features before porting an existing OpenAI Ads API integration.

Most endpoints accept and return application/json. Create and update operations use POST; retrieve and list operations use GET.

Times in responses are Unix timestamps in seconds. USD amounts use micros, where 1,000,000 micros equals one US dollar.

Campaigns, ad groups, and ads can be active, paused, or archived. Use the dedicated action endpoints to change state. Archiving is permanent: an archived object cannot be updated, activated, or paused.

State changes do not cascade to child objects.

Campaign, ad-group, and ad list endpoints use cursor pagination.

ParameterTypeDefaultDescription
limitinteger20Number of objects to return, from 1 to 500.
afterstring—Return objects after this ID.
beforestring—Return objects before this ID.
orderstringdescReturn objects in asc or desc creation order.

Do not combine after and before. A list response has this shape:

{
"object": "list",
"data": [],
"has_more": false,
"first_id": null,
"last_id": null
}

Use last_id as after to request the next page, or first_id as before to request the previous page.

Errors use a consistent JSON envelope:

{
"error": {
"message": "Missing required parameter: 'budget'.",
"type": "invalid_request_error",
"param": "budget",
"code": "missing_required_parameter"
}
}

Common status codes are:

StatusMeaning
400The request body or query parameters are invalid.
401The API key is missing or invalid.
404The object does not exist in the current ad account.
422An image URL is invalid or an archived object cannot be changed.