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.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 aresults 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:
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.422 adds an errors array describing each field that failed validation, with the location of the offending value and a message for it.
Idempotency
MostPOST 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:
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 optionalMixpanel-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
SetMixpanel-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.