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.