VLONEEdge
Documentation

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"
}
Certificates are issued automatically once the CNAME resolves. Issuance normally completes within a minute; the zone stays 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.

ModeUpstream schemeCertificate check
stricthttpsChain and hostname verified
opportunistichttpsChain accepted, hostname skipped
offhttpNone - 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:

HeaderMeaning
x-vl-cacheHIT, MISS, REVALIDATED or BYPASS
x-vl-popEdge location that served the response
x-vl-ageSeconds the object has been cached
x-vl-ridRequest 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}'
Purge-all is rate limited to once per minute per zone. Prefer surrogate keys for routine invalidation - they are cheaper and keep the hit ratio high.

Control API

Base URL https://cdnuk.vlone.cloud/api/v1. All requests take authorization: Bearer <token> unless marked public.

MethodPathDescription
GET/healthLiveness probe (public)
GET/statsFabric counters and 24h series (public)
GET/popsEdge inventory (public)
GET/statusComponent status and uptime (public)
GET/zonesList zones
POST/zonesCreate a zone
PATCH/zones/{id}Update origin, TLS mode or cache policy
POST/zones/{id}/purgeInvalidate 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

CodeConditionWhat to do
400Malformed body or unknown fieldCheck the JSON against this page
401Missing or expired tokenReissue the token
409Hostname already bound to a zonePatch the existing zone instead
429Rate limit exceededBack off using retry-after
502Origin unreachable or TLS failedCheck origin health and certificate chain
504Origin exceeded 30s response budgetRaise origin capacity or cache more aggressively

Reference last reviewed for API version v1.