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.
  • Vary is respected, but a Vary: * from the origin disables caching for that object entirely.
  • Responses with Set-Cookie are never cached unless a rule sets ignore_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

HeaderMeaning
X-Cache-StatusHIT, MISS, EXPIRED, STALE or BYPASS
X-Edge-LocationThree-letter site code that served the response
X-Request-IdOpaque id — quote it when you open a ticket
ServerAlways 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.