Wallboard API - Authentication (2.0)
Authentication and authorization endpoints for the Wallboard API.
| Grant Type | Use Case | Recommended |
|---|---|---|
authorization_code |
Interactive login (web/mobile apps) | Yes |
refresh_token |
Refresh expired access tokens | Yes |
password |
Service account API access | Legacy only |
The recommended authentication method for all new integrations.
PKCE Flow (Public Clients)
For applications that cannot securely store a client secret (SPAs, mobile apps):
- Create OAuth client with "Public" enabled in Wallboard UI
- No
client_secretrequired - PKCE (
code_challenge/code_verifier) is mandatory
Standard Flow (Confidential Clients)
For server-side applications that can securely store credentials:
- Create OAuth client with "Public" disabled in Wallboard UI
client_secretis required- PKCE is optional but recommended
You can create your own OAuth clients in the Wallboard UI:
- Admin level: System Settings > OAuth Clients (system-wide)
- Customer level: Customer Settings > OAuth Clients (customer-specific)
Configuration options:
| Setting | Description |
|---|---|
redirect_uri |
Allowed callback URLs (comma-separated) |
Public |
Enable for PKCE-only clients (no secret) |
| Grant types | Select: authorization_code, refresh_token |
Legacy Support Only - Do not use for new integrations.
This grant type exists for backward compatibility with existing M2M (machine-to-machine) integrations.
Requirements:
- User must have "Service Account" checkbox enabled in Wallboard UI (User Settings)
- Use
grant_type=passwordwith user credentials - Token acts on behalf of that user
Regular users cannot use the password grant type unless the "Service Account" option is enabled on their account.
Default client for service accounts:
| Property | Value |
|---|---|
| client_id | default-client |
| client_secret | 76211db5d8ea |
| Basic Auth Header | Basic ZGVmYXVsdC1jbGllbnQ6NzYyMTFkYjVkOGVh |
| Token | Default | Extended (kmsi=true) |
|---|---|---|
| Access Token | 30 minutes | 30 minutes |
| Refresh Token | 1 hour | 30 days |
- access_token: Standard OAuth2 access token (opaque)
- jwt_access_token: JWT format token for certain API endpoints
- refresh_token: Long-lived token for obtaining new access tokens
- TOTP: Time-based One-Time Password for 2FA
- PKCE: Proof Key for Code Exchange (for public clients)
- SSO: Google, Microsoft, Keycloak, SAML integration
Get or refresh access token
OAuth2 token endpoint supporting multiple grant types.
Authorization Code Grant
Exchange authorization code for tokens:
- Set
grant_type=authorization_code - Provide
codefrom authorization callback - Provide
code_verifierif PKCE was used - Provide
redirect_urimatching the authorization request
Refresh Token Grant
Refresh expired access tokens:
- Set
grant_type=refresh_token - Provide
refresh_token
Password Grant (Service Accounts Only)
Direct login for service accounts:
- Set
grant_type=password - Provide
usernameandpassword - User must have "Service Account" enabled in UI
- Optionally provide
totpfor 2FA
header Parameters
| Authorization | string Example: Basic ZGVmYXVsdC1jbGllbnQ6NzYyMTFkYjVkOGVh Basic authentication with OAuth client credentials.
Format: Required for confidential clients. Not needed for public clients (PKCE). |
Request Body schema: application/x-www-form-urlencodedrequired
| grant_type required | string Enum: "authorization_code" "refresh_token" "password" OAuth2 grant type |
| code | string Authorization code (for authorization_code grant) |
| code_verifier | string PKCE code verifier (for authorization_code grant with PKCE) |
| redirect_uri | string <uri> Redirect URI (must match authorization request) |
| refresh_token | string Refresh token (for refresh_token grant) |
| username | string <email> Service account email (for password grant) |
| password | string <password> Service account password (for password grant) |
| totp | string TOTP code for 2FA (if enabled on service account) |
| client_id | string Client ID (alternative to Basic auth header) |
| client_secret | string Client secret (alternative to Basic auth header) |
| kmsi | boolean Default: false Keep Me Signed In - extends refresh token validity to 30 days |
Responses
Request samples
- Authorization Code with PKCE
- Authorization Code (Confidential Client)
- Refresh Token
- Service Account (Legacy)
curl -X POST 'https://{server}/oauth/token' \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=authorization_code' \ -d 'code=AUTH_CODE_FROM_CALLBACK' \ -d 'code_verifier=YOUR_CODE_VERIFIER' \ -d 'client_id=your-client-id' \ -d 'redirect_uri=https://your-app.com/callback'
Response samples
- 200
{- "access_token": "e1c1ae22-61bf-45e8-85a7-65d66a6cdc46",
- "token_type": "bearer",
- "expires_in": 1800,
- "refresh_token": "a5fc1f68-8f7d-43b7-937c-68729b3b4f17",
- "refresh_total_validity_seconds": 3600,
- "jwt_access_token": "string",
- "customerId": 0,
- "readOnly": false
}