Skip to content

Common API Concepts

Both OneRoster and Untis Platform API families share the same pagination, sorting, and filtering mechanism. Every list endpoint on the platform uses the OneRoster 1.1 specification for these operations — regardless of which API family you call.


All list endpoints accept two query parameters:

ParameterDescription
limitMaximum number of results to return per page
offsetNumber of results to skip before returning data

Example — fetch the first 100 students:

GET {{API_URL}}/ims/oneroster/v1p1/students?limit=100&offset=0

Increment offset by your limit value to page through results. Continue until a response returns fewer items than the requested limit.


Use the sort query parameter with a field name. Use the optional orderBy parameter to control direction (asc or desc). If orderBy is omitted, the sort order is implementation-dependent.

Ascending:

GET {{API_URL}}/ims/oneroster/v1p1/users?sort=familyName&orderBy=asc

Descending:

GET {{API_URL}}/ims/oneroster/v1p1/users?sort=familyName&orderBy=desc

Use the filter query parameter to restrict a list endpoint to the records you need. A filter is made of conditions. A condition follows the pattern: field operator 'value'

GET {{API_URL}}/ims/oneroster/v1p1/users?filter=role='student'
OperatorMeaningExample
=equalsrole='student'
!=not equalrole!='student'
>greater thandateLastModified>'2025-01-01T00:00:00Z'
>=greater than or equalusername>='M'
<less thanusername<'C'
<=less than or equalusername<='C'
~containsfamilyName~'mann'

Values are always written in single quotes.

You can join two conditions with AND or OR:

KeywordRecord is returned when…
ANDboth conditions match
ORat least one condition matches
GET {{API_URL}}/ims/oneroster/v1p1/users?filter=username='John' AND role='student'
GET {{API_URL}}/ims/oneroster/v1p1/users?filter=role='student' OR role='teacher'

The spaces around AND / OR and any special characters in values must be URL-encoded when you build the request (for example %20 for a space and %27 for '). Most HTTP clients do this automatically when you pass the filter as a query parameter.

Consult the OneRoster 1.1 specification for the complete filtering syntax.


Pagination, sorting, and filtering can be combined in a single request:

GET {{API_URL}}/ims/oneroster/v1p1/users?filter=role='student'&sort=familyName&orderBy=asc&limit=50&offset=0

Classes and students exist across several school years. Unless you scope your request, the list endpoints return data for all school years.

Read the school years via the OneRoster Academic Sessions API. Each session contains its startDate and endDate. Its sourcedId is the same ID that the Untis Platform APIs use as schoolyearId.

GET {{API_URL}}/ims/oneroster/v1p1/academicSessions
APIHow to scope to a school year
Class ManagementFilter on the schoolyearId field: filter=schoolyearId=<id>
Student ManagementUse the schoolyearId query parameter. It restricts the returned classAssignments to the given school year.
Teacher ManagementTeachers are not tied to a school year. Use entryDate and exitDate to determine whether a teacher is employed during the school year.

Example — fetch all classes of a school year:

GET {{API_URL}}/WebUntis/api/rest/extern/v2/classes?filter=schoolyearId=123&limit=100&offset=0