Skip to main content
Version: 1.1

Introduction

Xporter exposes a compliant IMS Global OneRoster v1.1 API that allows third-party systems to retrieve rostering data (organisations, users, classes, enrolments, and academic sessions) from schools connected to the platform.

Base URL

https://xporter.groupcall.com/api/ims/oneroster/v1p1/school

Authentication

The API uses a bearer token.

Step 1 — Obtain a bearer token

Send a POST request to the /auth/token endpoint using HTTP Basic authentication.

The Basic auth username format is:

rp|estab

Where:

  • rp is your relying party identifier
  • estab is the establishment identifier
  • the Basic auth password is the shared secret for that relying party and school

The Authorization header therefore looks like:

Authorization: Basic <base64(rp|estab:sharedSecret)>

Example request

POST /api/ims/oneroster/v1p1/school/auth/token HTTP/1.1
Host: xporter.groupcall.com
Authorization: Basic cGFydG5lci1ycHwzMjgxMTEwOnN1cGVyLXNlY3JldA==
Accept: application/json

Successful response (200 OK)

{
"access_token": "<token>",
"token_type": "Bearer",
"expires_in": 3600
}

Error response (401 Unauthorized)

{
"error": "invalid_client",
"error_description": "Request contains an invalid client ID or secret"
}

Step 2 — Call protected endpoints

Include the token in the Authorization header of every subsequent request:

Authorization: Bearer <token>

Query parameter support

All collection endpoints support the following query parameters.

ParameterDescription
limitMaximum number of records to return. Omitting it returns all matching records.
offsetZero-based index of the first record to return. Use with limit for pagination.
filterFilter expression using OneRoster filter syntax.
sortSort field name.
orderBySort direction: asc or desc.

Filter syntax

filter=status='active'
filter=status='tobedeleted'
filter=sourcedId='x42Y7TNMV'
filter=dateLastModified>'2026-01-01T00:00:00Z'
filter=class.sourcedId='x11BSAT6S' and role='student'

Supported operators: =, !=, &gt;, &gt;=, &lt;, &lt;

Nested reference filters are supported for class.sourcedId, school.sourcedId, and user.sourcedId.

HTTP status codes

CodeScenario
200 OKRequest succeeded.
400 Bad RequestInvalid query options or request formatting.
401 UnauthorizedInvalid client credentials on the token endpoint, or invalid or missing bearer token on a protected endpoint.
403 ForbiddenThe token is valid but the caller is not authorised to access the requested data.
500 Internal Server ErrorThe request could not be completed because of an unexpected server-side error.

Integration checklist

  • Obtain your relying party identifier (rp), establishment identifier (estab), and shared secret from the Xporter platform.
  • Call POST /auth/token and cache the access_token — reuse it until expires_in seconds have elapsed.
  • When 401 is received on a data endpoint, re-authenticate and retry once.
  • Use limit + offset to page through large result sets. Omitting limit returns all records.
  • Use filter=status='active' to exclude soft-deleted records where required.
  • Use limit + offset to page through large result sets. Omitting limit returns all records.
  • Link users to classes: join usersenrollmentsclasses via sourcedId.
  • Users carry orgSourcedIds (string array) and optionally userIds (array of {type, identifier} objects).
  • beginDate and endDate are returned on enrolment records when present.

Authentication

Bearer token obtained from POST /auth/token.

Security Scheme Type:

http

HTTP Authorization Scheme:

bearer

Bearer format:

JWT