ACCESS API
Account Management
Account Owners
Arkansas Civics Test
Community Service Learning
Data Services Agreements
Online Testing
Private Schools
Home Schools
Smart Core
Student Transcripts
Advanced Searching
OneRoster API
Student Data API
Login Endpoint
The login endpoint authenticates a vendor using their Triand account credentials and returns a Bearer token (PJWT) for subsequent API calls.
POST https://api.triand.com/v1/login| Header | Required | Description |
|---|---|---|
| x-api-key | Yes | Your vendor API key |
| Content-Type | Yes | application/json |
| Authorization | No | Not required — the login endpoint generates the Bearer token |
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Yes | Your Triand account email address | |
| password | string | Yes | Your Triand account password |
A successful login returns:
{
"actionOk": true,
"error": [],
"pjwt": "eyJhbGciOiJIUzUxMiI...",
"expiresIn": 86400
}| Field | Type | Description |
|---|---|---|
| actionOk | boolean | true on success |
| error | string[] | Error codes (empty on success) |
| pjwt | string | Bearer token for subsequent API calls |
| expiresIn | number | Token validity in seconds (86400 = 24 hours) |
curl -X POST https://api.triand.com/v1/login \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"email": "vendor@example.com",
"password": "your-password"
}'const response = await fetch('https://api.triand.com/v1/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY',
},
body: JSON.stringify({
email: 'vendor@example.com',
password: 'your-password',
}),
})
const { pjwt, expiresIn } = await response.json()
// Use the pjwt for subsequent API calls:
const students = await fetch('https://api.triand.com/v1/students', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY',
'Authorization': `Bearer $`,
},
body: JSON.stringify({ limit: 5, districtlea: '1503000' }),
})The PJWT token expires after 24 hours (expiresIn: 86400 seconds). When the token expires, your API calls will return a 401 invalid-token error. At that point, call POST /v1/login again to obtain a fresh token.
Best practice: Cache the PJWT and re-authenticate proactively before it expires, rather than waiting for a 401 error. Track the expiresIn value to know when to refresh.
| Error Code | Cause |
|---|---|
| missing-credentials | Email or password was not provided |
| invalid-credentials | Email not found or password is incorrect |
| no-vendor-account | User exists but has no approved vendor account |
| vendor-not-active | Vendor account is suspended or disabled |