Documentation
Everything below is the whole surface area. If something is not here, it does not exist yet — and we would rather tell you that than leave you searching.
Quickstart
Three steps: install the CLI, describe your origin, point DNS. Expect the first cached response within a minute of the CNAME propagating.
curl -fsSL https://digitalprovider.online/install.sh | sh
dp login
dp init --domain www.example.com --origin origin.example.com
dp deploy
Then create the DNS record. A CNAME is strongly preferred — it lets us move your traffic between anycast prefixes without asking you to change anything.
www.example.com. CNAME www-example-com.edge.digitalprovider.online.
Apex domains cannot hold a CNAME. Use ALIAS or ANAME if your DNS provider supports it, otherwise A/AAAA records to the prefixes listed on the network page.
Configuration file
One file, committed to your repository. dp deploy is idempotent, so running it twice changes nothing the second time.
[site]
name = "marketing"
domain = "www.example.com"
[origin]
host = "origin.example.com"
scheme = "https"
shield = "fra1" # designated origin-facing edge
timeout = "20s"
[cache]
default_ttl = "1h"
respect_origin_headers = true
stale_while_revalidate = "24h"
stale_if_error = "72h"
[[cache.rule]]
match = "/assets/*"
ttl = "30d"
immutable = true
[[cache.rule]]
match = "/api/*"
bypass = true
[headers]
set = { "X-Frame-Options" = "SAMEORIGIN" }
remove = [ "X-Powered-By" ]
[tls]
mode = "managed" # managed | custom
min_version = "1.2"
redirect_http = true
Cache behaviour
By default we honour Cache-Control from your origin. When the origin says nothing, default_ttl applies. Rules are evaluated top to bottom and the first match wins.
stale_while_revalidate— serve the stale object immediately and refresh in the background.stale_if_error— keep serving a stale object while the origin is returning 5xx. This is the setting that turns an origin outage into a non-event.Varyis respected, but aVary: *from the origin disables caching for that object entirely.- Responses with
Set-Cookieare never cached unless a rule setsignore_set_cookie = true.
HTTP API
Base URL https://api.digitalprovider.online/v1. Authenticate with a bearer token from the dashboard. All responses are JSON; all timestamps are RFC 3339 in UTC.
Purge by URL
curl -X POST https://api.digitalprovider.online/v1/sites/marketing/purge \
-H "Authorization: Bearer $DP_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls":["https://www.example.com/index.html"]}'
{
"purge_id": "pg_7c19ab42",
"accepted": 1,
"status": "propagating",
"locations_total": 42,
"locations_done": 0
}
Purge by tag
Attach Cache-Tag headers at the origin, then invalidate whole content groups at once.
curl -X POST https://api.digitalprovider.online/v1/sites/marketing/purge \
-H "Authorization: Bearer $DP_TOKEN" \
-d '{"tags":["product-42","nav"]}'
Check propagation
curl https://api.digitalprovider.online/v1/purges/pg_7c19ab42 \
-H "Authorization: Bearer $DP_TOKEN"
Traffic analytics
curl "https://api.digitalprovider.online/v1/sites/marketing/analytics\
?from=2026-08-01&to=2026-08-17&group_by=country,cache_status" \
-H "Authorization: Bearer $DP_TOKEN"
Rate limits
600 requests per minute per token, except purge, which is 60 per minute. Both return 429 with a Retry-After header. Purge itself is not billed and not rate-limited by object count.
Edge status endpoint
Every edge exposes an unauthenticated status document describing itself and how it sees you. It is useful for debugging routing, and it is what the widget on our home page reads.
curl https://403.digitalprovider.online/v1/edge/status
{
"status": "operational",
"node": "gdn1-403",
"region": "fra1",
"protocol": "HTTP/2.0",
"tls": "TLSv1.3",
"client": { "country": "DE", "asn": "AS3320", "network": "Deutsche Telekom AG" },
"request_id": "8f2c1e7a…",
"served_at": "2026-08-17T02:41:09+03:00"
}
Response headers we add
| Header | Meaning |
|---|---|
| X-Cache-Status | HIT, MISS, EXPIRED, STALE or BYPASS |
| X-Edge-Location | Three-letter site code that served the response |
| X-Request-Id | Opaque id — quote it when you open a ticket |
| Server | Always dp-edge |
Support
Technical questions go to support@digitalprovider.online. Suspected abuse of the network goes to abuse@digitalprovider.online. Security reports have their own channel — see security.txt.