---
title: "Verify Sso Jwt Token"
method: POST
path: "/userportal/sso/verify"
tags: ["userportal-public"]
---

# Verify Sso Jwt Token

`POST /userportal/sso/verify`

## Request

- Base URL: `https://api.feedback1.ai/api/v1`
- URL: `https://api.feedback1.ai/api/v1/userportal/sso/verify`
- Auth: none declared

Verify a JWT-based SSO token for automatic roadmap authentication.

This endpoint validates JWT tokens generated by customers using their
tenant's SSO secret. The token is passed via URL parameter: ?psst={jwt}

The product (and therefore the tenant) is resolved from the portal URL
(subdomain or verified custom domain), so tenant_id in the token is
optional. Legacy tokens that include tenant_id are accepted and
cross-checked against the resolved product's tenant.

Token structure:
{
    "email": "user@example.com",      // required
    "tenant_id": "tenant_xxx",        // optional (derived from portal URL)
    "firstName": "John",              // optional
    "lastName": "Doe",                // optional
    "avatarUrl": "https://...",       // optional
    "account": "{...}"                // optional, JSON string
}

On success, returns a session token and authenticated user info.
The user is created/updated as a CRM contact.

## Headers

- `F1-Product` string

## Request body

- SSOTokenVerifyRequest: Request to verify SSO JWT token for roadmap access.
  - `token` string, required: JWT token from URL parameter (?psst=...)

## Response `200`

Successful Response

- SSOTokenVerifyResponse: Response for SSO token verification.
  - `success` boolean, required: Whether SSO authentication succeeded
  - `session_token` string, nullable: Session token for authenticated access
  - `expires_at` string, date-time, nullable: When the session expires
  - `user` SSOUserClaims: User claims extracted from SSO JWT token.
    - `email` string, required: User's email address (required)
    - `tenant_id` string, nullable: Tenant ID (optional, derived from portal URL if omitted)
    - `firstName` string, nullable: User's first name
    - `lastName` string, nullable: User's last name
    - `avatarUrl` string, nullable: User's avatar URL
    - `account` SSOAccountData: Account/company data from SSO token.
      - `name` string, nullable: Account/company name
      - `revenue` number, nullable: Account revenue (MRR/ARR)
      - `plan` string, nullable: Subscription plan name
      - `custom_fields` object, nullable: Additional custom fields
  - `message` string, nullable: Error message if failed

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/feedback1/apis/feedback1-public-api.md) · [All operations](https://skmtc.dev/feedback1/apis/feedback1-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/feedback1/apis/feedback1-public-api/revisions/e7626420f622?raw)
