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
Getting Started
Visit /signup to create a Triand user account. This is the same account used across all Triand services. If you already have an account, skip to Step 2.
While logged in, visit /api-signup to submit your API access application. You will need:
- Your company name and a description of how you plan to use the API
- Your desired access scope (which districts/schools)
- A payment method (credit card via Stripe — not charged until approval)
Your contact name and email will be pre-filled from your Triand account.
A Triand administrator will review your application and configure your data access scope. This typically takes 1-2 business days. You will receive an email with the outcome.
Once approved, use the login endpoint to get a Bearer token (PJWT) for API access. Call POST /v1/login with your Triand email and password:
curl -X POST https://api.triand.com/v1/login \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"email": "you@example.com",
"password": "your-password"
}'The response includes a pjwt token valid for 24 hours:
{
"actionOk": true,
"pjwt": "eyJhbGciOiJIUzUxMiI...",
"expiresIn": 86400
}Important: You will receive your API key (x-api-key) via email upon approval. The Bearer token is obtained dynamically via the login endpoint — it is not emailed to you.
Use the PJWT from the login response as your Bearer token:
curl -X POST https://api.triand.com/v1/students \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_PJWT_TOKEN" \
-d '{
"limit": 5,
"districtlea": "1503000"
}'Or using JavaScript fetch:
const response = await fetch('https://api.triand.com/v1/students', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'YOUR_API_KEY',
'Authorization': 'Bearer YOUR_PJWT_TOKEN',
},
body: JSON.stringify({
limit: 5,
districtlea: '1503000',
}),
})
const data = await response.json()
console.log(data.students)A successful response looks like:
{
"actionOk": true,
"error": [],
"total": 3,
"students": { "12345": { ... }, "12346": { ... }, ... },
"schools": { "987": { "name": "DeWitt High School", ... } },
"districts": { "45": { "name": "DeWitt School District", ... } },
"avatars": { ... }
}The response contains:
- actionOk —
trueif the request succeeded - error — Array of error codes (empty on success)
- total — Total matching records
- students/schools/districts — Keyed objects with the actual data