This API returns metadata for your App Push campaigns: name, status, dates, campaign type, variations, and tags. Single, Conversion, Cart Reminder, Recurring, and Geofence campaigns can return in the response.
You can either:
Get a campaign by its ID or
List the campaigns created within a date range of up to 90 days.
Campaign IDs are unique only within a campaign type. For example, a Single campaign and a Recurring campaign can both have the ID 1434. If you request an ID without campaign_type, the response can contain up to one campaign per type. Add campaign_type to get exactly one campaign.
Endpoint and headers
POST https://gw.useinsider.com/api/mob/v2/app-push/details
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 get a token. Required scope: mob-get-app-push-details. | Yes |
Content-Type | application/json | This header specifies the media type of the request body. | Yes |
This endpoint requires the mob-get-app-push-details scope (App Push - Campaign Details in the scope dropdown) on the access token. The gateway rejects a token without this scope with 401 (R6), not 403.
Body parameters
app_push_id and created_between are mutually exclusive. Send exactly one of them.
Parameter | Description | Data Type | Required |
|---|---|---|---|
app_push_id | The ID of the App Push campaign. Must be greater than 0. | Integer | Conditional |
created_between | The creation date range of the campaigns. | Object | Conditional |
created_between.from | The start day of the range, in YYYY-MM-DD format. Insider One interprets it in your account timezone. | String | Yes, when created_between is used |
created_between.to | The end day of the range, in YYYY-MM-DD format. Inclusive until 23:59:59 of that day. | String | Yes, when created_between is used |
campaign_type | Returns only campaigns of this type. Accepted values: single, conversion, cart reminder, recurring, geofence. You can use it with app_push_id or created_between. The value conversion does not include Cart Reminder campaigns; use cart reminder for them. | String | No |
The date range can be 90 days or less, counting both the from and to days. For example, 2026-01-01 to 2026-03-31 is accepted, and 2026-01-01 to 2026-04-01 is rejected. The to date cannot be earlier than the from date.
Sample requests
Before sending the request, replace the values in your request body.
Below is an example for the app_push_id parameter, narrowed to one campaign type.
curl --location 'https://gw.useinsider.com/api/mob/v2/app-push/details' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json' \
--data '{
"app_push_id": 1434,
"campaign_type": "conversion"
}'Below is an example for the created_between parameter.
curl --location 'https://gw.useinsider.com/api/mob/v2/app-push/details' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json' \
--data '{
"created_between": {
"from": "2026-06-01",
"to": "2026-08-15"
}
}'Below is an example that lists only Recurring campaigns within a date range.
curl --location 'https://gw.useinsider.com/api/mob/v2/app-push/details' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json' \
--data '{
"created_between": {
"from": "2026-06-01",
"to": "2026-08-15"
},
"campaign_type": "recurring"
}'Sample responses
The following are some example responses you might receive for your request.
200 OK
{
"data": [
{
"app_push_id": 1434,
"campaign_name": "Summer Sale Push",
"created_at": "2026-06-04T09:12:33Z",
"created_by": "jane@partner.com",
"status": "completed",
"start_date": "2026-06-05T10:00:00Z",
"end_date": "2026-06-30T23:59:00Z",
"updated_at": "2026-06-06T11:02:10Z",
"campaign_type": "conversion",
"variations": [
{ "variation_id": 1, "percentage": 50, "variation_name": "Variant A" },
{ "variation_id": 2, "percentage": 50, "variation_name": "Control Group" }
],
"tags": ["summer"]
},
{
"app_push_id": 1502,
"campaign_name": "Welcome Push",
"created_at": "2026-07-10T08:00:00Z",
"created_by": "john@partner.com",
"status": "active",
"start_date": "2026-07-10T09:00:00Z",
"updated_at": "2026-07-10T08:05:00Z",
"campaign_type": "single",
"variations": [
{ "variation_id": 3, "percentage": 100, "variation_name": "Variant A" }
]
}
]
}Below are the response parameters.
Field | Data Type | Description |
|---|---|---|
app_push_id | Integer | Campaign ID |
campaign_name | String | Campaign name |
created_at, updated_at | String (date-time) | Creation and last update time, in UTC |
created_by | String | Email of the user who created the campaign |
status | String | Campaign status. The value is the same status the panel shows for the campaign. |
start_date | String (date-time) | Start date of the campaign, in your account timezone. The trailing Z does not mean UTC. Omitted when the campaign has no start date. |
end_date | String (date-time) | End date of the campaign, in your account timezone. The trailing Z does not mean UTC. Omitted when the campaign has no end date. |
campaign_type | String | single, conversion, cart reminder, recurring, or geofence |
variations[] | Array | variation_id, percentage, and variation_name of each variation. Omitted when empty. |
tags[] | Array of strings | Tag names of the campaign. Omitted when the campaign has no tags. |
400 Bad Request
Validation errors return an error message and a code.
{
"error": "either 'app_push_id' or 'created_between' must be provided",
"code": "ERR_VALIDATION"
}Error message | Code | Cause |
|---|---|---|
invalid request payload | ERR_VALIDATION | The body is not valid JSON or has wrong value types. |
either 'app_push_id' or 'created_between' must be provided | ERR_VALIDATION | No filter is sent. |
provide either 'app_push_id' or 'created_between', not both | ERR_VALIDATION | Both filters are sent. |
invalid date format for 'from'; expected format is YYYY-MM-DD | ERR_VALIDATION | The from value is not in YYYY-MM-DD format. |
invalid date format for 'to'; expected format is YYYY-MM-DD | ERR_VALIDATION | The to value is not in YYYY-MM-DD format. |
'to' date must be after or equal to 'from' date | ERR_VALIDATION | The to value is earlier than the from value. |
date range must not exceed 90 days | ERR_VALIDATION | The range is longer than 90 days. |
'campaign_type' must be one of: single, conversion, cart reminder, recurring, geofence | ERR_VALIDATION | The campaign_type value is unknown. |
result set exceeds 1000 campaigns; narrow your date range | ERR_TOO_MANY_RESULTS | More than 1000 campaigns match the filter. The API returns no partial data. |
The API treats an app_push_id of 0 or a negative value as missing and returns the "either 'app_push_id' or 'created_between' must be provided" error.
404 Not Found
No campaign matches the filter. The same status with {"message": "partner not found", "code": "ERR_NOT_FOUND"} means the account behind the access token was not found.
{
"error": "campaign not found",
"code": "ERR_CAMPAIGN_NOT_FOUND"
}403 Forbidden
Your account is not active.
{
"message": "partner inactive",
"code": "ERR_FORBIDDEN"
}500 Internal Server Error
A temporary error occurred on the Insider One side. The body is the plain text internal error, not JSON. Retry the request with backoff.
Gateway responses (401, 403, 405, 429, 500)
The Insider API Gateway returns token, scope, IP restriction, method, and rate limit errors before the request reaches this API, in the {"code": "R1", "message": "..."} format. Refer to OAuth 2.0 Credentials for details. A missing scope returns 401, not 403. The gateway can return these codes:
HTTP | Body | Cause |
|---|---|---|
401 | {"code":"R1","message":"Invalid Token"} | The access token is missing, malformed, or not valid. |
401 | {"code":"R5","message":"Expired Token"} | The access token has expired. Request a new token. |
401 | {"code":"R9","message":"Invalid Token"} | The access token was revoked. |
401 | {"code":"R10","message":"Inactive Client"} | The OAuth 2.0 credential is inactive. |
401 | {"code":"R6","message":"Invalid Request"} | The access token does not have the mob-get-app-push-details scope. |
403 | {"code":"R4","message":"IP Restricted"} | The request comes from an IP address outside the credential's IP restriction. |
405 | {"code":"R6","message":"Invalid Request"} | The request method is not POST. |
429 | {"code":"R3","message":"Rate Limited"} | The request exceeds the rate limit of the mob-get-app-push-details scope. |
500 | {"code":"R8","message":"Internal Server Error"} | A temporary gateway error occurred. Retry the request with backoff. |
Limitations
All requests must be sent as HTTPS POST.
Requests made with the mob-get-app-push-details scope are limited to 30 requests per 60 seconds, with a burst limit of 40 requests.
Only one of the filters (app_push_id or created_between) can be used at a time.
The date range must be 90 days or less.
A request can return at most 1000 campaigns. If more campaigns match, narrow your date range or add campaign_type.
The API returns campaigns created with the current App Push campaign builder. It does not return campaigns created with the legacy builder.
The API does not return deleted campaigns. It returns Draft campaigns and orders results by app_push_id.
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 authenticates with OAuth 2.0 through the Insider API Gateway. The partner is resolved from the access token, so you do not send an API key. Token retrieval is not repeated here.
Required scope | Authorizes | Rate limit |
|---|---|---|
mob-get-app-push-details | POST /api/mob/v2/app-push/details | 30 requests per 60 seconds, burst limit 40 |