---
title: "Embed Learn Card Json"
method: GET
path: "/api/v1/embed/learn/{module_id}"
---

# Embed Learn Card Json

`GET /api/v1/embed/learn/{module_id}`

## 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/v1/embed/learn/{module_id}`
- Auth: none declared

Public JSON sibling to /embed/learn/<module_id>.

Path: GET /api/v1/embed/learn/<module_id>?ref=<host>
Same projection as the HTML card (title + hook + section_count +
has_quiz + parent path + deep_link), same shared rate limit,
module-id validation, and ref hostname-shape gate.

## Path parameters

- `module_id` string, required

## Query parameters

- `ref` string, nullable

## Response `200`

Successful Response

- EmbedLearnJSONResponse: `GET /api/v1/embed/learn/{module_id}` — JSON sibling to the HTML learn-module embed at /embed/learn/{module_id} (SF-10 #17a, 2026-06-12). Public surface, no auth (LEARN content is free per SF-MONETIZATION-V3), rate-limited 100 req/hr/IP via the deque shared with every other embed route. Module ids are validated against the answers-stripped server-side learn index, so quiz answer keys can never appear here. `Access-Control-Allow-Origin: *` so embedder JS can cross-origin-fetch the same data the iframe renders.
  - `module_id` string, required: Canonical LEARN module id (case-sensitive).
  - `title` string, required: Module title.
  - `hook` string, nullable: One-line hook: the module's metaDescription, else the first text-section excerpt (~160 chars). Null when neither exists.
  - `section_count` integer, required: Number of sections (lessons) in the module.
  - `has_quiz` boolean, required: True when the module carries a quiz.
  - `path_id` string, required: Parent learning-path id.
  - `path_title` string, nullable: Parent learning-path title.
  - `deep_link` string, required: Canonical CTA URL — the per-module SSR page (/learn/<path>/<slug>/) with ?ref attribution when provided.
  - `ref` string, nullable: Normalized embedding-host attribution (DNS-shape validated). Null when no ref param.

## Other responses

- `422`: Validation Error

---

[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)
