Create portal session
Create a portal session for an end user and get the URL to redirect them to.
The URL carries a single-use exchange code valid for 15 minutes, which the portal redeems exactly once for a 24-hour access token via portal.exchangeCode.
Required Permissions
Authorization runs in two stages, and both must pass.
First, your root key must have one of the following permissions:
- portal.*.create_portal_session (to mint sessions for any portal in the workspace)
- portal.<portal_id>.create_portal_session (to mint sessions for a specific portal)
Second, a session can never carry a capability your root key does not itself hold. Each requested scope additionally requires the equivalent permission on every keyspace the portal resolves to:
- keys:read requires api.<api_id>.read_key and api.<api_id>.read_api
- keys:reroll and keys:create require api.<api_id>.create_key, plus api.<api_id>.encrypt_key when the keyspace stores encrypted keys
- analytics:read requires api.<api_id>.read_analytics
The * form of each is also accepted. Requesting a scope you do not hold returns 403 for the whole request rather than minting a reduced session, so a missing grant is visible instead of surfacing later as a broken portal.
Missing the portal permission itself returns 404, not 403: a caller who cannot mint for a portal is not told whether it exists.
Your root key must also be associated with a workspace that has an enabled portal.
Request body
Example request
{
"portal": "proj_1234abcd",
"externalId": "user_123",
"scopes": [
"keys:read",
"keys:reroll",
"analytics:read"
],
"returnUrl": "https://app.example.com/settings/api-keys"
}Response
Session created successfully. Redirect the end user to the returned URL.
Example response
{
"meta": {
"requestId": "req_123"
},
"data": {
"id": "ps_abc123def456",
"url": "https://portal.unkey.com/?code=pst_abc123def456"
}
}