Leanplum authenticates every request with two API-key parameters carried in the query string or the request body — an `appId` identifying the Leanplum app, and a `clientKey` whose CLASS determines which methods you may call. There is no OAuth, no OIDC, no bearer token, no signature scheme, and no Authorization header. Keys are long-lived and are read from the dashboard.
Leanplum secures its APIs with apiKey across 2 declared security schemes, as derived from its OpenAPI definitions.
Mobile MarketingCustomer EngagementPush NotificationsMessagingA/B TestingAnalyticsCleverTap
Methods: apiKeySchemes: 2OAuth flows: API key in: query, body
generated: '2026-08-13'
method: searched
source: openapi/leanplum-api-openapi.json
docs: https://docs.leanplum.com/docs/use-the-right-api-keys
additional_docs:
- https://docs.leanplum.com/reference/making-requests
- https://docs.leanplum.com/reference/api-methods
- https://docs.leanplum.com/reference/responses
description: >-
Leanplum authenticates every request with two API-key parameters carried in the
query string or the request body — an `appId` identifying the Leanplum app, and a
`clientKey` whose CLASS determines which methods you may call. There is no OAuth,
no OIDC, no bearer token, no signature scheme, and no Authorization header. Keys
are long-lived and are read from the dashboard.
summary:
types:
- apiKey
api_key_in:
- query
- body
oauth: false
oidc: false
mtls: false
bearer: false
authorization_header: false
schemes:
- name: appIdQuery
type: apiKey
in: query
parameter: appId
required: true
description: >-
The application ID. Found in the Leanplum dashboard under Development -> App
Settings -> API Keys.
sources:
- openapi/leanplum-api-openapi.json
- https://docs.leanplum.com/docs/use-the-right-api-keys
- name: clientKeyQuery
type: apiKey
in: query
parameter: clientKey
required: true
description: >-
The client access key. Must be the production, development, read-only, or data
export key, depending on which API method you are calling.
sources:
- openapi/leanplum-api-openapi.json
- https://docs.leanplum.com/docs/use-the-right-api-keys
key_classes:
- id: production
purpose: Live write methods against the production pipeline.
methods: [start, stop, track, advance, pauseSession, resumeSession, pauseState,
resumeState, heartbeat, setUserAttributes, setDeviceAttributes, setTrafficSourceInfo,
sendMessage, getVars, downloadFile, getAndroidNotificationChannels]
- id: development
purpose: >-
Test/development pipeline and content-mutating methods. Sends data in real time
over an open socket and keeps activity out of Analytics.
methods: [registerDevice, deleteUser, setVars, deleteVars, uploadFile,
addAndroidNotificationChannel, deleteAndroidNotificationChannel, multi,
getMultiResults, startCampaign]
warning: >-
Never ship a development key in a production build — the open socket degrades app
performance and the data is not captured in analytics.
- id: data export
purpose: Data egress and postback rule management.
methods: [exportData, exportReport, exportUser, exportUsers, getExportResults,
addPostback, listPostbacks, deletePostback]
- id: content read-only
purpose: Read dashboard-authored content.
methods: [getMessage, getMessages, getUnsubscribeCategories, getAbTest, getAbTests, getVariant]
- id: content read-write
purpose: >-
Read and write dashboard content. Present as `contentReadWriteKey` in Leanplum's
own published Postman environment.
key_management:
discovery_path: Leanplum dashboard -> Development -> App Settings -> API Keys
discovery_url: https://www.leanplum.com/dashboard#/account/apps
environments: >-
Leanplum provisions TWO apps per customer — one development, one production —
each with its own key set, specifically to reduce the risk of using the wrong key.
rotation_policy: not published
expiry: none published (keys are long-lived)
scopes: none — authorization is by key class, not by scope
transport_security:
https_required: true
note: >-
The published spec lists both `https://api.leanplum.com` and
`http://api.leanplum.com` as servers. Use HTTPS only — credentials travel in the
query string, so a plaintext call leaks the clientKey to every intermediary.
risks:
- >-
Credentials in the QUERY STRING are logged by proxies, CDNs, browser history and
server access logs by default. Prefer POST with the arguments in the JSON body,
which Leanplum explicitly supports, over GET.
- >-
No scopes and no per-key expiry: a leaked production key can write to every live
profile in the app until it is rotated from the dashboard.
failure_modes:
- message: Invalid access key
cause: Wrong key class for the method, or a mismatched appId/clientKey pair.
see: errors/leanplum-problem-types.yml