Skip to main content

Fellowship

The Fellowship endpoints manage the MLH Fellowship program: who applied, which tracks they picked, where they were placed, and how fellows are grouped once the program runs.

The resources fit together like this:

  • A Fellowship Application is one person's application to the program. Each application belongs to a user and a series (the cohort).
  • Fellowship Application Track Selections record which Fellowship Tracks an application asked for. They are the join between an application and the tracks it selected, and live nested under the application.
  • Fellowship Tracks are the tracks a fellow can work in (for example a particular program of work). Applications select them; pods offer them.
  • A Fellowship Enrollment places an accepted fellow into the program. It ties a user (and usually the fellowship_application they came from) to a fellowship_pod and carries stipend and progress details.
  • A Fellowship Pod is a small group of fellows who meet together. Each pod has a leader, a schedule, and one or more tracks.
  • Fellowship Pod Tracks are the join between a pod and the tracks it covers, nested under the pod.

All requests are authenticated — see Authentication — and follow the shared conventions for pagination, filtering, and expanding related data in Making requests.

Across every resource on this page, GET responses return created_at and updated_at as Unix timestamps (integers, in seconds), while create/update request bodies accept them as ISO 8601 datetime strings. You normally leave both to the API and only send them when importing historical records.

Fellowship Applications

A fellowship application is one person's application to a Fellowship cohort. It tracks the applicant's status, the tracks they selected, and CRM bookkeeping.

Endpoints

MethodPathWhat it does
GET/v4/fellowship_applicationsList applications
POST/v4/fellowship_applicationsCreate an application
GET/v4/fellowship_applications/{id}Get one application
PATCH / PUT/v4/fellowship_applications/{id}Update an application
PUT/v4/fellowship_applications/{id}/syncSync an application (see below)

Fields

FieldTypeNotes
idstringThe application's unique ID. Read-only.
namestringA display name for the application. Example: "Ada Lovelace — Summer 2026".
statusstringWhere the application is in review. One of draft, submitted, approved, rejected, withdrawn. Example: "submitted".
rejection_reasonstringWhy the application was rejected. Set when status is rejected.
withdraw_reasonstringWhy the application was withdrawn. Set when status is withdrawn.
manage_urlstringA URL where the application can be managed.
crm_idstringThe application's ID in the connected CRM.
crm_typestringThe type of CRM record this maps to.
crm_stage_namestringThe application's stage name in the CRM.
metadataobjectFree-form key/value data about the application.
responseobjectThe applicant's submitted answers, as a free-form object.
series_idstringThe ID of the series (cohort) this application belongs to.
userstringThe ID of the applicant. Example: "usr_a1b2c3".
crm_ownerstringThe ID of the user who owns this application in the CRM.
seriesstringThe ID of the series (cohort).
fellowship_application_track_selectionsarray of stringsIDs of the track selections on this application.
fellowship_tracksarray of stringsIDs of the tracks this application selected.
created_atintegerWhen the application was created, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes.
updated_atintegerWhen the application was last updated, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes.

Expandable associations on GET: crm_owner, fellowship_application_track_selections, fellowship_tracks, series, user.

GET /v4/fellowship_applications/{id}?expand[]=user&expand[]=fellowship_tracks

Sync an application

PUT /v4/fellowship_applications/{id}/sync

PUT /v4/fellowship_applications/{id}/sync runs a sync for a single application. Use it to reconcile the application with its connected systems — for example after its CRM record (crm_id, crm_stage_name, crm_type) changes upstream, or when you want to force the application's state to catch up rather than waiting for the next automatic sync. It takes the application id in the path and no request body.

Scopes

Requests authenticate with OAuth 2.0 or a bearer JWT, as described in Authentication. Request only the scopes your integration needs — see the full list of scopes.

Fellowship Application Track Selections

A track selection is the link between one application and one track it chose. Selections are nested under an application, so both the application and the track are part of the path.

Endpoints

MethodPathWhat it does
PATCH / PUT/v4/fellowship_applications/{fellowship_application_id}/track_selections/{fellowship_track_id}Update a track selection
DELETE/v4/fellowship_applications/{fellowship_application_id}/track_selections/{fellowship_track_id}Delete a track selection

Here fellowship_application_id is the application the selection belongs to and fellowship_track_id is the track being selected.

Fields

FieldTypeNotes
idstringThe selection's unique ID. Read-only.
fellowship_applicationstringThe ID of the application this selection belongs to.
fellowship_trackstringThe ID of the selected track.
created_atintegerWhen the selection was created, as a Unix timestamp. Read-only.
updated_atintegerWhen the selection was last updated, as a Unix timestamp. Read-only.

To read an application's selections, expand fellowship_application_track_selections (or fellowship_tracks) on the application itself.

Scopes

See Authentication and the full list of scopes.

Fellowship Enrollments

An enrollment places an accepted fellow into the running program. It links a user (and usually the fellowship_application they came from) to a fellowship_pod, and records stipend and progress details.

Endpoints

MethodPathWhat it does
GET/v4/fellowship_enrollmentsList enrollments
POST/v4/fellowship_enrollmentsCreate an enrollment
GET/v4/fellowship_enrollments/{id}Get one enrollment
PATCH / PUT/v4/fellowship_enrollments/{id}Update an enrollment

Fields

FieldTypeNotes
idstringThe enrollment's unique ID. Read-only.
enrollment_stagestringWhere the fellow is in the program. One of enrolled, graduated, dropped, in_progress. Example: "in_progress".
github_handlestringThe fellow's GitHub username. Example: "adalovelace".
gitlab_handlestringThe fellow's GitLab username.
stipend_amountnumberThe stipend paid to the fellow. Example: 5000.
stipend_currencystringThe currency of the stipend. Example: "USD".
salesforce_idstringThe enrollment's ID in Salesforce.
general_notesstringFree-form notes about the enrollment.
userstringThe ID of the enrolled fellow. Example: "usr_a1b2c3".
fellowship_applicationstringThe ID of the application this enrollment came from.
fellowship_podstringThe ID of the pod the fellow is placed in.
seriesstringThe ID of the series (cohort).
created_atintegerWhen the enrollment was created, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes.
updated_atintegerWhen the enrollment was last updated, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes.

Expandable associations on GET: user, fellowship_application, fellowship_pod, series.

GET /v4/fellowship_enrollments?fellowship_pod[eq]=pod_123&expand[]=user

Scopes

See Authentication and the full list of scopes.

Fellowship Pods

A pod is a small group of fellows who meet together, led by a pod leader. Each pod has a schedule and covers one or more tracks.

Endpoints

MethodPathWhat it does
GET/v4/fellowship_podsList pods
POST/v4/fellowship_podsCreate a pod
GET/v4/fellowship_pods/{id}Get one pod
PATCH / PUT/v4/fellowship_pods/{id}Update a pod

Fields

FieldTypeNotes
idstringThe pod's unique ID. Read-only.
namestringThe pod's name. Example: "Pod Turing".
pod_numberintegerThe pod's number within the cohort. Example: 7.
meeting_daysstringThe days the pod meets. Example: "Mon, Wed, Fri".
meeting_time_zonestringThe time zone the pod meets in. Example: "America/New_York".
programming_languagesstringThe languages the pod works in. Example: "Ruby, JavaScript".
nicknamestringA short nickname for the pod.
salesforce_idstringThe pod's ID in Salesforce.
meeting_timestringThe time the pod meets. Example: "14:00".
seriesstringThe ID of the series (cohort) the pod belongs to.
pod_leaderstringThe ID of the user leading the pod.
fellowship_tracksarray of stringsIDs of the tracks this pod covers.
created_atintegerWhen the pod was created, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes.
updated_atintegerWhen the pod was last updated, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes.

Expandable associations on GET: series, pod_leader, fellowship_tracks.

GET /v4/fellowship_pods/{id}?expand[]=pod_leader&expand[]=fellowship_tracks

Scopes

See Authentication and the full list of scopes.

Fellowship Pod Tracks

A pod track is the link between one pod and one track it covers. Pod tracks are nested under a pod, so both the pod and the track are part of the path.

Endpoints

MethodPathWhat it does
PATCH / PUT/v4/fellowship_pods/{fellowship_pod_id}/tracks/{id}Update a pod track
DELETE/v4/fellowship_pods/{fellowship_pod_id}/tracks/{id}Delete a pod track

Here fellowship_pod_id is the pod the track belongs to and id is the pod track record.

Fields

FieldTypeNotes
idstringThe pod track's unique ID. Read-only.
fellowship_podstringThe ID of the pod this record belongs to.
fellowship_trackstringThe ID of the track the pod covers.
created_atintegerWhen the pod track was created, as a Unix timestamp. Read-only.
updated_atintegerWhen the pod track was last updated, as a Unix timestamp. Read-only.

To read a pod's tracks, expand fellowship_tracks on the pod itself.

Scopes

See Authentication and the full list of scopes.

Fellowship Tracks

A track is a program of work a fellow can be part of. Applications select tracks, and pods offer them.

Endpoints

MethodPathWhat it does
GET/v4/fellowship_tracksList tracks
POST/v4/fellowship_tracksCreate a track
GET/v4/fellowship_tracks/{id}Get one track
PATCH / PUT/v4/fellowship_tracks/{id}Update a track

Fields

FieldTypeNotes
idstringThe track's unique ID. Read-only.
namestringThe track's name. Example: "Open Source".
descriptionstringA description of the track.
programstringThe ID of the program this track belongs to.
created_atintegerWhen the track was created, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes.
updated_atintegerWhen the track was last updated, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes.

Expandable association on GET: program.

GET /v4/fellowship_tracks?name[contains]=open&expand[]=program

Scopes

See Authentication and the full list of scopes.