Preflight
POST /mgt/v1/gate/preflight previews the current admission result before an
application starts work that is expensive or difficult to undo. It uses service
auth and the same principal/user identity as the later authorize request.
Preflight accepts the authorize fields feature_code, optional
feature_family_code, estimated_quantity_minor, budget, and labels. It
does not accept lease and does not require Idempotency-Key.
Guarantees and limits
Preflight and a new authorization lifecycle share the same entitlement, billing-mode, funding, quota, rate, Budget, policy, and pricing decision path. Preflight changes the effect mode of that path:
- it does not create or update a lease or idempotency envelope;
- it previews rate counters instead of consuming them;
- it does not reserve wallet or Budget value;
- it disables feature and meter auto-registration;
Preflight uses the same standard runtime identity resolution as authorize. That resolution may idempotently provision a missing billing account or user. Identity provisioning is an authentication/runtime normalization step; it is not an admission, metering, or billing-resource mutation.
The allow response has as_of, feature/family, and policy window bounds, but no
lease. Rejections reuse authorize HTTP statuses, envelope codes, metadata, and
hints. Every success or business/configuration denial that enters the admission
evaluator uses one shared evaluation instant: success returns it as data.as_of,
and denial returns it as meta.as_of. Authentication, scope, or request-shape
errors rejected before evaluation may omit as_of.
The result is advisory. Configuration, balance, budgets, counters, and other
concurrent requests can change before authorize. Always run the normal
authorize → operation → commit flow for the real operation.
Unknown features are the documented parity exception: preflight returns a read-only configuration failure, while authorize may auto-register the feature when that deployment option is enabled.
Hint handling
Treat HTTP status, ok, and envelope code as authoritative. Success hints
such as funding.xusd_shortfall, quota.remaining, or rate.limit are
advisory; a hint alone is not a denial.