Integration guide
Everything below is the whole API surface. If a thing is not here, it is not required.
Create a pull zone
A zone binds a hostname to an origin. Create one, and the hostname is live as soon as DNS propagates.
curl -X POST https://api.vimovox.com/v1/zones \
-H "Authorization: Bearer $VIMOVOX_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"media","origin":"https://origin.example.com","cache_ttl":86400}'
The response carries the node hostname to point at:
{
"id": "zn_8f21c4",
"name": "media",
"hostname": "media.lax1.vimovox.com",
"origin": "https://origin.example.com",
"cache_ttl": 86400,
"state": "active"
}
Point your own domain
Add a CNAME from your hostname to the node hostname. Keep the record proxied only if your DNS provider passes through range requests; video seeking depends on them.
cdn.example.com. 300 IN CNAME media.lax1.vimovox.com.
TLS and certificates
Certificates are issued per hostname and renewed thirty days before expiry. Upload your own if you need a specific chain:
curl -X PUT https://api.vimovox.com/v1/zones/zn_8f21c4/certificate \ -H "Authorization: Bearer $VIMOVOX_TOKEN" \ --data-binary @fullchain.pem
TLS 1.2 and 1.3 only. HTTP requests are redirected, never served.
Cache control
Origin headers win. Cache-Control and Expires are honoured as sent; the zone TTL applies only when the origin says nothing. Purge by prefix:
curl -X POST https://api.vimovox.com/v1/zones/zn_8f21c4/purge \
-H "Authorization: Bearer $VIMOVOX_TOKEN" \
-d '{"prefix":"/releases/2026-09/"}'
Usage
Hourly bandwidth and request counts per hostname, up to 400 days back. These are the same numbers the invoice is built from.
GET /v1/zones/zn_8f21c4/usage?from=2026-09-01&granularity=hour
Limits
- Single object: 50 GB
- Range requests: supported, required for video seeking
- Purge: 200 prefixes per minute per zone
- API: 60 requests per minute per token