Imports, Webhooks, and Banner Notices
This page covers three smaller parts of the V4 API: Imports (bulk data import jobs), Webhooks (event receivers), and Banner Notices (site-wide notice lookups).
All requests are authenticated and follow the shared conventions for pagination,
filtering, expanding, and errors — see Authentication and
Making requests. The examples below omit the
Authorization header for brevity.
Imports
An import is a bulk data import job. It records where a batch of data came from (an external source), what kind of records it brought in, and how far along the job is. Use imports to load data such as registrations, check-ins, or project submissions from another system into MLH, and to track whether that job is still pending, has been processed, or errored.
Endpoints
| Method | Path | Does |
|---|---|---|
POST | /v4/imports | Create an import |
PATCH / PUT | /v4/imports/{id} | Update an existing import |
GET | /v4/imports/identify | Look up an import by a user identifier |
Fields
When you create or update an import, you can set the following fields. Send
timestamp fields (created_at, updated_at, processed_at, errored_at) as
ISO 8601 datetime strings on the request. In responses, those same fields are
returned as Unix timestamps (integers, seconds since the epoch).
| Field | Required | What it is | Example |
|---|---|---|---|
import_type | Optional | The kind of records this job imports. One of registration, checkin, submission, project. | "registration" |
status | Optional | Where the job is in its lifecycle. One of pending, processed, errored. | "pending" |
external_source_type | Optional | The type of system the data came from. | "typeform" |
external_source_id | Optional | The identifier of the record or batch in that external system. | "form_abc123" |
event | Optional | The event this import is associated with. | "hackathon-2026" |
import_line_items | Optional | The individual line items that make up this import. | ["li_1", "li_2"] |
processed_at | Optional | When the job finished processing. Send as an ISO 8601 string; returned as a Unix timestamp. | "2026-08-19T14:00:00Z" |
errored_at | Optional | When the job errored, if it did. Send as an ISO 8601 string; returned as a Unix timestamp. | "2026-08-19T14:05:00Z" |
Read-only fields (returned in responses; set by MLH, not by you):
id— the import's unique identifier.created_at— when the import was created (Unix timestamp).updated_at— when the import was last changed (Unix timestamp).
Identify an import
GET /v4/imports/identify looks up an import for a given user, using an email
address or phone number rather than an import id. It takes these query
parameters:
| Parameter | Required | What it does |
|---|---|---|
identifier | Required | The email address or phone number to identify the user by. |
auto_create | Optional | If true, automatically create the user when no match is found. Boolean. |
The response is a single import object with the same fields described above
(timestamps as Unix integers), including its import_type, status,
external_source_type, external_source_id, event, and import_line_items.
Scopes
Requests use the standard V4 authentication scopes described in Authentication. Request only the scopes your integration needs.
Example
Create an import:
POST /v4/imports
Content-Type: application/json
{
"import_type": "registration",
"status": "pending",
"external_source_type": "typeform",
"external_source_id": "form_abc123",
"event": "hackathon-2026"
}
Identify an import by email, creating the user if needed:
GET /v4/imports/identify?identifier=jane@example.com&auto_create=true
Webhooks
The Webhooks tag is reserved for webhook receiver endpoints — endpoints that
receive event notifications. At this time the API spec declares the Webhooks
group but does not publish any webhook operations, event names, or payload
schemas. There is no webhooks block, and there are no request or response
shapes to document yet.
The detailed webhook event catalog is not yet published. This section will be expanded once those events and payloads are defined in the spec. Until then, treat webhooks as undocumented rather than assuming any particular event names or formats.
Banner Notices
Banner notices are the notice messages MLH can surface to users (for example, a site-wide banner). The lookup endpoint lets your integration fetch the banner notice information that applies to the current request.
Endpoint
| Method | Path | Does |
|---|---|---|
GET | /v4/banner_notices/lookup | Perform a lookup on banner notices |
GET /v4/banner_notices/lookup performs a lookup and returns a JSON object
describing the applicable banner notice(s). The spec does not declare specific
query parameters for this endpoint, and the response is a generic JSON object
rather than a fixed schema, so inspect the returned body directly for the fields
you need.
Like all V4 endpoints, this can return 401 (not authenticated) or 404 (not found) — see Making requests for the shared error format.
Scopes
Requests use the standard V4 authentication scopes described in Authentication.
Example
GET /v4/banner_notices/lookup
Related
- V4 API overview
- Making requests — pagination, filtering, expanding, and errors.
- Authentication