POST /v1/delivery/purge/requests with the group id and media paths
One call purges: identify the domain, name the group, and — for path-based groups — list the URLs or tags. The response reports exactly what happened, including anything refused.
The request#
curl -X POST -H "X-Api-Key: $TENANT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "www.acme.com",
"purgeGroupId": "specific-urls",
"mediaPaths": [
"https://www.acme.com/products",
"/assets/logo.png"
]
}' \
https://api.example.com/v1/delivery/purge/requestsdomain (or domainId) resolves as in the options call; purgeGroupId (or groupId) is required (purgeGroupId is required.); paths travel in mediaPaths (or urls). Validation runs before anything is purged: at most 10 paths (At most 10 URLs can be purged per request.), no wildcards (A valid non-wildcard URL or path is required.), each path must belong to the domain (URL must belong to the selected domain.), and URL groups need at least one entry. full-site rejects paths outright — media paths are only supported for specific URL purge groups.
The response#
Success:
{
"ok": true,
"status": "COMPLETED",
"requestId": "...",
"group": { "id": "specific-urls", "label": "Specific URLs" },
"purged": 14
}If any path is refused the call answers 400 with "error": "Purge request rejected.", the same status (REJECTED) and requestId, plus rejectedPaths explaining each refusal — nothing is purged when even one path fails validation. Matching is exact: a URL is purged with its query string when one is present, and path-wide when it is not. Every API purge is recorded as activity cache.api_purge_requested (group, purged count, rejected count, request id) and lands in Cache → Purge logs with Request, URLs, Actor, Status, and Requested columns (cache-purge-logs screenshot below).
Expected result#
A request id you can correlate with the purge log, a purged count for observability, and honest rejection details rather than silent partial success.

