Surprisingly, there is a public facing, undocumented endpoint that will let you refresh your filtered Data Extensions as long as you have the Object ID of the Filtered DE.
Below is a quick overview on how to use this endpoint, but for more details see a post I made about this.
First point of order is how do we get this ObjectID?
GET /data/v1/customobjectdata/key/{{yourFilteredDEKey}}/rowset?$pageSize=1
Host: {{yourSubDomain}}.rest.marketingcloudapis.com
Authorization: Bearer {{oauthToken}}
Now I know this is supposed to be to return a rowset, but as there is no REST endpoint to get Data Extension properties, this was best I could find. With the pageSize set to 1, it makes the call very light processing.
Response:
{
"links": {
"self": "/v1/customobjectdata/token/{{yourFilteredDEKey}}/rowset?$page=1",
"next": "/v1/customobjectdata/token/{{yourFilteredDEKey}}/rowset?$page=2"
},
"requestToken": "XXXXXXX",
"tokenExpireDateUtc": "XXXXXXXX",
"customObjectId": "{{myCustomObjectID}}",
"customObjectKey": "{{myCustomObjectKey}}",
"pageSize": 1,
"page": 1,
"count": X,
"items": [
{
"keys": {
"myKey": "00544"
},
"values": {
"Field1": "40.815400000",
"Field2": "-73.045600000",
"Field3": "0.220696498"
}
}
]
}
So from there you just grab the 'customObjectID' in the response and move to the cool new endpoint:
POST /email/v1/filteredCustomObjects/{{myObjectID}}/refresh
Host: {{yourSubDomain}}.rest.marketingcloudapis.com
Authorization: Bearer {{oauthToken}}
When you plug your objectID into the above it should respond with something like:
{
"id": "XXXXXXXX",
"filterActivityInstance": {
"id": "XXXXXXXX",
"asyncID": 8675309
}
}
Which shows that the DE refresh was successfully started and is now in progress.