Skip to main content
The Platform API is how you manage your Mixpanel account programmatically. Where the Ingestion API sends data in and the Query API reads analysis out, the Platform API operates on the platform itself — the organizations, projects, and the resources and settings inside them.

Base URL

Each request should be sent to the regional host for your project’s data residency — EU or India — under the /v1 base path.

Authentication

The Platform API authenticates with service accounts only. Pass the service account’s username and secret as HTTP Basic Auth credentials on every request. No other credential type — project token, project secret, or session cookie — is accepted.
The service account must have access to the organization, project, or workspace named in the request path, and some endpoints require a specific role beyond membership. Each endpoint’s reference page lists the roles that grant access to it. See Service Accounts for how to create one and manage its access.

Conventions

These apply across every Platform API endpoint.

Cursor pagination

Endpoints that return a collection are paginated with an opaque cursor: the response is always a results array alongside a pagination object, never a bare top-level array, so it can gain fields later without breaking your client. Requests accept these query parameters:
To walk a collection, pass pagination.next_cursor back as the cursor on the following request and repeat until it comes back null. Cursors are opaque strings — pass them through unmodified rather than parsing or constructing them.

Error responses

Every error returns a JSON body in the RFC 9457 problem details format, with the same fields regardless of which endpoint produced it.
A 422 adds an errors array describing each field that failed validation, with the location of the offending value and a message for it.

Idempotency

Most POST endpoints accept an optional Idempotency-Key header that makes the request safe to retry. An endpoint’s reference page lists Idempotency-Key among its parameters when it supports one. Send a unique value — a UUID v4 is a good choice — of up to 255 printable ASCII characters:
If a request carrying that key is retried, the original response is returned instead of the operation running a second time, and the reply carries Idempotent-Replayed: true. Keys are retained for 24 hours. GET, PUT, and DELETE are already idempotent by HTTP semantics, so the header does nothing on them and retrying is safe without it.

API versioning

This API supports an optional Mixpanel-Version header, that lets you pin the API contract your integration was built against. It is a date-based version: a calendar date such as 2026-08-13.

If you omit the header

Your request is served by the latest version of the API. When we ship a new version, your integration begins receiving the new behavior automatically, and a future release may introduce a breaking change to the response contract without warning to your code. Omitting the header is fine for exploration and for integrations you actively maintain. It is riskier for long-lived, unattended integrations.

If you set the header

Set Mixpanel-Version to a version date and that version’s contract is the one you get. A version you have pinned will not receive a breaking change — new versions are published under new dates, and your pinned date keeps serving the shape it always has. When you are ready to adopt newer behavior, you update the date at your own pace and re-test. We recommend that production integrations set an explicit Mixpanel-Version. Sending a version an endpoint doesn’t support returns a 400, with the supported versions listed in the error’s detail.

What counts as a breaking change

A new version date is introduced only for changes that could break a well-behaved client — for example, removing or renaming a field, changing a field’s type, or changing the meaning of an existing value. Additive, backward-compatible changes, such as adding a new optional field to a response, are not breaking and may appear within an existing version. Write clients that tolerate additive change: ignore response fields you don’t recognize, and don’t assume the set of values an enumerated field can take is closed.

Versions

The Platform API supports these versions: