How your application signs users in to your support portal, ends their sessions, and verifies members. Always use HTTPS.
Your portal is reachable on your own ticket domain (for example https://ticket.yourtenant.com). The examples below use that form.
All server-to-server calls authenticate with your API Key and API Secret from Settings › API, sent as the X-API-Key and X-API-Secret headers. Keep the secret on your server: never put it in browser JavaScript or mobile apps.
Your server asks the ticket system for a short-lived sign-in link for the current user, then redirects the user's browser to it.
POST /api/auth/redirectX-API-Key + X-API-Secrettenant (your portal's slug), email, name, and optionally redirect_url (a page in your portal to open after sign-in, e.g. /tickets/42)curl -X POST "https://ticket.yourtenant.com/api/auth/redirect" \
-H "Content-Type: application/json" \
-H "X-API-Key: tk_your_api_key" \
-H "X-API-Secret: your_api_secret" \
-d '{"tenant": "yourtenant", "email": "user@yourtenant.com", "name": "Jane Doe", "redirect_url": "/tickets/42"}'
The response redirects to a one-time sign-in link of the form https://ticket.yourtenant.com/auth/callback?token=.... Send the user's browser there. The link expires after a few minutes.
Your server signs a short-lived JWT with your SSO secret (Settings › API) and posts it to the ticket system.
POST /api/jwt/logintoken (the signed JWT) and tenant_slug (your portal's slug)header.payload.signature). Use a standard JWT library.email (string) — the user's emailname (string) — the user's full nameiat (int) — issued at (Unix time)exp (int) — expiry (Unix time); keep it short, e.g. iat + 120jti (string) — a unique id per token, so a token cannot be reusedcurl -X POST "https://ticket.yourtenant.com/api/jwt/login" \
-d "token=<SIGNED_JWT>" \
-d "tenant_slug=yourtenant"
A successful response contains the user and a redirect_url to open in the user's browser.
Creating, listing and updating tickets uses API v2 under /api/v2/* with X-API-Key + X-API-Secret. See the API Integration Guide for every endpoint, request and response.
When a customer logs out of your application, tell the ticket system so their support session ends too.
POST /api/auth/logoutX-API-Key + X-API-Secretemail or external_user_id (at least one)curl -X POST "https://ticket.yourtenant.com/api/auth/logout" \
-H "Content-Type: application/json" \
-H "X-API-Key: tk_your_api_key" \
-H "X-API-Secret: your_api_secret" \
-d '{"email": "user@yourtenant.com"}'
The response is always 200 with { "success": true, "message": "Logout processed" }, whether or not the user exists. The customer is signed out of the support portal on their next page load.
This is not an endpoint on the ticket system — it is an endpoint you implement in your application. The ticket system calls it when a staff member files a ticket for someone who does not have a support account yet, to confirm that the email belongs to one of your members.
Ask your Central Tickets administrator to set:
| Field | Value |
|---|---|
| Verification URL | https://yourapp.com/api/verify-member |
| Verification token | a long random secret that only you and the ticket system know |
POST {verification URL}
Authorization: Bearer {verification token}
Content-Type: application/json
Accept: application/json
{ "email": "user@example.com" }
The call is made server-to-server with a 10-second timeout.
User exists (200 OK):
{ "exists": true, "user": { "name": "Jane Doe", "email": "user@example.com" } }
User does not exist (200 OK):
{ "exists": false }
Any non-2xx response is treated as an error, and the staff member sees "unable to verify".
| Result | Outcome |
|---|---|
| The user already has a support account | Ticket created, no call made |
| No verification URL configured | Staff are told the user must already be registered |
Your endpoint returns exists: false |
Staff are told the user is not a member |
Your endpoint returns exists: true |
A support account is created, the ticket is filed, and the user is emailed a link to it |
| Your endpoint is unreachable or returns non-2xx | Staff see an error; no ticket is created |
Authorization: Bearer token matches your verification token; reject anything else with 401.name and email — nothing else about the user.jti in JWTs.