> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended**:
> ```bash
> npx @scalekit-inc/cli setup
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for 40+ agents.
> Features: full-stack-auth, agent-auth, mcp-auth, modular-sso, modular-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Mixpanel Ingestion connector

Connect to Mixpanel''s Ingestion API to track events, manage user and group profiles, resolve identities, replace lookup tables, and evaluate feature...

**Authentication:** Service Account
**Categories:** Analytics
1. ### Install the SDK

   
     ### Node.js

```bash frame="terminal"
npm install @scalekit-sdk/node
```

     ### Python

```bash frame="terminal"
pip install scalekit
```

   

   Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/)

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

```sh showLineNumbers=false title=".env"
SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
SCALEKIT_CLIENT_ID=<your-client-id>
SCALEKIT_CLIENT_SECRET=<your-client-secret>
```

3. ### Set up the connector

   Register your Mixpanel Ingestion credentials with Scalekit so it can authenticate requests on your behalf. You do this once per environment.

   ## Dashboard setup steps

Register your Mixpanel Service Account username and secret with Scalekit so it can authenticate and proxy requests on behalf of your users. Mixpanel uses HTTP Basic Auth — the Service Account username is the username and the secret is the password. There is no redirect URI or OAuth flow.

1. ### Find your Mixpanel data residency region

   Mixpanel hosts projects in three separate data residency regions. Before generating a Service Account, confirm which region your project lives in:

   | Region | API host |
   |--------|----------|
   | United States (default) | `mixpanel.com/api` |
   | European Union | `eu.mixpanel.com/api` |
   | India | `in.mixpanel.com/api` |

   > caution: Region must match your project
>
> A Service Account works only against the API host for the region your project was created in. Using the wrong region in Scalekit means every request fails to find your data.

2. ### Create a Service Account

   - Sign in to Mixpanel and go to **Settings** → **Project** → **Service Accounts**.
   - Click **Add Service Account**, give it a name (for example, `Agent Auth`), and choose a role.
   - Copy the generated **Username** and **Secret** immediately — Mixpanel shows the secret only once.

     > Image: Mixpanel Add Service Account modal showing the generated Username and Secret fields

   > tip: Legacy Project Secret also works
>
> If your project still uses a legacy Project Secret instead of a Service Account, enter the secret as the **Username** and leave **Secret** blank in Scalekit.

3. ### Create a connection in Scalekit

   - In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** → **Connections** → **Create Connection**.
   - Search for **Mixpanel Ingestion** and click **Create**.
   - Note the **Connection name** — use this as `connection_name` in your code (e.g., `mixpanelingestion`).

4. ### Add a connected account

   Connected accounts link a specific user identifier in your system to a Mixpanel Service Account and region. Add them via the dashboard for testing, or via the Scalekit API in production.

   **Via dashboard (for testing)**

   - Open the connection and click the **Connected Accounts** tab → **Add account**.
   - Fill in **Your User's ID**, the **Username**, **Secret**, and select the matching **Data Residency**.
   - Click **Save**.

   **Via API (for production)**

   
     ### Node.js

```ts
// US region (default) — omit `domain` or set it to 'mixpanel.com/api'
await scalekit.connect.upsertConnectedAccount({
  connectionName: 'mixpanelingestion',
  identifier: 'user@example.com',
  credentials: {
    username: 'your-service-account-username',
    password: 'your-service-account-secret',
    domain: 'mixpanel.com/api',
  },
})

// EU region
await scalekit.connect.upsertConnectedAccount({
  connectionName: 'mixpanelingestion',
  identifier: 'eu-user@example.com',
  credentials: {
    username: 'your-eu-service-account-username',
    password: 'your-eu-service-account-secret',
    domain: 'eu.mixpanel.com/api',
  },
})
```

     ### Python

```python
# US region (default) — omit domain or set it to "mixpanel.com/api"
scalekit_client.connect.upsert_connected_account(
    connection_name="mixpanelingestion",
    identifier="user@example.com",
    credentials={
        "username": "your-service-account-username",
        "password": "your-service-account-secret",
        "domain": "mixpanel.com/api",
    },
)

# EU region
scalekit_client.connect.upsert_connected_account(
    connection_name="mixpanelingestion",
    identifier="eu-user@example.com",
    credentials={
        "username": "your-eu-service-account-username",
        "password": "your-eu-service-account-secret",
        "domain": "eu.mixpanel.com/api",
    },
)
```

   

   > tip: Running multiple regions side by side
>
> If your organization has projects in more than one region, create a separate connected account per user (or per project) with the matching `domain` value. Scalekit routes each account's requests to the correct regional host automatically.

## What you can do

Connect this agent connector to let your agent:

- **Definitions feature flags** — Get the full definitions of every feature flag/experiment configured in a Mixpanel project, including each flag's variants, rollout rules, and linked experiment
- **Evaluate feature flags** — Evaluate all enabled Mixpanel feature flags and experiments for a given user, returning the variant each flag assigns them
- **Update group batch, profile batch** — Send a batch of mixed group-profile updates to Mixpanel in a single call, analogous to 'mixpanelingestion_profile_batch_update' for user profiles
- **Delete group, profile** — Permanently delete a Mixpanel group profile and all of its properties, analogous to 'mixpanelingestion_profile_delete' for user profiles
- **Remove group, profile** — Remove a specific value from a list-valued property on a Mixpanel group profile, analogous to 'mixpanelingestion_profile_remove' for user profiles
- **Set group, profile** — Set (overwrite) properties on a Mixpanel group profile (e.g

## Tool list

Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first.

## Tool list

### `mixpanelingestion_feature_flags_definitions`

Get the full definitions of every feature flag/experiment configured in a Mixpanel project, including each flag's variants, rollout rules, and linked experiment. Provide either 'project_token' or 'project_id' to authenticate (project_id uses your Service Account credentials).

Parameters:

- `project_id` (`string`, optional): Your numeric Mixpanel Project ID, used if authenticating with a Service Account. Provide this or 'project_token'.
- `project_token` (`string`, optional): Your Mixpanel Project Token, used if authenticating without a Service Account. Provide this or 'project_id'.

### `mixpanelingestion_feature_flags_evaluate`

Evaluate all enabled Mixpanel feature flags and experiments for a given user, returning the variant each flag assigns them. Provide either 'project_token' or 'project_id' to authenticate (project_id uses your Service Account credentials).

Parameters:

- `context` (`object`, required): JSON object describing the user to evaluate flags for. Must include 'distinct_id'; may include 'device_id' and 'custom_properties' (used for targeting rules). Example: {"distinct_id": "user_00123", "custom_properties": {"plan": "pro"}}.
- `project_id` (`string`, optional): Your numeric Mixpanel Project ID, used if authenticating with a Service Account. Provide this or 'project_token'.
- `project_token` (`string`, optional): Your Mixpanel Project Token, used if authenticating without a Service Account. Provide this or 'project_id'.

### `mixpanelingestion_group_batch_update`

Send a batch of mixed group-profile updates to Mixpanel in a single call, analogous to 'mixpanelingestion_profile_batch_update' for user profiles. Each item in 'updates' is a fully-formed update object with its own "$token", "$group_key", "$group_id", and one operation key ($set, $set_once, $add, $union, $remove, $unset, or $delete). Example: [{"$token": "...", "$group_key": "Company", "$group_id": "Acme", "$set": {"Plan": "Enterprise"}}].

Parameters:

- `updates` (`array`, required): Array of fully-formed group update objects, each with $token, $group_key, $group_id, and one operation key ($set/$set_once/$add/$union/$remove/$unset/$delete).

### `mixpanelingestion_group_delete`

Permanently delete a Mixpanel group profile and all of its properties, analogous to 'mixpanelingestion_profile_delete' for user profiles. This does not delete historical events associated with the group.

Parameters:

- `group_id` (`string`, required): The value identifying this specific group, e.g. the company name or account ID.
- `group_key` (`string`, required): The name of the group key as configured in Mixpanel, e.g. "Company" or "Account ID".
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_group_remove`

Remove a specific value from a list-valued property on a Mixpanel group profile, analogous to 'mixpanelingestion_profile_remove' for user profiles. If the value is not present, no change is made.

Parameters:

- `group_id` (`string`, required): The value identifying this specific group, e.g. the company name or account ID.
- `group_key` (`string`, required): The name of the group key as configured in Mixpanel, e.g. "Company" or "Account ID".
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `removals` (`object`, required): JSON object mapping list-property names to the single value to remove from each. Example: {"Enabled Features": "beta-search"}.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the group profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_group_set`

Set (overwrite) properties on a Mixpanel group profile (e.g. a company or team account), analogous to 'mixpanelingestion_profile_set' for user profiles. Creates the group profile if it does not already exist. Requires Group Analytics to be enabled on your Mixpanel project.

Parameters:

- `group_id` (`string`, required): The value identifying this specific group, e.g. the company name or account ID.
- `group_key` (`string`, required): The name of the group key as configured in Mixpanel, e.g. "Company" or "Account ID".
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `properties` (`object`, required): JSON object of property names and values to set on the group profile, overwriting any existing values. Example: {"Plan": "Enterprise", "Seats": 50}.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the group profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_group_set_once`

Set properties on a Mixpanel group profile only if they are not already set — existing values are never overwritten, analogous to 'mixpanelingestion_profile_set_once' for user profiles. Creates the group profile if it does not already exist.

Parameters:

- `group_id` (`string`, required): The value identifying this specific group, e.g. the company name or account ID.
- `group_key` (`string`, required): The name of the group key as configured in Mixpanel, e.g. "Company" or "Account ID".
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `properties` (`object`, required): JSON object of property names and values to set only if not already present on the group profile. Example: {"First Seen": "2026-01-01"}.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the group profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_group_union`

Add values to a list-valued property on a Mixpanel group profile, ensuring each value only appears once, analogous to 'mixpanelingestion_profile_union' for user profiles. Creates the group profile if it does not already exist.

Parameters:

- `group_id` (`string`, required): The value identifying this specific group, e.g. the company name or account ID.
- `group_key` (`string`, required): The name of the group key as configured in Mixpanel, e.g. "Company" or "Account ID".
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `unions` (`object`, required): JSON object mapping list-property names to arrays of values to add (duplicates are not re-added). Example: {"Enabled Features": ["beta-search", "dark-mode"]}.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the group profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_group_unset`

Permanently remove one or more named properties (and their values) from a Mixpanel group profile, analogous to 'mixpanelingestion_profile_unset' for user profiles.

Parameters:

- `group_id` (`string`, required): The value identifying this specific group, e.g. the company name or account ID.
- `group_key` (`string`, required): The name of the group key as configured in Mixpanel, e.g. "Company" or "Account ID".
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `property_names` (`array`, required): Array of property names to permanently remove from the group profile. Example: ["Trial Ends At"].
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the group profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_identity_create`

Link an anonymous distinct_id to a known, identified distinct_id by sending a Mixpanel $identify event via /track. Use this the first time you learn a user's real identifier (e.g. after login or signup) so that pre-login and post-login activity is merged onto one profile. Returns the literal text "1" on success or "0" on failure.

Parameters:

- `anon_id` (`string`, required): The anonymous distinct_id that was used before the user was identified (mapped to $anon_id).
- `identified_id` (`string`, required): The known, identified distinct_id to link the anonymous ID to (mapped to $identified_id).
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the event payload to authenticate the request.

### `mixpanelingestion_identity_create_alias`

Create a legacy alias linking a new distinct_id to an existing one by sending a Mixpanel $create_alias event via /track. This is the legacy identity-linking mechanism; for new integrations prefer 'mixpanelingestion_identity_create' ($identify) or 'mixpanelingestion_identity_merge'. Returns the literal text "1" on success or "0" on failure.

Parameters:

- `alias` (`string`, required): The new alias distinct_id to associate with the existing distinct_id.
- `distinct_id` (`string`, required): The existing distinct_id that the alias should resolve to.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the event payload to authenticate the request.

### `mixpanelingestion_identity_merge`

Merge two distinct_ids into a single identity using Mixpanel's modern Identity Merge API (a $merge event sent through /import, authenticated with your Service Account). All historical events and profile data from both distinct_ids are combined under one identity. Use this instead of the legacy 'mixpanelingestion_identity_create_alias' for new integrations. Requires your Mixpanel project to use 'Original ID Merge' (Project Settings > Identity Merge) — projects on 'Simplified ID Merge' reject $merge events outright ("identity events are not allowed when project is using simplified identity management"); use 'mixpanelingestion_identity_create_alias' instead on those projects.

Parameters:

- `distinct_id_1` (`string`, required): The first distinct_id to merge (order does not matter).
- `distinct_id_2` (`string`, required): The second distinct_id to merge (order does not matter).
- `project_id` (`string`, required): Your numeric Mixpanel Project ID, required to authenticate Service Account requests. Find it in Mixpanel under Project Settings > Overview.

### `mixpanelingestion_import_events`

Import a batch of up to 2000 events into Mixpanel via the modern, Service Account-authenticated /import endpoint. This is Mixpanel's recommended way to send events from a trusted server-side integration (unlike the classic /track endpoint). Each event needs an 'event' name and a 'properties' object containing at minimum 'time' (epoch seconds/ms), 'distinct_id', and '$insert_id' (a unique string used for deduplication). With strict=1 (default, recommended), Mixpanel validates every event and returns per-record errors for any that fail.

Parameters:

- `events` (`array`, required): Array of event objects to import (max 2000 per call, 10MB uncompressed total). Each object must have 'event' (string) and 'properties' (object) with 'properties.time' (epoch seconds/ms), 'properties.distinct_id', and 'properties.$insert_id' for deduplication, plus any custom properties. Example: [{"event": "Purchased", "properties": {"time": 1719859200, "distinct_id": "user_00123", "$insert_id": "a1b2c3", "amount": 19.99}}]
- `project_id` (`string`, required): Your numeric Mixpanel Project ID, required to authenticate Service Account requests. Find it in Mixpanel under Project Settings > Overview.
- `strict` (`string`, optional): When "1" (recommended), Mixpanel validates the whole batch and returns per-event errors for any records that fail. When "0", invalid records are silently dropped.

### `mixpanelingestion_lookup_table_replace`

Replace the entire contents of a Mixpanel Lookup Table with new CSV data. This overwrites all existing rows in the table — use 'mixpanelingestion_lookup_tables_list' first to find the table's id. The first column of the CSV must be the table's key (matching the property it enriches); subsequent columns become additional properties joined onto matching events or profiles.

Parameters:

- `csv_data` (`string`, required): The full replacement contents of the lookup table as CSV text, including a header row. Example: "id,field1,field2\nkey1,v1,z1\nkey2,z1,z2\n".
- `project_id` (`string`, required): Your numeric Mixpanel Project ID, required to authenticate Service Account requests. Find it in Mixpanel under Project Settings > Overview.
- `table_id` (`string`, required): The UUID of the lookup table to replace. Retrieve it with 'mixpanelingestion_lookup_tables_list' or from Lexicon under the lookup table's details.

### `mixpanelingestion_lookup_tables_list`

List the Lookup Tables defined in a Mixpanel project. Returns each table's id and name. Use the id with 'mixpanelingestion_lookup_table_replace' to update a table's contents, or find it in Lexicon under the lookup table's details.

Parameters:

- `project_id` (`string`, required): Your numeric Mixpanel Project ID, required to authenticate Service Account requests. Find it in Mixpanel under Project Settings > Overview.

### `mixpanelingestion_profile_append`

Append a value to a list-valued property on a Mixpanel user profile via Engage $append. If the property does not yet exist, it is created as a single-element list. Unlike $union, duplicate values are allowed. Useful for ordered logs like "Recent Searches".

Parameters:

- `appends` (`object`, required): JSON object mapping list-property names to the single value to append to each. Example: {"Recent Searches": "running shoes"}.
- `distinct_id` (`string`, required): The unique identifier of the profile to update.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_profile_batch_update`

Send a batch of mixed user-profile updates to Mixpanel Engage in a single call. Each item in 'updates' is a fully-formed update object with its own "$token", "$distinct_id", and one operation key ($set, $set_once, $add, $union, $append, $remove, $unset, or $delete) — the same shapes used by 'mixpanelingestion_profile_set' etc. Example: [{"$token": "...", "$distinct_id": "u1", "$set": {"Plan": "Pro"}}, {"$token": "...", "$distinct_id": "u2", "$add": {"Coins": 13}}]. Use this to reduce round trips when updating many profiles at once.

Parameters:

- `updates` (`array`, required): Array of fully-formed profile update objects, each with $token, $distinct_id, and one operation key ($set/$set_once/$add/$union/$append/$remove/$unset/$delete).

### `mixpanelingestion_profile_delete`

Permanently delete a Mixpanel user profile and all of its properties via Engage $delete. This does not delete the user's historical events, only their profile. If duplicate profiles exist due to identity merging, set 'ignore_alias' to true so you don't accidentally delete the original profile when the distinct_id passed in is actually an alias.

Parameters:

- `distinct_id` (`string`, required): The unique identifier of the profile to permanently delete.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `ignore_alias` (`boolean`, optional): Set to true if the distinct_id may be an alias, to avoid deleting the original profile it resolves to.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_profile_increment`

Increment (or decrement, using a negative value) numeric properties on a Mixpanel user profile via Engage $add. The given amounts are added to the existing values; if a property is not yet present it is treated as 0. Useful for counters such as "Number of Logins" or "Files Uploaded".

Parameters:

- `distinct_id` (`string`, required): The unique identifier of the profile to update.
- `increments` (`object`, required): JSON object mapping property names to numeric amounts to add (use a negative number to decrement). Example: {"Number of Logins": 1, "Credits": -5}.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_profile_remove`

Remove a specific value from a list-valued property on a Mixpanel user profile via Engage $remove. If the value is not present, no change is made. The opposite of 'mixpanelingestion_profile_append'.

Parameters:

- `distinct_id` (`string`, required): The unique identifier of the profile to update.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `removals` (`object`, required): JSON object mapping list-property names to the single value to remove from each. Example: {"Recent Searches": "running shoes"}.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_profile_set`

Set (overwrite) properties on a Mixpanel user profile via Engage $set. Creates the profile if it does not already exist. Use this for properties that should always reflect the latest value, such as "Plan" or "Last Login". For properties that should only be set the first time, use 'mixpanelingestion_profile_set_once' instead.

Parameters:

- `distinct_id` (`string`, required): The unique identifier of the profile to update.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `properties` (`object`, required): JSON object of property names and values to set on the profile, overwriting any existing values. Example: {"Plan": "Pro", "$email": "user@example.com"}.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the profile from the request IP. Recommended to leave at 0 for server-side calls to avoid overwriting the profile's real geolocation with your server's location.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_profile_set_once`

Set properties on a Mixpanel user profile via Engage $set_once, but only if they are not already set — existing values are never overwritten. Creates the profile if it does not already exist. Useful for properties like "First Login Date" that should be recorded once and never changed.

Parameters:

- `distinct_id` (`string`, required): The unique identifier of the profile to update.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `properties` (`object`, required): JSON object of property names and values to set only if not already present on the profile. Example: {"First Login Date": "2026-06-01"}.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_profile_union`

Add values to a list-valued property on a Mixpanel user profile via Engage $union, ensuring each value only appears once in the resulting list. Creates the profile if it does not already exist. Useful for properties like "Purchased Categories" that accumulate unique values over time.

Parameters:

- `distinct_id` (`string`, required): The unique identifier of the profile to update.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `unions` (`object`, required): JSON object mapping list-property names to arrays of values to add (duplicates are not re-added). Example: {"Purchased Categories": ["Books", "Electronics"]}.
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_profile_unset`

Permanently remove one or more named properties (and their values) from a Mixpanel user profile via Engage $unset. This deletes the properties themselves, not the profile — use 'mixpanelingestion_profile_delete' to delete the whole profile.

Parameters:

- `distinct_id` (`string`, required): The unique identifier of the profile to update.
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). Embedded in the payload to authenticate the request.
- `property_names` (`array`, required): Array of property names to permanently remove from the profile. Example: ["$email", "Trial Ends At"].
- `ip` (`integer`, optional): Set to 1 to let Mixpanel geolocate the profile from the request IP. Recommended to leave at 0 for server-side calls.
- `strict` (`integer`, optional): Set to 1 to have Mixpanel validate the record and return per-record error messages if validation fails.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".

### `mixpanelingestion_track_event`

Send a single event to Mixpanel via the classic /track endpoint, authenticated with your Mixpanel Project Token (not your Service Account). Use this for lightweight, fire-and-forget event tracking. For reliable server-side ingestion with validation and duplicate protection, prefer 'mixpanelingestion_import_events' instead. Returns the literal text "1" on success or "0" on failure unless 'verbose' is set to 1.

Parameters:

- `event` (`string`, required): The name of the event to track, e.g. "Signed up" or "Purchased item".
- `project_token` (`string`, required): Your Mixpanel Project Token (Project Settings > Overview). This is embedded in the event payload and is how /track authenticates the request — it is not your Service Account.
- `distinct_id` (`string`, optional): The unique identifier of the user who performed the event. If omitted and 'ip' is set to 1, Mixpanel derives one from the request IP.
- `insert_id` (`string`, optional): A unique identifier for this event used for deduplication (mapped to $insert_id). Events with identical (event, time, distinct_id, insert_id) are deduplicated; only the latest is kept. Max 36 bytes, alphanumeric or dash.
- `ip` (`integer`, optional): Set to 1 to have Mixpanel derive geolocation and distinct_id from the request's IP address. Recommended to leave at 0 for server-side calls to avoid attributing your server's location to the event.
- `profile_properties` (`object`, optional): Additional custom event properties to merge into the event's properties object, as a JSON object. Example: {"Plan": "Pro", "Referrer": "google"}.
- `time` (`integer`, optional): The time the event occurred, in seconds or milliseconds since the UTC epoch. If omitted, Mixpanel uses the ingestion time. Future timestamps are overwritten with the current time.
- `verbose` (`integer`, optional): Set to 1 to receive a JSON object describing success/failure instead of a bare "1"/"0".


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
