Skip to main content
Returns the config bundle for a project. The bundle contains all parameters, layers, policies, and allocations needed for local SDK resolution.

Request

Path parameters

Headers

Query parameters

Response

200 OK

Returns the config bundle as JSON. Headers: Body:
Key fields:

304 Not Modified

Returned when the If-None-Match header matches the current bundle version. No body is returned.

401 Unauthorized

403 Forbidden

Returned when the key is valid but lacks the sdk:read scope:

404 Not found

Returned when no bundle exists for the project and environment:

503 Service unavailable

Returned when the config store is temporarily unavailable and no cached copy can be served. The response includes a Retry-After header (currently 5 seconds); keep your cached bundle or defaults and retry.
When the store is briefly unavailable but a recent copy exists, the endpoint keeps serving that copy instead: the response is a normal 200 with an X-Traffical-Bundle-Stale: true header and a shorter cache TTL, so clients revalidate aggressively.

ETag caching

The SDKs use ETag caching to poll for bundle updates efficiently:
  1. First request — No If-None-Match header. The response contains the full bundle with an ETag header.
  2. Subsequent requests — Include If-None-Match: <previous-etag>. If the bundle hasn’t changed, the response is 304 Not Modified with no body.
  3. When the bundle changes — The ETag changes, and the response contains the full updated bundle.
This minimizes bandwidth when the bundle hasn’t changed, which is the common case.