Schema Overview
EaaS (Edge as a Service) is a tenant configuration system for Akamai's edge platform. Each tenant — typically identified by a hostname — gets a single JSON configuration file that controls delivery behavior (caching, routing, headers) and security policies (WAF rules, IP blocking, rate limiting).
When a request arrives at the Akamai edge, an EdgeWorker reads the tenant's configuration and applies it in real time. Changes take effect on the next request — no property activation or deployment step needed.
Configuration Structure
A tenant configuration has four top-level sections. Only configure what you need — all are optional.
tenant.json
├── tenant_id Identifies the tenant in logs and analytics
├── lists Named value lists referenced in match rules
├── delivery_config
│ ├── version Always "1.0"
│ ├── onClientRequest
│ │ └── features Caching, routing, headers, redirects...
│ ├── onOriginResponse
│ │ └── features Response headers, cache tags...
│ └── onClientResponse
│ └── features Client-facing headers, compression...
└── security_config WAF rules, IP blocking, rate limiting
Minimal Working Config
The smallest useful config routes traffic to your origin:
Add caching, security, headers, and other features as needed. Here's a more complete example:
This config caches /api/* responses for one hour, routes to a custom origin, and enables SQL injection and XSS protection.
Rule Structure
Most features use a rule-based structure — a list of rules where the first match wins:
Some features also accept a simple value (e.g., "connectTimeout": 5000) when no conditional logic is needed.
Match Conditions
Match conditions determine when a rule fires. Three operators control how conditions combine:
| Operator | Behavior |
|---|---|
matchAll | All conditions must match (AND) |
matchAny | Any condition must match (OR) |
matchNone | No conditions must match (NOT) |
See Match Conditions for the full list of conditions and examples.
Available Features
Each event handler supports different features. Click a feature name to see its full documentation.
| Feature | Event Handlers | Description |
|---|---|---|
caching | onClientRequest | Control how content is cached with flexible TTL rules and behaviors |
downstreamCaching | onClientRequest | Control how edge servers instruct client browsers and intermediate proxies to cache content. |
compression | onClientRequestonClientResponse | Enable gzip compression for specified content types to reduce bandwidth |
setVariable | onClientRequestonOriginResponseonClientResponse | Set custom variables that can be used for logging and conditional processing |
removeVary | onClientRequest | Remove or control the Vary response header to improve cache efficiency |
tieredDistribution | onClientRequest | Configure tiered distribution settings for optimized content delivery |
route | onClientRequest | Route requests to different origins based on path patterns |
redirect | onClientRequest | Configure HTTP redirects with custom status codes and destination URLs |
allowPost | onClientRequest | Enable or disable POST requests with rule-based conditions |
allowPut | onClientRequest | Enable or disable PUT requests |
allowDelete | onClientRequest | Enable or disable DELETE requests with rule-based conditions |
allowPatch | onClientRequest | Enable or disable PATCH requests |
respondWith | onClientRequestonClientResponse | Return custom responses without contacting the origin |
setHeaders | onClientRequestonClientResponseonOriginResponse | Add, modify, or remove HTTP headers in requests and responses |
http2 | onClientRequest | No longer supported in tenant file. HTTP/2 is enabled by default for all tenants. |
http3 | onClientRequest | No longer supported in tenant file. HTTP/3 is enabled by default for all tenants. |
webSockets | onClientRequest | Enable WebSocket support with conditional rules |
chunkedTransferEncoding | onClientRequest | Enable or disable chunked transfer encoding |
hsts | onClientRequest | Configure HTTP Strict Transport Security headers to enforce secure connections |
originIpAcl | onClientRequest | Configure origin IP access control lists. [https://techdocs.akamai.com/origin-ip-acl/docs/welcome](https://techdocs.akamai.com/origin-ip-acl/docs/welcome) |
breadcrumbs | onClientRequest | Enable breadcrumb tracking for debugging and monitoring |
cacheTag | onOriginResponse | Tag cached content for easier invalidation |
tenantTag | onClientRequest | Legacy tenant identification. Use top-level tenant_id instead |
readTimeout | onClientRequest | Configure timeout for reading from origin with rule-based support |
firstByteTimeout | onClientRequest | Configure timeout for first byte from origin with rule-based support |
connectTimeout | onClientRequest | Configure timeout for establishing connection to origin (integer seconds, or rules object for conditional timeouts) |
See Delivery Configuration for detailed documentation and examples for each feature.
Tenant Identification
The tenant_id property identifies the tenant in datastream logs and analytics. It is defined at the top level — outside delivery_config and security_config.
tenant_id accepts either a single string or an array of up to 5 strings. Each value must be at most 20 characters long and cannot contain "|" or "," characters.
For a single tenant:
For multiple tenant IDs (up to 5):
The tenant_id property replaces the deprecated tenantTag feature that was previously nested inside delivery_config.onClientRequest.features. Unlike tenantTag, tenant_id is a top-level property.
Lists
The lists property defines named lists of string values that can be referenced inside match conditions using the {{list.<key>}} syntax. This lets you define a set of values once and reuse it across multiple rules, avoiding duplicated values across rules and making updates easier.
List references work in any match condition value — strings, arrays, and header/query objects. You can also mix list references with inline values:
Lists can also be defined in a shared common config (common.json), making them available across all tenants. Local tenant lists take precedence over common lists when both define the same key. See the Release 1.12.0 notes for full details on common config setup.
Next Steps
- Delivery Configuration — configure caching, routing, headers, and more
- Match Conditions — target rules by path, IP, geography, headers
- Security Configuration — WAF rules, IP blocking, bot detection
- Best Practices — rule ordering, testing, debug headers, schema limits
- Configuration Examples — real-world patterns you can copy
- Tenant Validator — validate your config against the schema