Create a duplicate ad set based on an existing one.
The Marketing API has it is own rate limiting logic. If you are encountering errors mentioning a reached limit, see Rate Limiting.
Endpoint to read the copies of an Ad Set.
GET /v21.0/{ad-set-id}/copies HTTP/1.1
Host: graph.facebook.com
/* PHP SDK v5.0.0 */
/* make the API call */
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->get(
'/{ad-set-id}/copies',
'{access-token}'
);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
/* handle the result */
/* make the API call */
FB.api(
"/{ad-set-id}/copies",
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
/* make the API call */
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/{ad-set-id}/copies",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
/* handle the result */
}
}
).executeAsync();
/* make the API call */
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
initWithGraphPath:@"/{ad-set-id}/copies"
parameters:params
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
id result,
NSError *error) {
// Handle the result
}];
Parameter | Description |
---|---|
date_preset enum{today, yesterday, this_month, last_month, this_quarter, maximum, data_maximum, last_3d, last_7d, last_14d, last_28d, last_30d, last_90d, last_week_mon_sun, last_week_sun_sat, last_quarter, last_year, this_week_mon_today, this_week_sun_today, this_year} | Preset date range used to aggregate insights metrics |
effective_status list<enum{ACTIVE, PAUSED, DELETED, PENDING_REVIEW, DISAPPROVED, PREAPPROVED, PENDING_BILLING_INFO, CAMPAIGN_PAUSED, ARCHIVED, ADSET_PAUSED, IN_PROCESS, WITH_ISSUES}> | Filter adsets by effective status |
is_completed boolean | Filter adsets by completed status |
time_range {'since':YYYY-MM-DD,'until':YYYY-MM-DD} | Time range used to aggregate insights metrics |
Reading from this edge will return a JSON formatted result:
{ "
data
": [], "paging
": {}, "summary
": {} }
data
paging
summary
Aggregated information about the edge, such as counts. Specify the fields to fetch in the summary param (like summary=insights
).
Field | Description |
---|---|
insights Edge<AdsInsights> | Analytics summary for all objects |
total_count unsigned int32 | Total number of objects |
Error | Description |
---|---|
200 | Permissions error |
If you are coping an adset that already finished, the copy will be scheduled to start at the creation's time with the same duration of the original adset.
This endpoint supports asynchronous batch requests, which enables you to send up to 50 requests in a single HTTP request. If you want to copy large amount of objects, you should use asynchronous batch request. To do so, set deep_copy
to true
, and you can copy the adset and all of its ads in one sub-request. For example if you have two adsets and each of them has 50 ads, you can copy 2 adsets and all their ads:
curl -F 'access_token=...'\ -F 'asyncbatch=[{ "method":"POST", "relative_url":"<ad-set-id>/copies","name":"async_copy1", body":"name=copy_adset_1&deep_copy=true" },{ "method":"POST", "relative_url":"<ad-set-id>/copies","name":"async_copy2", body": "name=copy_adset_2&deep_copy=true"}]' \ https://graph.facebook.com/<VERSION>
To copy an ad set targeted in the European Union's Digital Services Act (DSA) regulated locations, please set the payor/beneficiary information first. Otherwise the copying request may respond with one of the following errors:
Payor missing error
{ "error": { "message": "Invalid parameter", "type": "FacebookApiException", "code": 100, "error_data": "{\"blame_field_specs\":[[\"dsa_payor\"]]}", "error_subcode": 3858079, "is_transient": false, "error_user_title": "No payor provided in DSA regulated region", "error_user_msg": "The DSA requires ads to provide payor information in regulated regions. Updating/creating ad needs to provide payor of the ad.", "fbtrace_id": "fbtrace_id" }, "__fb_trace_id__": "fbtrace_id", "__www_request_id__": "request_id" }Beneficiary missing error
{ "error": { "message": "Invalid parameter", "type": "FacebookApiException", "code": 100, "error_data": "{\"blame_field_specs\":[[\"dsa_beneficiary\"]]}", "error_subcode": 3858081, "is_transient": false, "error_user_title": "No payor/beneficiary provided in DSA regulated location", "error_user_msg": "The DSA requires ads to provide beneficiary information in regulated regions. Updating/creating ad needs to provide beneficiary of the ad.", "fbtrace_id": "fbtrace_id" }, "__fb_trace_id__": "fbtrace_id", "__www_request_id__": "request_id" }
copies
edge from the following paths: Parameter | Description |
---|---|
campaign_id numeric string or integer | Single ID of a campaign to make parent of the copy. The copy inherits all campaign settings, such as budget from the parent.Ignore if you want to keep the copy under the original campaign parent. |
deep_copy boolean | Default value: false Whether to copy all the child ads. Limits: the total number of children ads to copy should not exceed 3 for a synchronous call and 51 for an asynchronous call. |
end_time datetime | The end time of the set, e.g. |
rename_options JSON or object-like arrays | Rename options |
start_time datetime | The start time of the set, e.g. |
status_option enum {ACTIVE, PAUSED, INHERITED_FROM_SOURCE} | Default value: PAUSED
|
copied_adset_id
in the return type.copied_adset_id
: numeric string, ad_object_ids
: List [ad_object_type
: enum {unique_adcreative, ad, ad_set, campaign, opportunities, privacy_info_center, topline, ad_account}, source_id
: numeric string, copied_id
: numeric string, Error | Description |
---|---|
100 | Invalid parameter |
368 | The action attempted has been deemed abusive or is otherwise disallowed |
200 | Permissions error |