Skip to main content

Pagination, idempotency and rate limits

Each section says only what was found in the code. Where nothing was found, it says so.

Pagination​

There is no platform-wide convention. A few list endpoints take query parameters, and most return the whole list.

EndpointParametersDefaults and limits
GET /api/v1/lms/coursespage, sizepage=0, size=20. Zero-based. No upper bound on size was found.
LMS forum threads and repliespage, sizepage=0, size=20.
GET /api/v1/copilot/historypage, sizepage=0, size=20. Negative page becomes 0, size is clamped to 1 to 100.
LMS leaderboardslimit20 for quiz leaderboard, 50 for XP leaderboard.
Identity audit loglimit100.
Some analytics and program listslimitOptional, no default.

Responses are plain JSON arrays. There is no envelope with a total count, no next link and no cursor.

Idempotency​

There is no Idempotency-Key header support in any service. A search of the service code for the term found only internal behaviours that are safe to repeat:

  • Starting a recording for a class room does nothing if the class already has an egress.
  • Re-logging a completed mentoring session updates the notes but does not repeat the impact score update or the event.
  • The egress webhook ignores a completion for which no class matches.

A client that retries a POST after a timeout may create a duplicate.

Rate limits​

Two layers were checked.

Ingress. No rate-limit annotation was found in infra/oci-devops/deploy/ingress.yaml or infra/k8s/ingress.yaml. The ingress sets request body sizes (50 MB, and 2 GB on /api/v1/lms/lessons) and read and send timeouts, which are limits on size and time, not on rate.

LMS service. A Redis counter limits some actions per user, using a fixed window:

ActionLimitResponse
Starting a quiz attempt, per participant and quiz3 per hour429
Uploading an assignment file10 per hour429

The service also defines a general limit of 100 requests per minute per user, but no resource was found that calls it. The forum resource injects the limiter, and no call was found there either.

A limit set elsewhere, such as in the cloud load balancer, would not appear in the repository. That is unverified.

Sources: services/lms-service/.../{CourseResource,ForumResource,QuizResource,AssignmentResource}.java, services/lms-service/.../RedisRateLimiterService.java, services/ai-copilot-service/.../CopilotResource.java, services/identity-service/.../AuditResource.java, infra/oci-devops/deploy/ingress.yaml.