---
updatedAt: 2026-09-04T07:06:15.000Z
agentTools:
  projectIndex: https://documentation.indigitall.com/llms.txt
---

# Divides the viewport in a grid of areas and counts the devices inside

Divides the viewport in a grid of areas and counts the devices inside every grid cell. It returns the point to show on the map and its label with the number of devices. If viewport is a square the grid will be of size x size.

# OpenAPI definition

````json
{
  "openapi": "3.0.0",
  "info": {
    "version": "1.0.0",
    "title": "INDIGITALL API v1",
    "x-gateway-endpoint": "accountService",
    "description": "### Introduction\nThis documentation describes the interface of Indigitall's API version 1.\n<ins>API BASE URL:</ins> https://api.indigitall.com/v1\n### Authentication\nEvery request to this API needs an Authorization header.\nThere are two Authorization ways:\n- If your intention is to manage API calls with a server-side script you have to create a Server key through Indigitall's console.\n\n  You can set the following Authorization Header :\n  ```\n  Authorization: ServerKey {ServerKey}\n  ```\n- If your intention is to integrate this API for front-end users POST /auth endpoint authorizes a user and returns an access token.\n\n  You can set the following Authorization Header :\n  ```\n  Authorization: Bearer {Token}\n  ```\n\n### Support\nFor further information or if you need support you can contact with support@indigitall.com\n"
  },
  "tags": [
    {
      "name": "application",
      "x-displayName": "Application",
      "description": "Endpoints for managing applications"
    }
  ],
  "security": [
    {
      "Authorization": []
    }
  ],
  "paths": {
    "/application/{id}/heatmap": {
      "post": {
        "summary": "Divides the viewport in a grid of areas and counts the devices inside",
        "description": "Divides the viewport in a grid of areas and counts the devices inside every grid cell. It returns the point to show on the map and its label with the number of devices. If viewport is a square the grid will be of size x size.",
        "operationId": "postHeatmap",
        "tags": [
          "application"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/HeatMapPostRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HeatMapResponse"
                }
              }
            }
          },
          "400": {
            "description": "Parameters missing or not in right format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid credentials",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Operation forbidden for your user",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Application not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      },
      "parameters": [
        {
          "in": "path",
          "name": "id",
          "required": true,
          "description": "Application's id",
          "schema": {
            "type": "integer"
          }
        }
      ]
    }
  },
  "servers": [
    {
      "url": "https://api.indigitall.com/v1"
    }
  ],
  "components": {
    "securitySchemes": {
      "Authorization": {
        "type": "apiKey",
        "in": "header",
        "name": "Authorization",
        "description": "Authorization for accesing endpoints , must be in one of the following format:\n- **Bearer {token}**\n- **ServerKey {key}**\n"
      }
    },
    "schemas": {
      "ErrorResponse": {
        "required": [
          "statusCode",
          "message"
        ],
        "properties": {
          "statusCode": {
            "type": "integer",
            "description": "Response code"
          },
          "errorCode": {
            "type": "string",
            "enum": [
              "AUTH_ERROR",
              "TOO_MANY_REQUESTS",
              "IP_WHITELIST",
              "PS_INTERNAL_ERROR",
              "PS_FORBIDDEN",
              "PS_BAD_REQUEST",
              "PS_ARGUMENTS",
              "PS_DATE_FORMAT",
              "PS_DATE_RANGE",
              "PS_DATE_RANGE_MAX",
              "PS_INVALID_TOPIC_CODE",
              "PS_TOPIC_NOT_FOUND",
              "PS_APPLICATION_NOT_FOUND",
              "PS_CAMPAIGN_NOT_FOUND",
              "PS_TEST_NOT_FOUND",
              "PS_MULTITEST_NOT_FOUND",
              "PS_SENDING_NOT_FOUND",
              "PS_SENDING_ALREADY_CANCELLED",
              "PS_CSV_EMPTY",
              "PS_CSV_FIELD_NOT_FOUND",
              "PS_CSV_SIZE",
              "PS_BAD_CSV_FORMAT",
              "PS_CAMPAIGN_TIMEZONE",
              "PS_CAMPAIGN_ACTION",
              "PS_CAMPAIGN_BUTTON",
              "PS_CAMPAIGN_TRIGGER",
              "PS_CAMPAIGN_OVERWRITE_PROPERTIES",
              "PS_CAMPAIGN_BAD_VIDEO",
              "PS_CAMPAIGN_BAD_VIDEO_TYPE",
              "PS_CAMPAIGN_BAD_VIDEO_SIZE",
              "PS_CAMPAIGN_BAD_VIDEO_SIZE_AFTER_CONVERSION",
              "PS_CAMPAIGN_BAD_ICON_TYPE",
              "PS_CAMPAIGN_BAD_ICON_SIZE",
              "PS_CAMPAIGN_TARGETS",
              "PS_FEATURE_GEOFENCING_DISABLED",
              "PS_FEATURE_NETWORK_DISABLED",
              "PS_MULTITEST_INVALID",
              "PS_MULTITEST_ALREADY_SENT",
              "PS_BAD_IMAGE_TYPE",
              "PS_BAD_IMAGE_SIZE",
              "PS_CAMPAIGN_CUSTOMER_SERVICE",
              "PS_CAMPAIGN_CUSTOMER_SERVICE_SENDING",
              "PS_CAMPAIGN_INVALID_CATEGORY_ID",
              "PS_EXTRACT_META_PARSE_HTML_ERROR",
              "PS_AUDIENCE_CJ_NOT_FOUND",
              "AS_INTERNAL_ERROR",
              "AS_FORBIDDEN",
              "AS_BAD_REQUEST",
              "AS_LIMIT_EXCEEDED",
              "AS_INVALID_CREDENTIALS",
              "AS_ELEMENT_NOT_FOUND",
              "AS_LOCKED_INACTIVITY",
              "AS_LOCKED_EXPIRED_PASSWORD",
              "AS_LOCKED_TOO_MANY_LOGIN_ATTEMPTS",
              "AS_APPLICATION_NOT_FOUND",
              "AS_ACCOUNT_NOT_FOUND",
              "AS_EXTERNAL_APP_NOT_FOUND",
              "AS_AREA_NOT_FOUND",
              "AS_WEB_ANALYTIC_NOT_FOUND",
              "AS_CATEGORY_NOT_FOUND",
              "AS_EXTERNAL_AUTH_NOT_FOUND",
              "AS_USER_NOT_FOUND",
              "AS_INTEGRATION_NOT_FOUND",
              "AS_PERMISSION_NOT_FOUND",
              "AS_ROLE_NOT_FOUND",
              "AS_IP_WHITELIST",
              "AS_CHAT_FEATURE_DISABLED",
              "AS_CONTACT_CENTER_FEATURE_DISABLED",
              "AS_RESOURCE_ALREADY_EXISTS",
              "AS_EMAIL_ALREADY_EXISTS",
              "AS_TOPIC_ALREADY_EXISTS",
              "AS_CATEGORY_ALREADY_EXISTS",
              "AS_USER_ALREADY_EXISTS",
              "AS_SAFARI_ID_ALREADY_EXISTS",
              "AS_EXTERNAL_AUTH_DATA_ALREADY_EXISTS",
              "AS_TOPIC_PARENT_NOT_FOUND",
              "AS_INVALID_CERTIFICATE",
              "AS_BAD_SAFARI_CONFIGURATION",
              "AS_BAD_HARMONY_CONFIGURATION",
              "AS_BAD_ANDROID_CONFIGURATION",
              "AS_BAD_REPORTING_CONFIGURATION",
              "AS_BAD_SLICING_CONFIGURATION",
              "AS_BAD_APP_CODE",
              "AS_BAD_TOPIC_CODE",
              "AS_BAD_IMAGE_TYPE",
              "AS_BAD_IMAGE_SIZE",
              "AS_BAD_CSV_FORMAT",
              "AS_BAD_EMAIL",
              "AS_PASSWORD_MANDATORY",
              "AS_PASSWORD_TOO_SHORT",
              "AS_PASSWORD_COMPLEXITY_NOT_MET",
              "AS_PASSWORD_PERSONAL_INFO",
              "AS_PASSWORD_REUSED",
              "AS_PASSWORD_MISMATCH",
              "AS_PASSWORD_SAME_OLD",
              "AS_PASSWORD_TOO_MANY_CHANGES",
              "PS_TEST_INVALID",
              "PS_TEST_ALREADY_SENT",
              "AS_ONLY_SUPER_ADMIN_PERMISSION",
              "AS_INVALID_METHOD",
              "AS_INVALID_TOTP",
              "AS_INVALID_TOKEN",
              "AS_CHAT_DOWNLOAD_ACCOUNTS_FEATURE_DISABLED",
              "AS_CHAT_V2_FEATURE_DISABLED",
              "AS_CHAT_V2_PERMISSION_PROFILE_NOT_FOUND",
              "AS_CHAT_V2_UPSTREAM_ERROR",
              "CS_CSV_NUMBER_OF_PARAMS",
              "CS_CSV_EMPTY_FILE",
              "CS_CSV_INVALID_CHANNEL",
              "CS_CSV_INVALID_CONTENT_TYPE",
              "CS_CSV_INVALID_PARAMETER",
              "CS_CSV_INVALID_TYPE",
              "CS_CSV_MISSING_FIELDS",
              "CS_CSV_EMPTY_FIELDS",
              "CS_DOWNLOAD_MULTIMEDIA_ERROR"
            ],
            "description": "Sort order:\n  * `AUTH_ERROR` - Authorization error\n  * `TOO_MANY_REQUESTS` - TOO_MANY_REQUESTS\n  * `IP_WHITELIST` - The ip with which you are trying to access the resource is not allowed\n  * `PS_INTERNAL_ERROR` - Internal Server Error\n  * `PS_FORBIDDEN` - Forbidden action\n  * `PS_BAD_REQUEST` - Generic bad request\n  * `PS_ARGUMENTS` - Error in any of the arguments\n  * `PS_DATE_FORMAT` - The specified date format is not correct\n  * `PS_DATE_RANGE` - It indicated a range of dates not allowed\n  * `PS_DATE_RANGE_MAX` - Indicates that the range between two dates exceeds the maximum limit\n  * `PS_INVALID_TOPIC_CODE` - The topic code has a wrong format\n  * `PS_TOPIC_NOT_FOUND` - The topic code has a wrong format\n  * `PS_APPLICATION_NOT_FOUND` - Application / project not found\n  * `PS_CAMPAIGN_NOT_FOUND` - Campaign not found\n  * `PS_CAMPAIGN_NOT_MODIFIABLE` - Campaign cannot be updated as it belongs to an initialized journey\n  * `PS_TEST_NOT_FOUND` - Test not found\n  * `PS_MULTITEST_NOT_FOUND` - Multitest not found\n  * `PS_SENDING_NOT_FOUND` - Sending not found\n  * `PS_SENDING_ALREADY_CANCELLED` - Sending already cancelled or has a past date scheduled\n  * `PS_CSV_EMPTY` - The CSV has a wrong format: it is empty\n  * `PS_CSV_FIELD_NOT_FOUND` - The CSV has a wrong format: a required field is missing\n  * `PS_CSV_SIZE` - The CSV has an impermissible size\n  * `PS_BAD_CSV_FORMAT` - Generic CSV format error\n  * `PS_CAMPAIGN_TIMEZONE` - The property Timezone camapaña has an incorrect value\n  * `PS_CAMPAIGN_ACTION` - There was an error trying to process the actions of the campaign\n  * `PS_CAMPAIGN_BUTTON` - There was an error trying to process the campaign buttons\n  * `PS_CAMPAIGN_TRIGGER` - There was an error trying to process the triggers of the campaign\n  * `PS_CAMPAIGN_OVERWRITE_PROPERTIES` - There was an error trying to process the properties overwrite campaign\n  * `PS_CAMPAIGN_BAD_VIDEO` - There was an error trying to process the video of the campaign\n  * `PS_CAMPAIGN_BAD_VIDEO_TYPE` - There was an error trying to process the video of the campaign. Video type is not allowed.\n  * `PS_CAMPAIGN_BAD_VIDEO_SIZE` - There was an error trying to process the video of the campaign. The size of the video exceeds the maximum allowable size.\n  * `PS_CAMPAIGN_BAD_VIDEO_SIZE_AFTER_CONVERSION` - There was an error trying to process the video of the campaign. The size of the video then convert it exceeds the maximum allowable size.\n  * `PS_CAMPAIGN_BAD_ICON_TYPE` - There was an error trying to process the icon of the campaign. The type of icon is invalid.\n  * `PS_CAMPAIGN_BAD_ICON_SIZE` - There was an error trying to process the icon of the campaign. The size of the icon is invalid.\n  * `PS_CAMPAIGN_TARGETS` - There was an error trying to process the targets of the campaign\n  * `PS_FEATURE_GEOFENCING_DISABLED` - The feature 'gefencing' is disabled for this account\n  * `PS_FEATURE_NETWORK_DISABLED` - The feature 'network' is disabled for this account\n  * `PS_MULTITEST_INVALID` - The test contains invalid data\n  * `PS_MULTITEST_ALREADY_SENT` - The multitest has already been sent\n  * `PS_BAD_IMAGE_TYPE` - Image has invalid format\n  * `PS_BAD_IMAGE_SIZE` - Image has invalid size\n  * `PS_TEST_INVALID` - This test is not valid on this endpoint or has invalid configuration\n  * `PS_TEST_ALREADY_SENT` - The test has already been sent\n  * `PS_CAMPAIGN_CUSTOMER_SERVICE` - Campaigns with the onlyCustomerService field set to true cannot use triggers or filtering other than platform\n  * `PS_CAMPAIGN_CUSTOMER_SERVICE_SENDING` - Campaigns with the onlyCustomerService field set to true can only be sent from a journey.\n                                            Customer service can only send campaigns with this field set to true.\n  * `PS_CAMPAIGN_INVALID_CATEGORY_ID` - The category id indicated in a campaign is invalid, does not exist or belongs to another application\n  * `PS_EXTRACT_META_PARSE_HTML_ERROR` - Error during meta tag extraction due to HTML parsing failure\n  * `PS_AUDIENCE_CJ_NOT_FOUND` - The CJ audience or segment indicated in the audienceCJ filter was not found in customer-service\n  * `AS_INTERNAL_ERROR` - Generic internal error\n  * `AS_FORBIDDEN` - Generic forbidden error\n  * `AS_BAD_REQUEST` - Generic bad request\n  * `AS_LIMIT_EXCEEDED` - Some of the configured limits have been exceeded\n  * `AS_INVALID_CREDENTIALS` - Invalid credentials\n  * `AS_ELEMENT_NOT_FOUND` - Element not found\n  * `AS_LOCKED_INACTIVITY` - User is locked for inactivity. Please, contact an administrator\n  * `AS_LOCKED_EXPIRED_PASSWORD` - The password is way old. Please, change it for a new one\n  * `AS_LOCKED_TOO_MANY_LOGIN_ATTEMPTS` - Too many login attempts\n  * `AS_APPLICATION_NOT_FOUND` - Application (project) not found\n  * `AS_ACCOUNT_NOT_FOUND` - Account not found\n  * `AS_EXTERNAL_APP_NOT_FOUND` -\n  * `AS_AREA_NOT_FOUND` -\n  * `AS_WEB_ANALYTIC_NOT_FOUND` -\n  * `AS_CATEGORY_NOT_FOUND` -\n  * `AS_EXTERNAL_AUTH_NOT_FOUND` -\n  * `AS_USER_NOT_FOUND` -\n  * `AS_INTEGRATION_NOT_FOUND` -\n  * `AS_PERMISSION_NOT_FOUND` -\n  * `AS_ROLE_NOT_FOUND` -\n  * `AS_IP_WHITELIST`- The ip with which you are trying to access the resource is not allowed\n  * `AS_CHAT_FEATURE_DISABLED` - Chat Service is not activated for this account\n  * `AS_CONTACT_CENTER_FEATURE_DISABLED` - Contact Center is not activated for this account\n  * `AS_RESOURCE_ALREADY_EXISTS` - Generic error when trying to duplicate a resource\n  * `AS_EMAIL_ALREADY_EXISTS` - User with same email already exists\n  * `AS_TOPIC_ALREADY_EXISTS` - Topic code already exists in this application\n  * `AS_CATEGORY_ALREADY_EXISTS` - Category code already exists in this application\n  * `AS_USER_ALREADY_EXISTS` - User already exists\n  * `AS_SAFARI_ID_ALREADY_EXISTS` - Safari push ID already exists\n  * `AS_EXTERNAL_AUTH_DATA_ALREADY_EXISTS` - External auth already exists\n  * `AS_TOPIC_PARENT_NOT_FOUND` - Topic parent not found\n  * `AS_INVALID_CERTIFICATE` - Invalid certificate credentials or invalid certificate\n  * `AS_BAD_SAFARI_CONFIGURATION` - It has been requested to activate Safari push, however, the necessary parameters for this service has not been provided.\n  * `AS_BAD_HARMONY_CONFIGURATION` - It has been requested to activate Harmony push, however, the necessary parameters for this service has not been provided.\n  * `AS_BAD_ANDROID_CONFIGURATION` - It has been requested to activate Android push, however, the necessary parameters for this service has not been provided.\n  * `AS_BAD_REPORTING_CONFIGURATION` - Reporting configuration object does not have the expected format\n  * `AS_BAD_SLICING_CONFIGURATION` - Slicing configuration object does not have the expected format\n  * `AS_BAD_APP_CODE` - App code does not have the expected format\n  * `AS_BAD_TOPIC_CODE` - Topic code does not have the expected format\n  * `AS_BAD_IMAGE_TYPE` - Image format is different than expected\n  * `AS_BAD_IMAGE_SIZE` - Image file size exceeds maximum size\n  * `AS_BAD_CSV_FORMAT` - The format of the CSV file is not as expected. It may be empty or may not contain the expected columns or headers.\n  * `AS_BAD_EMAIL` - Email was not found or is in the wrong format\n  * `AS_PASSWORD_MANDATORY` - Password field is mandatory and cannot be empty\n  * `AS_PASSWORD_TOO_SHORT` - Password is too short\n  * `AS_PASSWORD_COMPLEXITY_NOT_MET` - Password must include at least three of the following categories: numbers, lowercase letters, uppercase letters, or special characters\n  * `AS_PASSWORD_PERSONAL_INFO` - Password must not contain personal information (name, email, etc.)\n  * `AS_PASSWORD_REUSED` - Password has been used before\n  * `AS_PASSWORD_MISMATCH` - currentPassword does not match with user current password\n  * `AS_PASSWORD_SAME_OLD` - Old and new password shoud be different\n  * `AS_PASSWORD_TOO_MANY_CHANGES` - Password has been changed too many times in a short period of time\n  * `AS_ONLY_SUPER_ADMIN_PERMISSION` - Only super administrator has permission to perform this action\n  * `AS_INVALID_METHOD` - The totp method is not valid\n  * `AS_INVALID_TOTP` - The totp code is not valid\n  * `AS_INVALID_TOKEN` - The JWT user is not the same that body user.\n  * `AS_CHAT_DOWNLOAD_ACCOUNTS_FEATURE_DISABLED` - download contacts is not active in this account.\n  * `CS_CSV_NUMBER_OF_PARAMS` - Number of incorrect parameters\n  * `CS_CSV_EMPTY_FILE` - Empty file or no data\n  * `CS_CSV_INVALID_CHANNEL` - Only Whatsapp channel is allowed\n  * `CS_CSV_INVALID_CONTENT_TYPE` - Invalid contentType. Only `template` contentType is available\n  * `CS_CSV_INVALID_PARAMETER` - Invalid parameter\n  * `CS_CSV_INVALID_TYPE` - Invalid file type\n  * `CS_CSV_MISSING_FIELDS` - Missings fields\n  * `CS_CSV_EMPTY_FIELDS` - Empty fields\n  * `CS_DOWNLOAD_MULTIMEDIA_ERROR` - Error in download file by URL\n  * `AS_CHAT_V2_FEATURE_DISABLED` - Chat V2 is not active in this account.\n  * `AS_CHAT_V2_PERMISSION_PROFILE_NOT_FOUND` - The permission profile specified in the request was not found.\n  * `AS_CHAT_V2_UPSTREAM_ERROR` - An error occurred while processing the request in the upstream service.\n"
          },
          "message": {
            "type": "string",
            "description": "Error message"
          }
        }
      },
      "CampaignFilterObject": {
        "type": "object",
        "description": "Campaign's filters",
        "required": [
          "platforms"
        ],
        "properties": {
          "platforms": {
            "type": "array",
            "minimum": 1,
            "description": "Array of platforms, sends to devices that belogs to these platforms",
            "items": {
              "type": "string",
              "description": "Target platform",
              "enum": [
                "webpush",
                "safari",
                "android",
                "ios",
                "harmony"
              ]
            }
          },
          "areas": {
            "type": "array",
            "description": "Array of area ids, sends to devices that belong to these areas",
            "items": {
              "type": "integer",
              "description": "Area id"
            }
          },
          "areaTags": {
            "type": "array",
            "description": "Array of area's tags , sends to devices that belong to these areas with tags selected",
            "items": {
              "type": "string",
              "description": "area's tag"
            }
          },
          "topics": {
            "type": "object",
            "description": "Array of topic ids, sends to devices that are susbscribed or not to these topics",
            "properties": {
              "subscribed": {
                "type": "array",
                "description": "Array of topics. sends to devices that are subscribed to these topics",
                "items": {
                  "description": "Topic's id. If it is passed as a multidimensional matrix, in each new arrangement its elements are selected as AND, while between integers and arrays it will be translated as an OR",
                  "oneOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "array",
                      "items": {}
                    }
                  ]
                }
              },
              "notSubscribed": {
                "type": "array",
                "description": "Array of topics. sends to devices that are not subscribed to these topics",
                "items": {
                  "description": "Topic's id. If it is passed as a multidimensional matrix, in each new arrangement its elements are selected as AND, while between integers and arrays it will be translated as an OR",
                  "oneOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "array",
                      "items": {}
                    }
                  ]
                }
              }
            }
          },
          "externalApps": {
            "type": "object",
            "description": "Array of external Apps ids, sends to devices that are susbscribed or not to these external Apps",
            "properties": {
              "subscribed": {
                "type": "array",
                "description": "Array of external Apps. sends to devices that are subscribed to these external Apps",
                "items": {
                  "description": "External Apps's id. If it is passed as a multidimensional matrix, in each new arrangement its elements are selected as AND, while between integers and arrays it will be translated as an OR",
                  "oneOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "array",
                      "items": {}
                    }
                  ]
                }
              },
              "notSubscribed": {
                "type": "array",
                "description": "Array of external Apps. sends to devices that are not subscribed to these external Apps",
                "items": {
                  "description": "External Apps's id. If it is passed as a multidimensional matrix, in each new arrangement its elements are selected as AND, while between integers and arrays it will be translated as an OR",
                  "oneOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "array",
                      "items": {}
                    }
                  ]
                }
              }
            }
          },
          "timeSincelastVisit": {
            "type": "integer",
            "description": "Time since user's last visit to the application. Unit of measurement is hours."
          },
          "timeLastVisit": {
            "type": "integer",
            "description": "Fraction of time that users entered. Unit of measurement is hours."
          },
          "deviceCodes": {
            "type": "array",
            "description": "Array of  the Device's codes",
            "items": {
              "type": "string",
              "description": "code device"
            }
          },
          "deviceCodesActive": {
            "type": "boolean",
            "description": "Campaign's deviceCodesFilter State"
          },
          "deviceTypes": {
            "type": "array",
            "description": "Array of types device. (mobile, tablet or desktop)",
            "items": {
              "type": "string",
              "enum": [
                "mobile",
                "tablet",
                "desktop"
              ],
              "description": "Device's type\n  - mobile: ios or android device\n  - tablet: for tablet ios or android\n  - desktop: device web\n"
            }
          },
          "browserTypes": {
            "type": "array",
            "description": "Array of types browser. (chrome, firefox, edge, safari or opera)",
            "items": {
              "type": "string",
              "enum": [
                "Chrome",
                "Firefox",
                "Edge",
                "Safari",
                "Opera"
              ],
              "description": "Device's type\n  - Chrome: browser Chrome\n  - Firefox: browser Firefox\n  - Edge: browser Explorer o edge\n  - Safari: browser Safari\n  - Opera: browser Opera\n"
            }
          },
          "geoLocation": {
            "type": "object",
            "description": "Filtered by the user's location",
            "properties": {
              "countryCode": {
                "type": "string",
                "description": "Country ISO 3166-1alpha2 code",
                "example": "es"
              },
              "state": {
                "type": "string",
                "description": "State filter",
                "example": "Community of Madrid"
              },
              "city": {
                "type": "string",
                "description": "City filter",
                "example": "Madrid"
              }
            }
          },
          "network": {
            "type": "object",
            "description": "Device network filters",
            "properties": {
              "wifiConnected": {
                "type": "boolean",
                "description": "Devices that are connected to a WiFi network"
              },
              "wifiSSID": {
                "type": "string",
                "maxLength": 32,
                "description": "Devices that are connected to a certain WiFi network"
              },
              "wifiSSIDMode": {
                "type": "string",
                "enum": [
                  "match",
                  "negated",
                  "negated_notnull"
                ],
                "description": "Specify how to apply the wifiSSID filter. Default is 'match' mode.\n- match: Default value. Only devices that are connected to a Wi-Fi network with an identical SSID specified in wifiSSID\n- negated: All devices that are not connected to the network specified in the wifiSSID field (includes devices that are not connected to any Wi-Fi network or whose network connection status is unknown).\n- negated_notnull: All the devices that are connected to a different Wi-Fi network than the one indicated in the wifiSSID field. (Does not include devices that are not connected via Wi-Fi or that we do not know their network status)\n"
              }
            }
          },
          "audienceCJ": {
            "type": "array",
            "description": "References an `audienceList` or `segment` defined in Customer Journey (CJ), combined (AND)\nwith any other filter present (e.g. `topics`) to restrict the recipients of a\n`/campaign/{id}/send/all` sending.\n\nModeled as an array so it can be combined at the schema level with other CJ entities in\nthe future, but in this first phase only one entry is supported: combining several\nlists/audiences together is not supported yet.\n",
            "items": {
              "type": "object",
              "required": [
                "entityType",
                "entityId"
              ],
              "properties": {
                "entityType": {
                  "type": "string",
                  "enum": [
                    "audienceList",
                    "segment"
                  ],
                  "description": "Type of CJ entity referenced."
                },
                "entityId": {
                  "type": "integer",
                  "description": "Numeric id of the audienceList or segment in customer-service."
                }
              }
            }
          }
        }
      },
      "Polygon": {
        "type": "object",
        "description": "GeoJSON polygon",
        "example": {
          "type": "Polygon",
          "coordinates": [
            [
              [
                -3.867,
                43.0685
              ],
              [
                -7.734,
                42.811
              ]
            ]
          ]
        },
        "required": [
          "type",
          "coordinates"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Polygon"
            ],
            "description": "the geometry type ( Polygon )"
          },
          "coordinates": {
            "type": "array",
            "maxItems": 1,
            "minItems": 1,
            "items": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/Coords"
              }
            }
          }
        }
      },
      "Point": {
        "type": "object",
        "description": "GeoJSON Point",
        "example": {
          "type": "Point",
          "coordinates": [
            [
              -3.867,
              43.0685
            ],
            [
              -7.734,
              42.811
            ]
          ]
        },
        "required": [
          "type",
          "coordinates"
        ],
        "externalDocs": {
          "url": "https://tools.ietf.org/html/rfc7946"
        },
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "Point"
            ],
            "description": "the geometry type ( Point )"
          },
          "coordinates": {
            "$ref": "#/components/schemas/Coords"
          }
        }
      },
      "Coords": {
        "type": "array",
        "description": "Pair of [longitude,latitude]",
        "maxItems": 2,
        "minItems": 2,
        "items": {
          "type": "number"
        }
      },
      "HeatMapPostRequest": {
        "type": "object",
        "required": [
          "filters",
          "viewport",
          "size"
        ],
        "properties": {
          "viewport": {
            "$ref": "#/components/schemas/Polygon"
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "description": "Size of grid, aprox. size x size."
          },
          "filters": {
            "$ref": "#/components/schemas/CampaignFilterObject"
          }
        }
      },
      "HeatMapResponse": {
        "required": [
          "statusCode",
          "message",
          "data"
        ],
        "properties": {
          "statusCode": {
            "type": "integer",
            "description": "Response code"
          },
          "message": {
            "type": "string",
            "description": "Response message, usually OK"
          },
          "data": {
            "type": "array",
            "description": "array of center point of polygons that belong to the grid and the number of devices inside",
            "items": {
              "type": "object",
              "required": [
                "geom",
                "count"
              ],
              "properties": {
                "geom": {
                  "$ref": "#/components/schemas/Point"
                },
                "count": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    }
  }
}
````