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
userand aseries(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 thefellowship_applicationthey came from) to afellowship_podand 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
| Method | Path | What it does |
|---|---|---|
GET | /v4/fellowship_applications | List applications |
POST | /v4/fellowship_applications | Create an application |
GET | /v4/fellowship_applications/{id} | Get one application |
PATCH / PUT | /v4/fellowship_applications/{id} | Update an application |
PUT | /v4/fellowship_applications/{id}/sync | Sync an application (see below) |
Fields
| Field | Type | Notes |
|---|---|---|
id | string | The application's unique ID. Read-only. |
name | string | A display name for the application. Example: "Ada Lovelace — Summer 2026". |
status | string | Where the application is in review. One of draft, submitted, approved, rejected, withdrawn. Example: "submitted". |
rejection_reason | string | Why the application was rejected. Set when status is rejected. |
withdraw_reason | string | Why the application was withdrawn. Set when status is withdrawn. |
manage_url | string | A URL where the application can be managed. |
crm_id | string | The application's ID in the connected CRM. |
crm_type | string | The type of CRM record this maps to. |
crm_stage_name | string | The application's stage name in the CRM. |
metadata | object | Free-form key/value data about the application. |
response | object | The applicant's submitted answers, as a free-form object. |
series_id | string | The ID of the series (cohort) this application belongs to. |
user | string | The ID of the applicant. Example: "usr_a1b2c3". |
crm_owner | string | The ID of the user who owns this application in the CRM. |
series | string | The ID of the series (cohort). |
fellowship_application_track_selections | array of strings | IDs of the track selections on this application. |
fellowship_tracks | array of strings | IDs of the tracks this application selected. |
created_at | integer | When the application was created, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes. |
updated_at | integer | When 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
| Method | Path | What 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
| Field | Type | Notes |
|---|---|---|
id | string | The selection's unique ID. Read-only. |
fellowship_application | string | The ID of the application this selection belongs to. |
fellowship_track | string | The ID of the selected track. |
created_at | integer | When the selection was created, as a Unix timestamp. Read-only. |
updated_at | integer | When 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
| Method | Path | What it does |
|---|---|---|
GET | /v4/fellowship_enrollments | List enrollments |
POST | /v4/fellowship_enrollments | Create an enrollment |
GET | /v4/fellowship_enrollments/{id} | Get one enrollment |
PATCH / PUT | /v4/fellowship_enrollments/{id} | Update an enrollment |
Fields
| Field | Type | Notes |
|---|---|---|
id | string | The enrollment's unique ID. Read-only. |
enrollment_stage | string | Where the fellow is in the program. One of enrolled, graduated, dropped, in_progress. Example: "in_progress". |
github_handle | string | The fellow's GitHub username. Example: "adalovelace". |
gitlab_handle | string | The fellow's GitLab username. |
stipend_amount | number | The stipend paid to the fellow. Example: 5000. |
stipend_currency | string | The currency of the stipend. Example: "USD". |
salesforce_id | string | The enrollment's ID in Salesforce. |
general_notes | string | Free-form notes about the enrollment. |
user | string | The ID of the enrolled fellow. Example: "usr_a1b2c3". |
fellowship_application | string | The ID of the application this enrollment came from. |
fellowship_pod | string | The ID of the pod the fellow is placed in. |
series | string | The ID of the series (cohort). |
created_at | integer | When the enrollment was created, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes. |
updated_at | integer | When 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
| Method | Path | What it does |
|---|---|---|
GET | /v4/fellowship_pods | List pods |
POST | /v4/fellowship_pods | Create a pod |
GET | /v4/fellowship_pods/{id} | Get one pod |
PATCH / PUT | /v4/fellowship_pods/{id} | Update a pod |
Fields
| Field | Type | Notes |
|---|---|---|
id | string | The pod's unique ID. Read-only. |
name | string | The pod's name. Example: "Pod Turing". |
pod_number | integer | The pod's number within the cohort. Example: 7. |
meeting_days | string | The days the pod meets. Example: "Mon, Wed, Fri". |
meeting_time_zone | string | The time zone the pod meets in. Example: "America/New_York". |
programming_languages | string | The languages the pod works in. Example: "Ruby, JavaScript". |
nickname | string | A short nickname for the pod. |
salesforce_id | string | The pod's ID in Salesforce. |
meeting_time | string | The time the pod meets. Example: "14:00". |
series | string | The ID of the series (cohort) the pod belongs to. |
pod_leader | string | The ID of the user leading the pod. |
fellowship_tracks | array of strings | IDs of the tracks this pod covers. |
created_at | integer | When the pod was created, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes. |
updated_at | integer | When 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
| Method | Path | What 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
| Field | Type | Notes |
|---|---|---|
id | string | The pod track's unique ID. Read-only. |
fellowship_pod | string | The ID of the pod this record belongs to. |
fellowship_track | string | The ID of the track the pod covers. |
created_at | integer | When the pod track was created, as a Unix timestamp. Read-only. |
updated_at | integer | When 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
| Method | Path | What it does |
|---|---|---|
GET | /v4/fellowship_tracks | List tracks |
POST | /v4/fellowship_tracks | Create a track |
GET | /v4/fellowship_tracks/{id} | Get one track |
PATCH / PUT | /v4/fellowship_tracks/{id} | Update a track |
Fields
| Field | Type | Notes |
|---|---|---|
id | string | The track's unique ID. Read-only. |
name | string | The track's name. Example: "Open Source". |
description | string | A description of the track. |
program | string | The ID of the program this track belongs to. |
created_at | integer | When the track was created, as a Unix timestamp. Read-only on reads; accepts an ISO 8601 string on writes. |
updated_at | integer | When 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.
Related
- V4 API overview
- Making requests — pagination, filtering, expanding, and errors.
- Authentication
- Users