Skip to main content
The app manifest defines which pipeline/model combinations are discoverable for your app through the PymtHouse network. It is expressed as a subtractive allowlist: the full NaaP pipeline catalog minus any 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

Currently returns a fail-open stub. The signing hot path does not enforce capability restrictions; when the enforcement cache was removed, the GET stub was introduced to avoid breaking integrators that depend on the empty-capabilities signal:

ETag caching

The GET endpoint supports conditional requests via If-None-Match:
When the manifest has not changed, the server returns 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.
SDK:

PUT manifest (update exclusions)

Update the excludedCapabilities on the app’s Network Price plan. The response re-resolves the full manifest after writing:
Request body:
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

The manifestVersion 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 during PUT, which needs to validate and resolve exclusions).

Key design decisions

  1. 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.
  2. 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.
  3. Conflict guard on PUT. Preventing exclusions that would hide capabilities still referenced by billing plans keeps the billing and discovery configuration consistent.
  • Plans — custom billing plans reference manifest capabilities
  • Builder SDKgetAppManifest, parseAppManifestResponse, computeManifestRevision