{"openapi":"3.1.0","info":{"title":"Nimbus Edge API","description":"Edge delivery control plane: PoP directory, traffic and cache analytics, purge jobs, signed URLs, TLS profiles and DNS/host validation for zones served from the Amsterdam region.","contact":{"name":"API Support","email":"support@example.com"},"license":{"name":""},"version":"1.0.0"},"paths":{"/v1/analytics/cache":{"get":{"tags":["analytics"],"operationId":"cache_stats","parameters":[{"name":"zone","in":"query","required":false,"schema":{"type":"string"},"example":"nl-prod"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CacheResp"}}}}}}},"/v1/analytics/traffic":{"get":{"tags":["analytics"],"operationId":"traffic","parameters":[{"name":"zone","in":"query","required":false,"schema":{"type":"string"},"example":"nl-prod"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","format":"int32","minimum":0},"example":24}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrafficResp"}}}}}}},"/v1/auth/token":{"post":{"tags":["auth"],"operationId":"token","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenReq"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResp"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/cache/purge":{"post":{"tags":["cache"],"operationId":"purge","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurgeReq"}}},"required":true},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurgeResp"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"bearer_auth":[]}]}},"/v1/cache/purge/{job_id}":{"get":{"tags":["cache"],"operationId":"purge_job","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string"},"example":"pj_9f2c41a7d8b34e0e9a1c5d7b2e604f13"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurgeJob"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/cache/rules":{"get":{"tags":["cache"],"operationId":"cache_rules","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CacheRule"}}}}}}}},"/v1/fx":{"get":{"tags":["billing"],"operationId":"fx","parameters":[{"name":"base","in":"query","required":false,"schema":{"type":"string"},"example":"EUR"},{"name":"symbols","in":"query","required":false,"schema":{"type":"string"},"example":"USD,GBP,PLN"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FxResp"}}}}}}},"/v1/health":{"get":{"tags":["system"],"operationId":"health","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/v1/holidays":{"get":{"tags":["billing"],"operationId":"holidays","parameters":[{"name":"country","in":"query","required":false,"schema":{"type":"string"},"example":"NL"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Holiday"}}}}}}}},"/v1/pops":{"get":{"tags":["network"],"operationId":"pops","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Pop"}}}}}}}},"/v1/pops/{code}":{"get":{"tags":["network"],"operationId":"pop_detail","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"},"example":"ams1"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PopDetail"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/pricing":{"get":{"tags":["billing"],"operationId":"pricing","parameters":[{"name":"gb","in":"query","required":false,"schema":{"type":"number","format":"double"},"example":2500.0},{"name":"region","in":"query","required":false,"schema":{"type":"string"},"example":"eu"},{"name":"tier","in":"query","required":false,"schema":{"type":"string"},"example":"standard"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingResp"}}}}}}},"/v1/sign":{"get":{"tags":["security"],"operationId":"sign","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string"},"example":"/assets/video/intro.mp4"},{"name":"ttl","in":"query","required":false,"schema":{"type":"integer","format":"int64"},"example":3600}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignResp"}}}},"422":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/v1/status":{"get":{"tags":["system"],"operationId":"status","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusResp"}}}}}}},"/v1/tls/profiles":{"get":{"tags":["security"],"operationId":"tls_profiles","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TlsProfile"}}}}}}}},"/v1/validate/dns":{"get":{"tags":["validation"],"operationId":"dns_validate","parameters":[{"name":"type","in":"query","required":true,"schema":{"type":"string"},"example":"A"},{"name":"value","in":"query","required":true,"schema":{"type":"string"},"example":"185.199.108.153"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsResp"}}}}}}},"/v1/validate/hostname":{"get":{"tags":["validation"],"operationId":"host_validate","parameters":[{"name":"host","in":"query","required":true,"schema":{"type":"string"},"example":"cdn.example.nl"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HostResp"}}}}}}},"/v1/validate/ip":{"get":{"tags":["validation"],"operationId":"ip_lookup","parameters":[{"name":"ip","in":"query","required":true,"schema":{"type":"string"},"example":"145.220.13.7"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IpResp"}}}}}}},"/v1/vat/rates":{"get":{"tags":["billing"],"operationId":"vat_rates","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/VatRate"}}}}}}}},"/v1/verify":{"get":{"tags":["security"],"operationId":"verify","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string"},"example":"/assets/video/intro.mp4"},{"name":"expires","in":"query","required":true,"schema":{"type":"integer","format":"int64"},"example":1800000000},{"name":"signature","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResp"}}}}}}},"/v1/zones/{id}":{"get":{"tags":["network"],"operationId":"zone","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"nl-prod"}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Zone"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[{"bearer_auth":[]}]}}},"components":{"schemas":{"ApiError":{"type":"object","required":["type","title","status","detail","request_id"],"properties":{"detail":{"type":"string"},"request_id":{"type":"string"},"status":{"type":"integer","format":"int32","minimum":0},"title":{"type":"string"},"type":{"type":"string"}}},"CacheResp":{"type":"object","required":["zone","overall_hit_ratio","stale_served_pct","slices"],"properties":{"overall_hit_ratio":{"type":"number","format":"double"},"slices":{"type":"array","items":{"$ref":"#/components/schemas/CacheSlice"}},"stale_served_pct":{"type":"number","format":"double"},"zone":{"type":"string"}}},"CacheRule":{"type":"object","required":["id","match_pattern","edge_ttl_seconds","browser_ttl_seconds","respect_origin","query_string"],"properties":{"browser_ttl_seconds":{"type":"integer","format":"int32","minimum":0},"edge_ttl_seconds":{"type":"integer","format":"int32","minimum":0},"id":{"type":"string"},"match_pattern":{"type":"string"},"query_string":{"type":"string"},"respect_origin":{"type":"boolean"}}},"CacheSlice":{"type":"object","required":["content_type","requests","hit_ratio","avg_object_kb"],"properties":{"avg_object_kb":{"type":"number","format":"double"},"content_type":{"type":"string"},"hit_ratio":{"type":"number","format":"double"},"requests":{"type":"integer","format":"int64","minimum":0}}},"DnsResp":{"type":"object","required":["type","value","valid","reason","normalized"],"properties":{"normalized":{"type":"string"},"reason":{"type":"string"},"type":{"type":"string"},"valid":{"type":"boolean"},"value":{"type":"string"}}},"FxResp":{"type":"object","required":["base","date","rates","source"],"properties":{"base":{"type":"string"},"date":{"type":"string"},"rates":{"type":"object","additionalProperties":{"type":"number","format":"double"},"propertyNames":{"type":"string"}},"source":{"type":"string"}}},"Health":{"type":"object","required":["status","service","version","timestamp"],"properties":{"service":{"type":"string"},"status":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"version":{"type":"string"}}},"Holiday":{"type":"object","required":["date","name","country"],"properties":{"country":{"type":"string"},"date":{"type":"string"},"name":{"type":"string"}}},"HostResp":{"type":"object","required":["host","valid","normalized","labels","total_length","tld","reason"],"properties":{"host":{"type":"string"},"labels":{"type":"integer","minimum":0},"normalized":{"type":"string"},"reason":{"type":"string"},"tld":{"type":"string"},"total_length":{"type":"integer","minimum":0},"valid":{"type":"boolean"}}},"IpResp":{"type":"object","required":["ip","valid","version","scope","routable","reverse_arpa","routed_pop","anycast_prefix"],"properties":{"anycast_prefix":{"type":"string"},"ip":{"type":"string"},"reverse_arpa":{"type":"string"},"routable":{"type":"boolean"},"routed_pop":{"type":"string"},"scope":{"type":"string"},"valid":{"type":"boolean"},"version":{"type":"string"}}},"Pop":{"type":"object","required":["code","city","country","tier","capacity_gbps","ipv6","status"],"properties":{"capacity_gbps":{"type":"integer","format":"int32","minimum":0},"city":{"type":"string"},"code":{"type":"string"},"country":{"type":"string"},"ipv6":{"type":"boolean"},"status":{"type":"string"},"tier":{"type":"string"}}},"PopDetail":{"type":"object","required":["code","city","country","tier","capacity_gbps","ipv6","status","anycast_prefixes","upstreams","cache_tb","rtt_ms_from_ams"],"properties":{"anycast_prefixes":{"type":"array","items":{"type":"string"}},"cache_tb":{"type":"integer","format":"int32","minimum":0},"capacity_gbps":{"type":"integer","format":"int32","minimum":0},"city":{"type":"string"},"code":{"type":"string"},"country":{"type":"string"},"ipv6":{"type":"boolean"},"rtt_ms_from_ams":{"type":"number","format":"double"},"status":{"type":"string"},"tier":{"type":"string"},"upstreams":{"type":"array","items":{"type":"string"}}}},"PricingBand":{"type":"object","required":["from_gb","rate_eur_per_gb","billed_gb","subtotal_eur"],"properties":{"billed_gb":{"type":"number","format":"double"},"from_gb":{"type":"number","format":"double"},"rate_eur_per_gb":{"type":"number","format":"double"},"subtotal_eur":{"type":"number","format":"double"},"to_gb":{"type":["number","null"],"format":"double"}}},"PricingResp":{"type":"object","required":["region","tier","gb","bands","bandwidth_eur","request_fee_eur","total_net_eur","vat_pct","total_gross_eur","currency"],"properties":{"bands":{"type":"array","items":{"$ref":"#/components/schemas/PricingBand"}},"bandwidth_eur":{"type":"number","format":"double"},"currency":{"type":"string"},"gb":{"type":"number","format":"double"},"region":{"type":"string"},"request_fee_eur":{"type":"number","format":"double"},"tier":{"type":"string"},"total_gross_eur":{"type":"number","format":"double"},"total_net_eur":{"type":"number","format":"double"},"vat_pct":{"type":"number","format":"double"}}},"PurgeJob":{"type":"object","required":["job_id","status","progress_pct","pops_completed","pops_total","submitted_at"],"properties":{"job_id":{"type":"string"},"pops_completed":{"type":"integer","format":"int32","minimum":0},"pops_total":{"type":"integer","format":"int32","minimum":0},"progress_pct":{"type":"integer","format":"int32","minimum":0},"status":{"type":"string"},"submitted_at":{"type":"string","format":"date-time"}}},"PurgeReq":{"type":"object","required":["zone","paths"],"properties":{"paths":{"type":"array","items":{"type":"string"},"example":["/assets/app.js","/img/*"]},"zone":{"type":"string","example":"nl-prod"}}},"PurgeResp":{"type":"object","required":["job_id","zone","accepted_paths","status","estimated_seconds","submitted_at"],"properties":{"accepted_paths":{"type":"integer","minimum":0},"estimated_seconds":{"type":"integer","format":"int32","minimum":0},"job_id":{"type":"string"},"status":{"type":"string"},"submitted_at":{"type":"string","format":"date-time"},"zone":{"type":"string"}}},"SignResp":{"type":"object","required":["path","expires","signature","signed_url","algorithm"],"properties":{"algorithm":{"type":"string"},"expires":{"type":"integer","format":"int64"},"path":{"type":"string"},"signature":{"type":"string"},"signed_url":{"type":"string"}}},"StatusResp":{"type":"object","required":["status","service","version","pop","region","uptime_seconds","timestamp"],"properties":{"pop":{"type":"string"},"region":{"type":"string"},"service":{"type":"string"},"status":{"type":"string"},"timestamp":{"type":"string","format":"date-time"},"uptime_seconds":{"type":"integer","format":"int64","minimum":0},"version":{"type":"string"}}},"TlsProfile":{"type":"object","required":["name","min_version","ciphers","hsts_max_age","ocsp_stapling"],"properties":{"ciphers":{"type":"array","items":{"type":"string"}},"hsts_max_age":{"type":"integer","format":"int32","minimum":0},"min_version":{"type":"string"},"name":{"type":"string"},"ocsp_stapling":{"type":"boolean"}}},"TokenReq":{"type":"object","required":["grant_type","client_id","client_secret"],"properties":{"client_id":{"type":"string"},"client_secret":{"type":"string"},"grant_type":{"type":"string"}}},"TokenResp":{"type":"object","required":["access_token","token_type","expires_in","scope"],"properties":{"access_token":{"type":"string"},"expires_in":{"type":"integer","format":"int64","minimum":0},"scope":{"type":"string"},"token_type":{"type":"string"}}},"TrafficBucket":{"type":"object","required":["hour","requests","bytes","cache_hit_ratio","p95_ttfb_ms","status_5xx"],"properties":{"bytes":{"type":"integer","format":"int64","minimum":0},"cache_hit_ratio":{"type":"number","format":"double"},"hour":{"type":"string","format":"date-time"},"p95_ttfb_ms":{"type":"number","format":"double"},"requests":{"type":"integer","format":"int64","minimum":0},"status_5xx":{"type":"integer","format":"int64","minimum":0}}},"TrafficResp":{"type":"object","required":["zone","pop","window_hours","total_requests","total_bytes","avg_cache_hit_ratio","buckets"],"properties":{"avg_cache_hit_ratio":{"type":"number","format":"double"},"buckets":{"type":"array","items":{"$ref":"#/components/schemas/TrafficBucket"}},"pop":{"type":"string"},"total_bytes":{"type":"integer","format":"int64","minimum":0},"total_requests":{"type":"integer","format":"int64","minimum":0},"window_hours":{"type":"integer","format":"int32","minimum":0},"zone":{"type":"string"}}},"VatRate":{"type":"object","required":["country","standard_pct","reduced_pct","currency","effective_from"],"properties":{"country":{"type":"string"},"currency":{"type":"string"},"effective_from":{"type":"string"},"reduced_pct":{"type":"array","items":{"type":"number","format":"double"}},"standard_pct":{"type":"number","format":"double"}}},"VerifyResp":{"type":"object","required":["valid","expired","signature_match","seconds_remaining"],"properties":{"expired":{"type":"boolean"},"seconds_remaining":{"type":"integer","format":"int64"},"signature_match":{"type":"boolean"},"valid":{"type":"boolean"}}},"Zone":{"type":"object","required":["id","name","plan","origin","tls_profile","pops","created_at","monthly_gb"],"properties":{"created_at":{"type":"string","format":"date-time"},"id":{"type":"string"},"monthly_gb":{"type":"number","format":"double"},"name":{"type":"string"},"origin":{"type":"string"},"plan":{"type":"string"},"pops":{"type":"array","items":{"type":"string"}},"tls_profile":{"type":"string"}}}}},"tags":[{"name":"system","description":"Health & status"},{"name":"network","description":"Points of presence"},{"name":"analytics","description":"Traffic and cache metrics"},{"name":"cache","description":"Cache rules and purge jobs"},{"name":"security","description":"Signed URLs and TLS profiles"},{"name":"validation","description":"DNS records, IP addresses, hostnames"},{"name":"billing","description":"Pricing, VAT, FX, calendar"},{"name":"auth","description":"Authentication"}]}