Presets API
A push preset is a reusable push notification template — the same object you build in the Control Panel’s push editor. This API manages push presets only; SMS, WhatsApp, Kakao, LINE, and Viber presets each have their own dedicated preset service, not covered here.
Use a preset’s code to send it through Notify (payload preset) or a Customer Journey Send push point.
Base URL
Anchor link tohttps://rpc-api.svc-nue.pushwoosh.comAll endpoints are served over HTTPS. Requests and responses use application/json unless noted otherwise.
Authentication
Anchor link toEvery request must include an Authorization header with your Server API token:
Authorization: Api YOUR_API_TOKENConventions
Anchor link to- Field naming: request bodies and query/path parameters accept
lowerCamelCase(for example,sendType,localizedProperties,searchByName) — the server unmarshals either casing. Responses are always marshaled using the proto field names, insnake_case(localized_properties,platform_properties,per_page, and so on). The response examples and the Preset object reference below use that casing. code: every preset response carries its own code, generated onCreate. Pass this code toGet,Update,UpdatePartial,Delete,Clone, and to the messaging/journey APIs above.- Platform keys: the
platformsandopen_actionsmaps are keyed by the numeric device type code (1for iOS,3for Android, and so on).platform_propertiesis keyed by the platform’s enum name instead (IOS,ANDROID,BAIDU_ANDROID,HUAWEI_ANDROID,OSX— the only five platforms it covers). - Unpopulated fields:
Get,Create, andCloneresponses include every field of the Preset object, even when empty or zero-valued.Listreturns a reduced field set — see List below.UpdateandUpdatePartialreturn no preset fields at all — see the caution in their sections.
Error responses
Anchor link to| HTTP status | Meaning |
|---|---|
400 Bad Request | Invalid argument — a required field is missing or malformed, or a precondition failed (for example, cloning without a name). |
401 Unauthorized | Missing or invalid Authorization header. |
403 Forbidden | The application or preset does not belong to the caller’s account. |
404 Not Found | The preset or application was not found. |
500 Internal Server Error | Unexpected server-side failure. |
Delete on a preset still used by a running or paused journey’s Send push point also returns 400 Bad Request (a FailedPrecondition on the wire) — not 409. Remove the preset from the journey first.
Endpoints
Anchor link to| Method | Path | Description |
|---|---|---|
POST | /api/presets | Create a new push preset |
GET | /api/presets | List an application’s push presets |
GET | /api/presets/{code} | Get a single push preset |
PUT | /api/presets/{code} | Update a push preset (full overwrite) |
PUT | /api/presets/{code}:partial | Update a push preset (partial) |
POST | /api/presets/{code}:clone | Clone a push preset |
DELETE | /api/presets/{code} | Delete a push preset |
Create
Anchor link toCreates a new push preset in an application and returns it with its generated code.
POST /api/presets
Request body
Anchor link to| Parameter | Type | Required | Description |
|---|---|---|---|
application | string | Yes | The application code to create the preset in. |
name | string | Yes | Preset name. |
sendType | string | No | Channel of the preset (for example push). |
isV2 | boolean | No | Pins the preset’s origin flag. Omit to default to true (v2); set false only when reproducing a legacy v1 preset. |
All other fields — localized content, platforms, deep link, inbox, categories, and so on — are shared with Update and documented once in the Preset object reference below.
Request example
Anchor link to{ "application": "XXXXX-XXXXX", "name": "20% discount", "platforms": { "1": true, "3": true }, "localizedContent": { "default": "Get your 20% discount right now", "es": "Consigue tu 20% de descuento ahora mismo" }, "localizedTitle": { "default": "Hi there" }, "openAction": { "link": { "url": "https://example.com" } }, "categories": ["promo"]}Response
Anchor link toReturns { "preset": { ... } }, the created Preset object.
List
Anchor link toLists an application’s push presets — a reduced field set, not the full object — with paging, ordering, and filtering by name or category.
GET /api/presets
Query parameters
Anchor link to| Parameter | Type | Required | Description |
|---|---|---|---|
application | string | Yes | The application code to list presets for. |
orderBy | string | No | NAME (default), CREATED, or UPDATED. |
orderDirection | string | No | ASC (default) or DESC. |
page | integer | No | Zero-based page index. |
perPage | integer | No | Page size. Defaults to 100 when omitted or 0. |
searchByName | string | No | Case-insensitive substring match on preset name or code (ILIKE %value%). |
searchByCategory | array of strings | No | Repeat the parameter to filter by any of several categories, e.g. ?searchByCategory=promo&searchByCategory=lifecycle. |
showHidden | boolean | No | Include presets marked hidden. |
Response
Anchor link toEach item carries only: name, code, platforms, localized_content (plain per-locale text — not localized_properties), localized_title, localized_subtitle, banner, icon, categories, journey_uuid, custom_data, is_v2, created, updated. Every other field of the Preset object — localized_properties, platform_properties, deeplink, richmedia, url, and so on — is omitted, even if set on the preset.
| Field | Type | Description |
|---|---|---|
presets | array of objects | The current page of presets, in the reduced shape described above. |
page | integer | The returned page index. |
per_page | integer | The page size used for this response. |
total | integer | Total number of presets matching the filters, across all pages. |
Response example
Anchor link to{ "presets": [ { "name": "20% discount", "code": "AAAAA-BBBBB", "platforms": { "1": true, "3": true }, "categories": ["promo"] } ], "page": 0, "per_page": 100, "total": 1}Returns a single push preset by its code, with every field of the Preset object populated.
GET /api/presets/{code}
Path parameters
Anchor link to| Parameter | Type | Description |
|---|---|---|
code | string | The preset’s code. |
Response
Anchor link toReturns { "preset": { ... } }, the full Preset object.
Update
Anchor link toOverwrites an existing push preset by code with the supplied fields.
PUT /api/presets/{code}
Path parameters
Anchor link to| Parameter | Type | Description |
|---|---|---|
code | string | The preset’s code to overwrite. |
Request body
Anchor link toSame fields as Create (minus application), plus the rest of the Preset object fields. sendType is accepted but ignored — a preset’s channel can’t be changed after creation.
Response
Anchor link toAn empty object on success: {}.
UpdatePartial
Anchor link toUpdates only the supplied fields of an existing push preset by code, leaving unset fields unchanged.
PUT /api/presets/{code}:partial
Path parameters
Anchor link to| Parameter | Type | Description |
|---|---|---|
code | string | The preset’s code to patch. |
Request body
Anchor link toSame fields as Update, minus application. Unlike Update, every field here — including localizedProperties, platformProperties, categories, and the rest of the content-properties group listed in Update’s caution — is left unchanged when omitted, and only touched when you send it (a map/array field you send still fully replaces the existing value for that field, it just doesn’t affect anything you didn’t include). sendType is likewise accepted but ignored.
Request example
Anchor link to{ "sendRate": 500, "cappingCount": 3, "cappingDays": 7}Response
Anchor link toAlso an empty object — see the caution above.
Clone
Anchor link toDuplicates an existing push preset, under a new name, into the same application.
POST /api/presets/{code}:clone
Request body
Anchor link to| Parameter | Type | Required | Description |
|---|---|---|---|
code | string | Yes | Code of the source preset to duplicate. |
name | string | Yes | Name for the new preset. |
Request example
Anchor link to{ "code": "AAAAA-BBBBB", "name": "20% discount (copy)" }Response
Anchor link toReturns { "preset": { ... } }, the new Preset object.
Delete
Anchor link toPermanently deletes a push preset by code.
DELETE /api/presets/{code}
Path parameters
Anchor link to| Parameter | Type | Description |
|---|---|---|
code | string | The preset’s code to delete. |
Response
Anchor link toAn empty object on success: {}.
Object reference
Anchor link toField names below match what Get, Create, Update, and Clone actually return — snake_case proto field names (see Conventions). The lowerCamelCase form used in the request examples above works the same way on input.
Preset object
Anchor link toIdentity
Anchor link to| Field | Type | Description |
|---|---|---|
code | string | Generated on Create. Identifies this preset everywhere else in the API. |
name | string | Preset name. |
send_type | string | Channel of the preset (for example push). |
is_v2 | boolean | true for presets created or migrated to the v2 content model. |
system | boolean | Marks the preset as a system/internal preset. |
hidden | boolean | Hides the preset from List results (send showHidden: true to include it). |
created | string (RFC 3339) | Creation timestamp. |
updated | string (RFC 3339) | Last update timestamp. |
Targeting & content
Anchor link to| Field | Type | Description |
|---|---|---|
platforms | map<string, boolean> | Which platforms the preset targets, keyed by device type code (e.g. "1" for iOS). |
localized_properties | map<string, object> | Locale → rich per-platform content. Same shape as LocalizedContent on the Notify payload — one entry per platform block (ios, android, and so on). This is the primary way to set platform-specific push content. |
localized_title / localized_subtitle / localized_content | map<string, string> | Locale → plain text. A simpler alternative to localized_properties for title, subtitle, and body when you don’t need per-platform overrides. |
platform_properties | map<string, object> | Legacy per-platform overrides, keyed by platform enum name (IOS, ANDROID, BAIDU_ANDROID, HUAWEI_ANDROID, OSX). See PlatformProperties object below. |
open_action | OpenAction | Action triggered when the user opens the notification, applied to every platform. Mutually exclusive with open_actions — the response sets exactly one. |
open_actions | map<string, OpenAction> | Per-platform override of open_action, keyed by device type code. |
deeplink | string | Deep Link code. |
deeplink_params | map<string, string> | Parameters passed to the deep link. |
richmedia | string | Rich Media code opened by the notification. |
url | string | URL opened by the notification, if not using a deep link or Rich Media. |
Inbox
Anchor link to| Field | Type | Description |
|---|---|---|
inbox_image | string | Image URL shown in the Message Inbox entry. |
inbox_icon | string | Icon URL shown in the Message Inbox entry. |
inbox_days | integer | Days the entry stays in the Message Inbox. |
inbox_date | string (RFC 3339) | Explicit expiration date for the Message Inbox entry, as an alternative to inbox_days. |
Organization & metadata
Anchor link to| Field | Type | Description |
|---|---|---|
categories | array of strings | Category names the preset is tagged with. |
campaign_code | string | Campaign code this preset is attributed to. |
filter_code | string | Segment / Filter code this preset targets by default. |
geo_zones | string | Geozone targeting, if the preset is geo-triggered. |
journey_uuid | string | UUID of the Customer Journey that owns this preset, if it was created from a journey’s Send push point. |
custom_data | object | Free-form JSON forwarded to the client SDK as the u parameter. |
banner | string | Big-picture / attachment image URL. |
icon | string | Custom notification icon URL. |
Delivery limits
Anchor link to| Field | Type | Description |
|---|---|---|
send_rate | integer | Throttling for sends using this preset, in messages/second — the preset-level equivalent of Notify’s SendRate. |
capping_count / capping_days | integer | Per-user frequency limit for this preset — the preset-level equivalent of Notify’s FrequencyCapping count / days. |
Webhooks
Anchor link to| Field | Type | Description |
|---|---|---|
notification_sent_url | string | Callback URL requested when a notification using this preset is sent. |
notification_delivered_url | string | Callback URL requested when a notification using this preset is delivered. |
notification_click_url | string | Callback URL requested when a notification using this preset is clicked. |
Legacy fields
Anchor link toThese carry over from the v1 preset model. They’re populated for Control Panel compatibility rather than for new integrations.
| Field | Type | Description |
|---|---|---|
remote_page | string | Legacy remote page reference. |
wns_content | string | Legacy Windows toast template JSON, as accepted by the v1 createPreset/getPreset methods. |
original_url | string | The pre-shortening value of url, when url was replaced by a shortened link. |
ios_silent / android_silent / baidu_android_silent / huawei_android_silent | boolean | Per-platform silent (data-only) push flags. |
PlatformProperties object
Anchor link toFields available in each platform_properties entry (IOS, ANDROID, BAIDU_ANDROID, HUAWEI_ANDROID, OSX):
| Field | Type | Description |
|---|---|---|
badge | string | Badge count override. |
sound | string | Sound file name. |
sound_off | boolean | Mute the notification sound. |
priority | string | In-tray priority (Android/Baidu/Huawei only). |
delivery_priority | string | NORMAL or HIGH delivery priority (Android/Baidu/Huawei only). |
ios_interruption_level | string | passive, active, time-sensitive, or critical (iOS only). |