API Integration Guide
Guide for integrating EduTAP data into external systems via the Admin API
The EduTAP Admin API (Ops API) is a backend REST API that lets external partners query and integrate EduTAP data into their own systems. This guide targets partner developers who want to load EduTAP data into their BI tools or data lakes.
Domains at a Glance
Auth
Client member sign-in / Access token refresh
Session
Chat sessions / messages, range and incremental dumps
Dashboard
Daily user and message counts
Users
Per-learner activity summary
5-Minute Quickstart
- Sign in — Send client_member credentials to
POST /ops/v1/auth/signinand receiveaccess_token,refresh_token. - Store the token — Save the
access_tokenin a secure secret store. - Call protected endpoints — Attach
Authorization: Bearer {access_token}to every protected endpoint. - Refresh the token — On a 401 response, call
POST /ops/v1/auth/refreshto obtain a new access/refresh pair (rotation).
Authentication
All protected endpoints require a Bearer token.
- Header format:
Authorization: Bearer {access_token} - Token type: Only client_member JWTs are accepted. Internal staff/superadmin tokens are rejected.
- On expiry: When you receive a 401
NotAuthorizedresponse, call/ops/v1/auth/refreshto renew the token. - Auth failures: Distinguish causes via the 401
error_code(NotAuthorized,InvalidAuthHeader,InvalidRefreshToken).
Use the access_token returned by signin as-is. Appending any extra suffix (such as |) to the token string will cause the request to be rejected with a 401.
Common Conventions
Time zone / date format
- All datetime fields are in UTC ISO 8601 format (e.g.
2026-06-25T09:00:00Z). - Period query parameters (
start_date,end_date) use theYYYY-MM-DDformat (KST (Asia/Seoul) — the server interprets the range as KST 00:00:00 ~ 23:59:59 and converts it to UTC internally).
Pagination
- Query parameters:
page(1-based, default 1),page_size(default 10, max 100). - Response
paginationobject:
{
"current_page": 1,
"total_pages": 7,
"page_size": 20,
"total_items": 132,
"is_next": true,
"is_prev": false
}Error responses
All error responses share the same body structure.
{
"error_code": "NotAuthorized",
"message": "Authentication required."
}- 400: Business validation failure — e.g. credential mismatch (
MismatchedPassword), inactive member (NotActivatedClientMember). - 401: Token authentication failure — refresh via
/ops/v1/auth/refreshand retry. - 404: Resource not found / permission mismatch — e.g.
NotExistSession. - 422: Request validation failed — the
detailsarray describes each invalid field. - 5xx: Internal server error — retry with the same payload is recommended.
Integration Scenarios
1) Daily usage sync
POST /ops/v1/auth/signinto obtain a token.GET /ops/v1/dashboard/user-count?start_date=2026-06-01&end_date=2026-06-25— daily user count for the period.GET /ops/v1/dashboard/message-count?start_date=2026-06-01&end_date=2026-06-25— daily message count for the period.- Load into your BI system.
2) Session dump ingestion (incremental)
GET /ops/v1/sessions/dumps?start_date=2026-06-24&end_date=2026-06-25— sessions within a range.- Or
GET /ops/v1/sessions/dumps/since-last— only new sessions created since the last call (incremental). - Ingest the payload into your data lake.
3) User activity summary
GET /ops/v1/users— returns per-learner activity summaries in one batch (no pagination).- Use the
user_idpartial-match filter to search for a specific user. - When both
start_dateandend_dateare specified, only activity within that period (KST) is aggregated.
