curl --request POST \
--url https://api.apostra.com/api/v2/buyer/campaigns/{campaignId}/property-lists \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"campaignPropertyListId": "1756",
"campaignPropertyListExcludeId": "1757",
"propertyListId": "<string>"
}
'import requests
url = "https://api.apostra.com/api/v2/buyer/campaigns/{campaignId}/property-lists"
payload = {
"campaignPropertyListId": "1756",
"campaignPropertyListExcludeId": "1757",
"propertyListId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
campaignPropertyListId: '1756',
campaignPropertyListExcludeId: '1757',
propertyListId: '<string>'
})
};
fetch('https://api.apostra.com/api/v2/buyer/campaigns/{campaignId}/property-lists', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"campaignId": "<string>",
"campaignPropertyListId": "<string>",
"campaignPropertyListExcludeId": "<string>",
"propertyListId": "<string>",
"effective": {
"include": {
"listId": "<string>",
"listIds": [
"<string>"
]
},
"exclude": {
"listId": "<string>",
"listIds": [
"<string>"
]
}
},
"cascade": {
"totalMediaBuys": 4,
"updatedCount": 3,
"failedCount": 1,
"skippedCount": 4503599627370495
},
"deprecationNotice": "<string>"
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Attach property list to campaign
Retroactively push an advertiser-scoped include list to all active media buys in a campaign. Use when a list was created after media buys were already running. The list must be an include list configured for the campaign’s advertiser. Returns a cascade summary with counts of updated, failed, and skipped (no packages) media buys.
curl --request POST \
--url https://api.apostra.com/api/v2/buyer/campaigns/{campaignId}/property-lists \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"campaignPropertyListId": "1756",
"campaignPropertyListExcludeId": "1757",
"propertyListId": "<string>"
}
'import requests
url = "https://api.apostra.com/api/v2/buyer/campaigns/{campaignId}/property-lists"
payload = {
"campaignPropertyListId": "1756",
"campaignPropertyListExcludeId": "1757",
"propertyListId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
campaignPropertyListId: '1756',
campaignPropertyListExcludeId: '1757',
propertyListId: '<string>'
})
};
fetch('https://api.apostra.com/api/v2/buyer/campaigns/{campaignId}/property-lists', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"campaignId": "<string>",
"campaignPropertyListId": "<string>",
"campaignPropertyListExcludeId": "<string>",
"propertyListId": "<string>",
"effective": {
"include": {
"listId": "<string>",
"listIds": [
"<string>"
]
},
"exclude": {
"listId": "<string>",
"listIds": [
"<string>"
]
}
},
"cascade": {
"totalMediaBuys": 4,
"updatedCount": 3,
"failedCount": 1,
"skippedCount": 4503599627370495
},
"deprecationNotice": "<string>"
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Authorizations
API key or access token
Path Parameters
Unique identifier for the campaign
1"cmp_987654321"
Body
The campaign's own include list. It must be an include list owned by the campaign's advertiser. Null clears the campaign's own include list; the advertiser's include list still applies.
1"1756"
The campaign's own exclude list. It must be an exclude list owned by the campaign's advertiser. Null clears the campaign's own exclude list; the advertiser's exclude lists still apply.
1"1757"
Deprecated; use campaignPropertyListId. Until 2026-12-31 a non-null value applies an include list already configured for the campaign's advertiser to the campaign's active media buys without storing it, and the response carries deprecationNotice. null is refused with a validation error; send campaignPropertyListId: null to clear the campaign's own include list. After 2026-12-31 the field is refused.
1Response
Attach property list to campaign
Campaign whose own lists were saved
The campaign's own include list after the save
The campaign's own exclude list after the save
Deprecated, kept for existing clients until 2026-12-31: the list applied by propertyListId when that was sent, otherwise the same value as campaignPropertyListId.
Show child attributes
Show child attributes
Counts of active media buys that received the lists in effect
Show child attributes
Show child attributes
Present when the request used a deprecated field; names the replacement.