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"
}