Skip to main content

Learning and briefings

Everything in this section is generated rather than fetched. These routes call an LLM, cost real time and money per request, and are the slowest part of the API. Treat them as asynchronous work, not as reads.

Briefings

A briefing is a periodic digest assembled from your recent articles.

RouteMethodPurpose
/api/briefingsGETList briefings.
/api/briefingsPOSTGenerate a briefing now.
/api/briefings/latestGETThe most recent briefing.
/api/briefings/{briefing_id}GETOne briefing.
/api/briefings/{briefing_id}/chatPOSTAsk follow-up questions about it.

Briefing podcasts

RouteMethodPurpose
/api/briefings/{briefing_id}/podcastPOSTGenerate audio for a briefing.
/api/briefings/{briefing_id}/podcastGETGeneration status / result.

POST starts generation; GET reports where it got to. Poll the GET rather than assuming the POST response is final.

Two routes are public because podcast players cannot authenticate:

RouteAccess
/api/briefings/podcast.rssToken in the URL. The subscribable feed.
/api/briefings/{briefing_id}/podcast-audioToken in the URL. The audio file.

Token management is covered in Authentication → Podcast feed tokens.

Email delivery and unsubscribe

Briefings can be emailed. The unsubscribe endpoints are public by necessity — an unsubscribe link in an email must work without a login:

RouteMethod
/email/briefing/unsubscribeGET
/email/briefing/unsubscribePOST

The GET renders a confirmation page; the POST performs the opt-out. Email clients pre-fetch links, so a one-click GET that unsubscribed directly would opt users out by accident.

Lessons

Lessons turn a link or topic into structured learning material.

RouteMethodPurpose
/api/learn/lessonsGETList lessons.
/api/learn/lessonsPOSTCreate a lesson from a link or topic.
/api/learn/lessons/{lesson_id}GETOne lesson.
/api/learn/lessons/{lesson_id}/regeneratePOSTRegenerate content.
/api/learn/lessons/{lesson_id}/generationsGETGeneration history.
/api/learn/lessons/{lesson_id}/trailsGETSuggested follow-on paths.
/api/learn/lessons/{lesson_id}/questionsPOSTGenerate questions.

Alternate renderings

The same lesson can be rendered into other media:

RouteMethodProduces
/api/learn/lessons/{lesson_id}/podcastPOST / GETAudio.
/api/learn/lessons/{lesson_id}/slidesPOSTA slide deck.
/api/learn/lessons/{lesson_id}/infographicPOSTAn infographic.

/generations exists because these are non-deterministic: it records what was produced and when, so a regeneration does not silently discard prior output.

Suggestions

RouteMethodPurpose
/api/learn/suggestionsGETSuggested lessons based on your reading.
/api/learn/suggestions/dismissPOSTDismiss a suggestion.
/api/learn/lessons/{lesson_id}/relevance/feedbackPOSTReport whether a lesson was relevant.

Feedback here feeds ranking — it is the signal that stops the same unwanted suggestion from recurring.

Goals and quizzes

RouteMethodPurpose
/api/goalsGETList reading goals.
/api/goalsPOSTCreate a goal.
/api/goals/{goal_id}DELETEDelete a goal.
/api/quizzesGETList quizzes.
/api/quizzes/latestGETMost recent quiz.
/api/quizzes/candidatesGETArticles eligible for a quiz.
/api/quizzes/generatePOSTGenerate a quiz.
/api/quizzes/{quiz_id}/submitPOSTSubmit answers.

Check /api/quizzes/candidates before generating — quiz quality depends on having enough recently-read material, and this reports whether there is.

Recaps

RouteMethodPurpose
/api/recapsGETList periodic recaps.
/api/recaps/latestGETMost recent recap.
/api/lesson-recapsGETList lesson recaps.
/api/lesson-recaps/latestGETMost recent lesson recap.
/api/lesson-recaps/generatePOSTGenerate one now.
/api/lesson-recaps/{recap_id}/podcastPOST / GETAudio for a lesson recap.

Assistant and agent actions

RouteMethodPurpose
/api/askPOSTAsk a question across your articles.
/api/summaryGETA generated summary view.
/api/feedbackPOSTFeedback on a generated answer.

Agent actions are multi-step operations that run under explicit approval:

RouteMethodPurpose
/api/agent/actions/planPOSTProduce a plan without executing it.
/api/agent/actions/{run_id}GETInspect a run.
/api/agent/actions/{run_id}/approvePOSTApprove and execute.
/api/agent/actions/{run_id}/cancelPOSTCancel.

Planning and execution are deliberately separate calls. The agent never performs a mutating action without an explicit approve.

Personalization

RouteMethodPurpose
/api/personalization/nudgesGETSuggested adjustments to your setup.
/api/personalization/nudges/applyPOSTApply a nudge.
/api/personalization/nudges/dismissPOSTDismiss it.
/api/users/me/recommendation-preferencesGET / PATCHTune recommendations.

AI memory

Durable, user-editable facts the assistant may use as context:

RouteMethodPurpose
/api/users/me/ai-memoriesGETList memories.
/api/users/me/ai-memoriesPOSTAdd one.
/api/users/me/ai-memories/{memory_id}PATCHEdit one.
/api/users/me/ai-memories/{memory_id}DELETEDelete one.
/api/users/me/ai-memories/learn-from-readingPOSTDerive memories from reading history.

Memories are inspectable and deletable by design — the assistant should never hold context about a user that the user cannot see or remove.

Feedback on AI output

RouteMethodPurpose
/api/ai-feedbackGET / POST / DELETERecord or withdraw feedback on generated output.

Onboarding

RouteMethodPurpose
/api/onboarding/statusGETWhere the user is in onboarding.
/api/onboarding/interestsGET / POSTRead or set interests.
/api/onboarding/recommendationsPOSTRecommendations from interests.
/api/onboarding/source-recommendationsGETSuggested sources to subscribe to.
/api/onboarding/profilePOSTSave the onboarding profile.