SendPulse Popup API

The Popup API from SendPulse — 5 operation(s) for popup.

Operations 5

GET /public/api/popups/conditions Get a list of available display conditions for popups #
GET /public/api/popups/list/quiz/{projectId} Get a list of quiz pop-ups by your project ID #
GET /public/api/popups/list/{projectId} Get a list of pop-ups by your project ID #
POST /public/api/popups/{popupId}/set-state Set a pop-up state #
DELETE /public/api/popups/{popupId} Delete popup #

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/sendpulse-popup-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

sendpulse-popup-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: SendPulse Pop-up Popup API
  description: API for managing pop-ups in SendPulse. This API allows you to create, update, and delete pop-ups, as well as retrieve information about them and their performance.
  version: '1.0'
servers:
- description: Production server
  url: https://api.sendpulse.com/v2/pop-ups
security:
- apiKey: []
- oauth2: []
tags:
- name: Popup
paths:
  /public/api/popups/conditions:
    get:
      tags:
      - Popup
      summary: Get a list of available display conditions for popups
      description: Returns a list of available display conditions for popups with detailed information
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                properties:
                  result:
                    type: boolean
                  data:
                    description: List of available display conditions
                    type: array
                    items:
                      $ref: '#/components/schemas/scenarioSetting'
                  pageInfo:
                    $ref: '#/components/schemas/pageInfo'
                type: object
      operationId: getPopupConditions
      x-ai-role: conversion_optimization_specialist
      x-ai-description: Returns the full catalog of display conditions available for popup targeting rules. Display conditions are the fundamental building blocks of popup triggers — they define WHEN and FOR WHOM a popup appears (e.g., time on page, scroll depth, exit intent, URL match, device type). Knowing available conditions is a prerequisite before constructing or modifying any popup scenario.
      x-ai-reasoning-instructions:
      - Always fetch this list before building or explaining popup targeting scenarios — available conditions may vary by account tier or platform version.
      - Use this endpoint to validate user-specified condition types before applying them to a popup.
      - If the user asks 'how can I show a popup only to mobile users?' or similar questions, map their intent to specific condition entries from this list.
      - Correlate condition identifiers from this response with the `scenarioSetting` schema when constructing popup display rules.
      x-ai-responding-instructions:
      - Group conditions by logical category (e.g., behavioral, geographic, device, traffic source) if the data supports it — this helps the user pick the right condition faster.
      - If the user is new to popups, explain that conditions combine into targeting rules that control popup visibility.
      - Highlight any conditions relevant to the user's stated goal (e.g., exit intent for cart abandonment, scroll depth for content engagement).
      x-ai-suggestions:
      - After retrieving conditions, use the relevant condition IDs to configure a popup scenario via the popup update or create endpoint.
      - Combine multiple conditions with AND/OR logic to build precise audience targeting.
      - Check `pageInfo` to determine if pagination is needed for accounts with extended condition sets.
      x-ai-capabilities:
        confirmation:
          type: None
        security_info:
          data_handling:
          - ReadOnly
  /public/api/popups/list/quiz/{projectId}:
    get:
      tags:
      - Popup
      summary: Get a list of quiz pop-ups by your project ID
      description: Returns a list of quiz pop-ups using your project ID with information about each pop-up
      parameters:
      - name: projectId
        in: path
        description: Project ID
        schema:
          type: string
          format: uuid
        required: true
      - name: first
        in: query
        description: Limit on the number of displayed records. The default number is 10
        schema:
          type: integer
      - name: offset
        in: query
        description: Limit on the number of displayed records
        schema:
          type: integer
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                properties:
                  result:
                    type: boolean
                  data:
                    description: List of popups
                    type: array
                    items:
                      $ref: '#/components/schemas/popup'
                  pageInfo:
                    $ref: '#/components/schemas/pageInfo'
                type: object
        '400':
          description: Validation error
          content:
            application/json:
              example:
                result: false
                errors:
                  widgetId: Invalid id {{'7803a6ea-4b32-44d7-a245-5cda4e4f20'}}
        '401':
          $ref: '#/components/schemas/unauthorizedResponse'
        '403':
          $ref: '#/components/schemas/accessDeniedResponse'
        '404':
          description: Resource Not Found
      operationId: listQuizPopupsByProject
      x-ai-role: conversion_optimization_specialist
      x-ai-description: Retrieves all quiz-type pop-ups scoped to a specific project. Quiz pop-ups are interactive lead-capture tools that segment visitors based on their answers — useful for personalization pipelines, audience segmentation audits, and campaign performance reviews. Use this to inventory active quizzes before launching new ones or to sync pop-up state with external analytics.
      x-ai-reasoning-instructions:
      - Verify the projectId is a valid UUID before calling; malformed IDs return 400 with field-level errors.
      - Default page size is 10 — if the project is large, paginate using `first` + `offset` to avoid incomplete results.
      - Cross-reference returned pop-up IDs with campaign records when diagnosing conversion drop-offs.
      - If the response is empty, confirm the project has quiz-type widgets created — other pop-up types are returned by separate endpoints.
      x-ai-responding-instructions:
      - Report the total number of quiz pop-ups found and summarize key fields (name, status, ID) for each.
      - If `pageInfo` indicates more records exist, suggest repeating the call with an incremented `offset`.
      - On 403, clarify that the OAuth2 token may lack scope for this project — advise re-authenticating with correct client credentials.
      - On 404, confirm the projectId exists and belongs to the authenticated account.
      x-ai-suggestions:
      - 'Start with `first: 10, offset: 0` and iterate if `pageInfo` shows more pages.'
      - After listing, use individual pop-up IDs to fetch detailed statistics or update quiz content.
      - Filter results client-side by status field to distinguish active vs. paused quizzes.
      x-ai-capabilities:
        confirmation:
          type: None
        security_info:
          data_handling:
          - ReadOnly
  /public/api/popups/list/{projectId}:
    get:
      tags:
      - Popup
      summary: Get a list of pop-ups by your project ID
      description: Returns a list of pop-ups using your project ID with information about each pop-up
      parameters:
      - name: projectId
        in: path
        description: Project ID
        schema:
          type: string
          format: uuid
        required: true
      - name: first
        in: query
        description: Limit on the number of displayed records. The default number is 10
        schema:
          type: integer
      - name: offset
        in: query
        description: Limit on the number of displayed records
        schema:
          type: integer
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                properties:
                  result:
                    type: boolean
                  data:
                    description: List of popups
                    type: array
                    items:
                      $ref: '#/components/schemas/popup'
                  pageInfo:
                    $ref: '#/components/schemas/pageInfo'
                type: object
        '400':
          description: Validation error
          content:
            application/json:
              example:
                result: false
                errors:
                  widgetId: Invalid id {{'7803a6ea-4b32-44d7-a245-5cda4e4f20'}}
        '401':
          $ref: '#/components/schemas/unauthorizedResponse'
        '403':
          $ref: '#/components/schemas/accessDeniedResponse'
        '404':
          description: Resource Not Found
      operationId: listPopupsByProjectId
      x-ai-role: conversion_optimization_specialist
      x-ai-description: Retrieves the full inventory of pop-ups associated with a specific project. In SendPulse, a project acts as the organizational unit grouping all pop-up widgets — this endpoint is the entry point for auditing, managing, or selecting pop-ups before triggering display logic or analytics workflows. Pagination via `first`/`offset` is essential for projects with large widget libraries.
      x-ai-reasoning-instructions:
      - Confirm the projectId is a valid UUID before calling — malformed IDs return a 400 with field-level error details.
      - If the user wants all popups, start with the default limit (10) and check `pageInfo` to determine if additional pages exist.
      - When the user provides a project name instead of ID, first resolve the project UUID via the projects listing endpoint.
      - If the response returns an empty array, verify the projectId belongs to the authenticated account — a 404 may indicate ownership mismatch rather than an empty project.
      x-ai-responding-instructions:
      - Present the popup list with key identifiers (name, ID, status) to help the user orient quickly.
      - If `pageInfo` indicates more records exist, proactively suggest fetching the next page with adjusted `offset`.
      - On 401/403, distinguish between invalid credentials and insufficient permissions — the user may need to re-authenticate or request access to the project.
      - On 404, clarify that the projectId may not belong to the current account, not just that it doesn't exist.
      x-ai-suggestions:
      - Use `first=50` to retrieve a larger batch if the project is known to have many popups.
      - Combine with a popup details endpoint to drill into a specific widget after listing.
      - Iterate with `offset` increments equal to `first` to paginate through the full list.
      x-ai-capabilities:
        confirmation:
          type: None
        security_info:
          data_handling:
          - ReadOnly
  /public/api/popups/{popupId}/set-state:
    post:
      tags:
      - Popup
      summary: Set a pop-up state
      description: Enables or disables a pop-up on your website
      parameters:
      - name: popupId
        in: path
        description: Pop-up ID. It can be obtained using the "Get a list of projects" method or in the pop-up builder address bar in your account.
        schema:
          type: string
          format: uuid
        required: true
      requestBody:
        content:
          application/json:
            schema:
              properties:
                is_enabled:
                  type: boolean
                  description: Sets a pop-up state. If you want to enable your pop-up, pass "true", and if you want to disable it, pass "false".
              type: object
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                properties:
                  result:
                    type: boolean
                  data:
                    $ref: '#/components/schemas/popup'
                type: object
        '400':
          description: Validation error
          content:
            application/json:
              example:
                result: false
                errors:
                  id: Invalid id {{'af1b0e2a-bff9-4d09-a7d9-99d61d2b43b'}}
                  isEnabled: Invalid boolean value '23'
        '401':
          $ref: '#/components/schemas/unauthorizedResponse'
        '404':
          description: Resource Not Found
      operationId: setPopupState
      x-ai-role: conversion_optimization_specialist
      x-ai-description: Controls the live visibility of a pop-up on the target website. Toggling a pop-up state is a high-impact, instantly effective action — enabling it starts showing the pop-up to visitors immediately, while disabling it suppresses it without deleting any configuration or accumulated statistics. Use this as the primary on/off switch for campaigns, A/B tests, or seasonal promotions.
      x-ai-reasoning-instructions:
      - Confirm the popupId exists and belongs to the user's account before toggling — an invalid UUID will produce a 400 error.
      - Before enabling, consider whether the pop-up is part of an active A/B test or scheduled campaign to avoid unintended conflicts.
      - If the user wants to temporarily pause a pop-up (e.g., during site maintenance), prefer disabling over deleting — all settings and stats are preserved.
      - Verify the boolean value is strictly true or false, not a string like '1' or 'yes', as the API rejects non-boolean values.
      x-ai-responding-instructions:
      - 'Confirm the new state explicitly: ''Pop-up has been enabled / disabled successfully.'''
      - If enabling, mention that the pop-up will now be visible to website visitors immediately.
      - If disabling, reassure the user that the pop-up configuration and statistics are preserved and it can be re-enabled at any time.
      - On a 404 error, suggest verifying the popupId via the 'Get a list of projects' endpoint.
      x-ai-suggestions:
      - 'To enable: set is_enabled to true'
      - 'To pause a campaign without losing data: set is_enabled to false'
      - Follow up with 'Get a list of projects' to verify the updated state
      x-ai-capabilities:
        confirmation:
          type: Recommended
          message: This will immediately change the pop-up visibility on the live website. Confirm the intended state (enable/disable).
        security_info:
          data_handling:
          - ResourceStateUpdate
  /public/api/popups/{popupId}:
    delete:
      tags:
      - Popup
      summary: Delete popup
      description: Delete popup
      parameters:
      - name: popupId
        in: path
        description: Pop-up ID. It can be obtained using the "Get a list of projects" method or in the pop-up builder address bar in your account.
        schema:
          type: string
          format: uuid
        required: true
      requestBody:
        content:
          application/json:
            schema:
              properties:
                is_enabled:
                  type: boolean
                  description: Delete popup".
              type: object
      responses:
        '200':
          description: Operation successful
          content:
            application/json:
              schema:
                properties:
                  result:
                    type: boolean
                type: object
        '400':
          description: Validation error
          content:
            application/json:
              example:
                result: false
                errors:
                  id: Invalid id {{'af1b0e2a-bff9-4d09-a7d9-99d61d2b43b'}}
                  isEnabled: Invalid boolean value '23'
        '401':
          $ref: '#/components/schemas/unauthorizedResponse'
        '403':
          $ref: '#/components/schemas/accessDeniedResponse'
        '404':
          description: Resource Not Found
      operationId: deletePopup
      x-ai-role: conversion_optimization_specialist
      x-ai-description: Permanently removes a popup from the account. This is a destructive, irreversible operation — once deleted, the popup and all associated display rules, targeting settings, and collected statistics are gone. Use this only when a popup is fully obsolete; consider disabling it first via the update endpoint if you may need to reactivate it later.
      x-ai-reasoning-instructions:
      - Before deleting, confirm the popupId belongs to the correct popup — retrieve its details first if there is any ambiguity.
      - 'Warn the user that deletion is permanent and cannot be undone; suggest disabling the popup (is_enabled: false) as a safer alternative if unsure.'
      - Check whether the popup is currently active on a live site — deleting an active popup may break embedded scripts or integrations.
      - If the user provides a name instead of a UUID, resolve the ID via the list endpoint before proceeding.
      x-ai-responding-instructions:
      - Confirm successful deletion by echoing the popupId that was removed.
      - If result is true, suggest reviewing remaining popups to ensure no related funnels are broken.
      - On 404, clarify that the popup may have already been deleted or the ID is incorrect.
      - On 400, surface the specific validation error (invalid UUID format or invalid boolean) so the user can correct the request.
      x-ai-suggestions:
      - Retrieve popup list first with `getPopupList` to confirm the correct popupId before deletion.
      - 'Consider using the update endpoint to set is_enabled: false instead of permanent deletion.'
      - After deletion, audit remaining popups to verify campaign integrity.
      x-ai-capabilities:
        confirmation:
          type: Required
          message: This action permanently deletes the popup and cannot be undone. Confirm the popupId before proceeding.
        security_info:
          data_handling:
          - IrreversibleDelete
components:
  schemas:
    unauthorizedResponse:
      description: Unauthorized
    pageInfo:
      title: Page Info
      properties:
        total:
          type: integer
          description: Total number of records
        offset:
          type: integer
          description: Limit on the number of displayed records
        first:
          type: integer
          description: Record count offset
        arguments:
          type: object
      type: object
    scenarioSetting:
      title: Display condition
      properties:
        groupId:
          type: integer
          description: "Behavior group:\n * `1` - frequency;\n * `2` - time;\n * `3` - user behavior;\n * `4` - clicks;\n * `5` - pages and urls;\n * `6` - utm parameters;\n * `7` - visitor data.\n"
        dataType:
          type: string
          description: Data type
        name:
          type: string
          description: Condition name
        uniq:
          type: boolean
          description: Is unique
      type: object
    popup:
      title: Popup
      properties:
        id:
          type: string
          format: uuid
          description: Project ID
        widgetId:
          type: string
          format: uuid
          description: Pop-up ID
        isEnabled:
          type: boolean
          description: Sets a pop-up state. If you want to show your pop-up, pass "true", and if you want to hide it, pass "false".
        type:
          type: integer
          enum:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          - 8
          description: "Popup type:\n * `2` - modal window;\n * `3` - overlay;\n * `4` - floating;\n * `5` - cookie request;\n * `6` - horizontal;\n * `7` - video;\n * `8` - launcher.\n"
        style:
          type: integer
          enum:
          - 1
          - 2
          - 3
          description: "Popup style:\n * `1` - white;\n * `2` - dark;\n * `3` - colored.\n"
        position:
          type: integer
          enum:
          - 1
          - 2
          - 3
          - 4
          - 5
          - 6
          - 7
          - 8
          - 9
          - 10
          - 11
          description: "Popup position:\n * `1` - bottom-left;\n * `2` - bottom-right;\n * `3` - automatic;\n * `4` - bottom;\n * `5` - bottom-center;\n * `6` - left;\n * `7` - right;\n * `8` - center;\n * `9` - top-left;\n * `10` - top-right;\n * `11` - top-center.\n"
        text:
          type:
          - string
          - 'null'
          description: Text message
        name:
          type: string
          description: Pop-up name
        color:
          type:
          - string
          - 'null'
          description: Button style color
        image:
          properties:
            url:
              type: string
              description: URL of your image uploaded to the SendPulse file manager
            position:
              type: integer
              enum:
              - 1
              - 2
              - 3
              - 4
              description: "Popup image position:\n * `1` - left;\n * `2` - right;\n * `3` - top;\n * `4` - background.\n"
          type: object
        video:
          properties:
            url:
              type: string
              description: URL of your video uploaded to the SendPulse file manager
            format:
              type: integer
              description: "Video format:\n * `1` - vertical;\n * `2` - horizontal.\n"
            playbackType:
              type: integer
              description: "Video playing image:\n * `1` - automatic;\n * `2` - on click.\n"
          type: object
        containsNPS:
          type: boolean
          description: Show of popup contains NPS
        statistic:
          title: Popup statistic
          properties:
            peopleReached:
              type: integer
              description: The number of times your widget was viewed
            engagements:
              type: integer
              description: The number of visitors who interacted with your widget, expanded it, read its message, clicked its button, and followed the link.
            subscriptions:
              type: integer
              description: The number of email addresses or phone numbers customers entered in the "Email Address Request" or "Phone Number Request" form.
            formEngagements:
              type: integer
              description: The number of leads who submitted your form
            wereClosed:
              type: integer
              description: The number of visitors who closed your widget (clicked the "cross" icon).
          type: object
        preview:
          type: string
          description: Preview image url
        abtest:
          title: AB test information
          properties:
            status:
              type: integer
              description: 'AB test status. Possible variants: * `0` - finished; * `1` - active.

                '
            finishInitiator:
              type: integer
              description: 'AB test finish initiator. Possible values: * `1` - manal (by user); * `2` - auto (reached finish condition).

                '
            finishCondition:
              type: array
              description: List of finish conditions for AB test
              items:
                properties:
                  trigger:
                    type: integer
                    description: 'Trigger for AB test finish. Possible values: * `1` - by date (timestamp in value); * `2` - by views (peopleReached); * `3` - by subscriptions.

                      '
                  value:
                    type: integer
                    description: Max value for trigger
                type: object
            winner:
              type: string
              description: Winner variant ID. Empty if test not finished yet.
            separatedConditions:
              type: boolean
              description: True if variants use different show conditions.
            statistic:
              properties:
                peopleReached:
                  type: integer
                  description: Total amount of views for both variants
                subscriptions:
                  type: integer
                  description: Total amount of subscriptions for both variants
              type: object
            participants:
              properties:
                A:
                  properties:
                    id:
                      type: string
                    preview:
                      type: string
                      description: Preview image url
                    statistic:
                      properties:
                        peopleReached:
                          type: integer
                          description: Total amount of views
                        subscriptions:
                          type: integer
                          description: Total amount of subscriptions
                      type: object
                  type: object
                B:
                  properties:
                    id:
                      type: string
                    preview:
                      type: string
                      description: Preview image url
                    statistic:
                      properties:
                        peopleReached:
                          type: integer
                          description: Total amount of views
                        subscriptions:
                          type: integer
                          description: Total amount of subscriptions
                      type: object
                  type: object
              type: object
            createdAt:
              type: string
              example: 2023-08-07 20:14:15+00:00
              description: 'The date and time your AB test was created. Output in the YYYY-MM-DD hh: mm: ss format with a decimal fraction of a second and time zone designator.'
          type: object
        updatedAt:
          type: string
          example: 2023-08-07 20:14:15+00:00
          description: 'The date and time your project was last updated. Output in the YYYY-MM-DD hh: mm: ss format with a decimal fraction of a second and time zone designator.'
        createdAt:
          type: string
          example: 2023-08-07 20:14:15+00:00
          description: 'The date and time your project was created. Output in the YYYY-MM-DD hh: mm: ss format with a decimal fraction of a second and time zone designator.'
      type: object
    accessDeniedResponse:
      description: Access denied
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: 'Static API Key authentication.  A long-lived token generated manually in the SendPulse account settings.

        '
      x-ai-description: 'Permanent authentication token. Ideal for simple integrations without token refresh logic.

        '
    outh2:
      type: oauth2
      description: OAuth 2.0 Client Credentials flow for temporary access tokens.
      flows:
        clientCredentials:
          tokenUrl: https://api.sendpulse.com/oauth/access_token
          scopes: {}
      x-ai-description: 'Standard OAuth 2.0 flow using Client ID and Client Secret.  Provides temporary tokens (valid for 1 hour) for enhanced security.

        '