excludedCapabilities you configure is what integrators and end-users can discover.
GET .../manifest behavior change: The GET endpoint currently returns a fail-open stub (capabilities: [], excludedCapabilities: [], manifestVersion: "empty") rather than the fully-resolved capability list. PUT .../manifest still resolves and returns the full manifest after writing exclusions. The manifest is not enforced on the signing hot path — direct DMZ signing does not consult it.Endpoints
Authentication
GET manifest
ETag caching
The GET endpoint supports conditional requests viaIf-None-Match:
304 Not Modified with no body. Cache the ETag from the response header and send it on subsequent requests to avoid re-downloading an unchanged manifest.
PUT manifest (update exclusions)
Update theexcludedCapabilities on the app’s Network Price plan. The response re-resolves the full manifest after writing:
Response mirrors the
GET shape: { capabilities, excludedCapabilities, manifestVersion } with the re-resolved list.
Returns 409 Conflict if the new exclusions would hide pipeline/models that a custom billing plan still has capability bundles for. Remove the conflicting capability bundles from the plan first, or relax the exclusions.
Manifest version
ThemanifestVersion field is a SHA-256 prefix (24 hex characters) over the sorted capabilities and excludedCapabilities. Use it for cache-busting and change detection — if the version matches your cached value, no downstream update is needed.
SDK helper:
Fail-open behavior
capabilities: []→ no restriction. An empty capabilities list means the full catalog is discoverable (fail-open). Integrators must not interpret an empty array as “nothing allowed”.503 Service Unavailable→ returned when the NaaP pipeline catalog cannot be loaded on the server side (only duringPUT, which needs to validate and resolve exclusions).
Key design decisions
- Fail-open stub on GET. The in-process enforcement cache was removed because it failed closed on replicas or after restarts, rejecting otherwise-valid signing requests. The signing hot path no longer consults the manifest; capability scoping is expressed through exclusions in the dashboard and surfaced via the manifest API for informational/discovery purposes only.
- Subtractive exclusion model. Starting from the full NaaP catalog and subtracting exclusions makes it safe to add new pipelines/models to the catalog without requiring integrators to update an allowlist.
- Conflict guard on PUT. Preventing exclusions that would hide capabilities still referenced by billing plans keeps the billing and discovery configuration consistent.
Related guides
- Plans — custom billing plans reference manifest capabilities
- Builder SDK —
getAppManifest,parseAppManifestResponse,computeManifestRevision