From 1c0f70235791c6997caa3008bd1496508e375517 Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:05:28 -0700 Subject: [PATCH 01/10] Update overview.md --- pages/docs/orgs-and-projects/overview.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pages/docs/orgs-and-projects/overview.md b/pages/docs/orgs-and-projects/overview.md index 62bdcabcff..1b2b0c12a0 100644 --- a/pages/docs/orgs-and-projects/overview.md +++ b/pages/docs/orgs-and-projects/overview.md @@ -7,4 +7,6 @@ An **Organization** is the controlling entity that links projects, users, and a A **Project** is a container for your product's analytics data, including saved entities like custom events, or saved reports. Projects house the events, properties and user profiles sent to them which can then be queried with Mixpanel’s web interface and APIs. A single organization can contain multiple projects and each project’s data tallies are summed together to give the organization-level usage. +A Team is a group of users in your organization that shares the same project access permission, which makes it easier to manage roles and permissions for a group of users. A team contains a roster of users, the projects they are assigned to, the role permission in each project, Data View access, and Classified Data access. + ![Organization Overview 1 Image](/organization_overview.png) From 37cfb451ea21ae1d593524c40961c679da5a514e Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:05:56 -0700 Subject: [PATCH 02/10] Update overview.md --- pages/docs/orgs-and-projects/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/docs/orgs-and-projects/overview.md b/pages/docs/orgs-and-projects/overview.md index 1b2b0c12a0..99effe75ed 100644 --- a/pages/docs/orgs-and-projects/overview.md +++ b/pages/docs/orgs-and-projects/overview.md @@ -1,12 +1,12 @@ # Overview -The Mixpanel administrative system includes organizations and projects. +The Mixpanel administrative system includes organizations, projects, and teams. An **Organization** is the controlling entity that links projects, users, and a plan together. Each organization has a single Mixpanel plan associated with it and that plan is what determines the data volume limits and features available across all projects in the organization. A **Project** is a container for your product's analytics data, including saved entities like custom events, or saved reports. Projects house the events, properties and user profiles sent to them which can then be queried with Mixpanel’s web interface and APIs. A single organization can contain multiple projects and each project’s data tallies are summed together to give the organization-level usage. -A Team is a group of users in your organization that shares the same project access permission, which makes it easier to manage roles and permissions for a group of users. A team contains a roster of users, the projects they are assigned to, the role permission in each project, Data View access, and Classified Data access. +A **Team** is a group of users in your organization that shares the same project access permission, which makes it easier to manage roles and permissions for a group of users. A team contains a roster of users, the projects they are assigned to, the role permission in each project, Data View access, and Classified Data access. ![Organization Overview 1 Image](/organization_overview.png) From 1bc0636f53d93db9d5b063d01a41c0f19912c317 Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:29:48 -0700 Subject: [PATCH 03/10] Update organizations.md --- pages/docs/orgs-and-projects/organizations.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pages/docs/orgs-and-projects/organizations.md b/pages/docs/orgs-and-projects/organizations.md index b4afaf7305..9f5f26ed79 100644 --- a/pages/docs/orgs-and-projects/organizations.md +++ b/pages/docs/orgs-and-projects/organizations.md @@ -2,8 +2,12 @@ ## Overview +An Organization is an entity that links your projects, users, and subscription plan. -As an Organization Admin, you may create and manage security processes that dictate the requirements needed for your users to access your organization. +## Creating an Organization +A user who signs up for a new Mixpanel account without being invited by an existing Mixpanel user will be prompted to create a new organization. This is the only way a new organization is created. + +[Contact the Support team](https://mixpanel.com/get-support) if you need to create a new organization as a member of an existing organization. ## Organization Discoverability Organization Discoverability makes it seamless for new users with a shared work email domain to connect with teammates in an existing organization in Mixpanel, allowing them to access their team’s projects, data, and reports, instead of joining a new, empty org. @@ -28,3 +32,11 @@ The org owner or admin can then designate the level of discoverability of their **Admin Approval:** An organization designated as requiring “admin approval” is discoverable to any new user signing up with a specified email domain, but can only be joined upon request. Admins will receive an email notification to authorize access. **Invite Only:** An organization designated “invite only” is undiscoverable regardless of email domain. New users must be invited by the admin. + +## Deleting an Organization + +Organization Owners may request the closure of the organization under the Overview tab in the Organization Settings, which would delete your organization, all existing projects, and all the data contained inside of the project. Users will maintain access to your organization for 90 days, after which it will be deleted. After 90 days, organization projects will be **permanently** deleted. + +Learn more about [privacy and compliance here](/docs/privacy/overview). + +[Contact the Support team](https://mixpanel.com/get-support) if you have any questions regarding the deletion of your organization/data. From 22c13ac5095f28044db91fe790a8a0afd56441ed Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:47:19 -0700 Subject: [PATCH 04/10] Update managing-projects.md --- .../orgs-and-projects/managing-projects.md | 33 +++++-------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/pages/docs/orgs-and-projects/managing-projects.md b/pages/docs/orgs-and-projects/managing-projects.md index 71a0f3adf6..86593e2fb8 100644 --- a/pages/docs/orgs-and-projects/managing-projects.md +++ b/pages/docs/orgs-and-projects/managing-projects.md @@ -94,11 +94,11 @@ Then select the Projects tab. ## Manage Timezones for Projects -Mixpanel records all events in [Coordinated Universal Time (UTC)](https://www.worldtimeserver.com/learn/what-is-utc/) at intake. +>Note: For projects created before 11 Jan 2023, Mixpanel converts event timestamps to your project timezone before writing the event to your Mixpanel data stores, meaning that event timestamps are stored based on the project timezone setting at the time of ingestion. -Mixpanel converts the timezone to your project timezone before writing the event to Mixpanel data stores. Mixpanel sets project timezones by city or region. If a city or region observes Daylight Savings Time, the ingestion offset adjusts appropriately. +Mixpanel records all events in [Coordinated Universal Time (UTC)](https://www.worldtimeserver.com/learn/what-is-utc/) at intake. Changing the timezone for any project under Project Settings only affects the timezone in which Mixpanel outputs results. ->Note: As of 11 Jan 2023, all new projects store their data in UTC. Changing the timezone for any project under Project Settings only affects the timezone in which Mixpanel outputs results. You will no longer see a gap or spike in events after changing the timezone. +Mixpanel sets project timezones by city or region. If a city or region observes Daylight Savings Time, the ingestion offset adjusts appropriately. ### Changing your Timezone @@ -120,17 +120,9 @@ To change the project’s timezone: >Note that changing the timezone will not affect any data, it only affects the timezone in which we output results. -### Understanding How Timezones Affect Data - -After you set your timezone correctly, you should send any dates or times to Mixpanel as Coordinated Universal Time (UTC). - -By default, Mixpanel’s integration libraries work with API ingestion endpoints to automatically convert the UTC timestamp or date to your project timezone before storing your data. - ->If you overwrite the default timestamp, import old data, or set a property that is in date format (e.g. Account Created Date), be sure to send the timestamp or date in UTC. - #### Sending Date Properties to Mixpanel -As mentioned previously, you should send date properties to Mixpanel as UTC. Date properties are one of the five data types Mixpanel accepts. +[Date properties are one of the five data types](/docs/data-structure/property-reference/data-type#date) Mixpanel accepts. Mixpanel events should be ingested with timestamps set to Coordinated Universal Time (UTC). If you overwrite the default timestamp, import old data, or set a property that is in date format (e.g. Account Created Date), be sure to send the timestamp or date in UTC. For this type of property, Mixpanel recommends an iso-formatted date string (YYYY-MM-DDTHH:mm:ss) to use in your Mixpanel reports. @@ -156,28 +148,19 @@ Mixpanel.track("Account Created Date", props); ``` #### Exporting Data from Mixpanel -When you’re exporting raw data from Mixpanel, your request requires the date parameters "from_date" and "to_date" to determine which date range of data to return. +When you’re exporting raw data from Mixpanel, your request requires the date parameters `from_date` and `to_date` to determine which date range of data to return. Mixpanel's raw export machines interpret the "from_date" and "to_date" values to your project’s timezone. As a result, if you request a single day of data, you receive one full day in your project’s timezone, not one full day in UTC. -As mentioned earlier, Mixpanel hardcodes event timestamps to your project’s timezone. However, the "$time" property from a raw export returns with a Unix timestamp, not a UTC timestamp. - -The Unix timestamp represents the number of seconds that have elapsed since 00:00:00 on January 1, 1970 in your project’s timezone. +As mentioned earlier, Mixpanel stores your events in UTC. The "$time" property from a raw export returns with a Unix timestamp, which represents the number of seconds that have elapsed since 00:00:00 on January 1, 1970. -In the example below, if your project’s timezone is US/Pacific, the below parameters return: - - -``` -00:00:00 Aug. 1 to 11:59:59 Aug. 1 PDT, or 07:00:00 Aug. 1 – 06:59:59 Aug. 2 UTC. from_date = "2015-08-01" to_date = "2015-08-01" -``` +In the example below, if your project’s timezone is US/Pacific, and you set both the `from_date` and `to_date` to `2023-08-01`, it will return events between `00:00:00 Aug. 1 to 11:59:59 Aug. 1 PDT`/`07:00:00 Aug. 1 – 06:59:59 Aug. 2 UTC` where the events timestamp are in Unix timestamp format in UTC. #### Importing Data into Mixpanel Always send imported data to Mixpanel in UTC to ensure it displays correctly in your project. -Mixpanel hardcodes timestamps of exported data to your project’s timezone. The exported data can be events and any date properties on events and users. - -As a result, operations such as extract, transform, and load, need a quick timestamp and date property offset to reset the data back to UTC before importing it back to Mixpanel. +Mixpanel stores your data in UTC, then use your project timezone setting to output data in your selected timezone. ## Transfer Project to Another Organization From 11d03982a84f557f7c0602ae485d7869c7ec2bd7 Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:50:39 -0700 Subject: [PATCH 05/10] Update roles-and-permissions.md --- pages/docs/orgs-and-projects/roles-and-permissions.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pages/docs/orgs-and-projects/roles-and-permissions.md b/pages/docs/orgs-and-projects/roles-and-permissions.md index 1ff53e9ab6..2622a84897 100644 --- a/pages/docs/orgs-and-projects/roles-and-permissions.md +++ b/pages/docs/orgs-and-projects/roles-and-permissions.md @@ -44,7 +44,7 @@ If there are projects that you wish for everyone in your organization to have so ### Remove Users -You can remove users from an organization or project. +You can remove users from an organization or project. You can only remove users with role permission below your own. #### Remove User from an Organization @@ -95,6 +95,8 @@ Paid Organizations have four roles: Owner, Admin, Billing Admin and Member. Free #### Owner +>As a best practice, it is recommended to have at least 2 Organization Owners at all times, in case an owner loses access to their account or is no longer working with the company. + Organization Owners have administrative permissions for the organization and all the projects in the organization. Multiple users can be Owners. However, each organization must have at least one Owner. #### Admin From e8c78631db310842588e8eef90b7c2ff7090afd2 Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:54:00 -0700 Subject: [PATCH 06/10] Update _meta.json --- pages/docs/data-governance/_meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/docs/data-governance/_meta.json b/pages/docs/data-governance/_meta.json index b35450ee74..597dbc67da 100644 --- a/pages/docs/data-governance/_meta.json +++ b/pages/docs/data-governance/_meta.json @@ -1,7 +1,7 @@ { + "lexicon": "Lexicon", "data-views-and-classification": "Data Views & Classification", "event-approval": "Event Approval", "data-volume-monitoring": "Data Volume Monitoring", - "lexicon": "Lexicon", "data-clean-up": "Data Clean-Up" } From 7391cb977bf40a4607451fb43339326c792e15fb Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 19:34:45 -0700 Subject: [PATCH 07/10] Update lexicon.mdx --- pages/docs/data-governance/lexicon.mdx | 53 +++++++++++++++++--------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/pages/docs/data-governance/lexicon.mdx b/pages/docs/data-governance/lexicon.mdx index 296026035d..81ad194251 100644 --- a/pages/docs/data-governance/lexicon.mdx +++ b/pages/docs/data-governance/lexicon.mdx @@ -88,6 +88,13 @@ If you have Group Analytics enabled, you will see a dropdown on the Profile Prop ![Lexicon Profile Properties](/lexicon-group-analytics-GIF.gif) +### Lookup Table Definitions + +[Lookup Tables](/docs/data-structure/lookup-tables) in your project are listed in your Lexicon. Click into a Lookup Table definition to export the underlying CSV, replace the Lookup Table with a new CSV, and see which properties are linked. + +### Formulas and Behaviors Definition +Saved [Formulas](/docs/reports/insights/metrics#formulas) and [Funnels/Retention Behaviors](/docs/features/saved-behaviors) in your project are also documented in your Lexicon. Review here to get an overview of existing definitions in your project that you can quickly leverage in your own analysis. + ## Filtering Events, Custom Events, and Properties Lexicon provides several options for you to filter your events, custom events, event properties, and profile properties. @@ -104,7 +111,7 @@ This data lets you easily discover the parts of your implementation that are mos ![Lexicon Query Volumes](/lexicon-query-volumes.png) -## Dropping and Hiding Data +## Dropping Data In Lexicon, you can intercept and drop incoming events or properties. Mixpanel won’t store any **new data** for the event or property you select to drop. **Warning: You cannot recover event data after you drop it.** @@ -130,6 +137,16 @@ To drop an event in Lexicon: ![Lexicon Drop Events Warning](/lexicon-drop-events-warning.png) 3. Click Drop. The status of the event indicates **Dropped**. +**Undropping Events** + +You can undrop events and properties when you decide you need them again. + +To undrop an event: + +1. Select a dropped event. The “Status” column indicates if an event is dropped. +![Lexicon Undrop Events](/lexicon-undrop-events.png) +2. Click **Undrop**. The “Status” column no longer contains “Dropped”. + ### Dropping Properties By dropping a property, you can intercept and drop incoming property. Mixpanel won’t store any new data for the property you select to drop. @@ -140,25 +157,25 @@ To drop a property in Lexicon: ![Lexicon Drop Properties](/lexicon-drop-properties.png) 2. Click **Drop**. A warning indicates that you cannot recover the data that you choose to drop. Click Drop to confirm. The status of the property will indicate Dropped. -### Undropping Events +**Undropping Properties** -You can undrop events and properties when you decide you need them again. +1. Select a dropped property. The “Status” column indicates if a property is dropped. +![Lexicon Undrop Properties](/lexicon-undrop-properties.png) +2. Click **Undrop**. The “Status” column no longer contains “Dropped”. -To undrop an event: +## Hiding Data -1. Select a dropped event. The “Status” column indicates if an event is dropped. -![Lexicon Undrop Events](/lexicon-undrop-events.png) -2. Click **Undrop**. The “Status” column no longer contains “Dropped”. +In Lexicon, you can hide any events or properties. Unlike [dropping data](/docs/data-governance/lexicon#dropping-data), hiding data does not affect data ingestion; any events/properties that are hidden will continue to be ingested in your project and count toward your data allowance. -### Undropping Properties +A hidden entity will not be indexed in your event/properties menu in the query builder. Any [inactive events and properties](/docs/tracking-best-practices/debugging#inactive-events-and-properties) will also be hidden. -1. Select a dropped property. The “Status” column indicates if a property is dropped. -![Lexicon Undrop Properties](/lexicon-undrop-properties.png) -2. Click **Undrop**. The “Status” column no longer contains “Dropped”. +Hidden events will be excluded from your query results. For example, it will not be included in "All Events" and won't appear as an intermediate step in your [Flows report](/docs/reports/flows). + +Hiding data is useful for preventing not-so-commonly used entities from cluttering your events/properties menu, or to prevent certain events from being considered in your reports. -### Hide Events and Properties +If you wish to use a hidden entity in your report, you may manually select the entity by searching in the events/properties menu and then clicking "Show Hidden Events/Properties" to reveal the hidden entity. -To hide an event or property: +### Hiding Events and Properties 1. Select one or more visible events, event properties, or profile properties. The “Hide” icon appears. You can check the “Status” field to determine whether an event or property is visible or hidden. ![Lexicon Hide Events](/hide-events.png) @@ -188,17 +205,15 @@ Do note however that user profile properties cannot be merged at this time. ### Merging Events -To merge events: +**To merge events:** 1. Select the events to merge. The “Merge” icon appears. 2. Click Merge. The “Merge Events” window appears. It shows the events you selected and explains that merging the selected events combines them into a single event, which does not affect the raw data. ![Lexicon Merge Events](/lexicon-merge-events.png) 3. In the “MERGE SELECTED EVENTS INTO…” section, specify which event Mixpanel should consider as the new unique event. 4. Click **Merge**. The merged event appears and the “Status” column indicates “Merged”. - -### Unmerging Events -To unmerge events: +**To unmerge events:** 1. Select the merged event to unmerge. The “Unmerge” icon appears. ![Lexicon Unmerge Events](/unmerge-events.png) @@ -206,7 +221,7 @@ To unmerge events: ### Merging Properties -To merge properties: +**To merge properties:** 1. Select the properties to merge. The “Merge” icon appears. 2. Click Merge. The “Merge Properties” window appears. It shows the properties you selected and explains that merging the selected properties combines them into a single property, which does not affect the raw data. @@ -216,7 +231,7 @@ To merge properties: ### Unmerging Properties -To unmerge properties: +**To unmerge properties:** 1. Select the merged property to unmerge. The “Unmerge” icon appears. ![Lexicon Unmerge Events](/unmerge-properties.png) From 60b87a18ed50513cfbe29b9c2187c8db13765967 Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 19:37:15 -0700 Subject: [PATCH 08/10] Update _meta.json --- pages/docs/access-security/_meta.json | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/docs/access-security/_meta.json b/pages/docs/access-security/_meta.json index 14b2f9fd68..b854c0859f 100644 --- a/pages/docs/access-security/_meta.json +++ b/pages/docs/access-security/_meta.json @@ -1,4 +1,5 @@ { + "login": "Login", "two-factor-authentication": "Two Factor Authentication", "single-sign-on": "Single Sign-On" } From e0d81dc42257256d153ec975b6abcb892f0a9ac0 Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 19:58:29 -0700 Subject: [PATCH 09/10] Create login.md --- pages/docs/access-security/login.md | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pages/docs/access-security/login.md diff --git a/pages/docs/access-security/login.md b/pages/docs/access-security/login.md new file mode 100644 index 0000000000..11e238aa52 --- /dev/null +++ b/pages/docs/access-security/login.md @@ -0,0 +1,30 @@ +# Login + +## Overview + +Mixpanel users access Mixpanel's UI by authenticating through a login process. Mixpanel supports a few different methods for login. + +## Magic Link +- is the default for all users when they sign up for a new account +- Unless domain is claimed or other access security settings (see 2FA and SSO) +- When you click sign in, an email is sent to the email associated with your account. Click the link in the email to login. + +## Password login +- Can override default magic link login by navigating to Personal Settings and defining a password. +- After defining a password, login defaults to password moving forward and magic link option will no longer be used. +- Change password in the same personal settings page + +## Organization Access Security +- org owners/admins can enforce requirements for access security to safeguard data. +- 2FA: Whenever users sign in with a username and password, they also need to enter a security code generated on their mobile device. Users do not need a security code when signing in through the organization's identity provider (SSO). +- SSO: Enable users of your organization to log in with single sign-on. Can also require users to login using SSO and assign roles/permissions via IdP. + +## FAQ + +#### Why am I not receiving the magic login link after I click in? +Check the junk/spam inbox for the email or click the resend the email from the login page. + +If you are not seeing the email even after checking spam and resending the email, it is possible that your account may be associated with a different email. In this case, try signing up for a new account using your provided email. If your account already exists, this is another way to send the magic login link to your email. If your account does not exist, it will create one for you. + +#### Why don't I see my team's data and reports? +If you signed up via an invitation from a teammate, it is possible that the invitation was sent with the incorrect access permission. Reach out to your teammate and have them follow [these instructions to grant you access](/docs/orgs-and-projects/roles-and-permissions#invite-users). From df3d03d196356c5c4c1ff20e7769a9349144826a Mon Sep 17 00:00:00 2001 From: myronkaifung <97630035+myronkaifung@users.noreply.github.com> Date: Sun, 30 Jun 2024 20:14:38 -0700 Subject: [PATCH 10/10] Update end-user-data-management.md --- .../docs/privacy/end-user-data-management.md | 211 +----------------- 1 file changed, 1 insertion(+), 210 deletions(-) diff --git a/pages/docs/privacy/end-user-data-management.md b/pages/docs/privacy/end-user-data-management.md index aebc2586f7..aa5222554d 100644 --- a/pages/docs/privacy/end-user-data-management.md +++ b/pages/docs/privacy/end-user-data-management.md @@ -100,213 +100,4 @@ Mixpanel deletion and retrieval APIs are in place to help Mixpanel implementatio > 📘GDPR Request Rate Limits > You can batch up to 2000 distinct IDs per deletion request and up to 2000 for a retrieval request. Request rates are limited for GDPR API requests. -### GDPR and CCPA API (v3) -The following retrieval and deletion API calls are updated for version 3 and are made for GDPR and CCPA compliance. - -#### Create Retrieval -Request Type: **POST** -Description: Creates a data retrieval job. -Endpoint: `https://mixpanel.com/api/app/data-retrievals/v3.0/?token=` -Parameters: - -| Parameter | Parameter Type | Data Type | Description | -|-----------------|-------------------------|----------------|-------------------| -| Token | URL. Passed in request URL. | Query String Parameter | Your Mixpanel [project token](/docs/orgs-and-projects/managing-projects#find-your-project-tokens). | -| distinct_ids | Body. Passed in JSON blob format. | Array of strings | A list of distinct IDs associated with the users whose data you would like to export. You can add up to 2000 distinct IDs. | -| compliance_type | Body. Passed in JSON blob format. | String | Select CCPA or GDPR. Default is GDPR. | -| disclosure_type | Body. Passed in JSON blob format. | String | Only required if compliance_type = CCPA. Can be [Data, Categories, or Sources. Default is Data](/docs/privacy/end-user-data-management#ccpa-requests). | - -Authorization: - -| Authorization Type | Pass As | Description | -|-----------------------------|-------------|-------------------| -| Bearer | Body. Passed in JSON blob format. | Your [OAuth token](/docs/privacy/end-user-data-management#generate-oauth-token) for GDPR APIs. | - -Example Request: -`curl "https://mixpanel.com/api/app/data-retrievals/v3.0/?token=591b3354bb2bdd96f72f23bf56911673" --H "Authorization: Bearer vZcErNw8JCq42BZUJyWoZmDWCKBxXc" - -Example Return: -`{"status":"ok","results":[{"status":"PENDING", "disclosure_type":"DATA", "date_requested":"2020-03-09T22:28:55.078315", "tracking_id":"1583792934719392965", "project_id":1978118, "compliance_type":"ccpa", "destination_url":null, "requesting_user":"pat.davis@mixpanel.com", "distinct_id_count":1}]}` - -##### Rate Limit - -We place a rate limit in place to ensure the integrity of our system as well as prevent a single project from monopolizing the avaialble resources for other projects. Getting a 429 response code from our GDPR API means that you have reached our rate-limit. We currently have a rate-limit of 1 request per second for GDPR APIs. We also limit maximum number of outstanding scans for a single project to be approximately 5 years. - -GDPR data retrieval process works by dividing the job of extracting the events by the granularity of day, getting the events belonging to each distinct_id in the request for each day going back to the first day for which we have events in Mixpanel. Since user activity can go back several years, this means that even a single data retrieval request might require scans of many hundred days. - -In order to maximize the throughput of data retrievals, we recommend sending the maximum number of distinct-ids per request, now at 2000 distinct-ids, then retrying with exponential backoff. Depending on the amount of data that needs to be scanned, retrying for several hours might sometimes be necessary. - -#### Check Status of Retrieval -Request Type: GET - -Description: Checks the status of a data retrieval job. - -Endpoint: `https://mixpanel.com/api/app/data-retrievals/v3.0/?token=` - -Return Format: -`200 OK -{ - "results": { - "status": oneOf [ - "PENDING", - "STAGING", - "STARTED", - "SUCCESS", - "FAILURE", - "REVOKED", - "NOT_FOUND", - "UNKNOWN", - ], - } -}` - -Return Key: - -| Name | Type | Description | -|----------|---------|-------------------| -| PENDING | String | Task ID returned from POST. | -| STAGING | String | The staging process of the retrieval task has started. The task can still be canceled during staging. | -| STARTED | String | The retrieval task has started, and cannot be canceled. | -| SUCCESS | String | The retrieval task is complete. | -| FAILURE | String | The retrieval task has failed. Check the original task input parameters and create a new task. | -| REVOKED | String | The retrieval task has been canceled through a DELETE operation. | -| NOT_FOUND | String | The retrieval task cannot be found. | -| UNKNOWN | String | An error occurred while locating the retrieval task. | - -Parameters: - -| Parameter | Parameter Type | Type | Description | -|-----------------|-------------------------|---------|------------------| -| Token | URL. Passed in request URL. | Query String Parameter | Your Mixpanel [project token](/docs/orgs-and-projects/managing-projects#find-your-project-tokens). | -| Task ID | URL. Passed in request URL. | Query String Parameter | The tracking ID shown in the response. | - -Authorization: - -| Authorization Type | Pass As | Description | -|-----------------------------|-------------|------------------| -| Bearer | Body. Passed in JSON blob format. | Your [OAuth token](/docs/privacy/end-user-data-management#generate-oauth-token) for GDPR APIs. | - -Example Request: -`curl "https://mixpanel.com/api/app/data-retrievals/v3.0/1583958896131033662/?token=591b3354bb2bdd96f72f23bf56911673" --H "Authorization: Bearer vZcErNw8JCq42BZUJyWoZmDWCKBxXc"` - -Example Return: -`{"status": "ok", "results": {"status": "PENDING", "result": "", "distinct_ids": ["1"]}}` - -#### Create a Deletion Task -Request Type: POST - -Description: Creates a task that specifies a list of users in a particular project to delete. This will schedule a deletion job that will delete all data, including events and user profile data, for the users specified by distinct_ids. This deletion job may be canceled until it reaches the STARTED stage. It may take up to 30 days to complete a deletion task in a customer’s Mixpanel database. Mixpanel may retain records of deletion tasks for legal compliance purposes or for a short time based on our legitimate interest in providing a service continuity. - -Endpoint: `https://mixpanel.com/api/app/data-deletions/v3.0/?token=` - -Parameters: - -| Parameter | Parameter Type | Type | Description | -|-----------------|-------------------------|---------|------------------| -| Token | URL. Passed in request URL. | Query String Parameter | Your Mixpanel [project token](/docs/orgs-and-projects/managing-projects#find-your-project-tokens). | -| distinct_ids | Body. Passed in JSON blob format. | Array of strings | A list of distinct IDs associated with the users whose data you would like to export. You can add up to 1999 distinct IDs. | -| compliance_type | Body. Passed in JSON blob format. | String | Select CCPA or GDPR. Default is GDPR. | - -Authorization: - -| Authorization Type | Pass As | Description | -|-----------------------------|-------------|------------------| -| Bearer | Body. Passed in JSON blob format. | Your [OAuth token](/docs/privacy/end-user-data-management#generate-oauth-token) for GDPR APIs. | - -Example Request: -`curl "https://mixpanel.com/api/app/data-deletions/v3.0/?token=591b3354bb2bdd96f72f23bf56911673" --H "Authorization: Bearer vZcErNw8JCq42BZUJyWoZmDWCKBxXc" -d '{"compliance_type":"CCPA", "distinct_ids":["1"]}'` - -Example Return: -`{"status": "ok", "results": {"task_id": "35bd8477-f71f-4088-af55-c88a6fb4ad4a"}}` - -#### Check Status of a Deletion Task -Request Type: **GET** - -Description: Checks the status of an existing deletion task. - -Endpoint: `https://mixpanel.com/api/app/data-deletions/v3.0/?token=` - -Return Format: -`{ - "status": "ok", - "results": { - "tracking_id": , - "status": oneOf [ "PENDING", "STAGING", "STARTED", "SUCCESS", "FAILURE", "REVOKED", "NOT_FOUND", "UNKNOWN", ], - "requesting_user": , - "compliance_type": oneOf [ "ccpa", "gdpr", ], - "project_id": , - "date_requested": , - "distinct_ids": [,,] - } -}` - -Return Key: - -| Name | Type | Description | -|----------|---------|-------------------| -| PENDING | String | Task ID returned from POST. | -| STAGING | String | The staging process of the deletion task has started. The task can still be canceled during staging. | -| STARTED | String | The deletion task has started, and cannot be canceled. | -| SUCCESS | String | The deletion task is complete. | -| FAILURE | String | The deletion task has failed. Check the original task input parameters and create a new task. | -| REVOKED | String | The deletion task has been canceled through a DELETE operation. | -| NOT_FOUND | String | The deletion task cannot be found. | -| UNKNOWN | String | An error occurred while locating the deletion task. | - -Parameters: - -| Parameter | Parameter Type | Type | Description | -|-----------------|-------------------------|---------|------------------| -| Token | URL. Passed in request URL. | Query String Parameter | Your Mixpanel [project token](/docs/orgs-and-projects/managing-projects#find-your-project-tokens). | -| Task ID | URL. Passed in request URL. | Query String Parameter | The tracking ID shown in the response. | - -Authorization: - -| Authorization Type | Pass As | Description | -|-----------------------------|-------------|------------------| -| Bearer | Body. Passed in JSON blob format. | Your [OAuth token](/docs/privacy/end-user-data-management#generate-oauth-token) for GDPR APIs. | - -Example Request: -`curl "https://mixpanel.com/api/app/data-deletions/v3.0/35bd8477-f71f-4088-af55-c88a6fb4ad4b/?token=591b3354bb2bdd96f72f23bf56911674" -H "Authorization: Bearer vZcErNw8JCq42BZUJyWoZmDWCKBxXc" - -Example Return: -`{"status": "ok", "results": {"tracking_id": "35bd8477-f71f-4088-af55-c88a6fb4ad4a", "status": "PENDING", "requesting_user": "pat.davis@mixpanel.com", "compliance_type": "ccpa", "project_id": 1978118, "date_requested": "2024-01-24T08:00:03.672120", "distinct_ids": ["1"]}}` - -#### Cancel Deletion -Request Type: **DELETE** - -Description: Cancels an existing deletion task. Deletion jobs can be canceled until the STARTED stage initiates. - -Endpoint: `https://mixpanel.com/api/app/data-deletions/v3.0/?token=` - -Return Format: `204 NoContent` or `405 MethodNotAllowed` - -Return Key: - -| Name | Type | Description | -|----------|----------|------------------| -| 204 NoContent | Query String Parameter `required` | Your Mixpanel [project token](/docs/orgs-and-projects/managing-projects#find-your-project-tokens). | -| 405 MethodNotAllowed | Query String Parameter `required` | Task ID returned from POST. | - -Parameters: - -| Parameter | Parameter Type | Type | Description | -|-----------------|-------------------------|---------|------------------| -| Token | URL. Passed in request URL. | Query String Parameter | Your Mixpanel [project token](/docs/orgs-and-projects/managing-projects#find-your-project-tokens). | -| distinct_ids | Body. Passed in JSON blob format. | Array of strings | A list of distinct IDs associated with the users whose data you would like to export. You can add up to 1999 distinct IDs. | - -Authorization: - -| Authorization Type | Pass As | Description | -|-----------------------------|-------------|------------------| -| Bearer | Body. Passed in JSON blob format. | Your [OAuth token](/docs/privacy/end-user-data-management#generate-oauth-token) for GDPR APIs. | - -Example Request: -`curl "https://mixpanel.com/api/app/data-deletions/v3.0/?token=591b3354bb2bdd96f72f23bf56911673" --H "Authorization: Bearer vZcErNw8JCq42BZUJyWoZmDWCKBxXc" -d '{"distinct_ids":["1"]}'` - -Example Return: -`{"status": "ok", "results": {"task_id": "35bd8477-f71f-4088-af55-c88a6fb4ad4a"}}` +Please [see our GDPR API Reference](https://developer.mixpanel.com/reference/gdpr-api) to learn more about the deletion/retrieval endpoints.