Skip to main content

MLH Sponsorships

An MLH sponsorship represents a company sponsoring MLH at the organization level — for example, a partner whose logo and call to action appear across MLH-wide surfaces rather than being tied to a single hackathon.

This is different from an event sponsorship, which links a sponsor to one specific event and lives under Events. If you want a company's sponsorship of a particular hackathon, see Events. Use this resource for the org-level relationship that isn't scoped to any one event.

MLH sponsorships are also referenced by promo code pools, which can attribute a batch of promo codes back to the sponsoring company — see Promo Codes.

For conventions that apply to every endpoint (pagination, filtering, expanding related data, and errors), see Making requests.

Endpoints

MethodPathDoes
GET/v4/mlh_sponsorshipsList MLH sponsorships
GET/v4/mlh_sponsorships/{id}Get one MLH sponsorship
POST/v4/mlh_sponsorshipsCreate an MLH sponsorship
PATCH / PUT/v4/mlh_sponsorships/{id}Update an MLH sponsorship

The {id} path parameter is the sponsorship's id (a UUID string) and is required for the get and update endpoints.

Filtering the list

The list endpoint accepts the standard page and limit pagination parameters, plus filters on these fields (using the operators described in Making requests):

  • name[contains], [excludes], [eq]
  • slug[contains], [excludes], [eq]
  • default_title[contains], [excludes], [eq]
  • default_cta_text[contains], [excludes], [eq]
  • active[eq]
  • created_at / updated_at[gt], [gte], [lt], [lte]
GET /v4/mlh_sponsorships?active[eq]=true&name[contains]=cloud&limit=50

Fields

These fields appear on every sponsorship in a response and are the ones you set when creating or updating one.

FieldTypeRequiredNotes
idstring (UUID)read-onlyThe sponsorship's unique identifier. Assigned by the API on create; use it in the path for get and update. Example: "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d".
namestringrequiredThe sponsoring company's display name. Example: "Acme Cloud".
slugstringrequiredA short, URL-safe identifier for the sponsorship. Example: "acme-cloud".
activebooleanrequiredWhether the sponsorship is currently active. Set to false to keep the record without surfacing it. Example: true.
logo_urlstringrequiredURL of the sponsor's logo. Example: "https://cdn.example.com/acme-cloud.png".
default_titlestringrequiredThe default heading shown for this sponsor. Example: "Powered by Acme Cloud".
default_cta_textstringrequiredThe default call-to-action button text. Example: "Get $100 in credits".
default_cta_urlstringrequiredThe URL the call to action links to. Example: "https://acme.cloud/mlh".
created_atintegerread-onlyWhen the sponsorship was created, as a Unix timestamp (seconds). Example: 1755561600.
updated_atintegerread-onlyWhen the sponsorship was last updated, as a Unix timestamp (seconds). Example: 1755648000.

Notes:

  • created_at and updated_at are managed by the API and returned as Unix timestamps in responses. You don't need to send them.
  • id is assigned by the API. You don't set it on create.
  • On update, send only the fields you want to change.

Scopes

Every request must be authenticated with either an OAuth 2.0 access token (client credentials flow) or a bearer JWT. Request only the scopes your integration needs, and use a token with MLH-level access to read and write these records. See Authentication for the full list of scopes and how to obtain a token.

Examples

Create a sponsorship:

POST /v4/mlh_sponsorships
Content-Type: application/json

{
"name": "Acme Cloud",
"slug": "acme-cloud",
"active": true,
"logo_url": "https://cdn.example.com/acme-cloud.png",
"default_title": "Powered by Acme Cloud",
"default_cta_text": "Get $100 in credits",
"default_cta_url": "https://acme.cloud/mlh"
}

Update a sponsorship (only the fields you want to change):

PATCH /v4/mlh_sponsorships/a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Content-Type: application/json

{
"active": false,
"default_cta_text": "Claim your credits"
}