> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mixpanel.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Multiple Profiles

> Send a batch of profile updates. Instead of sending a single JSON object as the data query parameter, send a JSON list of objects as the data parameter of an application/json POST or GET request body.

Refer to the respective user profile update commands (\$set, \$set_once, \$add, \$union, \$append, \$remove, \$unset, and \$delete) on syntax for their parameters.

<Note>
  This API will return a 200 OK even if there are data validation issues. To ensure the request actually succeeded, you need to check the response body.
</Note>


## OpenAPI

````yaml openapi/ingestion.openapi.yaml POST /engage#profile-batch-update
openapi: 3.0.2
info:
  title: Ingestion API
  description: APIs allowing for event-based tracking and user profile handling.
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
  version: 1.0.0
  contact:
    url: https://mixpanel.com/get-support
servers:
  - url: https://{region}.mixpanel.com
    description: Mixpanel's data collection server.
    variables:
      region:
        default: api
        enum:
          - api
          - api-eu
          - api-in
        description: |
          The server location to be used:
            * `api` - The default (US) servers used for most projects
            * `api-eu` - EU servers if you are enrolled in EU Data Residency
            * `api-in` - India servers if you are enrolled in India Data Residency
security: []
tags:
  - name: Events
    description: Track events.
  - name: Group Profiles
    description: Manage groups and their properties
  - name: Identities
    description: Register or merge users with a new identity.
  - name: Lookup Tables
    description: Enrich existing event and profile properties
  - name: User Profiles
    description: Manage profiles and their properties
paths:
  /engage#profile-batch-update:
    post:
      tags:
        - User Profiles
      summary: Update Multiple Profiles
      description: >-
        Send a batch of profile updates. Instead of sending a single JSON object
        as the data query parameter, send a JSON list of objects as the data
        parameter of an application/json POST or GET request body.


        Refer to the respective user profile update commands (\$set, \$set_once,
        \$add, \$union, \$append, \$remove, \$unset, and \$delete) on syntax for
        their parameters.
      operationId: profile-batch-update
      parameters:
        - in: query
          name: ip
          required: false
          schema:
            type: integer
            minimum: 0
            maximum: 1
            default: 0
            description: >-
              If present and equal to 0, Mixpanel will not perform geolocation
              parsing using the IP address of the request. We recommend setting
              the ip to "0" when making requests from the server-side to prevent
              the unintentional effect of overwriting your profile's geolocation
              with your server location. Defaults to 1 which would use the IP
              address of the request to update profile geolocation.
        - in: query
          name: strict
          required: false
          schema:
            type: integer
            minimum: 0
            maximum: 1
            description: >-
              If present and equal to 1, Mixpanel will validate the provided
              records and return a JSON object with per-record error messages
              for records that fail validation.
        - in: query
          name: verbose
          required: false
          schema:
            type: integer
            minimum: 0
            maximum: 1
          description: >-
            If present and equal to 1, Mixpanel will respond with a JSON Object
            describing the success or failure of the tracking call. The returned
            object will have two keys: `status`, with the value 1 on success and
            0 on failure, and `error`, with a string-valued error message if the
            request wasn't successful. This is useful for debugging during
            implementation.
        - in: query
          name: callback
          required: false
          schema:
            type: string
          description: >-
            If present, Mixpanel will return a `content-type: text/javascript`
            with a body that calls a function by value provided. This is useful
            for creating local callbacks to a successful track call in
            JavaScript.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: string
              format: blob
              description: >-
                A JSON list of update objects, each with a $token, $distinct_id,
                and an operation.
              default: |
                [
                    {
                        "$token": "YOUR_PROJECT_TOKEN",
                        "$distinct_id": "13793",
                        "$set": { "$email": "user1@mail.com" }
                    },
                    {
                        "$token": "YOUR_PROJECT_TOKEN",
                        "$distinct_id": "13794",
                        "$add": { "Coins Gathered": 13 }
                    },
                    {
                        "$token": "YOUR_PROJECT_TOKEN",
                        "$distinct_id": "13795",
                        "$unset": ["$email"]
                    }
                ]
      responses:
        '200':
          $ref: '#/components/responses/Received'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      security:
        - {}
components:
  responses:
    Received:
      content:
        text/plain:
          schema:
            type: integer
            enum:
              - 1
              - 0
          examples:
            Valid Data:
              value: 1
            Invalid Data:
              value: 0
      description: >

        * `1` - One or more objects provided are valid. This does not signify a
        valid project token or secret.

        * `0` - No data objects in the body are valid.
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  schemas:
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        status:
          type: string
          enum:
            - error

````