curl --request POST \
--url https://api.apostra.com/api/v2/buyer/advertisers/{advertiserId}/property-lists \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Q1 Campaign - UK Premium",
"purpose": "include"
}
'import requests
url = "https://api.apostra.com/api/v2/buyer/advertisers/{advertiserId}/property-lists"
payload = {
"name": "Q1 Campaign - UK Premium",
"purpose": "include"
}
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({name: 'Q1 Campaign - UK Premium', purpose: 'include'})
};
fetch('https://api.apostra.com/api/v2/buyer/advertisers/{advertiserId}/property-lists', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"propertyList": {
"listId": "42",
"name": "Q1 Campaign - UK Premium",
"purpose": "include",
"identifiers": [
{
"type": "domain",
"value": "<string>"
}
],
"unresolvedIdentifiers": [
{
"type": "domain",
"value": "<string>"
}
],
"registeredIdentifiers": [
{
"type": "domain",
"value": "<string>"
}
],
"domains": [
"<string>"
],
"unresolvedDomains": [
"<string>"
],
"registeredDomains": [
"<string>"
],
"propertyCount": 25,
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-20T14:45:00.000Z",
"resolutionSummary": {
"totalRequested": 500,
"resolvedCount": 432,
"registeredCount": 12,
"unresolvedCount": 56,
"resolutionRate": 0.864
},
"cascadeSummary": {
"totalMediaBuys": 4,
"updatedCount": 3,
"failedCount": 1
},
"filters": {
"channels_any": [
"display",
"olv"
],
"countries_all": [
"US",
"GB"
],
"property_types": [
"website"
],
"feature_requirements": [
{
"feature_id": "<string>",
"min_value": 123,
"max_value": 123,
"allowed_values": [
"<unknown>"
],
"if_not_covered": "exclude"
}
]
},
"replacedPropertyListIds": [
"41"
],
"appliesToAllCampaigns": true,
"status": "ready",
"errorMessage": "<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": {}
}
}Create property list
Create a named include or exclude list of publisher domains for an advertiser. Domains are resolved to internal property records. Unresolvable domains are returned in the response.
curl --request POST \
--url https://api.apostra.com/api/v2/buyer/advertisers/{advertiserId}/property-lists \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Q1 Campaign - UK Premium",
"purpose": "include"
}
'import requests
url = "https://api.apostra.com/api/v2/buyer/advertisers/{advertiserId}/property-lists"
payload = {
"name": "Q1 Campaign - UK Premium",
"purpose": "include"
}
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({name: 'Q1 Campaign - UK Premium', purpose: 'include'})
};
fetch('https://api.apostra.com/api/v2/buyer/advertisers/{advertiserId}/property-lists', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"propertyList": {
"listId": "42",
"name": "Q1 Campaign - UK Premium",
"purpose": "include",
"identifiers": [
{
"type": "domain",
"value": "<string>"
}
],
"unresolvedIdentifiers": [
{
"type": "domain",
"value": "<string>"
}
],
"registeredIdentifiers": [
{
"type": "domain",
"value": "<string>"
}
],
"domains": [
"<string>"
],
"unresolvedDomains": [
"<string>"
],
"registeredDomains": [
"<string>"
],
"propertyCount": 25,
"createdAt": "2026-01-15T10:30:00.000Z",
"updatedAt": "2026-01-20T14:45:00.000Z",
"resolutionSummary": {
"totalRequested": 500,
"resolvedCount": 432,
"registeredCount": 12,
"unresolvedCount": 56,
"resolutionRate": 0.864
},
"cascadeSummary": {
"totalMediaBuys": 4,
"updatedCount": 3,
"failedCount": 1
},
"filters": {
"channels_any": [
"display",
"olv"
],
"countries_all": [
"US",
"GB"
],
"property_types": [
"website"
],
"feature_requirements": [
{
"feature_id": "<string>",
"min_value": 123,
"max_value": 123,
"allowed_values": [
"<unknown>"
],
"if_not_covered": "exclude"
}
]
},
"replacedPropertyListIds": [
"41"
],
"appliesToAllCampaigns": true,
"status": "ready",
"errorMessage": "<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": {}
}
}Authorizations
API key or access token
Path Parameters
Unique identifier for the advertiser
1"12345"
Body
Request body for creating a property list
Human-readable name for the property list
1 - 255"Q1 Campaign - UK Premium"
Whether properties in this list should be included or excluded
include, exclude "include"
Domain identifiers (convenience shorthand for identifiers entries with type: "domain"). Provide domains, identifiers, or both. Large lists are chunked server-side against the AAO registry and local database; the response includes a resolutionSummary with the counts.
1000001["nytimes.com", "cnn.com", "bbc.co.uk"]
Typed property identifiers (AdCP-aligned) — mix of website domains, mobile app bundles/packages, store IDs, and CTV app IDs. Provide domains, identifiers, or both; combined total must be between 1 and 100000.
100000Show child attributes
Show child attributes
[ { "type": "domain", "value": "nytimes.com" }, { "type": "ios_bundle", "value": "com.facebook.katana" }, { "type": "android_package", "value": "com.facebook.katana" }, { "type": "apple_app_store_id", "value": "284882215" } ]
Filter configuration — controls which SmartPropertyLists this list is linked to
Show child attributes
Show child attributes
Create only. true (the default) makes this list one of the advertiser's own lists: it replaces the advertiser's current list of the same purpose and applies to every campaign, including active media buys. false saves the list for the advertiser without applying it to any campaign; the advertiser's lists and active media buys are unchanged. Apply it to one campaign by setting it as that campaign's own list.
false
Response
Create property list
Response containing a single property list
Property list resource representation
Show child attributes
Show child attributes