---
title: "Api Learning Progress Sync"
method: POST
path: "/api/learning/progress/sync"
tags: ["Education"]
---

# Api Learning Progress Sync

`POST /api/learning/progress/sync`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/learning/progress/sync`
- Auth: none declared

Batch sync module progress -- fire-and-forget from client.

## Response `200`

Successful Response

- LearningProgressSyncResponse: `POST /api/learning/progress/sync` — batch sync per-module progress. Run 19 F4 backfill 2026-05-12. Fire-and-forget from the client. A3 CISO P0 (2026-04-15) — the helper uses ON CONFLICT DO UPDATE with `mastery_passed = OLD` so a malicious client can't flip a verified row by POSTing `{mastery_passed: true}`.
  - `ok` boolean, nullable: True on successful sync.
  - `synced` integer, nullable: Count of modules persisted in this batch.
  - `error` string, nullable: Sync failure message.

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
