A workload can exchange a verified machine identity for a short-lived STACK Passport. This avoids a stored operator API key on the workload.
Configure a SPIFFE trust domain with its JWKS URL, audience, exact SPIFFE-ID-to-agent map, and rate limit. A SPIRE-issued JWT-SVID then calls POST /v1/workload/passport. STACK verifies the issuer, signature, audience, subject, configured mapping, and rate limit before it mints a Passport.
Every Passport is issued for exactly one Mission. Open a Mission for the workload's agent with POST /v1/missions and send its ID as mission_id. The Mission must be live. A missing ID returns 400 MISSION_REQUIRED. The body accepts no other fields.
curl -X POST https://api.getstack.run/v1/workload/passport \
-H "Authorization: Bearer $JWT_SVID" \
-H "Content-Type: application/json" \
-d '{"mission_id":"ms_4hT9pQ2xVn"}'WIMSE uses a JWT Workload Identity Token. Configure an issuer URI, JWKS URI, audience, JWKS cache lifetime, rate limit, and exact workload-ID-to-agent map. The workload sends its WIT to POST /v1/workload/wit. Version 1 accepts JWT WITs. It does not accept X.509-style WITs. The body carries the same mission_id.
curl -X POST https://api.getstack.run/v1/workload/wit \
-H "Authorization: Bearer $WIMSE_WIT" \
-H "Content-Type: application/json" \
-d '{"mission_id":"ms_4hT9pQ2xVn"}'An unknown issuer, unmapped subject, invalid signature, wrong audience, disabled config, or exceeded rate limit fails closed. STACK does not fall back to an unverified workload.
See human identity and claims, OIDC, SSO, and STACK authentication, PII policy, and Passport claims.