Download OpenAPI specification:
CDN and edge gateway management API for the EncoraStream platform.
Covers:
All write operations require a Bearer token with the admin role.
Read-only endpoints (health, metrics) are unauthenticated or accept any valid token.
API tokens are supported as an alternative to JWT for machine-to-machine access.
CloudFront-style distribution management. Alias of CDN endpoints with distribution-scoped configuration.
CloudFront-style alias for listing CDN endpoints.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}CloudFront-style alias for creating a CDN endpoint.
| name required | string <= 100 characters |
| default_origin_id required | string <uuid> |
| http_version | string Default: "http2" Enum: "http1.1" "http2" "http2and3" |
| ipv6_enabled | boolean Default: true |
| response_headers_policy_id | string <uuid> |
object (TlsConfig) TLS settings applied to client-facing connections on this endpoint. | |
object (CompressionConfig) Automatic response compression. The edge compresses responses if the client
sends | |
object (GeoRestriction) Country-level access control. Uses the client IP address resolved to an ISO 3166-1 alpha-2 country code. VPN / proxy detection is not performed at this layer. | |
Array of objects (CustomErrorPage) | |
| shield_region | string |
| tags | Array of strings[ items <= 64 characters ] |
{- "name": "string",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "string",
- "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name | string <= 100 characters |
| default_origin_id | string <uuid> |
| http_version | string Enum: "http1.1" "http2" "http2and3" |
| ipv6_enabled | boolean |
| response_headers_policy_id | string or null <uuid> |
object (TlsConfig) TLS settings applied to client-facing connections on this endpoint. | |
object (CompressionConfig) Automatic response compression. The edge compresses responses if the client
sends | |
object (GeoRestriction) Country-level access control. Uses the client IP address resolved to an ISO 3166-1 alpha-2 country code. VPN / proxy detection is not performed at this layer. | |
Array of objects (CustomErrorPage) | |
| shield_region | string or null |
| tags | Array of strings[ items <= 64 characters ] |
{- "name": "string",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "string",
- "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "code": "NOT_FOUND",
- "message": "Resource not found.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| url | string <uri> <= 2048 characters Optional convenience form. Current Rails implementation accepts split
|
| scheme | string Default: "https" Enum: "http" "https" |
| host required | string <= 253 characters |
| port | integer [ 1 .. 65535 ] Default: 443 |
| path_prefix | string <= 2048 characters Default: "" |
| enabled | boolean Default: true |
| health_check_url | string <uri> Dedicated health-check endpoint. Defaults to the origin root. |
| verify_tls | boolean Default: true |
| allow_private_network | boolean Default: false |
| ssrf_protection | boolean Default: true |
| timeout_ms | integer [ 100 .. 60000 ] Default: 30000 |
| connect_timeout_ms | integer [ 100 .. 10000 ] Default: 5000 |
| max_retries | integer [ 0 .. 5 ] Default: 2 |
| retry_on | Array of strings Default: ["connect_failure","5xx"] Items Enum: "connect_failure" "5xx" 429 408 |
| forward_host_header | boolean Default: true |
object | |
| tags | Array of strings[ items <= 64 characters ] |
{- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "enabled": true,
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "property1": "string",
- "property2": "string"
}, - "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| origin_id required | string <uuid> |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (RouteMatch) Rules evaluated against the incoming request. All specified conditions must match
(logical AND). At least one of |
| strip_prefix | string |
| response_headers_policy_id | string <uuid> |
Array of objects (RedirectRule) | |
| compression_enabled | boolean or null |
{- "name": "string",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "string",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| origin_id required | string <uuid> |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (RouteMatch) Rules evaluated against the incoming request. All specified conditions must match
(logical AND). At least one of |
| strip_prefix | string |
| response_headers_policy_id | string <uuid> |
Array of objects (RedirectRule) | |
| compression_enabled | boolean or null |
{- "name": "string",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "string",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (CacheRuleMatch) Path and method conditions that activate this cache rule.
At least one of |
| ttl_seconds required | integer >= 0 |
| browser_ttl_seconds | integer or null >= 0 |
object (CacheKey) Controls which request attributes are included in the cache key. Reducing the key cardinality increases cache hit rates but may cause stale data to be served across different users or contexts. | |
object (CacheBypass) Conditions under which caching is skipped entirely. | |
| stale_while_revalidate_seconds | integer or null >= 0 |
| stale_if_error_seconds | integer or null >= 0 |
| cache_status_header | boolean Default: true |
{- "name": "string",
- "enabled": true,
- "priority": 100,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 0,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 0,
- "stale_if_error_seconds": 0,
- "cache_status_header": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| type | string Deprecated Enum: "path" "wildcard" "tag" "all" Backward-compatible alias for |
| purge_type required | string Enum: "path" "wildcard" "tag" "all" |
| paths | Array of strings [ 1 .. 500 ] items [ items <= 2048 characters ] Required for type |
| tags | Array of strings [ 1 .. 100 ] items [ items <= 256 characters ] Required for type |
{- "type": "path",
- "purge_type": "path",
- "paths": [
- "string"
], - "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| type | string Deprecated Enum: "path" "wildcard" "tag" "all" Backward-compatible alias for |
| purge_type required | string Enum: "path" "wildcard" "tag" "all" |
| paths | Array of strings [ 1 .. 500 ] items [ items <= 2048 characters ] Required for type |
| tags | Array of strings [ 1 .. 100 ] items [ items <= 256 characters ] Required for type |
{- "type": "path",
- "purge_type": "path",
- "paths": [
- "string"
], - "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| hostname required | string <= 253 characters Fully qualified domain name to attach (e.g. |
| certificate_source required | string Enum: "managed" "custom" |
object Required when |
{- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "custom_certificate": {
- "certificate_pem": "string",
- "private_key_pem": "string"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard Security Headers",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "X-Real-IP",
- "X-Admin-Bypass"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| description | string <= 500 characters |
object (CorsConfig) Cross-Origin Resource Sharing policy applied to matched responses.
When enabled, the CDN injects or overrides CORS headers on behalf of the origin.
Requests with an | |
object (SecurityHeadersConfig) OWASP-recommended security response headers. Each header can be individually enabled and optionally set to override the origin value (default) or only fill when absent. | |
Array of objects (CustomHeaderEntry) | |
| remove_response_headers | Array of strings[ items <= 256 characters ] |
Array of objects (CustomHeaderEntry) | |
| remove_request_headers | Array of strings[ items <= 256 characters ] |
{- "name": "string",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "string"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard Security Headers",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "X-Real-IP",
- "X-Admin-Bypass"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production signing key",
- "algorithm": "HMAC-SHA256",
- "status": "active",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| algorithm | string Default: "HMAC-SHA256" Enum: "HMAC-SHA256" "HMAC-SHA512" |
| secret | string >= 32 characters Custom secret value. If omitted, the server generates a cryptographically secure 64-character secret automatically. |
| token_param | string Default: "token" |
| expires_param | string Default: "expires" |
| ip_binding_enabled | boolean Default: false |
{- "name": "string",
- "algorithm": "HMAC-SHA256",
- "secret": "stringstringstringstringstringst",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production signing key",
- "algorithm": "HMAC-SHA256",
- "status": "active",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "allow",
- "cidr": "203.0.113.0/24",
- "description": "string",
- "priority": 100,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| action required | string Enum: "allow" "block" "challenge" |
| cidr required | string |
| description | string <= 255 characters |
| priority | integer [ 1 .. 1000 ] Default: 100 |
{- "action": "allow",
- "cidr": "string",
- "description": "string",
- "priority": 100
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "allow",
- "cidr": "203.0.113.0/24",
- "description": "string",
- "priority": 100,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| destination_type required | string Enum: "s3" "datadog" "elasticsearch" "http" "gcs" |
| destination_config required | object |
| log_format | string Default: "ndjson" Enum: "json" "ndjson" "w3c_extended" |
| fields | Array of strings |
| endpoint_ids | Array of strings <uuid> [ items <uuid > ] |
{- "name": "string",
- "destination_type": "s3",
- "destination_config": { },
- "log_format": "json",
- "fields": [
- "string"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| enabled | boolean Filter by enabled state. |
| health_status | string Enum: "healthy" "degraded" "unhealthy" "unknown" Filter by health status. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| name required | string <= 100 characters |
| url | string <uri> <= 2048 characters Optional convenience form. Current Rails implementation accepts split
|
| scheme | string Default: "https" Enum: "http" "https" |
| host required | string <= 253 characters |
| port | integer [ 1 .. 65535 ] Default: 443 |
| path_prefix | string <= 2048 characters Default: "" |
| enabled | boolean Default: true |
| health_check_url | string <uri> Dedicated health-check endpoint. Defaults to the origin root. |
| verify_tls | boolean Default: true |
| allow_private_network | boolean Default: false |
| ssrf_protection | boolean Default: true |
| timeout_ms | integer [ 100 .. 60000 ] Default: 30000 |
| connect_timeout_ms | integer [ 100 .. 10000 ] Default: 5000 |
| max_retries | integer [ 0 .. 5 ] Default: 2 |
| retry_on | Array of strings Default: ["connect_failure","5xx"] Items Enum: "connect_failure" "5xx" 429 408 |
| forward_host_header | boolean Default: true |
object | |
| tags | Array of strings[ items <= 64 characters ] |
{- "name": "Primary API Origin",
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| origin_id required | string <uuid> UUID of the origin resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| origin_id required | string <uuid> UUID of the origin resource. |
| If-Match | string ETag of the resource version the client last read. The request is rejected with
|
| name | string <= 100 characters |
| url | string <uri> <= 2048 characters |
| scheme | string Enum: "http" "https" |
| host | string <= 253 characters |
| port | integer [ 1 .. 65535 ] |
| path_prefix | string <= 2048 characters |
| enabled | boolean |
| health_check_url | string or null <uri> |
| verify_tls | boolean |
| allow_private_network | boolean |
| ssrf_protection | boolean |
| timeout_ms | integer [ 100 .. 60000 ] |
| connect_timeout_ms | integer [ 100 .. 10000 ] |
| max_retries | integer [ 0 .. 5 ] |
| retry_on | Array of strings Items Enum: "connect_failure" "5xx" 429 408 |
| forward_host_header | boolean |
object | |
| tags | Array of strings[ items <= 64 characters ] |
{- "name": "string",
- "scheme": "http",
- "host": "string",
- "port": 1,
- "path_prefix": "string",
- "enabled": true,
- "verify_tls": true,
- "allow_private_network": true,
- "ssrf_protection": true,
- "timeout_ms": 100,
- "connect_timeout_ms": 100,
- "max_retries": 5,
- "retry_on": [
- "connect_failure"
], - "forward_host_header": true,
- "custom_headers": {
- "property1": "string",
- "property2": "string"
}, - "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Deletes an origin. Fails with 409 Conflict if the origin is referenced
by one or more active routes.
| origin_id required | string <uuid> UUID of the origin resource. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| origin_id required | string <uuid> UUID of the origin resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| origin_id required | string <uuid> UUID of the origin resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| url | string <uri> <= 2048 characters Optional convenience form. Current Rails implementation accepts split
|
| scheme | string Default: "https" Enum: "http" "https" |
| host required | string <= 253 characters |
| port | integer [ 1 .. 65535 ] Default: 443 |
| path_prefix | string <= 2048 characters Default: "" |
| enabled | boolean Default: true |
| health_check_url | string <uri> Dedicated health-check endpoint. Defaults to the origin root. |
| verify_tls | boolean Default: true |
| allow_private_network | boolean Default: false |
| ssrf_protection | boolean Default: true |
| timeout_ms | integer [ 100 .. 60000 ] Default: 30000 |
| connect_timeout_ms | integer [ 100 .. 10000 ] Default: 5000 |
| max_retries | integer [ 0 .. 5 ] Default: 2 |
| retry_on | Array of strings Default: ["connect_failure","5xx"] Items Enum: "connect_failure" "5xx" 429 408 |
| forward_host_header | boolean Default: true |
object | |
| tags | Array of strings[ items <= 64 characters ] |
{- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "enabled": true,
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "property1": "string",
- "property2": "string"
}, - "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Primary API Origin",
- "scheme": "http",
- "host": "api-origin.encorastream.internal",
- "port": 443,
- "path_prefix": "",
- "protocol": "http",
- "enabled": true,
- "health_status": "healthy",
- "verify_tls": true,
- "allow_private_network": false,
- "ssrf_protection": true,
- "timeout_ms": 30000,
- "connect_timeout_ms": 5000,
- "max_retries": 2,
- "retry_on": [
- "connect_failure",
- "5xx"
], - "forward_host_header": true,
- "custom_headers": {
- "X-Origin-Token": "redacted"
}, - "tags": [
- "api",
- "primary"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns the latest health check result for an origin. Health probes are sent automatically from each edge node at the interval configured on the origin. This endpoint returns the aggregated worst-case status across all edge nodes.
| origin_id required | string <uuid> UUID of the origin resource. |
{- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "status": "healthy",
- "latency_ms": 0,
- "last_success_at": "2019-08-24T14:15:22Z",
- "last_failure_at": "2019-08-24T14:15:22Z",
- "failure_reason": "Connection refused (TCP)",
- "consecutive_failures": 0,
- "checked_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| origin_id | string <uuid> Filter by origin UUID. |
| enabled | boolean |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| name required | string <= 100 characters |
| origin_id required | string <uuid> |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (RouteMatch) Rules evaluated against the incoming request. All specified conditions must match
(logical AND). At least one of |
| strip_prefix | string |
| response_headers_policy_id | string <uuid> |
Array of objects (RedirectRule) | |
| compression_enabled | boolean or null |
{- "name": "Main API Route",
- "origin_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f0001",
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com"
], - "paths": [
- "/api/*"
]
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| route_id required | string <uuid> UUID of the route resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| route_id required | string <uuid> UUID of the route resource. |
| If-Match | string ETag of the resource version the client last read. The request is rejected with
|
| name | string <= 100 characters |
| origin_id | string <uuid> |
| enabled | boolean |
| priority | integer [ 0 .. 10000 ] |
object (RouteMatch) Rules evaluated against the incoming request. All specified conditions must match
(logical AND). At least one of | |
| strip_prefix | string or null |
| response_headers_policy_id | string or null <uuid> |
Array of objects (RedirectRule) | |
| compression_enabled | boolean or null |
{- "name": "string",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 10000,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "string",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| route_id required | string <uuid> UUID of the route resource. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| route_id required | string <uuid> UUID of the route resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| route_id required | string <uuid> UUID of the route resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| origin_id | string <uuid> Filter by origin UUID. |
| enabled | boolean |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| name required | string <= 100 characters |
| origin_id required | string <uuid> |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (RouteMatch) Rules evaluated against the incoming request. All specified conditions must match
(logical AND). At least one of |
| strip_prefix | string |
| response_headers_policy_id | string <uuid> |
Array of objects (RedirectRule) | |
| compression_enabled | boolean or null |
{- "name": "Main API Route",
- "origin_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f0001",
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com"
], - "paths": [
- "/api/*"
]
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| route_id required | string <uuid> UUID of the route resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| route_id required | string <uuid> UUID of the route resource. |
| If-Match | string ETag of the resource version the client last read. The request is rejected with
|
| name | string <= 100 characters |
| origin_id | string <uuid> |
| enabled | boolean |
| priority | integer [ 0 .. 10000 ] |
object (RouteMatch) Rules evaluated against the incoming request. All specified conditions must match
(logical AND). At least one of | |
| strip_prefix | string or null |
| response_headers_policy_id | string or null <uuid> |
Array of objects (RedirectRule) | |
| compression_enabled | boolean or null |
{- "name": "string",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 10000,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "string",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| route_id required | string <uuid> UUID of the route resource. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| route_id required | string <uuid> UUID of the route resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| route_id required | string <uuid> UUID of the route resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| origin_id required | string <uuid> |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (RouteMatch) Rules evaluated against the incoming request. All specified conditions must match
(logical AND). At least one of |
| strip_prefix | string |
| response_headers_policy_id | string <uuid> |
Array of objects (RedirectRule) | |
| compression_enabled | boolean or null |
{- "name": "string",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "string",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| origin_id required | string <uuid> |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (RouteMatch) Rules evaluated against the incoming request. All specified conditions must match
(logical AND). At least one of |
| strip_prefix | string |
| response_headers_policy_id | string <uuid> |
Array of objects (RedirectRule) | |
| compression_enabled | boolean or null |
{- "name": "string",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "string",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Main API Route",
- "origin_id": "fa284d86-c703-4b55-825c-a163977fd80a",
- "enabled": true,
- "priority": 100,
- "match": {
- "hosts": [
- "cdn.encorastream.com",
- "*.encorastream.com"
], - "paths": [
- "/api/*",
- "/static/*"
], - "methods": [
- "GET"
]
}, - "strip_prefix": "/api/v2",
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "redirect_rules": [
- {
- "type": "http_to_https",
- "status_code": 301,
- "match_path": "/old-blog/*",
- "redirect_to": "/blog/$1"
}
], - "compression_enabled": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| enabled | boolean |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Cache rules are validated before activation. Invalid rules return 422.
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| name required | string <= 100 characters |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (CacheRuleMatch) Path and method conditions that activate this cache rule.
At least one of |
| ttl_seconds required | integer >= 0 |
| browser_ttl_seconds | integer or null >= 0 |
object (CacheKey) Controls which request attributes are included in the cache key. Reducing the key cardinality increases cache hit rates but may cause stale data to be served across different users or contexts. | |
object (CacheBypass) Conditions under which caching is skipped entirely. | |
| stale_while_revalidate_seconds | integer or null >= 0 |
| stale_if_error_seconds | integer or null >= 0 |
| cache_status_header | boolean Default: true |
{- "name": "Static Assets Cache",
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 3600,
- "stale_while_revalidate_seconds": 60,
- "cache_key": {
- "include_query_params": [ ],
- "exclude_query_params": [
- "utm_source",
- "utm_medium"
]
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cache_rule_id required | string <uuid> UUID of the cache rule resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cache_rule_id required | string <uuid> UUID of the cache rule resource. |
| If-Match | string ETag of the resource version the client last read. The request is rejected with
|
| name | string <= 100 characters |
| enabled | boolean |
| priority | integer [ 0 .. 10000 ] |
object (CacheRuleMatch) Path and method conditions that activate this cache rule.
At least one of | |
| ttl_seconds | integer >= 0 |
| browser_ttl_seconds | integer or null >= 0 |
object (CacheKey) Controls which request attributes are included in the cache key. Reducing the key cardinality increases cache hit rates but may cause stale data to be served across different users or contexts. | |
object (CacheBypass) Conditions under which caching is skipped entirely. | |
| stale_while_revalidate_seconds | integer or null >= 0 |
| stale_if_error_seconds | integer or null >= 0 |
| cache_status_header | boolean |
{- "name": "string",
- "enabled": true,
- "priority": 10000,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 0,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 0,
- "stale_if_error_seconds": 0,
- "cache_status_header": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cache_rule_id required | string <uuid> UUID of the cache rule resource. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| cache_rule_id required | string <uuid> UUID of the cache rule resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cache_rule_id required | string <uuid> UUID of the cache rule resource. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| enabled | boolean Default: true |
| priority | integer [ 0 .. 10000 ] Default: 100 |
required | object (CacheRuleMatch) Path and method conditions that activate this cache rule.
At least one of |
| ttl_seconds required | integer >= 0 |
| browser_ttl_seconds | integer or null >= 0 |
object (CacheKey) Controls which request attributes are included in the cache key. Reducing the key cardinality increases cache hit rates but may cause stale data to be served across different users or contexts. | |
object (CacheBypass) Conditions under which caching is skipped entirely. | |
| stale_while_revalidate_seconds | integer or null >= 0 |
| stale_if_error_seconds | integer or null >= 0 |
| cache_status_header | boolean Default: true |
{- "name": "string",
- "enabled": true,
- "priority": 100,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 0,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 0,
- "stale_if_error_seconds": 0,
- "cache_status_header": true
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "name": "Static Assets Cache",
- "enabled": true,
- "priority": 50,
- "match": {
- "paths": [
- "/static/*",
- "*.css",
- "*.js"
], - "methods": [
- "GET",
- "HEAD"
], - "content_types": [
- "image/",
- "text/css",
- "application/javascript"
]
}, - "ttl_seconds": 86400,
- "browser_ttl_seconds": 0,
- "cache_key": {
- "include_headers": [
- "Accept-Encoding"
], - "include_query_params": [
- "version",
- "locale"
], - "exclude_query_params": [
- "utm_source",
- "utm_medium",
- "fbclid"
], - "include_cookies": [ ]
}, - "bypass": {
- "if_cookie_present": [
- "session",
- "auth_token"
], - "if_header_present": [
- "Authorization",
- "X-No-Cache"
], - "if_query_param_present": [
- "preview",
- "nocache"
]
}, - "stale_while_revalidate_seconds": 60,
- "stale_if_error_seconds": 3600,
- "cache_status_header": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns the purge audit history, newest first.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "pending" "in_progress" "completed" "failed" |
| type | string Enum: "path" "wildcard" "tag" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Validates and submits a purge request. Purges are executed asynchronously
across edge nodes. Poll GET /purge/{purge_id} to track propagation.
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| type | string Deprecated Enum: "path" "wildcard" "tag" "all" Backward-compatible alias for |
| purge_type required | string Enum: "path" "wildcard" "tag" "all" |
| paths | Array of strings [ 1 .. 500 ] items [ items <= 2048 characters ] Required for type |
| tags | Array of strings [ 1 .. 100 ] items [ items <= 256 characters ] Required for type |
{- "type": "path",
- "paths": [
- "/api/v2/movies/018fde1a-9b2c-7f3e-8d4a-2b5c6e7f0001",
- "/api/v2/movies/018fde1a-9b2c-7f3e-8d4a-2b5c6e7f0002"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| purge_id required | string <uuid> UUID of the purge request. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns the purge audit history, newest first.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "pending" "in_progress" "completed" "failed" |
| type | string Enum: "path" "wildcard" "tag" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Validates and submits a purge request. Purges are executed asynchronously
across edge nodes. Poll GET /purge/{purge_id} to track propagation.
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| type | string Deprecated Enum: "path" "wildcard" "tag" "all" Backward-compatible alias for |
| purge_type required | string Enum: "path" "wildcard" "tag" "all" |
| paths | Array of strings [ 1 .. 500 ] items [ items <= 2048 characters ] Required for type |
| tags | Array of strings [ 1 .. 100 ] items [ items <= 256 characters ] Required for type |
{- "type": "path",
- "paths": [
- "/api/v2/movies/018fde1a-9b2c-7f3e-8d4a-2b5c6e7f0001",
- "/api/v2/movies/018fde1a-9b2c-7f3e-8d4a-2b5c6e7f0002"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| purge_id required | string <uuid> UUID of the purge request. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| type | string Deprecated Enum: "path" "wildcard" "tag" "all" Backward-compatible alias for |
| purge_type required | string Enum: "path" "wildcard" "tag" "all" |
| paths | Array of strings [ 1 .. 500 ] items [ items <= 2048 characters ] Required for type |
| tags | Array of strings [ 1 .. 100 ] items [ items <= 256 characters ] Required for type |
{- "type": "path",
- "purge_type": "path",
- "paths": [
- "string"
], - "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| type | string Deprecated Enum: "path" "wildcard" "tag" "all" Backward-compatible alias for |
| purge_type required | string Enum: "path" "wildcard" "tag" "all" |
| paths | Array of strings [ 1 .. 500 ] items [ items <= 2048 characters ] Required for type |
| tags | Array of strings [ 1 .. 100 ] items [ items <= 256 characters ] Required for type |
{- "type": "path",
- "purge_type": "path",
- "paths": [
- "string"
], - "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| role | string Enum: "viewer" "operator" "admin" "superadmin" |
| status | string Enum: "active" "deactivated" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "display_name": "string",
- "role": "viewer",
- "status": "active",
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Creates an admin user and sends an invitation email. The invited user sets their own password via the invitation link.
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| email required | string <email> <= 254 characters |
| display_name | string <= 100 characters |
| role required | string Enum: "viewer" "operator" "admin" "superadmin" |
{- "email": "ops@encorastream.com",
- "display_name": "Ops Engineer",
- "role": "operator"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "display_name": "string",
- "role": "viewer",
- "status": "active",
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| user_id required | string <uuid> UUID of the admin user. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "display_name": "string",
- "role": "viewer",
- "status": "active",
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| user_id required | string <uuid> UUID of the admin user. |
| If-Match | string ETag of the resource version the client last read. The request is rejected with
|
| display_name | string <= 100 characters |
| role | string Enum: "viewer" "operator" "admin" "superadmin" |
{- "display_name": "string",
- "role": "viewer"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "display_name": "string",
- "role": "viewer",
- "status": "active",
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Revokes the user's access immediately. All active sessions are invalidated. Deactivated users cannot log in. This action is reversible via reactivation. Superadmin accounts cannot be deactivated by non-superadmin callers.
| user_id required | string <uuid> UUID of the admin user. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "display_name": "string",
- "role": "viewer",
- "status": "active",
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| user_id required | string <uuid> UUID of the admin user. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "email": "user@example.com",
- "display_name": "string",
- "role": "viewer",
- "status": "active",
- "last_login_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns all tokens. Token values are never returned in list responses.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "active" "revoked" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "CI Deploy Token",
- "role": "viewer",
- "status": "active",
- "last_used_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Creates a new API token. The plaintext token value is returned only in this
response under the token field. It cannot be retrieved again — store it securely.
| name required | string <= 100 characters |
| role required | string Enum: "viewer" "operator" "admin" |
| expires_at | string <date-time> Optional expiry timestamp. Omit for a non-expiring token. |
{- "name": "CI Deploy Token",
- "role": "operator",
- "expires_at": "2027-01-01T00:00:00Z"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "CI Deploy Token",
- "role": "viewer",
- "status": "active",
- "last_used_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns token metadata. The token value is never returned.
| token_id required | string <uuid> UUID of the API token. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "CI Deploy Token",
- "role": "viewer",
- "status": "active",
- "last_used_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Permanently revokes the token. Active requests using this token are rejected immediately. This action is irreversible.
| token_id required | string <uuid> UUID of the API token. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Atomically revokes the current token and issues a replacement with the same
name, role, and expiry. The new plaintext value is returned once under token.
The old token is invalidated immediately.
| token_id required | string <uuid> UUID of the API token. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "CI Deploy Token",
- "role": "viewer",
- "status": "active",
- "last_used_at": "2019-08-24T14:15:22Z",
- "expires_at": "2019-08-24T14:15:22Z",
- "created_by": "ee824cad-d7a6-4f48-87dc-e8461a9201c4",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| actor_id | string <uuid> Filter by actor UUID. |
| resource_type | string <= 100 characters Filter by resource type (e.g. |
| resource_id | string <uuid> Filter by resource UUID. |
| action | string <= 200 characters Filter by action pattern (e.g. |
| from | string <date-time> Start of time range (inclusive, ISO 8601). |
| to | string <date-time> End of time range (inclusive, ISO 8601). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "origin.created",
- "actor_id": "04f37679-bfbf-4906-b749-01756515cecf",
- "actor_type": "user",
- "actor_role": "viewer",
- "resource_type": "origin",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "ip_address": "203.0.113.0",
- "user_agent": "string",
- "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
- "metadata": { },
- "created_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| audit_log_id required | string <uuid> UUID of the audit log entry. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "origin.created",
- "actor_id": "04f37679-bfbf-4906-b749-01756515cecf",
- "actor_type": "user",
- "actor_role": "viewer",
- "resource_type": "origin",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "ip_address": "203.0.113.0",
- "user_agent": "string",
- "request_id": "266ea41d-adf5-480b-af50-15b940c2b846",
- "metadata": { },
- "created_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "draft" "validating" "valid" "invalid" "publishing" "active" "superseded" "rolled_back" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version_number": 42,
- "description": "Added cache rule for /static/* assets",
- "status": "draft",
- "validation_errors": [
- {
- "resource_type": "string",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "message": "string"
}
], - "propagation_status": {
- "total_nodes": 0,
- "synced_nodes": 0,
- "pending_nodes": 0,
- "failed_nodes": 0,
- "completed_at": "2019-08-24T14:15:22Z"
}, - "published_by": "9ac9eee7-2153-423d-b22d-04e12679154a",
- "published_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| version_id required | string <uuid> UUID of the configuration version. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version_number": 42,
- "description": "Added cache rule for /static/* assets",
- "status": "draft",
- "validation_errors": [
- {
- "resource_type": "string",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "message": "string"
}
], - "propagation_status": {
- "total_nodes": 0,
- "synced_nodes": 0,
- "pending_nodes": 0,
- "failed_nodes": 0,
- "completed_at": "2019-08-24T14:15:22Z"
}, - "published_by": "9ac9eee7-2153-423d-b22d-04e12679154a",
- "published_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Runs a validation pass on the current set of origins, routes, and cache rules
without publishing. Returns a new draft ConfigVersion with status valid or
invalid. Useful for dry-run checks before publishing.
| description | string <= 500 characters |
{- "description": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version_number": 42,
- "description": "Added cache rule for /static/* assets",
- "status": "draft",
- "validation_errors": [
- {
- "resource_type": "string",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "message": "string"
}
], - "propagation_status": {
- "total_nodes": 0,
- "synced_nodes": 0,
- "pending_nodes": 0,
- "failed_nodes": 0,
- "completed_at": "2019-08-24T14:15:22Z"
}, - "published_by": "9ac9eee7-2153-423d-b22d-04e12679154a",
- "published_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Validates and publishes the current configuration to all edge nodes.
If validation fails, the request returns 422 with validation errors and
no change is made. An Idempotency-Key is recommended to avoid duplicate publishes.
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| description | string <= 500 characters Optional human-readable change description for this publish. |
{- "description": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version_number": 42,
- "description": "Added cache rule for /static/* assets",
- "status": "draft",
- "validation_errors": [
- {
- "resource_type": "string",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "message": "string"
}
], - "propagation_status": {
- "total_nodes": 0,
- "synced_nodes": 0,
- "pending_nodes": 0,
- "failed_nodes": 0,
- "completed_at": "2019-08-24T14:15:22Z"
}, - "published_by": "9ac9eee7-2153-423d-b22d-04e12679154a",
- "published_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Rolls back to a previous superseded configuration version. The target version
is re-published as a new active version. The rollback action is recorded in the
audit log with the acting admin's identity.
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| target_version_id required | string <uuid> UUID of the configuration version to roll back to. Must have status |
| reason | string <= 500 characters Optional reason for rollback, recorded in the audit log. |
{- "target_version_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f0099",
- "reason": "Revert route change that caused elevated error rates."
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "version_number": 42,
- "description": "Added cache rule for /static/* assets",
- "status": "draft",
- "validation_errors": [
- {
- "resource_type": "string",
- "resource_id": "4d5215ed-38bb-48ed-879a-fdb9ca58522f",
- "message": "string"
}
], - "propagation_status": {
- "total_nodes": 0,
- "synced_nodes": 0,
- "pending_nodes": 0,
- "failed_nodes": 0,
- "completed_at": "2019-08-24T14:15:22Z"
}, - "published_by": "9ac9eee7-2153-423d-b22d-04e12679154a",
- "published_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z"
}Returns 200 if the service is ready to handle traffic (database and Redis
are reachable). Returns 503 if any dependency is unavailable.
No authentication required.
{- "status": "ok",
- "version": "2.0.0",
- "timestamp": "2026-06-18T10:00:00Z",
- "components": {
- "postgresql": {
- "status": "ok",
- "latency_ms": 2
}, - "redis": {
- "status": "ok",
- "latency_ms": 1
}, - "edge_config": {
- "status": "ok",
- "latency_ms": null
}
}
}CDN endpoint (distribution) management — custom hostnames, TLS, geo restrictions, and compression
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
| status | string Enum: "deploying" "active" "disabled" "error" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Creates a new CDN endpoint (distribution). The platform provisions a CDN-assigned
hostname and begins deploying configuration to edge nodes. Status transitions to
active once propagation completes.
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| name required | string <= 100 characters |
| default_origin_id required | string <uuid> |
| http_version | string Default: "http2" Enum: "http1.1" "http2" "http2and3" |
| ipv6_enabled | boolean Default: true |
| response_headers_policy_id | string <uuid> |
object (TlsConfig) TLS settings applied to client-facing connections on this endpoint. | |
object (CompressionConfig) Automatic response compression. The edge compresses responses if the client
sends | |
object (GeoRestriction) Country-level access control. Uses the client IP address resolved to an ISO 3166-1 alpha-2 country code. VPN / proxy detection is not performed at this layer. | |
Array of objects (CustomErrorPage) | |
| shield_region | string |
| tags | Array of strings[ items <= 64 characters ] |
{- "name": "Main Web Distribution",
- "default_origin_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f0001",
- "http_version": "http2and3",
- "ipv6_enabled": true,
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "recommended",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
]
}, - "geo_restriction": {
- "enabled": false
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Partial update. Fields not sent are unchanged. Configuration changes
trigger a new deployment propagation cycle (status → deploying).
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| If-Match | string ETag of the resource version the client last read. The request is rejected with
|
| name | string <= 100 characters |
| default_origin_id | string <uuid> |
| http_version | string Enum: "http1.1" "http2" "http2and3" |
| ipv6_enabled | boolean |
| response_headers_policy_id | string or null <uuid> |
object (TlsConfig) TLS settings applied to client-facing connections on this endpoint. | |
object (CompressionConfig) Automatic response compression. The edge compresses responses if the client
sends | |
object (GeoRestriction) Country-level access control. Uses the client IP address resolved to an ISO 3166-1 alpha-2 country code. VPN / proxy detection is not performed at this layer. | |
Array of objects (CustomErrorPage) | |
| shield_region | string or null |
| tags | Array of strings[ items <= 64 characters ] |
{- "name": "string",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "string",
- "tags": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Deletes the endpoint and deprovisions its CDN hostname. All custom domains must be removed before deletion. This action is irreversible.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Stops serving traffic. Configuration and custom domains are preserved.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Main Web Distribution",
- "default_origin_id": "16367423-bbda-49b9-87cc-ee707563667e",
- "hostname": "a1b2c3d4.cdn.encorastream.com",
- "status": "deploying",
- "http_version": "http1.1",
- "ipv6_enabled": true,
- "response_headers_policy_id": "780ee3f1-d030-47d5-8ecc-82ecc0db9acc",
- "tls_config": {
- "minimum_protocol_version": "TLSv1.2",
- "cipher_policy": "compatible",
- "http_to_https_redirect": true
}, - "compression": {
- "enabled": true,
- "algorithms": [
- "br",
- "gzip"
], - "min_size_bytes": 1024
}, - "geo_restriction": {
- "enabled": false,
- "policy": "allowlist",
- "countries": [
- "CN",
- "RU",
- "KP",
- "IR"
], - "action": "block",
}, - "custom_error_pages": [
- {
- "error_code": 404,
- "response_page_path": "/errors/404.html",
- "response_code": 404,
- "ttl_seconds": 300
}
], - "shield_region": "eu-west-1",
- "tags": [
- "string"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Submits a targeted cache purge scoped to a single endpoint. Supports purging
everything, specific URLs, path prefixes, tags, or cache rule IDs.
Equivalent to POST /cache/purge but pre-scoped to one endpoint.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| type | string Deprecated Enum: "path" "wildcard" "tag" "all" Backward-compatible alias for |
| purge_type required | string Enum: "path" "wildcard" "tag" "all" |
| paths | Array of strings [ 1 .. 500 ] items [ items <= 2048 characters ] Required for type |
| tags | Array of strings [ 1 .. 100 ] items [ items <= 256 characters ] Required for type |
{- "scope": "everything"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "distribution_id": "11d26b58-bf71-4381-aa01-44a5bc2b0662",
- "type": "path",
- "purge_type": "path",
- "paths": [
- "/api/v2/movies/abc-123"
], - "tags": [
- "movies",
- "content-abc123"
], - "status": "pending",
- "edge_nodes_total": 0,
- "edge_nodes_completed": 0,
- "submitted_by": "6703ac2f-9eb5-40e9-9fde-511b2dbf4be5",
- "completed_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Proactively warms the edge cache by fetching up to 500 URLs from origin and storing the responses. Useful after deployments or content publishes to prevent cache-miss thundering-herd on first real user requests.
URLs must belong to the endpoint's CDN hostname or a configured custom domain.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| urls required | Array of strings <uri> [ 1 .. 500 ] items [ items <uri > ] Fully-qualified URLs to prefetch. Must belong to the endpoint's hostnames (CDN hostname or a configured custom domain). |
| priority | string Default: "normal" Enum: "low" "normal" "high" Scheduling priority relative to other pending prefetch jobs. |
{- "priority": "normal"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "pending",
- "total": 0,
- "fetched": 0,
- "failed": 0,
- "failed_urls": [
- {
- "url": "string",
- "reason": "string"
}
], - "created_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| job_id required | string <uuid> UUID of the cache prefetch job. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "status": "pending",
- "total": 0,
- "fetched": 0,
- "failed": 0,
- "failed_urls": [
- {
- "url": "string",
- "reason": "string"
}
], - "created_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| hostname required | string <= 253 characters Fully qualified domain name to attach (e.g. |
| certificate_source required | string Enum: "managed" "custom" |
object Required when |
{- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "custom_certificate": {
- "certificate_pem": "string",
- "private_key_pem": "string"
}
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| certificate_status | string Enum: "pending_validation" "provisioning" "active" "expiring_soon" "expired" "failed" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Attaches a custom hostname to the endpoint. For managed certificates, DNS validation records are returned and must be created in your DNS provider before the certificate can be provisioned. For custom certificates, the certificate chain and private key must be provided — the private key is encrypted at rest and never returned.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| hostname required | string <= 253 characters Fully qualified domain name to attach (e.g. |
| certificate_source required | string Enum: "managed" "custom" |
object Required when |
{- "hostname": "cdn.example.com",
- "certificate_source": "managed"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| domain_id required | string <uuid> UUID of the custom domain. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Detaches the custom hostname and revokes the managed certificate if applicable. Requests to this hostname will no longer be served after propagation completes.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| domain_id required | string <uuid> UUID of the custom domain. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Triggers a re-attempt of DNS validation and certificate provisioning for a managed certificate. Use when the initial validation failed or DNS records were added after the domain was created. No-op if certificate is already active.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| domain_id required | string <uuid> UUID of the custom domain. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Replaces the TLS certificate for a domain that uses a custom certificate. Use for manual certificate renewals. The new certificate is deployed to all edge nodes without downtime using a grace period overlap.
The private key is encrypted at rest (AES-256-GCM) and never returned in any response.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| domain_id required | string <uuid> UUID of the custom domain. |
| certificate_pem required | string Full PEM-encoded certificate chain (leaf + intermediates). Must match the domain hostname. |
| private_key_pem required | string PEM-encoded private key corresponding to the certificate. |
{- "certificate_pem": "string",
- "private_key_pem": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "hostname": "cdn.example.com",
- "certificate_source": "managed",
- "certificate_status": "pending_validation",
- "certificate_expires_at": "2019-08-24T14:15:22Z",
- "dns_validation": {
- "cname_name": "cdn.example.com",
- "cname_value": "a1b2c3d4.cdn.encorastream.com",
- "acme_challenge_name": "_acme-challenge.cdn.example.com",
- "acme_challenge_value": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Reusable policies for CORS, security headers, and custom request/response headers
| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard Security Headers",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "X-Real-IP",
- "X-Admin-Bypass"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| description | string <= 500 characters |
object (CorsConfig) Cross-Origin Resource Sharing policy applied to matched responses.
When enabled, the CDN injects or overrides CORS headers on behalf of the origin.
Requests with an | |
object (SecurityHeadersConfig) OWASP-recommended security response headers. Each header can be individually enabled and optionally set to override the origin value (default) or only fill when absent. | |
Array of objects (CustomHeaderEntry) | |
| remove_response_headers | Array of strings[ items <= 256 characters ] |
Array of objects (CustomHeaderEntry) | |
| remove_request_headers | Array of strings[ items <= 256 characters ] |
{- "name": "string",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "string"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard Security Headers",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "X-Real-IP",
- "X-Admin-Bypass"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| sort | string Sort field and direction. Prefix with |
| q | string <= 200 characters Full-text search query (max 200 characters). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard Security Headers",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "X-Real-IP",
- "X-Admin-Bypass"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| name required | string <= 100 characters |
| description | string <= 500 characters |
object (CorsConfig) Cross-Origin Resource Sharing policy applied to matched responses.
When enabled, the CDN injects or overrides CORS headers on behalf of the origin.
Requests with an | |
object (SecurityHeadersConfig) OWASP-recommended security response headers. Each header can be individually enabled and optionally set to override the origin value (default) or only fill when absent. | |
Array of objects (CustomHeaderEntry) | |
| remove_response_headers | Array of strings[ items <= 256 characters ] |
Array of objects (CustomHeaderEntry) | |
| remove_request_headers | Array of strings[ items <= 256 characters ] |
{- "name": "Standard Security Headers",
- "description": "OWASP-recommended headers for all public endpoints",
- "security_headers": {
- "strict_transport_security": {
- "enabled": true,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false
}, - "x_content_type_options": {
- "enabled": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "SAMEORIGIN"
}, - "referrer_policy": {
- "enabled": true,
- "value": "strict-origin-when-cross-origin"
}
}, - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator",
- "Server"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard Security Headers",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "X-Real-IP",
- "X-Admin-Bypass"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| policy_id required | string <uuid> UUID of the response headers policy. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard Security Headers",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "X-Real-IP",
- "X-Admin-Bypass"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Partial update. Changes take effect on the next request after propagation. All endpoints and routes referencing this policy pick up the update automatically.
| policy_id required | string <uuid> UUID of the response headers policy. |
| If-Match | string ETag of the resource version the client last read. The request is rejected with
|
| name | string <= 100 characters |
| description | string <= 500 characters |
object (CorsConfig) Cross-Origin Resource Sharing policy applied to matched responses.
When enabled, the CDN injects or overrides CORS headers on behalf of the origin.
Requests with an | |
object (SecurityHeadersConfig) OWASP-recommended security response headers. Each header can be individually enabled and optionally set to override the origin value (default) or only fill when absent. | |
Array of objects (CustomHeaderEntry) | |
| remove_response_headers | Array of strings[ items <= 256 characters ] |
Array of objects (CustomHeaderEntry) | |
| remove_request_headers | Array of strings[ items <= 256 characters ] |
{- "name": "string",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "string"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "string"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Standard Security Headers",
- "description": "string",
- "cors": {
- "enabled": false,
- "allow_methods": [
- "GET",
- "HEAD",
- "POST"
], - "allow_headers": [
- "Content-Type",
- "Authorization",
- "X-Request-Id"
], - "expose_headers": [
- "X-Request-Id",
- "X-RateLimit-Remaining"
], - "allow_credentials": false,
- "max_age_seconds": 600,
- "override_origin": true
}, - "security_headers": {
- "strict_transport_security": {
- "enabled": false,
- "max_age_seconds": 31536000,
- "include_subdomains": true,
- "preload": false,
- "override": true
}, - "content_security_policy": {
- "enabled": false,
- "policy": "default-src 'self'; script-src 'self' https://cdn.encorastream.com; object-src 'none'",
- "report_only": false,
- "override": true
}, - "x_content_type_options": {
- "enabled": true,
- "override": true
}, - "x_frame_options": {
- "enabled": true,
- "value": "DENY",
- "override": true
}, - "referrer_policy": {
- "enabled": true,
- "value": "no-referrer",
- "override": true
}, - "permissions_policy": {
- "enabled": false,
- "policy": "camera=(), geolocation=(), microphone=()",
- "override": true
}, - "x_xss_protection": {
- "enabled": false,
- "value": "1; mode=block",
- "override": true
}
}, - "custom_response_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_response_headers": [
- "X-Powered-By",
- "X-Generator"
], - "custom_request_headers": [
- {
- "name": "X-CDN-Version",
- "value": "2",
- "override": true
}
], - "remove_request_headers": [
- "X-Real-IP",
- "X-Admin-Bypass"
], - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Deletes the policy. Fails with 409 Conflict if the policy is currently
referenced by one or more endpoints or routes.
| policy_id required | string <uuid> UUID of the response headers policy. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production signing key",
- "algorithm": "HMAC-SHA256",
- "status": "active",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| algorithm | string Default: "HMAC-SHA256" Enum: "HMAC-SHA256" "HMAC-SHA512" |
| secret | string >= 32 characters Custom secret value. If omitted, the server generates a cryptographically secure 64-character secret automatically. |
| token_param | string Default: "token" |
| expires_param | string Default: "expires" |
| ip_binding_enabled | boolean Default: false |
{- "name": "string",
- "algorithm": "HMAC-SHA256",
- "secret": "stringstringstringstringstringst",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production signing key",
- "algorithm": "HMAC-SHA256",
- "status": "active",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production signing key",
- "algorithm": "HMAC-SHA256",
- "status": "active",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Creates a new HMAC signing key for this endpoint. The secret is returned
once only in the response — store it securely. Subsequent reads omit the secret.
When multiple active keys exist, the CDN validates tokens signed with any of them, enabling zero-downtime key rotation.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| name required | string <= 100 characters |
| algorithm | string Default: "HMAC-SHA256" Enum: "HMAC-SHA256" "HMAC-SHA512" |
| secret | string >= 32 characters Custom secret value. If omitted, the server generates a cryptographically secure 64-character secret automatically. |
| token_param | string Default: "token" |
| expires_param | string Default: "expires" |
| ip_binding_enabled | boolean Default: false |
{- "name": "Primary signing key",
- "algorithm": "HMAC-SHA256"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production signing key",
- "algorithm": "HMAC-SHA256",
- "secret": "string",
- "status": "active",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns signing key metadata. The secret is never returned.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| key_id required | string <uuid> UUID of the signing key. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production signing key",
- "algorithm": "HMAC-SHA256",
- "status": "active",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Permanently deletes the signing key. Any signed URLs generated with this key will immediately become invalid. Ensure the key is no longer in use before deletion. Cannot delete the last active signing key if token auth is enabled.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| key_id required | string <uuid> UUID of the signing key. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Generates a new secret for an existing signing key. During the rotation grace period (default 24 hours), the CDN accepts tokens signed with either the old or new secret, enabling zero-downtime rotation. The new secret is returned once only.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| key_id required | string <uuid> UUID of the signing key. |
| grace_period_hours | integer [ 0 .. 168 ] Default: 24 How long (in hours) the old secret remains valid after rotation. Set to 0 for immediate invalidation. |
{- "grace_period_hours": 24
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production signing key",
- "algorithm": "HMAC-SHA256",
- "secret": "string",
- "status": "active",
- "token_param": "token",
- "expires_param": "expires",
- "ip_binding_enabled": false,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "allow",
- "cidr": "203.0.113.0/24",
- "description": "string",
- "priority": 100,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| action required | string Enum: "allow" "block" "challenge" |
| cidr required | string |
| description | string <= 255 characters |
| priority | integer [ 1 .. 1000 ] Default: 100 |
{- "action": "allow",
- "cidr": "string",
- "description": "string",
- "priority": 100
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "allow",
- "cidr": "203.0.113.0/24",
- "description": "string",
- "priority": 100,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| action | string Enum: "allow" "block" "challenge" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "allow",
- "cidr": "203.0.113.0/24",
- "description": "string",
- "priority": 100,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Adds an allow or block rule for a CIDR range. Rules are evaluated at the edge
before any cache lookup or origin request. Lower priority values are evaluated first.
Caution: Adding a block rule without any allow rules blocks all non-matching traffic by default only if a default-deny policy is configured on the endpoint.
| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| action required | string Enum: "allow" "block" "challenge" |
| cidr required | string |
| description | string <= 255 characters |
| priority | integer [ 1 .. 1000 ] Default: 100 |
{- "action": "block",
- "cidr": "192.0.2.0/24",
- "description": "Block known scraper range",
- "priority": 10
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "allow",
- "cidr": "203.0.113.0/24",
- "description": "string",
- "priority": 100,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| rule_id required | string <uuid> UUID of the IP access rule. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "allow",
- "cidr": "203.0.113.0/24",
- "description": "string",
- "priority": 100,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| rule_id required | string <uuid> UUID of the IP access rule. |
| action | string Enum: "allow" "block" "challenge" |
| description | string or null <= 255 characters |
| priority | integer [ 1 .. 1000 ] |
{- "action": "allow",
- "description": "string",
- "priority": 1
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "action": "allow",
- "cidr": "203.0.113.0/24",
- "description": "string",
- "priority": 100,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| endpoint_id required | string <uuid> UUID of the CDN endpoint. |
| rule_id required | string <uuid> UUID of the IP access rule. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}| distribution_id required | string <uuid> UUID of the CDN distribution. Distribution is an alias of CDN endpoint. |
| name required | string <= 100 characters |
| destination_type required | string Enum: "s3" "datadog" "elasticsearch" "http" "gcs" |
| destination_config required | object |
| log_format | string Default: "ndjson" Enum: "json" "ndjson" "w3c_extended" |
| fields | Array of strings |
| endpoint_ids | Array of strings <uuid> [ items <uuid > ] |
{- "name": "string",
- "destination_type": "s3",
- "destination_config": { },
- "log_format": "json",
- "fields": [
- "string"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "active" "paused" "error" |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Creates a new log drain that ships CDN access logs to an external destination.
After creation, use POST /log-drains/{drain_id}/test to verify connectivity
before enabling in production.
| Idempotency-Key | string <= 255 characters Client-generated unique key (UUIDv7 recommended) that makes a write request safely retryable. Replaying the same key within 24 h returns the original result instead of performing the action twice. Recommended on purge and configuration publish requests. |
| name required | string <= 100 characters |
| destination_type required | string Enum: "s3" "datadog" "elasticsearch" "http" "gcs" |
| destination_config required | object |
| log_format | string Default: "ndjson" Enum: "json" "ndjson" "w3c_extended" |
| fields | Array of strings |
| endpoint_ids | Array of strings <uuid> [ items <uuid > ] |
{- "name": "Production logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "my-cdn-logs",
- "region": "us-east-1",
- "prefix": "encorastream/",
- "access_key_id": "AKIA...",
- "secret_access_key": "..."
}, - "log_format": "ndjson"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| drain_id required | string <uuid> UUID of the log drain. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| drain_id required | string <uuid> UUID of the log drain. |
| name | string <= 100 characters |
| destination_config | object |
| log_format | string Enum: "json" "ndjson" "w3c_extended" |
| fields | Array of strings |
| endpoint_ids | Array of strings <uuid> [ items <uuid > ] |
{- "name": "string",
- "destination_config": { },
- "log_format": "json",
- "fields": [
- "string"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
]
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Stops log delivery and removes the drain configuration.
| drain_id required | string <uuid> UUID of the log drain. |
{- "code": "UNAUTHORIZED",
- "message": "Access token is missing or invalid.",
- "request_id": "018fde1a-9b2c-7f3e-8d4a-2b5c6e7f8a9b"
}Sends a synthetic test log event to the destination to verify credentials and connectivity. Returns the result synchronously. Does not affect production log delivery.
| drain_id required | string <uuid> UUID of the log drain. |
{- "success": true,
- "latency_ms": 0,
- "error": "string"
}Suspends log delivery without deleting the drain configuration.
| drain_id required | string <uuid> UUID of the log drain. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Resumes log delivery for a paused drain.
| drain_id required | string <uuid> UUID of the log drain. |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "Production access logs → S3",
- "destination_type": "s3",
- "destination_config": {
- "bucket": "string",
- "region": "string",
- "prefix": "cdn-logs/",
- "site": "string",
- "service": "string",
- "source": "encorastream-cdn",
}, - "log_format": "json",
- "fields": [
- "timestamp",
- "client_ip",
- "method",
- "url",
- "status",
- "bytes_sent",
- "cache_status",
- "edge_node"
], - "endpoint_ids": [
- "497f6eca-6276-4993-bfeb-53cbbbba6f08"
], - "status": "active",
- "last_error": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Returns the current status and config sync state of all edge nodes.
| cursor | string Opaque pagination cursor from |
| limit | integer [ 1 .. 100 ] Default: 20 Number of items per page (1–100, default 20). |
| status | string Enum: "online" "offline" "draining" |
| region | string Filter by region identifier. |
| config_synced | boolean Filter nodes by config sync state. |
{- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "hostname": "edge-01.ams.encorastream.com",
- "region": "eu-west-1",
- "status": "online",
- "config_version": 41,
- "config_synced": true,
- "last_seen_at": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "total": 42,
- "count": 20,
- "limit": 20,
- "has_more": true,
- "next_cursor": "eyJpZCI6IjEyMyJ9",
- "prev_cursor": null
}
}Aggregated request metrics across all edge nodes for the specified period.
| period required | string Enum: "last_1h" "last_6h" "last_24h" "last_7d" |
| origin_id | string <uuid> Scope statistics to a specific origin. |
{- "period": "last_1h",
- "total_requests": 0,
- "cache_hit_rate": 1,
- "error_rate": 1,
- "avg_response_time_ms": 0.1,
- "p95_response_time_ms": 0.1,
- "p99_response_time_ms": 0.1,
- "bytes_served": 0,
- "by_status_class": {
- "2xx": 0,
- "3xx": 0,
- "4xx": 0,
- "5xx": 0
}
}Aggregated cache hit/miss metrics for the specified period.
| period required | string Enum: "last_1h" "last_6h" "last_24h" "last_7d" |
| cache_rule_id | string <uuid> Scope statistics to a specific cache rule. |
{- "period": "last_1h",
- "hit_count": 0,
- "miss_count": 0,
- "bypass_count": 0,
- "revalidate_count": 0,
- "stale_count": 0,
- "hit_rate": 1,
- "bytes_from_cache": 0,
- "bytes_from_origin": 0
}Returns all available origin shield (mid-tier cache) regions and their
current availability status. Use the id field as shield_region in
EndpointCreate or EndpointUpdate.
{- "data": [
- {
- "id": "eu-west-1",
- "name": "EU West (Ireland)",
- "location": {
- "country_code": "string",
- "city": "Dublin"
}, - "available": true,
- "latency_hint_ms": 0
}
]
}Returns egress bandwidth metrics including total bytes transferred, cache vs origin breakdown, and a per-interval timeseries for chart rendering.
| period required | string Enum: "last_1h" "last_6h" "last_24h" "last_7d" "last_30d" |
| endpoint_id | string <uuid> Scope to a specific endpoint. Omit for all endpoints. |
| granularity | string Enum: "1m" "5m" "15m" "1h" "6h" "1d" Timeseries bucket size. Defaults to a sensible value per period (e.g. 5m for last_1h, 1h for last_24h). |
{- "period": "last_24h",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "total_bytes_transferred": 0,
- "total_bytes_from_cache": 0,
- "total_bytes_from_origin": 0,
- "cache_bandwidth_ratio": 1,
- "timeseries": [
- {
- "timestamp": "2019-08-24T14:15:22Z",
- "bytes_transferred": 0,
- "bytes_from_cache": 0
}
]
}Returns the most-requested URLs for the specified period, ranked by request count or bytes transferred. Useful for identifying cache candidates and traffic hotspots.
| period required | string Enum: "last_1h" "last_6h" "last_24h" "last_7d" |
| endpoint_id | string <uuid> |
| ranked_by | string Default: "requests" Enum: "requests" "bytes_transferred" |
| limit | integer [ 1 .. 500 ] Default: 50 |
{- "period": "string",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "ranked_by": "requests",
- "items": [
- {
- "url": "/assets/main.js",
- "request_count": 0,
- "bytes_transferred": 0,
- "cache_hit_rate": 0.1,
- "cache_status_breakdown": {
- "property1": 0,
- "property2": 0
}
}
]
}Returns request and bandwidth metrics broken down by country and continent. Useful for geo restriction tuning, capacity planning, and compliance reporting.
| period required | string Enum: "last_1h" "last_6h" "last_24h" "last_7d" "last_30d" |
| endpoint_id | string <uuid> |
| limit | integer [ 1 .. 250 ] Default: 100 Maximum number of countries to return (ranked by request volume). |
{- "period": "string",
- "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",
- "by_country": [
- {
- "country_code": "US",
- "country_name": "United States",
- "request_count": 0,
- "bytes_transferred": 0,
- "error_rate": 0.1
}
], - "by_continent": [
- {
- "continent_code": "NA",
- "continent_name": "North America",
- "request_count": 0,
- "bytes_transferred": 0
}
]
}