From workhuman-pack
Configures OAuth 2.0 for Workhuman API access to enable social recognition, rewards redemption, and HRIS data sync. Includes TypeScript/Node and Python clients.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin workhuman-packThis skill is limited to using the following tools:
Configure Workhuman API access for Social Recognition, rewards, and HRIS integration. Workhuman uses OAuth 2.0 for API authentication. The API enables programmatic recognition nominations, reward redemption, and employee data sync.
Guides local dev loops for Workhuman Social Recognition API: OAuth 2.0 auth, REST endpoints for recognitions/users/rewards, HRIS sync, and error handling.
Sets up BambooHR REST API authentication with HTTP Basic Auth: generates keys, configures env vars, installs clients, verifies connections for Node.js/Python.
Sets up RemoFirst API authentication with env config, Python client, and connection verification for global HR, EOR, payroll integration.
Share bugs, ideas, or general feedback.
Configure Workhuman API access for Social Recognition, rewards, and HRIS integration. Workhuman uses OAuth 2.0 for API authentication. The API enables programmatic recognition nominations, reward redemption, and employee data sync.
# .env
WORKHUMAN_CLIENT_ID=your-client-id
WORKHUMAN_CLIENT_SECRET=your-client-secret
WORKHUMAN_BASE_URL=https://api.workhuman.com
WORKHUMAN_TENANT_ID=your-tenant-id
import axios from 'axios';
async function getWorkhmanToken(): Promise<string> {
const { data } = await axios.post(
`${process.env.WORKHUMAN_BASE_URL}/oauth/token`,
new URLSearchParams({
grant_type: 'client_credentials',
client_id: process.env.WORKHUMAN_CLIENT_ID!,
client_secret: process.env.WORKHUMAN_CLIENT_SECRET!,
}),
{ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } },
);
return data.access_token;
}
const token = await getWorkhmanToken();
const api = axios.create({
baseURL: process.env.WORKHUMAN_BASE_URL,
headers: { Authorization: `Bearer ${token}` },
});
const { data } = await api.get('/api/v1/users/me');
console.log(`Connected as: ${data.displayName}`);
import requests, os
class WorkhumanClient:
def __init__(self):
self.base = os.environ["WORKHUMAN_BASE_URL"]
self.token = self._authenticate()
def _authenticate(self):
resp = requests.post(f"{self.base}/oauth/token", data={
"grant_type": "client_credentials",
"client_id": os.environ["WORKHUMAN_CLIENT_ID"],
"client_secret": os.environ["WORKHUMAN_CLIENT_SECRET"],
})
return resp.json()["access_token"]
def get(self, endpoint, **params):
return requests.get(f"{self.base}{endpoint}",
headers={"Authorization": f"Bearer {self.token}"}, params=params).json()
| Error | Cause | Solution |
|---|---|---|
401 Unauthorized | Invalid credentials | Check client_id/secret |
403 Forbidden | Insufficient permissions | Contact Workhuman admin |
invalid_grant | Wrong grant type | Use client_credentials |
Proceed to workhuman-hello-world for your first recognition nomination.