Dump sessions (date range)

Returns all sessions within the specified date range in one batch. Intended for data-lake ingestion and other batch sync workflows.

GET/ops/v1/sessions/dumps#

Query Parameters

start_dateString (ISO 8601)
Start date. Defaults to 7 days before end_date when omitted.
end_dateString (ISO 8601)
End date. Defaults to the current time when omitted.
client_identityString
`client_identity` of the target client. Defaults to the signed-in member's client. Must be the signed-in client or one of its descendants; any other value returns 403 `OuterClientScopeForbidden`
include_descendantsBooleandefault: false
If `true`, returns data for the target client and all of its descendant clients. If `false`, returns data for the target client only

Response Fields

sessionsArray of objectsrequired
Session list (no pagination). Same structure as the sessions item in List sessions.

Because the response is returned in one batch without pagination, large ranges may produce very large responses. Either split into shorter ranges or use the incremental dump (/dumps/since-last).

curl -X GET "https://opsapi.edutap.ai/ops/v1/sessions/dumps?start_date=2026-06-24&end_date=2026-06-25" \
  -H "Authorization: Bearer ${ACCESS_TOKEN}"
import requests

res = requests.get(
    "https://opsapi.edutap.ai/ops/v1/sessions/dumps?start_date=2026-06-24&end_date=2026-06-25",
    headers={"Authorization": "Bearer ${ACCESS_TOKEN}"},
)
print(res.json())
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://opsapi.edutap.ai/ops/v1/sessions/dumps?start_date=2026-06-24&end_date=2026-06-25", nil)
	req.Header.Set("Authorization", "Bearer ${ACCESS_TOKEN}")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	b, _ := io.ReadAll(res.Body)
	fmt.Println(string(b))
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
  public static void main(String[] args) throws Exception {
    HttpRequest req = HttpRequest.newBuilder()
        .uri(URI.create("https://opsapi.edutap.ai/ops/v1/sessions/dumps?start_date=2026-06-24&end_date=2026-06-25"))
        .header("Authorization", "Bearer ${ACCESS_TOKEN}")
        .GET()
        .build();
    HttpResponse<String> res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
    System.out.println(res.body());
  }
}
const res = await fetch("https://opsapi.edutap.ai/ops/v1/sessions/dumps?start_date=2026-06-24&end_date=2026-06-25", {
  method: "GET",
  headers: {"Authorization": "Bearer ${ACCESS_TOKEN}"},
});
console.log(await res.json());
Response
{
  "sessions": [
    {
      "chat_session_id": "sess_01HXABCD1234EFGH5678",
      "client_id": "client_acme",
      "client_identity": "acme",
      "user_id": "user_abc123",
      "course_id": "course_math_101",
      "clip_id": "clip_01",
      "title": "Solving quadratic equations",
      "course_name": "High School Math I",
      "course_category": "Math",
      "course_sub_category": "Algebra",
      "status": "ACTIVE",
      "created_at": "2026-06-20T03:21:00Z",
      "first_message_at": "2026-06-20T03:21:30Z",
      "last_message_at": "2026-06-20T03:45:10Z",
      "message_count": 14
    }
  ]
}