Skip to content

learn — full tool reference

Courses, lessons, members, profiles, cohorts, programs, progress.

Endpointhttps://learn.mcp.devfellowship.com/mcp
Packagepackages/dfl-mcp-learn
Tools51
ToolDescription
list_membersList all members with optional filters. Returns members you have access to based on your permissions.
get_memberGet a specific member by their ID.
create_memberCreate a new community member.
update_memberUpdate an existing community member.
delete_memberSoft delete a member by setting is_active to false.
lookup_memberResolve a fellow’s name to their public.members.id (e.g. the id used as work.placements.member_id). Tries exact case-insensitive match first, then a fuzzy substring (ilike) match. Returns all candidates so the caller can disambiguate before using the id (e.g. creating a placement via the work MCP).
list_profilesList user profiles with optional filters.
get_profileGet a specific user profile by ID.
update_profileUpdate your own profile. Only the authenticated user can update their profile.
list_coursesList all courses with optional filters.
get_courseGet a specific course by ID, including lesson count.
create_courseCreate a new course. Admin only.
update_courseUpdate an existing course. Admin only.
delete_courseDelete a course. Admin only. This will also delete all associated lessons.
set_course_tutorSet the tutor (the person who taught the course, on camera) for a course by writing lms.courses.tutor_id (FK -> work.members.id). Distinct from author_id (LMS owner/uploader). Pass tutor_member_id = null to clear the attribution. Admin only.
list_lessonsList lessons for a specific course.
get_lessonGet a specific lesson by ID.
create_lessonCreate a new lesson within a course. Admin only.
update_lessonUpdate an existing lesson. Admin only.
delete_lessonDelete a lesson. Admin only.
get_my_course_progressGet the authenticated user’s progress for a specific course.
get_my_lesson_progressGet the authenticated user’s progress for one or more lessons.
mark_lesson_viewedMark a lesson as viewed by the authenticated user. Sets last_viewed_at to now, and first_viewed_at if not already set.
mark_lesson_completeMark a lesson as completed by the authenticated user.
list_cohortsList LMS cohorts (batches, e.g. “Winter 2025”, “Summer 2026”) with optional filters. Reads lms.cohorts (RLS: any authenticated user can read).
create_cohortCreate an LMS cohort (batch). Admin only — RLS rejects writes from non-global-admins. If slug is omitted it is derived from the name.
update_cohortUpdate an LMS cohort. Admin only — RLS rejects writes from non-global-admins.
list_programsList LMS programs (curriculum trees rendered by the Gantt). A program is either a reusable TEMPLATE or a per-cohort INSTANCE. Filter by kind and/or cohort_id.
get_programRead ONE LMS program by id (or slug) together with its full tree: stages (ordered by position) each with their milestones (ordered by position), plus the program’s stage_dependencies edges. This is the read that powers the Gantt and verifies an authored template/instance. READ-ONLY.
create_programCreate an LMS program. Admin only. For kind=‘instance’ (a cohort’s live program), STRONGLY prefer the instantiate_program tool, which deep-copies a template into a cohort. Use create_program directly to author a new TEMPLATE, or to author an instance from scratch. Invariants: a template must NOT have cohort_id/source_program_id; an instance MUST have cohort_id.
update_programUpdate an LMS program’s name, slug, or status. Admin only. Note: kind / cohort_id / source_program_id are immutable here — to put a template into a cohort use instantiate_program.
delete_programDelete an LMS program. Admin only. CASCADE removes its stages, milestones, and stage_dependencies. Deleting an instance program detaches it from its cohort.
instantiate_programDeep-copy a TEMPLATE program tree (program -> stages -> milestones -> stage_dependencies) into a new per-cohort INSTANCE program, and return the new instance program id. This is the preferred way to give a cohort its curriculum. Admin only — the SQL function self-checks global-admin. Idempotent per cohort: if the cohort already has an instance program, that existing program id is returned (no duplicate tree).
get_program_member_progressRead the lms.program_member_progress VIEW — computed per-(member, cohort) progress through the cohort’s instance program (total milestones, done milestones, percentage, last completion). READ-ONLY. RLS is security_invoker: a non-admin caller only sees their own progress rows; a global admin sees everyone. Provide cohort_id (recommended) and/or a specific user_id to filter.
list_stagesList the stages (top-level Gantt nodes) of a program, ordered by position. Each stage includes its milestone count.
create_stageCreate a stage (top-level Gantt node) under a program. Admin only. Stages inherit template-vs-instance from their program.
update_stageUpdate a stage. Admin only.
delete_stageDelete a stage. Admin only. CASCADE removes its milestones.
list_milestonesList the milestones under a stage, ordered by position.
create_milestoneCreate a milestone under a stage. Admin only. points is the gamification weight (default 0).
update_milestoneUpdate a milestone. Admin only.
delete_milestoneDelete a milestone. Admin only. Associated completion rows cascade.
list_stage_dependenciesList the sequence/dependency edges (predecessor -> successor) of a program. These drive the dependency Gantt and the “locked until prerequisite done” gating.
add_stage_dependencyAdd a sequence/dependency edge (predecessor -> successor) within a program. node_kind must match the type of both endpoint ids (stage.id or milestone.id). Admin only. The successor is gated until the predecessor is done.
remove_stage_dependencyRemove a dependency edge. Admin only. Provide either the edge id, OR the full tuple (program_id + node_kind + predecessor_id + successor_id).
upsert_tutor_profileUpsert a tutor’s pedagogical pattern profile (the extracted signature/rubric/typology JSON) into lms.tutor_profiles, keyed on (member_id, version). ON CONFLICT (member_id, version) updates profile_data. RLS-scoped (user-JWT); writes require global-admin per lms RLS. Used by plan 20260624-tutor-pedagogy-pattern-extraction to persist a profile produced offline by the pedagogy-corpus-eval skill.
list_wiki_articlesList dfl-wiki articles (wiki.devfellowship.com), newest update first, without the body. Filters: status, a tag, a slug prefix, a title search. A signed-in caller also sees drafts (wiki RLS).
get_wiki_articleOne dfl-wiki article by id or slug, with its markdown body and its content type.
create_wiki_articleCreate a dfl-wiki article AS THE CALLER (author_id = you), as a DRAFT by default. Same fields as the wiki create form. The slug defaults to the form’s rule applied to the title. The content type defaults to “guide”. Publish later with publish_wiki_article.
update_wiki_articleChange fields of a dfl-wiki article, by id or slug. Only the fields you pass change. The wiki lets only the author or a global admin write. The status changes with publish_wiki_article. metadata merges by default (see replace_metadata); renaming a slug does not rewrite children’s parent_slug.
publish_wiki_articleSet the status of a dfl-wiki article: published (default — anonymous readers can see it), draft (signed-in users only) or archived. By id or slug; the author or a global admin only.

List Members

List all members with optional filters. Returns members you have access to based on your permissions.

ParameterTypeRequiredDescription
limitnumbernoMaximum number of members to return (default: 50, max: 100)
offsetnumbernoNumber of members to skip (for pagination)
phase_idstringnoFilter by member phase (e.g., waiting_list, active, alumni)
is_activebooleannoFilter by active status
searchstringnoSearch by name or email

Get Member

Get a specific member by their ID.

ParameterTypeRequiredDescription
idstringyesThe UUID of the member

Create Member

Create a new community member.

ParameterTypeRequiredDescription
namestringyesFull name of the member
personal_emailstringnoPersonal email address
corporate_emailstringnoCorporate/work email address
phonestringnoPhone number
citystringnoCity
statestringnoState/Province
phase_idstringnoMember phase (e.g., waiting_list, active)
tagsstring[]noTags for the member

Update Member

Update an existing community member.

ParameterTypeRequiredDescription
idstringyesThe UUID of the member to update
namestringnoFull name of the member
personal_emailstringnoPersonal email address
corporate_emailstringnoCorporate/work email address
phonestringnoPhone number
citystringnoCity
statestringnoState/Province
phase_idstringnoMember phase
tagsstring[]noTags for the member
is_activebooleannoWhether the member is active

Delete Member

Soft delete a member by setting is_active to false.

ParameterTypeRequiredDescription
idstringyesThe UUID of the member to delete
hard_deletebooleannoIf true, permanently delete the member (use with caution)

Lookup Member

Resolve a fellow’s name to their public.members.id (e.g. the id used as work.placements.member_id). Tries exact case-insensitive match first, then a fuzzy substring (ilike) match. Returns all candidates so the caller can disambiguate before using the id (e.g. creating a placement via the work MCP).

ParameterTypeRequiredDescription
namestringyesFellow’s name (full or partial; case-insensitive)
limitnumbernoMaximum number of candidates to return (default 10)
include_inactivebooleannoInclude members where is_active = false (default false)

List Profiles

List user profiles with optional filters.

ParameterTypeRequiredDescription
limitnumbernoMaximum number of profiles to return (default: 50, max: 100)
offsetnumbernoNumber of profiles to skip (for pagination)
searchstringnoSearch by name or email

Get Profile

Get a specific user profile by ID.

ParameterTypeRequiredDescription
idstringyesThe UUID of the profile

Update Profile

Update your own profile. Only the authenticated user can update their profile.

ParameterTypeRequiredDescription
namestringnoDisplay name
avatar_urlstringnoAvatar URL

List Courses

List all courses with optional filters.

ParameterTypeRequiredDescription
limitnumbernoMaximum number of courses to return (default: 50, max: 100)
offsetnumbernoNumber of courses to skip (for pagination)
searchstringnoSearch by title or description

Get Course

Get a specific course by ID, including lesson count.

ParameterTypeRequiredDescription
idstringyesThe UUID of the course

Create Course

Create a new course. Admin only.

ParameterTypeRequiredDescription
titlestringyesCourse title
descriptionstringnoCourse description
aboutstringnoDetailed information about the course
thumbnailstringnoThumbnail URL
positionnumbernoDisplay order position

Update Course

Update an existing course. Admin only.

ParameterTypeRequiredDescription
idstringyesThe UUID of the course to update
titlestringnoCourse title
descriptionstringnoCourse description
aboutstringnoDetailed information about the course
thumbnailstringnoThumbnail URL
positionnumbernoDisplay order position

Delete Course

Delete a course. Admin only. This will also delete all associated lessons.

ParameterTypeRequiredDescription
idstringyesThe UUID of the course to delete

Set Course Tutor

Set the tutor (the person who taught the course, on camera) for a course by writing lms.courses.tutor_id (FK -> work.members.id). Distinct from author_id (LMS owner/uploader). Pass tutor_member_id = null to clear the attribution. Admin only.

ParameterTypeRequiredDescription
course_idstringyesThe UUID of the lms.courses row to attribute
tutor_member_idstringyesThe work.members.id of the tutor who taught the course, or null to clear the attribution

List Lessons

List lessons for a specific course.

ParameterTypeRequiredDescription
course_idstringyesThe UUID of the course (required)
limitnumbernoMaximum number of lessons to return (default: 50, max: 100)
offsetnumbernoNumber of lessons to skip (for pagination)
statusenumnoFilter by lesson status One of: draft, published.

Get Lesson

Get a specific lesson by ID.

ParameterTypeRequiredDescription
idstringyesThe UUID of the lesson

Create Lesson

Create a new lesson within a course. Admin only.

ParameterTypeRequiredDescription
course_idstringyesThe UUID of the course this lesson belongs to
titlestringyesLesson title
descriptionstringnoLesson description
video_urlstringnoVideo URL for the lesson
durationnumbernoDuration in seconds
positionnumbernoDisplay order position within the course
statusenumnoLesson status (default: draft) One of: draft, published.

Update Lesson

Update an existing lesson. Admin only.

ParameterTypeRequiredDescription
idstringyesThe UUID of the lesson to update
titlestringnoLesson title
descriptionstringnoLesson description
video_urlstringnoVideo URL
durationnumbernoDuration in seconds
positionnumbernoDisplay order position
statusenumnoLesson status One of: draft, published.
is_searchablebooleannoWhether the lesson is searchable
transcriptionstringnoLesson transcription text
standalone_titlestringnoStandalone title for the lesson

Delete Lesson

Delete a lesson. Admin only.

ParameterTypeRequiredDescription
idstringyesThe UUID of the lesson to delete

Get My Course Progress

Get the authenticated user’s progress for a specific course.

ParameterTypeRequiredDescription
course_idstringyesThe UUID of the course

Get My Lesson Progress

Get the authenticated user’s progress for one or more lessons.

ParameterTypeRequiredDescription
lesson_idsstring[]yesArray of lesson UUIDs to get progress for

Mark Lesson Viewed

Mark a lesson as viewed by the authenticated user. Sets last_viewed_at to now, and first_viewed_at if not already set.

ParameterTypeRequiredDescription
lesson_idstringyesThe UUID of the lesson

Mark Lesson Complete

Mark a lesson as completed by the authenticated user.

ParameterTypeRequiredDescription
lesson_idstringyesThe UUID of the lesson

List Cohorts

List LMS cohorts (batches, e.g. “Winter 2025”, “Summer 2026”) with optional filters. Reads lms.cohorts (RLS: any authenticated user can read).

ParameterTypeRequiredDescription
statusenumnoFilter by cohort lifecycle status One of: active, graduated, draft, archived.
batch_typeenumnoFilter by batch type (‘fellow’ or ‘organization’) One of: fellow, organization.
searchstringnoSearch by cohort name or slug
limitnumbernoMax cohorts to return (default 50, max 100)
offsetnumbernoNumber of cohorts to skip (pagination)

Create Cohort

Create an LMS cohort (batch). Admin only — RLS rejects writes from non-global-admins. If slug is omitted it is derived from the name.

ParameterTypeRequiredDescription
namestringyesCohort display name, e.g. “Winter 2025”
slugstringnoURL-safe slug (unique). Defaults to a slugified name, e.g. “winter-2025”
yearnumbernoCohort year (informational)
statusenumnoLifecycle status (default ‘active’) One of: active, graduated, draft, archived.
batch_typeenumnoBatch type, ‘fellow’ or ‘organization’ (default ‘fellow’) One of: fellow, organization.
organization_idstringnoOptional org id for organization batches
organization_namestringnoOptional org display name
starts_onstringnoInformational start date (YYYY-MM-DD). NOT used to drive the Gantt sequence.

Update Cohort

Update an LMS cohort. Admin only — RLS rejects writes from non-global-admins.

ParameterTypeRequiredDescription
idstringyesThe UUID of the cohort to update
namestringnoCohort display name
slugstringnoURL-safe unique slug
yearnumbernoCohort year
statusenumnoLifecycle status One of: active, graduated, draft, archived.
batch_typeenumnoBatch type (‘fellow’ or ‘organization’) One of: fellow, organization.
organization_idstringnoOrg id for organization batches
organization_namestringnoOrg display name
starts_onstringnoInformational start date (YYYY-MM-DD)

List Programs

List LMS programs (curriculum trees rendered by the Gantt). A program is either a reusable TEMPLATE or a per-cohort INSTANCE. Filter by kind and/or cohort_id.

ParameterTypeRequiredDescription
kindenumnoFilter by ‘template’ (reusable plan) or ‘instance’ (a cohort’s live program) One of: template, instance.
cohort_idstringnoFilter to the instance program belonging to this cohort
searchstringnoSearch by program name or slug
limitnumbernoMax programs to return (default 50, max 100)
offsetnumbernoNumber of programs to skip (pagination)

Get Program (deep)

Read ONE LMS program by id (or slug) together with its full tree: stages (ordered by position) each with their milestones (ordered by position), plus the program’s stage_dependencies edges. This is the read that powers the Gantt and verifies an authored template/instance. READ-ONLY.

ParameterTypeRequiredDescription
idstringnoThe program UUID (preferred). Provide id OR slug.
slugstringnoThe program slug (e.g. “winter-2025”). Used if id is omitted.

Create Program

Create an LMS program. Admin only. For kind=‘instance’ (a cohort’s live program), STRONGLY prefer the instantiate_program tool, which deep-copies a template into a cohort. Use create_program directly to author a new TEMPLATE, or to author an instance from scratch. Invariants: a template must NOT have cohort_id/source_program_id; an instance MUST have cohort_id.

ParameterTypeRequiredDescription
namestringyesProgram name
slugstringnoURL-safe slug; defaults to a slugified name
kindenumno’template’ (reusable plan, default) or ‘instance’ (per-cohort) One of: template, instance.
statusenumnoProgram status (default ‘active’) One of: upcoming, locked, active, done.
cohort_idstringnoRequired for kind=‘instance’ — the cohort this program serves. Must be omitted for templates.
source_program_idstringnoFor an instance authored from a template: the template id it was copied from. Omit for templates.

Update Program

Update an LMS program’s name, slug, or status. Admin only. Note: kind / cohort_id / source_program_id are immutable here — to put a template into a cohort use instantiate_program.

ParameterTypeRequiredDescription
idstringyesThe UUID of the program to update
namestringnoProgram name
slugstringnoURL-safe slug
statusenumnoProgram status One of: upcoming, locked, active, done.

Delete Program

Delete an LMS program. Admin only. CASCADE removes its stages, milestones, and stage_dependencies. Deleting an instance program detaches it from its cohort.

ParameterTypeRequiredDescription
idstringyesThe UUID of the program to delete

Instantiate Program

Deep-copy a TEMPLATE program tree (program -> stages -> milestones -> stage_dependencies) into a new per-cohort INSTANCE program, and return the new instance program id. This is the preferred way to give a cohort its curriculum. Admin only — the SQL function self-checks global-admin. Idempotent per cohort: if the cohort already has an instance program, that existing program id is returned (no duplicate tree).

ParameterTypeRequiredDescription
template_idstringyesThe UUID of the TEMPLATE program to copy (kind=‘template’)
cohort_idstringyesThe UUID of the cohort to instantiate the program for

Get Program Member Progress

Read the lms.program_member_progress VIEW — computed per-(member, cohort) progress through the cohort’s instance program (total milestones, done milestones, percentage, last completion). READ-ONLY. RLS is security_invoker: a non-admin caller only sees their own progress rows; a global admin sees everyone. Provide cohort_id (recommended) and/or a specific user_id to filter.

ParameterTypeRequiredDescription
cohort_idstringnoFilter progress to a single cohort
program_idstringnoFilter by the cohort’s instance program id (resolved to its cohort_id under the hood)
user_idstringnoFilter to a single member (admin-only view of other members)
limitnumbernoMax rows to return (default 100, max 500)
offsetnumbernoNumber of rows to skip (pagination)

List Stages

List the stages (top-level Gantt nodes) of a program, ordered by position. Each stage includes its milestone count.

ParameterTypeRequiredDescription
program_idstringyesThe UUID of the program whose stages to list

Create Stage

Create a stage (top-level Gantt node) under a program. Admin only. Stages inherit template-vs-instance from their program.

ParameterTypeRequiredDescription
program_idstringyesThe UUID of the program this stage belongs to
titlestringyesStage title
subtitlestringnoOptional subtitle
colorstringnoHex color that tints the Gantt bar, e.g. “#4F46E5”
positionnumbernoSequence order within the program (default 0)
statusenumnoNode status (default ‘upcoming’) One of: upcoming, locked, active, done.

Update Stage

Update a stage. Admin only.

ParameterTypeRequiredDescription
idstringyesThe UUID of the stage to update
titlestringnoStage title
subtitlestringnoSubtitle
colorstringnoHex color for the Gantt bar
positionnumbernoSequence order within the program
statusenumnoNode status One of: upcoming, locked, active, done.

Delete Stage

Delete a stage. Admin only. CASCADE removes its milestones.

ParameterTypeRequiredDescription
idstringyesThe UUID of the stage to delete

List Milestones

List the milestones under a stage, ordered by position.

ParameterTypeRequiredDescription
stage_idstringyesThe UUID of the stage whose milestones to list

Create Milestone

Create a milestone under a stage. Admin only. points is the gamification weight (default 0).

ParameterTypeRequiredDescription
stage_idstringyesThe UUID of the stage this milestone belongs to
titlestringyesMilestone title
descriptionstringnoMilestone description
positionnumbernoSequence order within the stage (default 0)
pointsnumbernoGamification weight / value (default 0)
statusenumnoNode status (default ‘upcoming’) One of: upcoming, locked, active, done.
linked_material_idstringnoOptional loose link to a lesson/material UUID
linked_tool_idstringnoOptional tool-catalog key

Update Milestone

Update a milestone. Admin only.

ParameterTypeRequiredDescription
idstringyesThe UUID of the milestone to update
titlestringnoMilestone title
descriptionstringnoMilestone description
positionnumbernoSequence order within the stage
pointsnumbernoGamification weight / value
statusenumnoNode status One of: upcoming, locked, active, done.
linked_material_idstringnoLoose link to a lesson/material UUID
linked_tool_idstringnoTool-catalog key

Delete Milestone

Delete a milestone. Admin only. Associated completion rows cascade.

ParameterTypeRequiredDescription
idstringyesThe UUID of the milestone to delete

List Stage Dependencies

List the sequence/dependency edges (predecessor -> successor) of a program. These drive the dependency Gantt and the “locked until prerequisite done” gating.

ParameterTypeRequiredDescription
program_idstringyesThe UUID of the program whose dependency edges to list
node_kindenumnoFilter to edges between ‘stage’ nodes or ‘milestone’ nodes One of: stage, milestone.

Add Stage Dependency

Add a sequence/dependency edge (predecessor -> successor) within a program. node_kind must match the type of both endpoint ids (stage.id or milestone.id). Admin only. The successor is gated until the predecessor is done.

ParameterTypeRequiredDescription
program_idstringyesThe UUID of the program the edge belongs to
node_kindenumyesWhether this edge connects ‘stage’ nodes or ‘milestone’ nodes (both endpoints must be this kind) One of: stage, milestone.
predecessor_idstringyesUUID of the prerequisite node (stage.id or milestone.id per node_kind)
successor_idstringyesUUID of the dependent node (stage.id or milestone.id per node_kind)

Remove Stage Dependency

Remove a dependency edge. Admin only. Provide either the edge id, OR the full tuple (program_id + node_kind + predecessor_id + successor_id).

ParameterTypeRequiredDescription
idstringnoThe UUID of the dependency edge to remove
program_idstringnoProgram id (when removing by tuple)
node_kindenumnoEdge kind (when removing by tuple) One of: stage, milestone.
predecessor_idstringnoPredecessor node id (when removing by tuple)
successor_idstringnoSuccessor node id (when removing by tuple)

Upsert Tutor Profile

Upsert a tutor’s pedagogical pattern profile (the extracted signature/rubric/typology JSON) into lms.tutor_profiles, keyed on (member_id, version). ON CONFLICT (member_id, version) updates profile_data. RLS-scoped (user-JWT); writes require global-admin per lms RLS. Used by plan 20260624-tutor-pedagogy-pattern-extraction to persist a profile produced offline by the pedagogy-corpus-eval skill.

ParameterTypeRequiredDescription
member_idstringyesThe work.members.id of the tutor this profile belongs to
versionstringnoThe profile version (default ‘v1’). Keys the upsert together with member_id.
profile_dataobjectyesThe full profile JSON payload (e.g. rubric_octagon + signature + typology) produced by the pedagogy-corpus-eval extraction.

List Wiki Articles

List dfl-wiki articles (wiki.devfellowship.com), newest update first, without the body. Filters: status, a tag, a slug prefix, a title search. A signed-in caller also sees drafts (wiki RLS).

ParameterTypeRequiredDescription
statusenumnoOnly this status One of: draft, published, archived.
tagstringnoOnly articles that carry this tag
slug_prefixstringnoOnly slugs that start with this, e.g. “content-visual”
searchstringnoCase-insensitive match on the title
limitnumbernoMax rows (default 50, max 200)

Get Wiki Article

One dfl-wiki article by id or slug, with its markdown body and its content type.

ParameterTypeRequiredDescription
idstringnoArticle UUID (pass id OR slug)
slugstringnoArticle slug, as in wiki.devfellowship.com/a/<slug> (pass id OR slug)

Create Wiki Article

Create a dfl-wiki article AS THE CALLER (author_id = you), as a DRAFT by default. Same fields as the wiki create form. The slug defaults to the form’s rule applied to the title. The content type defaults to “guide”. Publish later with publish_wiki_article.

ParameterTypeRequiredDescription
titlestringyesArticle title
slugstringnoURL slug (unique). Default: generated from the title
contentstringnoMarkdown body (GFM)
excerptstringnoShort summary shown in lists
content_type_idstringnowiki.content_types id (wins over content_type_slug)
content_type_slugstringnowiki.content_types slug, e.g. guide, feature, architecture. Default: guide
project_idstringnowork.projects id to group the article under
tagsstring[]noTags
statusenumnoDefault: draft One of: draft, published, archived.
metadataobjectnoJSON object stored in wiki.articles.metadata. Known key: parent_slug (slug of the parent article in the tree; validated: it must exist and must not make a cycle).

Update Wiki Article

Change fields of a dfl-wiki article, by id or slug. Only the fields you pass change. The wiki lets only the author or a global admin write. The status changes with publish_wiki_article. metadata merges by default (see replace_metadata); renaming a slug does not rewrite children’s parent_slug.

ParameterTypeRequiredDescription
idstringnoArticle UUID (pass id OR slug)
slugstringnoArticle slug, as in wiki.devfellowship.com/a/<slug> (pass id OR slug)
titlestringno—
new_slugstringnoRename the slug (links to the old one break)
contentstringnoMarkdown body (replaces the whole body)
excerptstringno—
content_type_idstringno—
project_idstringnonull removes the project
tagsstring[]noReplaces the tag list
metadataobjectnoMetadata patch. By default a shallow MERGE into the existing metadata: keys you pass win, keys you omit stay, a null value removes that key. parent_slug is validated (must exist, no cycle). Set replace_metadata to replace the whole object.
replace_metadatabooleannotrue: metadata REPLACES the existing object (keys you omit are dropped). Default false: merge.

Publish Wiki Article

Set the status of a dfl-wiki article: published (default — anonymous readers can see it), draft (signed-in users only) or archived. By id or slug; the author or a global admin only.

ParameterTypeRequiredDescription
idstringnoArticle UUID (pass id OR slug)
slugstringnoArticle slug, as in wiki.devfellowship.com/a/<slug> (pass id OR slug)
statusenumnoDefault: published One of: draft, published, archived.