Leanplum Export Data API

The Export Data API from Leanplum — 8 operation(s) for export data.

Operations 8

POST /api?action=addPostback addPostback
GET /api?action=listPostbacks listPostbacks
POST /api?action=deletePostback deletePostback
GET /api?action=exportData exportData
GET /api?action=exportReport exportReport
GET /api?action=exportUser exportUser
GET /api?action=exportUsers exportUsers
GET /api?action=getExportResults getExportResults

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/leanplum-export-data-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

leanplum-export-data-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: '1.0'
  title: Export Data API
  description: An API to perform actions from a server or remote device.
servers:
- url: https://api.leanplum.com
- url: http://api.leanplum.com
security:
- appIdQuery: []
- clientKeyQuery: []
tags:
- name: Export Data
paths:
  /api?action=addPostback:
    post:
      tags:
      - Export Data
      summary: addPostback
      description: "Adds a postback rule to be triggered by certain Leanplum message or A/B test events. The maximum number of postbacks allowed is three per app. This method requires your data export API `clientKey`. \n\nSee `type` and `channels` below for all possible events that can trigger postbacks. To see what values can be returned by the resulting POST request, see `postbackUrl` with an example template below. \n\n> **Postback retry policy:** If your app is unresponsive, Leanplum's request will timeout in 30 seconds. If the error code is 5xx, we will retry up to 9 more times with exponential backoff, starting from 1 hour, up to 10 hours. If all 10 times fail, the data is lost.\n"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - appId
              - clientKey
              - apiVersion
              - type
              - postbackUrl
              properties:
                appId:
                  description: The application ID. To find yours, select your app in the navigation column, and click Manage Apps. Then click Keys & Settings.
                  default: YOUR_APP_ID
                  type: string
                clientKey:
                  description: The Data Export key for your Leanplum App.
                  default: YOUR_DATA_EXPORT_KEY
                  type: string
                apiVersion:
                  description: The version of the Leanplum API to use. The current version is 1.0.6.
                  default: 1.0.6
                  type: string
                  enum:
                  - 1.0.6
                type:
                  type: string
                  description: "The type of postback to add. There are currently two types.\n * `messageEvents` - Postback triggered by message events. See `channels` below for a list of all the message events that trigger postbacks.\n * `abTestEvents` - Postback triggered by the AB test impression/enter event.\n"
                  enum:
                  - messageEvents
                  default: messageEvents
                channels:
                  type: array
                  description: "The messaging channels that will trigger postbacks — possible values include `Push Notification`, `Email`, and `In-app Message`. For example, this ...`&channels=[Push Notification, In-app Message]`... would activate postbacks for push and in-app message events only.  If no channels are set, all three channels will trigger postbacks by default.\n\nSee below for a list of all the events that will trigger postbacks (by channel).\n  * Push Notification — Sent, Open, Held Back\n  * Email — Sent, Deferred, Delivered, Bounce, Open, Click, Marked as spam, Dropped, Unsubscribe, Held Back\n  * In-app Message (events by template):\n    * All templates — View, held back.\n    * Center Popup, Confirm, Interstitial — Accept\n    * Rich interstitial — Select Button 1, Select Button 2\n    * Satisfaction Survey — Submit\n    * Banner — Select\nNote that you cannot specify which specific events trigger postbacks, however, you can ignore certain events on your end if you prefer.\n"
                  items: {}
                postbackUrl:
                  type: string
                  description: "The URL template to post after the trigger event occurs. This should go to the endpoint you are trying to send the postback data to. The template uses the same curly brace format as templated values on the dashboard. You can include any of the values below in your URL template, depending on what info you are interested in. \n\nPossible values for all postback events\n  * `User ID` — The user ID that triggered the postback.\n  * `Device ID` — The device ID that triggered the postback.\n  * `Trigger time` — The time in milliseconds at which the postback was triggered. The time can be a time in the past if the triggering event occurred in the past.\n\nPossible message event values\n  * `Message ID` — The message ID that triggered the postback.\n  * `Message event` — The message event that triggered the postback (e.g. Send, Open).\n  * `Message channel` — The channel of the message (push, email, or in-app message).\n  * `Template name` — The template name of the in-app message. Returns an empty string for non-in-app messages.\n  * `Parameters` — All the parameters associated with the event when it is triggered. For example, an email’s Click event will include the URL clicked and the index of the URL. `parameters` are in JSON format, and all parameter values are URL encoded.\n\nPossible A/B test event values\n  * `AB test ID` — The ID of the A/B test the user entered into.\n  * `Variant ID` — The ID of the variant group the user was sorted into.\n\nSee below for an example URL template with all possible values.\n"
        description: The request body.
        required: true
      responses:
        default:
          description: A successful response will return the ID of the new postback.
          content:
            application/json:
              schema:
                type: object
                properties:
                  response[].success:
                    description: Whether the request was *received*. Verify that the response has neither `warning` or `error` objects to confirm the action was taken. See [here](#responses) for more.
                    type: boolean
                  response[].postbackId:
                    type: integer
                    description: The ID of the newly created postback.
      deprecated: false
  /api?action=listPostbacks:
    get:
      tags:
      - Export Data
      summary: listPostbacks
      description: List current postback rules. This method requires your data export API `clientKey`.
      parameters:
      - name: appId
        in: query
        required: true
        description: The application ID. To find yours, select your app in the navigation column, and click Manage Apps. Then click Keys & Settings.
        schema:
          type: string
          default: YOUR_APP_ID
      - name: clientKey
        in: query
        required: true
        description: The Data Export key for your Leanplum App.
        schema:
          type: string
          default: YOUR_DATA_EXPORT_KEY
      - name: apiVersion
        in: query
        required: true
        description: The version of the Leanplum API to use. The current version is 1.0.6.
        schema:
          type: string
          enum:
          - 1.0.6
          default: 1.0.6
      responses:
        default:
          description: A successful response will return a list of postbacks.
          content:
            application/json:
              schema:
                type: object
                description: test.
                properties:
                  response:
                    type: array
                    items: {}
                  response[].success:
                    description: Whether the request was *received*. Verify that the response has neither `warning` or `error` objects to confirm the action was taken. See [here](#responses) for more.
                    type: boolean
                  response[].postbacks:
                    type: array
                    description: The list of active postbacks for the given app.
                    items: {}
                  response[].postbacks[]:
                    type: object
                    properties:
                      postbackId:
                        type: integer
                        description: The ID of the postback.
                      type:
                        type: string
                        description: The type of the postback.
                      postbackUrl:
                        type: string
                        description: The URL template of the postback.
      deprecated: false
  /api?action=deletePostback:
    post:
      tags:
      - Export Data
      summary: deletePostback
      description: Deletes a particular postback. This method requires your data export API `clientKey`.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: JSON request body.
              required:
              - appId
              - clientKey
              - apiVersion
              - postbackId
              properties:
                appId:
                  description: The application ID. To find yours, select your app in the navigation column, and click Manage Apps. Then click Keys & Settings.
                  default: YOUR_APP_ID
                  type: string
                clientKey:
                  description: The Data Export key for your Leanplum App.
                  default: YOUR_DATA_EXPORT_KEY
                  type: string
                apiVersion:
                  description: The version of the Leanplum API to use. The current version is 1.0.6.
                  default: 1.0.6
                  type: string
                  enum:
                  - 1.0.6
                postbackId:
                  type: number
                  format: integer
                  description: The ID of the postback to delete.
        required: true
      responses:
        default:
          description: The default response for most API actions.
          content:
            application/json:
              schema:
                type: object
                properties:
                  response[].success:
                    description: Whether the request was *received*. Verify that the response has neither `warning` or `error` objects to confirm the action was taken. See [here](#responses) for more.
                    type: boolean
                  response[].warning.message:
                    type: string
                    description: The warning message for the API action, if any.
                  response[].error.message:
                    type: string
                    description: The error message for the API action, if any.
      deprecated: false
  /api?action=exportData:
    get:
      tags:
      - Export Data
      summary: exportData
      description: "Exports raw data to downloadable files. Data is split into roughly 256 MB files, and is not necessarily ordered. Exports can be made in JSON or CSV format. For JSON format, each file contains 1 line per session, with each session JSON-encoded. For CSV format, data is split into separate files for sessions, states, events, event parameters, and user attributes. \n\n> Note that for daily exports, you may see some variation in sessions data results. This is because sessions data can come in up to 8 days after a user's last interaction with your app. \n\nExport files are automatically deleted 24 hours after export occurs. Data becomes available to export every 2 hours, and only for complete sessions. You cannot export data that has become available more than 60 days ago. You may only export data 24 times per day. Exports with invalid arguments do not count towards this limit.\n\nUse [getExportResults](#get_api-action-getexportresults) with the returned `jobId` to get the results.\n"
      parameters:
      - name: appId
        in: query
        required: true
        description: The application ID. To find yours, select your app in the navigation column, and click Manage Apps. Then click Keys & Settings.
        schema:
          type: string
          default: YOUR_APP_ID
      - name: clientKey
        in: query
        required: true
        description: The Data Export key for your Leanplum App.
        schema:
          type: string
          default: YOUR_DATA_EXPORT_KEY
      - name: apiVersion
        in: query
        required: true
        description: The version of the Leanplum API to use. The current version is 1.0.6.
        schema:
          type: string
          enum:
          - 1.0.6
          default: 1.0.6
      - name: startDate
        in: query
        description: 'First date in range to include in PDT/PST (format: YYYYmmdd). Example: `20140223`.

          '
        required: true
        schema:
          type: string
      - name: exportFormat
        in: query
        description: 'The format to export data. Can be either `json` or `csv`. Default: `json`.

          '
        required: false
        schema:
          type: string
      - name: endDate
        in: query
        description: 'Last date in range to include in PDT/PST (format: YYYYmmdd). Defaults to startDate if not provided. Example: `20140223`.

          '
        required: false
        schema:
          type: string
      - name: startTime
        in: query
        description: 'First time (when data became available) to include (seconds since midnight UTC on January 1, 1970). If not provided, accepts all times before endTime, or all times if endTime is also not provided. The main use is to set this to the last time you exported data to only get the new data since your last export.

          '
        required: false
        schema:
          type: number
      - name: endTime
        in: query
        description: Last time (when data became available) to include (seconds since midnight UTC on January 1, 1970). If not provided, accepts all times after startTime, or all times if startTime is also not provided.
        required: false
        schema:
          type: number
      - name: callbackUrl
        in: query
        description: 'URL to POST a response to when the export completes. The response is the response format of `getExportResults`.

          '
        required: false
        schema:
          type: string
      - name: s3BucketName
        in: query
        description: The name of an AWS S3 bucket to copy exported files to.
        required: false
        schema:
          type: string
      - name: s3AccessId
        in: query
        description: 'The AWS Access ID used to authenticate to S3. Required if `s3BucketName` is set.

          '
        required: false
        schema:
          type: string
      - name: s3AccessKey
        in: query
        description: 'The AWS Secret Access Key used to authenticate to S3. Required if `s3BucketName` is set.

          '
        required: false
        schema:
          type: string
      - name: s3ObjectPrefix
        in: query
        description: 'An optional prefix of files to write to S3. Example: `dirname/` to write files to a directory within the S3 bucket.

          '
        required: false
        schema:
          type: string
      - name: compressData
        in: query
        description: An option to compress the data. Only works when uploading to S3. If set to true, the files will be compressed using gzip before being uploaded.
        required: false
        schema:
          type: boolean
      responses:
        default:
          description: 'A successful response will return the ID of the export job.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  response[].success:
                    description: Whether the request was *received*. Verify that the response has neither `warning` or `error` objects to confirm the action was taken. See [here](#responses) for more.
                    type: boolean
                  response[].jobId:
                    type: string
                    description: 'The job ID of the pending export job, if data matching the supplied arguments is available. Use [getExportResults](#get_api-action-getexportresults) with this `jobId` to get the results.

                      '
      deprecated: false
  /api?action=exportReport:
    get:
      tags:
      - Export Data
      summary: exportReport
      description: 'Exports statistics for an A/B test, message, bookmarked report, or user activity in your app (as in the Analytics tab of the dashboard) over specified period of time. Report data becomes available to export every 2 hours, and only for complete sessions. You may only export report data 100 times per day per app. Exports with invalid arguments do not count towards the limit.


        This method requires your data export API `clientKey`.


        Use [getExportResults](#get_api-action-getexportresults) with the returned `jobId` to get the results.

        '
      parameters:
      - name: appId
        in: query
        required: true
        description: The application ID. To find yours, select your app in the navigation column, and click Manage Apps. Then click Keys & Settings.
        schema:
          type: string
          default: YOUR_APP_ID
      - name: clientKey
        in: query
        required: true
        description: The Data Export key for your Leanplum App.
        schema:
          type: string
          default: YOUR_DATA_EXPORT_KEY
      - name: apiVersion
        in: query
        required: true
        description: The version of the Leanplum API to use. The current version is 1.0.6.
        schema:
          type: string
          enum:
          - 1.0.6
          default: 1.0.6
      - name: startDate
        in: query
        description: 'First date in range to include in PDT/PST (format: YYYYmmdd). Example: `20150708`.

          '
        required: true
        schema:
          type: string
      - name: dataType
        in: query
        description: "The type of the id provided. It can be either:\n   * `UserActivity` for general statistics about your app\n   * `AbTestResults` for stats about an A/B test\n   * `MessageResults` for stats about a message, or\n   * `BookmarkedReport` for stats about a bookmarked report.\n\nIf you choose `AbTestResults`, `MessageResults`, or `BookmarkedReport`, you must also supply the corresponding `abTestId`, `messageId`, or `bookmarkName`.\n"
        required: true
        schema:
          type: string
          enum:
          - UserActivity
          - AbTestResults
          - MessageResults
          - BookmarkedReport
      - name: endDate
        in: query
        description: 'Last date in range to include in PDT/PST (format: YYYYmmdd). Defaults to startDate if not provided. Example: `20150708`.

          '
        required: false
        schema:
          type: string
      - name: abTestId
        in: query
        description: 'Supply if any only if `dataType` is set to `AbTestResults`.

          '
        required: false
        schema:
          type: number
      - name: messageId
        in: query
        description: 'Supply if and only if the `dataType` is set to `MessageResults`.

          '
        required: false
        schema:
          type: number
      - name: bookmarkName
        in: query
        description: 'Supply if and only if the `dataType` is set to `BookmarkedReport`. This is the name of the report, as it appears in your Analytics tab.

          '
        required: false
        schema:
          type: string
      - name: eventNames
        in: query
        description: 'A JSON-encoded array containing names of the events to be included in the report. Example: `["Add to cart", "Purchase"]`

          '
        required: false
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      responses:
        default:
          description: 'A successful response will return the ID of the export job.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  response[].success:
                    description: Whether the request was *received*. Verify that the response has neither `warning` or `error` objects to confirm the action was taken. See [here](#responses) for more.
                    type: boolean
                  response[].jobId:
                    type: string
                    description: 'The job ID of the pending export job, if data matching the supplied arguments is available. Use [getExportResults](#get_api-action-getexportresults) with this `jobId` to get the results.

                      '
      deprecated: false
  /api?action=exportUser:
    get:
      tags:
      - Export Data
      summary: exportUser
      description: Retrieves attributes for the current user. This method requires your data export API `clientKey`.
      parameters:
      - name: appId
        in: query
        required: true
        description: The application ID. To find yours, select your app in the navigation column, and click Manage Apps. Then click Keys & Settings.
        schema:
          type: string
          default: YOUR_APP_ID
      - name: clientKey
        in: query
        required: true
        description: The Data Export key for your Leanplum App.
        schema:
          type: string
          default: YOUR_DATA_EXPORT_KEY
      - name: apiVersion
        in: query
        required: true
        description: The version of the Leanplum API to use. The current version is 1.0.6.
        schema:
          type: string
          enum:
          - 1.0.6
          default: 1.0.6
      - name: userId
        in: query
        required: true
        description: 'The current user ID. You can set this to whatever your company uses for user IDs. Leave it blank to use the device ID. For more info, see [selecting a user](#selecting-a-user).

          '
        schema:
          type: string
          default: hfarnsworth
      - name: deviceId
        in: query
        required: false
        description: 'A unique ID for the device targeted by the request. You must provide a `deviceId` and/or a `userId`. See [selecting a user](#selecting-a-user).

          '
        schema:
          type: string
      responses:
        default:
          description: A successful request will return a map of the user's attributes, events and states.
          content:
            application/json:
              schema:
                type: object
                properties:
                  response[].success:
                    description: Whether the request was *received*. Verify that the response has neither `warning` or `error` objects to confirm the action was taken. See [here](#responses) for more.
                    type: boolean
                  response[].userId:
                    type: string
                    default: hfarnsworth@planetexpress.com
                    description: The ID of the user that was exported. Not included if the user was not found.
                  response[].userAttributes:
                    description: 'A map of user attribute keys to values. Example: `{"gender":"F","age":21}`.

                      '
                    type: object
                  response[].events:
                    type: object
                    properties:
                      eventName:
                        type: object
                        description: A map of lifetime event data for the event given by eventName.
                        properties:
                          count:
                            type: integer
                            description: Lifetime occurrences for the event.
                          value:
                            type: number
                            format: float
                            description: Lifetime value for eventName.
                          firstTime:
                            type: integer
                            description: Time that the event first occurred, in seconds since midnight UTC on January 1, 1970.
                          lastTime:
                            type: integer
                            description: Time that the event last occurred, in seconds since midnight UTC on January 1, 1970.
                  response[].states:
                    type: object
                    properties:
                      stateName:
                        type: object
                        description: A map of lifetime state data for the state given by stateName.
                        properties:
                          count:
                            type: integer
                            description: Lifetime occurrences for eventName.
                          firstTime:
                            type: integer
                            description: Time that the state first occurred, in seconds since midnight UTC on January 1, 1970.
                          lastTime:
                            type: integer
                            description: Time that the state last occurred, in seconds since midnight UTC on January 1, 1970.
                  response[].created:
                    type: number
                    format: float
                    description: The time at which the user was created, in seconds since midnight UTC on January 1, 1970.
                  response[].lastActive:
                    type: number
                    format: float
                    description: The time at which the user was last active, in seconds since midnight UTC on January 1, 1970.
                  response[].totalSessions:
                    type: number
                    format: integer
                    description: The total number of sessions that a user has had in their lifetime.
                  response[].timeSpentInApp:
                    description: The total number of seconds spent in the app in the user's lifetime.
                    type: number
                    format: float
                  response[].locale:
                    description: 'The current locale the user is in. E.g. `en_US`.

                      '
                    type: string
                  response[].country:
                    description: 'The country the user is in, specified by [ISO 2-letter code](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). E.g. `US` for United States. Set to `(detect)` to detect the country based on the IP address of the user.

                      '
                    type: string
                  response[].region:
                    description: 'The region (state) the user is in. E.g. `ca` for California. Set to `(detect)` to detect the region based on the IP address of the user.

                      '
                    type: string
                  response[].city:
                    description: 'The city the user is in. E.g. `San Francisco`. Set to `(detect)` to detect the city based on the IP address of the user.

                      '
                    type: string
                  response[].location:
                    description: 'The location (latitude/longitude) of the user. E.g. `37.775,-122.4183`. Set to `(detect)` to detect the location based on the IP address of the user.

                      '
                    type: string
                  response[].locationAccuracyType:
                    description: 'The type of location that is provided (IP, CELL, or GPS). Default: `IP`.

                      '
                    type: string
                  response[].timezone:
                    description: 'The timezone abbreviation for the user. See [list of timezone abbreviations](http://en.wikipedia.org/wiki/List_of_time_zone_abbreviations).

                      '
                    type: string
                  response[].timezoneOffsetSeconds:
                    description: The timezone offset from GMT in seconds.
                    type: number
                    format: integer
                  response[].unsubscribeChannels:
                    type: array
                    description: 'A list of messaging channels (e.g. `Email`) the user is unsubscribed from.

                      '
                    items:
                      type: string
                      default: Email
                  response[].unsubscribeCategories:
                    type: array
                    description: A list of email categories the user is unsubscribed from.
                    items: {}
                  response[].unsubscribeCategories[].id:
                    type: integer
                    description: 'The email category ID. Can be passed to [setUserAttributes](#post_api-action-setuserattributes) as the `unsubscribeCategoriesToAdd` parameter to unsubscribe a user or `unsubscribeCategoriesToRemove` parameter to re-subscribe a user from that category.

                      '
                  response[].unsubscribeCategories[].name:
                    type: string
                    description: The name of the email category.
                  response[].devices:
                    type: array
                    description: A list of device objects associated with this user.
                    items: {}
                  response[].devices[]:
                    type: object
                    properties:
                      deviceId:
                        description: The unique ID for the device.
                        type: string
                      appVersion:
                        description: 'The version of the app used on this device. E.g. `2.0.1`.

                          '
                        type: string
                      systemName:
                        description: 'The name of the OS the current device is running. E.g. `iOS`.

                          '
                        type: string
                      systemVersion:
                        description: 'The version number of the OS the current device is running. E.g. `6.0`.

                          '
                        type: string
                      browserName:
                        description: 'The name of the browser the current device is running. E.g. `Chrome`.

                          '
                        type: string
                      browserVersion:
                        description: 'The version number of the browser the current device is running. E.g. `17.0`.

                          '
                        type: string
                      deviceName:
                        description: A human-readable name representing the device.
                        type: string
                      deviceModel:
                        description: 'The model name of the device. E.g. `iPad`.

                          '
                        type: string
                      iosPushToken:
                        description: The token used for Apple iOS push notifications on this device.
                        type: string
                      gcmRegistrationId:
                        description: The registration ID used for Google Cloud Messaging push notifications on this device.
                        type: string
                      webPushSubscription:
                        description: The JSON-encoded subscription used for web push notifications on this device.
                        type: string
      deprecated: false
  /api?action=exportUsers:
    get:
      tags:
      - Export Data
      summary: exportUsers
      description: 'Exports multiple user IDs. The export may be executed up to 40 times successfully per day, and this limit resets at 12:00 am PST each calendar day. This method requires your data export API `clientKey`.


        Use [getExportResults](#get_api-action-getexportresults) with the returned `jobId` to get the results.

        '
      parameters:
      - name: appId
        in: query
        required: true
        description: The application ID. To find yours, select your app in the navigation column, and click Manage Apps. Then click Keys & Settings.
        schema:
          type: string
          default: YOUR_APP_ID
      - name: clientKey
        in: query
        required: true
        description: The Data Export key for your Leanplum App.
        schema:
          type: string
          default: YOUR_DATA_EXPORT_KEY
      - name: apiVersion
        in: query
        required: true
        description: The version of the Leanplum API to use. The current version is 1.0.6.
        schema:
          type: string
          enum:
          - 1.0.6
   

# --- truncated at 32 KB (36 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/leanplum/refs/heads/main/openapi/leanplum-export-data-api-openapi.yml