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:

  • actionOktrue if the request succeeded
  • error — Array of error codes (empty on success)
  • total — Total matching records
  • students/schools/districts — Keyed objects with the actual data