OneRoster API Conventions

TimeBack's rostering and applications APIs follow the 1EdTech OneRoster v1.1 specification. This reference documents the standard query parameters for filtering, pagination, sorting, and field selection.

Filtering

Filter results using the filter query parameter with OneRoster filter syntax.

Syntax

filter=<field><predicate><value>

Predicates

Predicate Description Example
= Equals filter=email='john@example.com'
!= Not equals filter=status!='inactive'
~ Contains (substring) filter=familyName~'Smith'
> Greater than filter=dateCreated>'2025-01-01'
>= Greater than or equal filter=dateCreated>='2025-01-01'
< Less than filter=dateCreated<'2025-12-31'
<= Less than or equal filter=dateCreated<='2025-12-31'

Logical Operators

Combine multiple conditions with AND or OR:

filter=familyName='Smith' AND givenName='John'
filter=status='active' OR status='pending'

Constraints:

  • Maximum of 2 predicates per filter expression (per OneRoster v1.1 spec)
  • You cannot mix AND and OR in a single filter expression

Examples

Look up a user by email:

const email = encodeURIComponent("email='student@school.edu'");
const response = await fetch(`https://platform.timeback.com/rostering/1.0/users?filter=${email}`, {
  headers: { Authorization: `Bearer ${accessToken}` },
});

Find active applications:

const filter = encodeURIComponent("status='active'");
const response = await fetch(`https://platform.timeback.com/applications/1.0?filter=${filter}`, {
  headers: { Authorization: `Bearer ${accessToken}` },
});

Pagination

Control result set size and offset using limit and offset parameters.

Parameter Type Default Range Description
limit integer 10 1-100 Maximum items to return
offset integer 0 0+ Number of items to skip

Example

Fetch the second page of 20 results:

const response = await fetch('https://platform.timeback.com/rostering/1.0/users?limit=20&offset=20', {
  headers: { Authorization: `Bearer ${accessToken}` },
});

Response Pagination Info

All paginated responses include pagination metadata:

{
  "users": [...],
  "offset": 20,
  "limit": 20,
  "total": 150
}

Sorting

Sort results using sort and orderBy parameters.

Parameter Type Default Description
sort string dateCreated Field name to sort by
orderBy string ASC Sort direction: ASC or DESC

Example

Get users sorted by family name descending:

const response = await fetch('https://platform.timeback.com/rostering/1.0/users?sort=familyName&orderBy=DESC', {
  headers: { Authorization: `Bearer ${accessToken}` },
});

Field Selection

Request only specific fields using the fields parameter to reduce response size.

Parameter Type Description
fields string Comma-separated list of field names

Nested Fields

For nested objects, use dot notation:

fields=sourcedId,name,userProfiles.profileId,userProfiles.profileType

Example

Get only user IDs and emails:

const response = await fetch(
  'https://platform.timeback.com/rostering/1.0/users?fields=sourcedId,email,familyName,givenName',
  { headers: { Authorization: `Bearer ${accessToken}` } },
);

Use filtering to look up users by email for Caliper event attribution.

Use the Applications API to map applicationId values in insights to application names.

Obtain OAuth credentials required for API access.