User Management
Programmatically manage Showpad users by syncing with your identity provider or master directory. Create new users, update profiles, manage licenses, and handle deactivation, all through the API.
What you'll learn
- How to retrieve user information
- How to create, update, and deactivate users
- How to map external directory IDs to Showpad users
TL;DR
- Retrieve users? Use
GET /v4/usersorGET /v4/users/{userId} - Create users? Use
POST /v3/users.json - Update users? Use
PUT /v3/users/{userId}.json - Deactivate users? Use
PUT /v3/users/{userId}.jsonwithisActive: false
When to use the API
| Directory Sync | License Management | User Onboarding | SSO Integration |
|---|---|---|---|
| Keep Showpad users in sync with your corporate directory (AD, Okta, etc.). | Programmatically assign and revoke Showpad licenses. | Automate new user provisioning as part of employee onboarding. | Map external IDs for Single Sign-On authentication. |
Prerequisites
- Plan: Any Showpad plan
- Permissions: Administrator access to Showpad's Admin App
- Authentication: Valid OAuth 2.0 access token (learn more)
- API Version: User creation/update/delete requires API v3; retrieval supports v4
Retrieve User Information
Retrieve user data with a simple GET request:
| Method | Endpoint | Description |
|---|---|---|
GET | /v4/users/{userId} | Returns a single user by ID |
GET | /v4/users | Returns a paginated list of users |
Get a Single User
- cURL
- JavaScript
- Python
curl "https://{{subdomain}}.api.showpad.com/v4/users/c143c05d12c1433ba1358c7eb2e07c75" \
-H "Authorization: Bearer {access_token}"
const response = await fetch('https://{{subdomain}}.api.showpad.com/v4/users/c143c05d12c1433ba1358c7eb2e07c75', {
headers: { Authorization: 'Bearer {access_token}' },
});
const user = await response.json();
import requests
response = requests.get(
'https://{{subdomain}}.api.showpad.com/v4/users/c143c05d12c1433ba1358c7eb2e07c75',
headers={'Authorization': 'Bearer {access_token}'}
)
user = response.json()
Get All Users
- cURL
- JavaScript
- Python
curl "https://{{subdomain}}.api.showpad.com/v4/users" \
-H "Authorization: Bearer {access_token}"
const response = await fetch('https://{{subdomain}}.api.showpad.com/v4/users', {
headers: { Authorization: 'Bearer {access_token}' },
});
const users = await response.json();
import requests
response = requests.get(
'https://{{subdomain}}.api.showpad.com/v4/users',
headers={'Authorization': 'Bearer {access_token}'}
)
users = response.json()
Create Users
API v3 Required User creation requires API v3. The endpoint format differs from v4. :::
| Method | Endpoint | Description |
|---|---|---|
POST | /api/v3/users.json | Creates a new user |
Example
- cURL
- JavaScript
- Python
curl -X POST "https://{{subdomain}}.showpad.biz/api/v3/users.json" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"email": "bob.smith@showpad.com",
"firstName": "Bob",
"lastName": "Smith",
"userName": "bob.smith@showpad.com",
"isActive": true,
"language": "en",
"externalId": "customer-ab7320ec521e4783be92512b7e400eb7"
}'
const response = await fetch('https://{{subdomain}}.showpad.biz/api/v3/users.json', {
method: 'POST',
headers: {
Authorization: 'Bearer {access_token}',
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: 'bob.smith@showpad.com',
firstName: 'Bob',
lastName: 'Smith',
userName: 'bob.smith@showpad.com',
isActive: true,
language: 'en',
externalId: 'customer-ab7320ec521e4783be92512b7e400eb7',
}),
});
const newUser = await response.json();
import requests
response = requests.post(
'https://{{subdomain}}.showpad.biz/api/v3/users.json',
headers={
'Authorization': 'Bearer {access_token}',
'Content-Type': 'application/json'
},
json={
'email': 'bob.smith@showpad.com',
'firstName': 'Bob',
'lastName': 'Smith',
'userName': 'bob.smith@showpad.com',
'isActive': True,
'language': 'en',
'externalId': 'customer-ab7320ec521e4783be92512b7e400eb7'
}
)
new_user = response.json()
External ID The
externalId field maps the user to your corporate directory (AD, Okta, etc.). This enables:- Verifying if a user already exists in Showpad
- SAML/SSO authentication mapping :::
Response Codes
201 Created: User successfully created409 Conflict: User already exists4xx: Validation error (check response body for details)
Update Users
API v3 Required User updates require API v3. :::
| Method | Endpoint | Description |
|---|---|---|
PUT | /api/v3/users/{userId}.json | Updates an existing user |
Example
- cURL
- JavaScript
- Python
curl -X PUT "https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"firstName": "Robert",
"lastName": "Smith",
"language": "fr"
}'
const response = await fetch('https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json', {
method: 'PUT',
headers: {
Authorization: 'Bearer {access_token}',
'Content-Type': 'application/json',
},
body: JSON.stringify({
firstName: 'Robert',
lastName: 'Smith',
language: 'fr',
}),
});
const updatedUser = await response.json();
import requests
response = requests.put(
'https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json',
headers={
'Authorization': 'Bearer {access_token}',
'Content-Type': 'application/json'
},
json={
'firstName': 'Robert',
'lastName': 'Smith',
'language': 'fr'
}
)
updated_user = response.json()
Deactivate Users
API v3 Required User deactivation requires API v3. :::
Deactivate a user by setting isActive to false using the Update Users endpoint:
- cURL
- JavaScript
- Python
curl -X PUT "https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{"isActive": false}'
const response = await fetch('https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json', {
method: 'PUT',
headers: {
Authorization: 'Bearer {access_token}',
'Content-Type': 'application/json',
},
body: JSON.stringify({ isActive: false }),
});
import requests
response = requests.put(
'https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json',
headers={
'Authorization': 'Bearer {access_token}',
'Content-Type': 'application/json'
},
json={'isActive': False}
)
Reactivation To reactivate a user, send the same request with
isActive set to true. :::Delete Users
API v3 Required User deletion requires API v3. :::
Irreversible Action Deleting a user permanently removes the user and all associated data from Showpad. Use
deactivation instead unless the user is being permanently removed from your organization. :::
| Method | Endpoint | Description |
|---|---|---|
DELETE | /api/v3/users/{userId}.json | Permanently deletes a user |
- cURL
- JavaScript
- Python
curl -X DELETE "https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json" \
-H "Authorization: Bearer {access_token}"
const response = await fetch('https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json', {
method: 'DELETE',
headers: { Authorization: 'Bearer {access_token}' },
});
import requests
response = requests.delete(
'https://{{subdomain}}.showpad.biz/api/v3/users/c143c05d12c1433ba1358c7eb2e07c75.json',
headers={'Authorization': 'Bearer {access_token}'}
)
User Authentication
For security reasons, do not send user passwords when creating users via the API. When no password is provided, Showpad automatically sends an invitation email allowing the user to set their own password.
For corporate environments, consider implementing Single Sign-On (SSO):
- API Authentication Guide: OAuth 2.0 and token-based authentication
- SSO Setup Guide: SAML and identity provider configuration
Next Steps
- SCIM 2.0 Provisioning: Automate user provisioning with SCIM
- Webhooks: Get notified when users are created or updated
- API v3 Reference: Full API specification for user endpoints
Was this page helpful?