Pushwoosh Cloud Mode Integration
Private Beta4 minute read
The Pushwoosh destination integration is maintained by the Pushwoosh team and is currently in Private Beta.
Reach out to Customer Success if you’re interested in enabling this destination for your workspace.
Cloud mode sends track events to Pushwoosh as custom events and identify traits as user-specific tags.
Find the open source transformer code for this destination in the GitHub repository.
Pushwoosh matches users by User ID. The Pushwoosh SDK in your app must callsetUserIdwith the same value you send to RudderStack asuserId.userIdis required on every event; anonymous events can’t be attributed in Pushwoosh.
Identify
An identify call sends traits as user-specific tags. See the Identify event for the call format.
A sample identify call:
rudderanalytics.identify("user-123", {
plan: "growth",
language: "en",
notificationsEnabled: true
});| RudderStack property | Pushwoosh property | Notes |
|---|---|---|
userIdRequired | request.userId | Sent as a string. |
traitscontext.traitsRequired | request.tags | traits takes precedence. Excluded keys are removed, then values are sanitized. At least one trait must remain. |
Identity and PII traits are never sent as tags. These keys are excluded:
userIdidanonymousIdphonefirstNamelastNamenameaddress
Value handling
The same sanitization applies to identify tags and track attributes:
- Drop
nullandundefinedvalues. - Leave strings, numbers, and booleans unchanged.
- Send nested objects as JSON strings.
- Keep arrays and JSON-stringify any object elements within arrays.
Track
A track call sends a Pushwoosh custom event. See the Track event for the call format.
A sample track call:
rudderanalytics.track("Product Viewed", {
productId: "sku-100",
price: 25,
inStock: true
});| RudderStack property | Pushwoosh property | Notes |
|---|---|---|
userIdRequired | user_id | Sent as a string. |
eventRequired | name | Sent as a string. |
properties | attributes | Sanitized. Defaults to {} when absent. See Value handling. |
context.device.id | device_id | Empty string when absent. Pushwoosh still stores the event against user_id. |
context.device.typecontext.os.name | device_platform | Resolves to android, ios, or web. |
timestamporiginalTimestamp | timestamp | First present wins, converted to ISO 8601 UTC. Omitted when neither is present. |
track events are grouped into requests of up to 100.
Device platform
device_platform resolves from context.device.type and context.os.name:
- It resolves to
androidwhencontext.device.typeorcontext.os.nameisandroid. - It resolves to
iosforios,ipados,watchos, ortvos. - It resolves to
webotherwise.
Pushwoosh accepts only these three values.
Unsupported events
Cloud mode rejects page, screen, group, alias, and record events with a 400 response.
Error handling
| Error type | HTTP code | Description | Retry strategy |
|---|---|---|---|
Missing userId | 400 | userId is absent from the event | Not retried |
Missing event | 400 | A track event has no event name | Not retried |
| No traits to send | 400 | Every trait was excluded as identity or PII, or none were supplied | Not retried |
| Unsupported event type | 400 | Event type other than track or identify | Not retried |
| Invalid timestamp | 400 | timestamp or originalTimestamp can’t be parsed as a date | Not retried |
| Missing credentials | 400 | Application Code or API Token not supplied | Not retried |
| Application not found | 400 | Application Code is wrong, or the account isn’t in the EU (NUE) data center | Not retried |
| Unauthorized | 401 | API Token doesn’t match the Application Code | Not retried |
| Invalid application code | 200 with status_code 210 | Returned by the tags API; usually an Application Code or region mismatch | Not retried |
| Rate limit exceeded | 429 | Too many requests | Retried with exponential backoff |
| Server error | 5xx | Pushwoosh server error | Retried with exponential backoff |
If one event in a batch is malformed, RudderStack resends that batch one event at a time. Only the offending event fails, and the rest are delivered.
FAQ
Why do identify events succeed but no tags appear in Pushwoosh?
Tags only land on a user who already has a device registered through the Pushwoosh SDK with the same User ID. Pushwoosh also writes only user-specific tags. A new tag name is automatically created as user-specific, but a pre-existing tag with the same name that isn’t user-specific is silently skipped. Neither case returns an error.
Does a wrong API Token fail identify events?
No. The tags API doesn’t validate the token, so identify events are still delivered. track events fail with 401 unauthorized, which is the signal to check the token.