Exchange an authorization code for a grant token
Server to server, authenticated by the app key alone — there is no grant yet, and minting one is the point. The key decides only which app is asking; whether anything is minted at all was decided by a person at authorize time and is carried entirely by the code.
Authorizations
A Connect app key (pgc_app_…), identifying the registered third-party app. Always presented together with connectGrant — the pair is one credential, and either half alone is refused. Accepted on the /connect/* surface only.
Body
256The same URI the code was issued for. Compared byte for byte.
2048The PKCE pre-image, required whenever the code was minted with a challenge. Omitted for a flow that never sent one.
43 - 128Response
The grant. Its token is on this response only.
Checked on every Connect route, even while there is only one.
Enough to recognise the token, never enough to use it.
Grants age out at ninety days, like every other credential here.
The plaintext pgc_grant_… token, on this response only. Present it together with the app key on every Connect call.
The app's world, restated where the credential is handed over so an integration can assert it is holding the kind of key it thinks it is. Here and not on the base grant shape: the consumer console's grant lists have no use for it.
sandbox, live Grants this exchange's lazy merge folded into the wallet and revoked — the parallel one-grant-per-provider world converging, one consent at a time. Tokens minted for these grant ids no longer authenticate; invalidate any you have stored.
Every member this exchange actually seated, primary first.

