Iterable Users API

Manage user profiles, update user fields, bulk update users, get user data by email or userId, and delete users.

Operations 30

POST /api/auth/jwts/invalidate Invalidate all JWTs issued for a user #
POST /api/users/bulkUpdate Bulk update user data #
POST /api/users/bulkUpdateSubscriptions Bulk update user subscriptions #
GET /api/users/byUserId Get a user by userId (query parameter) #
DELETE /api/users/byUserId/{userId} Delete user by userId #
GET /api/users/byUserId/{userId} Get a user by userId (path parameter) #
POST /api/users/disableDevice Disable pushes to a mobile device #
POST /api/users/forget Forget a user in compliance with GDPR #
GET /api/users/forgotten Get hashed forgotten users in compliance with GDPR #
GET /api/users/forgottenUserIds Get hashed forgotten userIds in compliance with GDPR #
GET /api/users/getByEmail Get a user by email (query parameter) #
GET /api/users/getFields Get all user fields #
GET /api/users/getSentMessages Get messages sent to a user #
POST /api/users/merge Merge users #
POST /api/users/registerBrowserToken Register a browser token for web push #
POST /api/users/registerDeviceToken Register a device token for push #
POST /api/users/unforget Unforget a user in compliance with GDPR #
POST /api/users/update Update user data #
POST /api/users/updateEmail Update user email #
POST /api/users/updateSubscriptions Update user subscriptions #
DELETE /api/users/{email} Delete a user by email #
GET /api/users/{email} Get a user by email (path parameter) #
POST /users/update Update a user profile #
POST /users/bulkUpdate Bulk update user profiles #
GET /users/{email} Get a user by email #
DELETE /users/{email} Delete a user by email #
GET /users/byUserId/{userId} Get a user by userId #
DELETE /users/byUserId/{userId} Delete a user by userId #
GET /users/getFields Get user fields #
POST /users/registerDeviceToken Register a device token #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/iterable-users-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

iterable-users-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Iterable Users API
  version: '1.0'
  description: 'Operations tagged users across 2 of this provider''s published API definitions: iterable-api-openapi.json, iterable-rest-api-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.iterable.com/
- url: https://api.iterable.com/api
  description: US Data Center (USDC)
- url: https://api.eu.iterable.com/api
  description: European Data Center (EDC)
tags:
- name: users
paths:
  /api/auth/jwts/invalidate:
    post:
      description: Invalidates all JWTs issued for a given user before the current time or a specified time.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.
      operationId: Invalidate JWT
      responses:
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Invalidate all JWTs issued for a user
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InvalidateJwtRequest'
        description: Invalid JWT request
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/bulkUpdate:
    post:
      description: 'Bulk updates user data. This endpoint adds and overwrites user profile fields as needed. It does not modify top-level fields omitted from the request body. <br/><br/>If you''d like to merge (rather than overwrite) a user profile''s top-level objects with the values provided for them in the request body, set <code>mergeNestedObjects</code> to <code>true</code>.<br/><br/>When updating an existing field, you cannot change its data type (the new value must have the same data type as the old value).<br/><br/>When adding a new field, remember that each project has a soft limit of 1,000 unique user profile fields (across all its users, with a field''s uniqueness determined by its name and position on the user profile). <br/><br/>Iterable handles requests to this endpoint separately from requests to single-user endpoints (<code>update</code>, <code>updateEmail</code>, <code>updateSubscriptions</code>, etc.). For a given user, in a short period of time, only use single-user calls or bulk update calls. Otherwise, results may be inconsistent.<br/><br/>When updating the <code>emailListIds</code> field, this endpoint does not generate subscribe or unsubscribe events. The same is true for updates to <code>unsubscribedChannelIds</code> and <code>unsubscribedMessageTypeIds</code> (but these can only be updated by this endpoint in projects where the opt-in message types feature is not enabled).<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Max size of request body</b>: 4MB<br/><b>Rate limit</b>: 5 requests/second, per project'
      operationId: bulkUpdateUser
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserBulkUpdateListResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '429':
          description: Rate limit exceeded. Response includes <code>params</code> with:<br/><code>rateLimitLimit</code> — maximum token capacity (burst allowance)<br/><code>rateLimitRemaining</code> — tokens remaining after this request<br/><code>rateLimitReset</code> — seconds until enough tokens refill to retry
      summary: Bulk update user data
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkUpdateUsersRequest'
        description: Users to update
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/bulkUpdateSubscriptions:
    post:
      description: '<b>IMPORTANT</b>: This endpoint overwrites (does not merge) existing data for any non-<code>null</code> fields specified in the request.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.'
      operationId: bulkUpdateSubscriptions
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkUpdateSubscriptionsResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '409':
          description: Email/userId conflict
      summary: Bulk update user subscriptions
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkUpdateSubscriptionsRequest'
        description: Bulk subscriptions to update
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/byUserId:
    get:
      description: 'Get a user by userId (passed as a query parameter).<br/><br/>Returns the same data as <code>GET /api/users/byUserId/{userId}</code>. However, when making calls from Iterable''s API Documentation page, this endpoint provides better support for special characters.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 100 requests/second, per project.'
      operationId: getUserById
      parameters:
      - in: query
        name: userId
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Get a user by userId (query parameter)
      tags:
      - users
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/byUserId/{userId}:
    delete:
      description: 'Asynchronous. Deletes a specific user by <code>userId</code>. Does not prevent future data collection about the user. If multiple users share the same <code>userId</code>, they''ll all be deleted. This endpoint can be used to delete users from email-based projects, userID-based projects, and hybrid projects.<br/><br/>On Iterable''s API Documentation page, this endpoint does not work for <code>userId</code> values that contain a <code>/</code> character. In such cases, you can still call this endpoint with a tool like curl or Postman, or from your code. To learn how, read <a href="https://support.iterable.com/hc/articles/360043464871#using-api-keys">Using API keys</a>.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 100 requests/second, per project.'
      operationId: delete
      parameters:
      - in: path
        name: userId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Delete user by userId
      tags:
      - users
      security:
      - api_key: []
    get:
      description: 'Get a user by <code>userId</code> (passed as a path parameter).<br/><br/>On Iterable''s API Documentation page, this endpoint does not work for <code>userId</code> values that contain a <code>/</code> character. In such cases, you can use <code>GET /api/users/byUserId</code>, or you can still call this endpoint with a tool like curl or Postman, or from your code. To learn how, read <a href="https://support.iterable.com/hc/articles/360043464871#using-api-keys">Using API keys</a>.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 100 requests/second, per project.'
      operationId: getUserById
      parameters:
      - description: userId
        in: path
        name: userId
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Get a user by userId (path parameter)
      tags:
      - users
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/disableDevice:
    post:
      description: Disables push notifications to a given device.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.
      operationId: disableDevice
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Disable pushes to a mobile device
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisableDeviceRequest'
        description: Request to disable device
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/forget:
    post:
      description: 'Deletes the specified user''s data from the Iterable project and prevents future data collection about them. In email-based projects, you must forget users by <code>email</code>. In userID-based projects, you must forget users by <code>userId</code>. In hybrid projects, you can forget users by either <code>email</code> or <code>userId</code>.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 3 requests/second, per project.<br/><br/><b>Daily Cap</b>: 1000 requests per 24 hour period, per project.'
      operationId: forget
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Forget a user in compliance with GDPR
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserRequest'
        description: user's email to be added to blacklist.
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/forgotten:
    get:
      description: 'Returns a hash for each <code>email</code> addresses currently forgotten by your project. Each forgotten <code>email</code> is lowercased, trimmed, and hashed using SHA-256. This endpoint only works for email-based and hybrid projects. For userID-based projects, it returns an error.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 3 requests/second, per project.'
      operationId: exportProjectForgottenUsers
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetForgottenUserEmailsResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Get hashed forgotten users in compliance with GDPR
      tags:
      - users
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/forgottenUserIds:
    get:
      description: 'Returns a hash for each <code>userId</code> currently forgotten by your project. Each forgotten <code>userId</code> is lowercased, trimmed, and hashed using SHA-256. This endpoint only works for userID-based and hybrid projects. For email-based projects, it returns an error.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 3 requests/second, per project.'
      operationId: exportProjectForgottenUserIds
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetForgottenUserIdsResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Get hashed forgotten userIds in compliance with GDPR
      tags:
      - users
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/getByEmail:
    get:
      description: 'Get a user by email address (passed as a query parameter).<br/><br/>Returns the same data as <code>GET /api/users/{email}</code>. However, when making calls from Iterable''s API Documentation page, this endpoint provides better support for special characters.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 100 requests/second, per project.'
      operationId: getUser
      parameters:
      - in: query
        name: email
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Get a user by email (query parameter)
      tags:
      - users
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/getFields:
    get:
      description: 'Get all user fields within a project.<br/><br/><b>Rate limit</b>: 3 requests/second, per project.'
      operationId: getUserFields
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetUserFieldsResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Get all user fields
      tags:
      - users
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/getSentMessages:
    get:
      description: 'Gets messages sent to a user, by <code>email</code> address or <code>userId</code>. Returns 10 by default, up to 1,000.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 3 requests/second, per project.'
      operationId: getSentMessages
      parameters:
      - description: user's email, either email or userId must be specified
        in: query
        name: email
        required: false
        schema:
          type: string
      - description: user's userId, either email or userId must be specified
        in: query
        name: userId
        required: false
        schema:
          type: string
      - description: 'max number of messages to return (default: 10, max limit: 1000)'
        in: query
        name: limit
        required: false
        schema:
          type: integer
          format: int32
          default: 10
      - description: only include messages from these campaigns
        in: query
        name: campaignIds
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: object
      - description: start date time (yyyy-MM-dd HH:mm:ss ZZ)
        in: query
        name: startDateTime
        required: false
        schema:
          type: string
          format: date-time
      - description: end date time (yyyy-MM-dd HH:mm:ss ZZ)
        in: query
        name: endDateTime
        required: false
        schema:
          type: string
          format: date-time
      - description: exclude results coming from blast campaigns (ignored if campaignId is set)
        in: query
        name: excludeBlastCampaigns
        required: false
        schema:
          type: boolean
          default: false
      - description: only include messages of this type
        in: query
        name: messageMedium
        required: false
        schema:
          type: string
          enum:
          - Email
          - Push
          - InApp
          - SMS
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetSentMessagesResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Get messages sent to a user
      tags:
      - users
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/merge:
    post:
      description: 'Merge two users.<br/><br/>In the request body, specify <code>sourceEmail</code> or <code>sourceUserId</code> (but not both), and <code>destinationEmail</code> or <code>destinationUserId</code> (but not both).<br/><br/>Returns an error if source user does not exist in Iterable. Will update source user if destination user is not found.<br/><br/><b>Rate limit</b>: 50 requests/second, per API key.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.'
      operationId: mergeUsers
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '403':
          description: Merging known user profiles is forbidden with specific API key type. Please use a server-side key.
        '409':
          description: Source or destination user forgotten
      summary: Merge users
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeUsersRequest'
        description: Merge users. All profile data and events will be migrated.
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/registerBrowserToken:
    post:
      description: 'Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Token limit</b>: Maximum of 500 browser tokens per user profile. Returns a 400 response code when this limit has been exceeded.'
      operationId: registerBrowserToken
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '409':
          description: Email/userId conflict
      summary: Register a browser token for web push
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterBrowserTokenRequest'
        description: Request to register browser
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/registerDeviceToken:
    post:
      description: 'Registers a device token for push. This will add the data if it doesn''t exist yet. It will also update data fields on the device. Data will be merged; missing fields are not deleted. Also, note that there is a soft limit on the number of unique fields a user can have (default is 1,000). Types of data fields must match the types sent in previous requests, across all data fields in the project.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Device limit</b>: Maximum of 500 devices per user profile. Endpoint returns a 400 response code when this limit has been exceeded.<br/><b>Rate limit</b>: 500 requests/second, per project.'
      operationId: registerDeviceToken
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '409':
          description: Email/userId conflict
      summary: Register a device token for push
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegisterDeviceTokenRequest'
        description: Request to register device
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/unforget:
    post:
      description: 'Allows the Iterable project to resume collecting data about a previously forgotten user. Deleted data cannot be recovered. In email-based projects, you must unforget users by <code>email</code>. In userID-based projects, you must unforget users by <code>userId</code>. In hybrid projects and in projects that migrated from being email-based to being userID-based, you can unforget users by either <code>email</code> or <code>userId</code>.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 3 requests/second, per project.<br/><br/><b>Daily Cap</b>: 1000 requests per 24 hour period, per project.'
      operationId: unforget
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Unforget a user in compliance with GDPR
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserRequest'
        description: user's email to be removed from blacklist.
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/update:
    post:
      description: 'Updates user data or adds a user if none exists. Data is merged - missing fields are not deleted. Please note there is a soft limit (default: 1,000) on the number of unique fields users can have. Types of data fields must match the types sent in previous requests, across all data fields in the project.<br/>Processing time varies based on the current load for Iterable''s back-end services. To avoid race conditions, provide a buffer of at least 60 seconds between this request and subsequent dependent requests, such as <code>POST /api/email/target.</code><br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 500 requests/second, per project.'
      operationId: updateUser
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '409':
          description: Contact is GDPR forgotten<br/>Email/userId conflict
        '429':
          description: Rate limit exceeded. Response includes <code>params</code> with:<br/><code>rateLimitLimit</code> — maximum token capacity (burst allowance)<br/><code>rateLimitRemaining</code> — tokens remaining after this request<br/><code>rateLimitReset</code> — seconds until enough tokens refill to retry
      summary: Update user data
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApiUserUpdateRequest'
        description: user object
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/updateEmail:
    post:
      description: Updates a user's <code>email</code>. <br/><br/>Use this endpoint with <a href="https://support.iterable.com/hc/articles/9216719179796">email-based projects.</a> To update an <code>email</code> in a userID-based or hybrid project, use <a href="#users_updateUser"><code>POST /api/users/update</code></a>. <br/><br/>In the request body, specify <code>currentEmail</code> or <code>currentUserId</code>, but not both. If you include both, <code>currentEmail</code> takes precedence.<br/><br/>Returns an error if the new email already exists in Iterable, or if the new email has been forgotten via a GDPR request.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.
      operationId: updateEmail
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '409':
          description: Contact is GDPR forgotten<br/>Email/userId conflict
      summary: Update user email
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEmailRequest'
        description: Update a user's email. All profile data and events will be migrated.
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/updateSubscriptions:
    post:
      description: 'Updates user subscriptions. <b>IMPORTANT</b>: This endpoint overwrites (does not merge) existing data for any non-<code>null</code> fields specified in the request.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.'
      operationId: updateSubscriptions
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
        '409':
          description: Email/userId conflict
      summary: Update user subscriptions
      tags:
      - users
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSubscriptionsRequest'
        description: Subscriptions to update
        required: true
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /api/users/{email}:
    delete:
      description: 'Asynchronous. Deletes a specific user by <code>email</code>. Does not prevent future data collection about the user. This endpoint can be used to delete users from email-based projects and hybrid projects, but not userID-based projects.<br/><br/>On Iterable''s API Documentation page, this endpoint does not work for <code>email</code> values that contain a <code>/</code> character. In such cases, you can still call this endpoint with a tool like curl or Postman, or from your code. To learn how, read <a href="https://support.iterable.com/hc/articles/360043464871#using-api-keys">Using API keys</a>.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 100 requests/second, per project.'
      operationId: delete
      parameters:
      - description: email
        in: path
        name: email
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableApiResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Delete a user by email
      tags:
      - users
      security:
      - api_key: []
    get:
      description: 'Get a user by email address (passed as a path parameter).<br/><br/>On Iterable''s API Documentation page, this endpoint does not work for <code>email</code> values that contain a <code>/</code> character. In such cases, you can use <code>GET /api/users/getByEmail</code> instead, or you can still call this endpoint with a tool like curl or Postman, or from your code. To learn how, read <a href="https://support.iterable.com/hc/articles/360043464871#using-api-keys">Using API keys</a>.<br/><br/>Learn about <a href="https://support.iterable.com/hc/articles/29156459027348">identifying users by <code>userId</code> and <code>email</code></a>.<br/><br/><b>Rate limit</b>: 100 requests/second, per project.'
      operationId: getUser
      parameters:
      - description: email
        in: path
        name: email
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '400':
          description: Invalid parameters
        '401':
          description: Invalid API key
      summary: Get a user by email (path parameter)
      tags:
      - users
      security:
      - api_key: []
    servers:
    - url: https://api.iterable.com/
  /users/update:
    post:
      operationId: updateUser
      summary: Update a user profile
      description: Updates an existing user profile or creates a new one if the user does not already exist. Accepts user fields, email, userId, and data fields to set or update on the user profile.
      tags:
      - users
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserUpdateRequest'
      responses:
        '200':
          description: Successfully updated the user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IterableResponse'
        '400':
          des

# --- truncated at 32 KB (66 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/iterable/refs/heads/main/openapi/iterable-users-api-openapi.yml