This API allows you to retrieve detailed information about your app template campaigns. The campaigns in the App Templates, App Survey, App Template from Push, and Architect journeys can return in the response if available.
You can either:
Search for a specific campaign using its ID or
Filter campaigns created within a specific date range.
Endpoint and Headers
Visit our Postman collection to test this request.
Header | Sample Value | Description | Required |
|---|---|---|---|
Authorization | Bearer {access_token} | OAuth 2.0 access token issued by the Insider API Gateway. Refer to OAuth 2.0 Credentials to create a credential and mint a token. Required scope: mob-get-inapp. | Yes |
Content-Type | application/json | This header specifies the media type of the resource. | Yes |
Body Parameters
inapp_id and created_between are mutually exclusive; at least one is required.
Parameter | Description | Data Type |
|---|---|---|
inapp_id | The ID of the app template | Integer |
created_between | The dates between which the campaigns are created | Object |
from | The start date of the date range | String |
to | The end date of the date range | String |
The range may span at most 90 days, and to cannot precede from.
Sample Requests
Before sending the request, make sure to replace the values in your request body. Below is an example for a single campaign.
curl -X POST 'https://gw.useinsider.com/api/mob/v1/inapp/details' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json' \
--data '{ "inapp_id": 12345 }'Below is an example for a date range.
curl -X POST 'https://gw.useinsider.com/api/mob/v1/inapp/details' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json' \
--data '{
"created_between": { "from": "2026-07-01", "to": "2026-07-31" }
}'Sample Responses
The following are some example responses you might receive for your request.
200 OK
The following is a sample response for the created_between parameter.
{
"data": [
{
"inapp_id": 12345,
"name": "Summer Sale Banner",
"created_by": "jdoe@insiderone.com",
"status": "live",
"is_inapp_from_push": false,
"is_inapp_from_architect": true,
"journey_id": 987,
"created_at": "2026-07-04T09:12:33Z",
"start_date": "2026-07-05T00:00:00Z",
"updated_at": "2026-07-06T11:02:10Z",
"end_date": "2026-07-31T23:59:59Z",
"variations": [
{ "variation_id": 1, "percentage": 50, "variation_name": "A", "type": "full_screen" },
{ "variation_id": 2, "percentage": 50, "variation_name": "Control Group" }
],
"tags": ["summer", "campaign"]
}
]
}Below are the response parameters.
Field | Type | Notes |
|---|---|---|
inapp_id | Int | Campaign ID |
journey_id | Int (omitted when empty) | Set when the campaign comes from an Architect journey |
linked_push_id/linked_push_type | Int/String (omitted when empty) | Set for InApps derived from a push |
naame, created_by, status | String | - |
is_inapp_from_push, is_inapp_from_architect | Bool | Origin of the campaign |
created_at, start_date, updated_at | RFC 3339 | - |
end_date | RFC 3339 (omitted when empty) | Present when an end date is set |
variations[] | Array (omitted when empty) | variation_id, percentage, variation_name, type. type is empty for the control-group variation |
tags[] | String[] (omitted when empty) | - |
The following is a sample response for the inapp_id parameter.
{
"data": [
{
"inapp_id": 2,
"name": "My campaign",
"linked_push_id": 3,
"linked_push_type": "conversion",
"created_at": "2024-01-01T15:08:55Z",
"created_by": "test@insiderone.com",
"status": "passive",
"is_inapp_from_push": true,
"is_inapp_from_architect": false,
"start_date": "2024-01-01T15:08:56Z",
"end_date": "2024-01-01T15:08:57Z",
"updated_at": "2023-01-05T15:08:55Z",
"variations": [
{
"variation_id": 1,
"percentage": 50,
"variation_name": "Variant A",
"type": "wheelOfFortune"
},
{
"variation_id": 2,
"percentage": 50,
"variation_name": "Control Group",
"type": "wheelOfFortune"
}
],
"tags": [
"tagName2"
]
}
]
}
400 Bad Request
The following is a sample response for a request where the API key is missing. You need to get your API key from the panel.
{
"error": "No api key provided"
}
400 Bad Request
The following is a sample response for a request where the payload is invalid. This could be due to various reasons, such as a syntax error, wrong keys in the response, etc.
{
"error": "invalid request payload"
}
400 Bad Request
The following is a sample response for a request where the required parameter is missing.
{
"error": "either 'inapp_id' or 'created_between' must be provided"
}
400 Bad Request
The following is a sample response for a request where the payload has both parameters while it requires only one.
{
"error": "provide either 'inapp_id' or 'created_between', not both"
}
400 Bad Request
The following is a sample response for a request where the date format is incorrect for the from parameter.
{
"error": "invalid date format for 'from'; expected format is YYYY-MM-DD"
}400 Bad Request
The following is a sample response for a request where the date format is incorrect for the to parameter.
{
"error": "invalid date format for 'to'; expected format is YYYY-MM-DD"
}
400 Bad Request
The following is a sample response for a request where the to date is not greater than or equal to the from date.
{
"error": "'to' date must be after or equal to 'from' date"
}
400 Bad Request
The following is a sample response for a request where the date range exceeds 90 days.
{
"error": "date range must not exceed 90 days"
}
404 Not Found
The following is a sample response for a request where no inapp is found.
{
"error": "inapp not found"
}
403 Forbidden
The following is a sample response for a request where the API key is invalid. Refer to API Authentication Tokens to get your API key.
{
"error": "Invalid api key"
}
Limitations
All functions must be executed with a simple HTTPS POST request.
The rate limit is 1000 requests per minute.
Only one of the filters (inapp_id or created_between) can be used at a time.
The date range must be 90 days or less.
The default limit shown here is a standard baseline. If your use case requires higher capacity, feel free to reach out to the Insider One team. We can adjust it to fit your needs.
Authentication
This endpoint is served over the Insider API Gateway and authenticates with OAuth 2.0. Create a credential once in InOne > Settings > Integration Settings > OAuth 2.0 Credentials, exchange it for a bearer token at POST https://gw.useinsider.com/auth/token, and send that token on every call. Token retrieval is not repeated here.
Required scope | Authorizes | Rate limit |
|---|---|---|
mob-get-inapp | POST https://gw.useinsider.com/api/mob/v1/inapp/details | 60 requests / 60 seconds, burst 20 |
Each scope has its own independent rate-limit bucket. The partner is resolved from the partner claim in your token, so no API key or customer identifier is sent in the request body.
inapp_id and created_between stay mutually exclusive, and at least one is required; the range may span at most 90 days. The request and response bodies documented above are unchanged from the legacy API key endpoint.
Sample request
curl -X POST 'https://gw.useinsider.com/api/mob/v1/inapp/details' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json' \
--data '{ "inapp_id": 1434 }'
Allowed values
Field | Values |
|---|---|
status | active, passive, awaiting-next-run, scheduled, draft, processing, completed |
variations[].type | INAPP, wheelOfFortune, SOCIAL_PROOF, SCRATCH_COUPON, LEAD_GENERATION, WhatsAppTrigger, shopping-trigger, web-lead-collection, web-social-proof, design-agent, SA_SURVEY, NPS |
linked_push_type | single, conversion, recurring, geofence |
Errors returned by the gateway
The following responses are produced by the Insider API Gateway before your request reaches the product. They all share the same body shape: {"code":"...","message":"..."}.
HTTP | Body | Cause |
|---|---|---|
401 | {"code":"R1","message":"Invalid Token"} | The token is missing or invalid. |
401 | {"code":"R5","message":"Expired Token"} | The token has expired. Generate a new one. |
401 | {"code":"R6","message":"Invalid Request"} | The token does not carry the mob-get-inapp scope. |
403 | {"code":"R4","message":"IP Restricted"} | The source IP is not authorized on the credential. List both IPv4 and IPv6 ranges; an IPv4-only allowlist rejects IPv6 traffic. |
405 | {"code":"R6","message":"Invalid Request"} | The scope matched, but the HTTP method is wrong. This endpoint accepts POST only. |
429 | {"code":"R3","message":"Rate Limited"} | The scope rate limit was exceeded. Retry with exponential backoff. |
A missing scope returns 401, not 403. 403 means IP restriction only.
A response carrying Via: 1.1 Caddy generally crossed the gateway, which means the error came from the product layer rather than from authentication.
Migration from the API key endpoint
Legacy | OAuth 2.0 | |
|---|---|---|
URL | POST https://mobile.api.useinsider.com/v1/details/inapp | POST https://gw.useinsider.com/api/mob/v1/inapp/details |
Auth | X-API-KEY header | Authorization: Bearer + mob-get-inapp scope |
Request body | Identical. The schema does not change. | |
Response body | Identical. The schema does not change. |
The legacy path stays available. The two paths are independent and never accept each other's credentials.