EduAlign API Integration Guide

Guide for integrating EduTAP data into external systems via the EduAlign API

Getting Started

The EduAlign API (Ops API) is a backend REST API that lets partners query EduTAP data from their own systems. Use it to load learner sessions, messages, and usage counts into your BI tools or data lake.

Available APIs

DomainAPIDescription
AuthPOST /ops/v1/auth/signinSign in and issue tokens
AuthPOST /ops/v1/auth/refreshRefresh tokens (rotation)
SessionGET /ops/v1/sessionsSession list (paginated)
SessionGET /ops/v1/sessions/{session_id}/messagesSession messages (paginated)
SessionGET /ops/v1/sessions/dumpsBulk session dump for a date range
SessionGET /ops/v1/sessions/dumps/since-lastIncremental session dump since the last call
SessionGET /ops/v1/sessions/messages/dumpsBulk message dump for a date range
SessionGET /ops/v1/sessions/messages/dumps/since-lastIncremental message dump since the last call
DashboardGET /ops/v1/dashboard/user-countUser count for a date range
DashboardGET /ops/v1/dashboard/message-countMessage count for a date range
UsersGET /ops/v1/usersPer-learner activity summary
ClientGET /ops/v1/clients/childrenChild client list

The base URL is https://opsapi.edutap.ai. See Common for shared conventions such as pagination and date formats.

Authentication

Every API except sign-in and token refresh requires the Authorization: Bearer {access_token} header.

  • Only client member accounts can sign in.
  • Token refresh uses rotation. Refreshing invalidates both the previous access token and refresh token, so store the new token pair from the response.
  • If a refresh returns 401 InvalidRefreshToken, automatic refresh is no longer possible. Sign in again.

Use the access_token from the signin response as-is. Appending suffixes such as | to the token string results in a 401.

Querying Child Client Data

If your client has child clients, every query API accepts the client_identity and include_descendants parameters to set the query scope.

RequestScope
(no parameters)Signed-in client only
include_descendants=trueSigned-in client + all child clients
client_identity=acme_kracme_kr only
client_identity=acme_kr&include_descendants=trueacme_kr + all of acme_kr's child clients
  1. Use List Child Clients to find the client_identity values you can specify.
  2. Pass client_identity and include_descendants to the query API.
  3. When querying multiple clients, use each item's client_identity to tell which client it belongs to. Count APIs return the sum.

Specifying a client_identity that is not under the signed-in client or does not exist returns 403 OuterClientScopeForbidden. The last-call timestamp for incremental dumps is tracked separately for each client_identity and include_descendants combination.

Integration Scenarios

Daily usage sync

  1. Get tokens with Sign in.
  2. Query User Count and Message Count with start_date and end_date.
  3. Load the results into your BI system.

Loading session and message data

  1. For the initial load or reprocessing, fetch a date range with Session Dump and Message Dump.
  2. After that, fetch only new data since the last call with Incremental Session Dump and Incremental Message Dump.
  3. If ingestion fails, request the same window again with retry=true.

Learner activity summary

  1. Use User Activity List to get each learner's session count, question count, and last question time.
  2. Search for a specific learner with a partial match on user_id.
  3. Specify both start_date and end_date to count only activity within that period.

FAQ

Learn More