Edge platform guide
Everything below is available over the same endpoint that serves this page. Requests are authenticated with a bearer token issued per account.
Quickstart
Create a zone for the hostname you want to accelerate, then move traffic to the edge with a CNAME.
export VLONE_TOKEN="vl_live_..."
curl -X POST https://cdnuk.vlone.cloud/api/v1/zones \
-H "authorization: Bearer $VLONE_TOKEN" \
-H "content-type: application/json" \
-d '{
"hostname": "assets.example.com",
"origin": "origin.example.com",
"tls": "strict",
"cache": { "default_ttl": 3600 }
}'
The response carries the zone id and the CNAME target to publish:
{
"zone": "z_7fd21a",
"hostname": "assets.example.com",
"cname": "z-7fd21a.cdnuk.vlone.cloud",
"status": "pending_dns",
"certificate": "issuing"
}
pending_dns until then.Zones and origins
A zone binds one hostname to one origin. Origins may be an address or a hostname, and the
tls mode controls how the edge talks upstream.
| Mode | Upstream scheme | Certificate check |
|---|---|---|
| strict | https | Chain and hostname verified |
| opportunistic | https | Chain accepted, hostname skipped |
| off | http | None - private links only |
DNS setup
Publish the CNAME returned by the API. Apex hostnames need an ALIAS/ANAME record instead, since CNAME at the apex is not valid.
assets.example.com. 300 IN CNAME z-7fd21a.cdnuk.vlone.cloud.
Cache headers
The edge honours standard response headers. Cache-Control wins over zone defaults,
and s-maxage wins over max-age at the edge.
Cache-Control: public, max-age=60, s-maxage=86400
Surrogate-Key: product-421 catalogue
Vary: Accept-Encoding
Responses carry diagnostics on the way back out:
| Header | Meaning |
|---|---|
| x-vl-cache | HIT, MISS, REVALIDATED or BYPASS |
| x-vl-pop | Edge location that served the response |
| x-vl-age | Seconds the object has been cached |
| x-vl-rid | Request id - quote it in support requests |
Cache keys
By default the key is scheme, host, path and sorted query string. Trim it when query parameters do not change the body:
{
"cache": {
"key": {
"query": { "ignore": ["utm_source", "utm_medium", "fbclid"] },
"headers": ["accept-encoding"],
"cookies": []
}
}
}
Purging
Three granularities, all synchronous across the fabric.
# single url
curl -X POST https://cdnuk.vlone.cloud/api/v1/zones/z_7fd21a/purge \
-H "authorization: Bearer $VLONE_TOKEN" \
-d '{"urls":["https://assets.example.com/app.css"]}'
# by surrogate key
-d '{"keys":["product-421"]}'
# everything
-d '{"all":true}'
Control API
Base URL https://cdnuk.vlone.cloud/api/v1. All requests take
authorization: Bearer <token> unless marked public.
| Method | Path | Description |
|---|---|---|
| GET | /health | Liveness probe (public) |
| GET | /stats | Fabric counters and 24h series (public) |
| GET | /pops | Edge inventory (public) |
| GET | /status | Component status and uptime (public) |
| GET | /zones | List zones |
| POST | /zones | Create a zone |
| PATCH | /zones/{id} | Update origin, TLS mode or cache policy |
| POST | /zones/{id}/purge | Invalidate content |
Rate limits are returned on every response as x-ratelimit-remaining and
x-ratelimit-reset. Exceeding them yields 429 with a
retry-after header.
Edge rules
Rules run in order at request time. Each rule has a match expression and a list of actions.
rules:
- name: strip-legacy-prefix
when: path startswith "/v1/assets/"
do:
- rewrite path to "/assets/" + substring(path, 12)
- name: long-cache-immutable
when: path matches "\\.[0-9a-f]{8}\\.(js|css)$"
do:
- set header "cache-control" to "public, max-age=31536000, immutable"
- name: block-non-idempotent
when: method not in ["GET", "HEAD", "OPTIONS"]
do:
- respond 405
Error codes
| Code | Condition | What to do |
|---|---|---|
| 400 | Malformed body or unknown field | Check the JSON against this page |
| 401 | Missing or expired token | Reissue the token |
| 409 | Hostname already bound to a zone | Patch the existing zone instead |
| 429 | Rate limit exceeded | Back off using retry-after |
| 502 | Origin unreachable or TLS failed | Check origin health and certificate chain |
| 504 | Origin exceeded 30s response budget | Raise origin capacity or cache more aggressively |
Reference last reviewed for API version v1.