Pushwoosh Cloud Mode Integration

Private Beta
Send events to Pushwoosh in RudderStack cloud mode.

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 call setUserId with the same value you send to RudderStack as userId. userId is 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:

javascript
rudderanalytics.identify("user-123", {
  plan: "growth",
  language: "en",
  notificationsEnabled: true
});
RudderStack propertyPushwoosh propertyNotes
userId
Required
request.userIdSent as a string.
traits
context.traits
Required
request.tagstraits 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:

  • userId
  • id
  • anonymousId
  • email
  • phone
  • firstName
  • lastName
  • name
  • address

Value handling

The same sanitization applies to identify tags and track attributes:

  • Drop null and undefined values.
  • 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:

javascript
rudderanalytics.track("Product Viewed", {
  productId: "sku-100",
  price: 25,
  inStock: true
});
RudderStack propertyPushwoosh propertyNotes
userId
Required
user_idSent as a string.
event
Required
nameSent as a string.
propertiesattributesSanitized. Defaults to {} when absent. See Value handling.
context.device.iddevice_idEmpty string when absent. Pushwoosh still stores the event against user_id.
context.device.type
context.os.name
device_platformResolves to android, ios, or web.
timestamp
originalTimestamp
timestampFirst 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 android when context.device.type or context.os.name is android.
  • It resolves to ios for ios, ipados, watchos, or tvos.
  • It resolves to web otherwise.

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 typeHTTP codeDescriptionRetry strategy
Missing userId400userId is absent from the eventNot retried
Missing event400A track event has no event nameNot retried
No traits to send400Every trait was excluded as identity or PII, or none were suppliedNot retried
Unsupported event type400Event type other than track or identifyNot retried
Invalid timestamp400timestamp or originalTimestamp can’t be parsed as a dateNot retried
Missing credentials400Application Code or API Token not suppliedNot retried
Application not found400Application Code is wrong, or the account isn’t in the EU (NUE) data centerNot retried
Unauthorized401API Token doesn’t match the Application CodeNot retried
Invalid application code200 with status_code 210Returned by the tags API; usually an Application Code or region mismatchNot retried
Rate limit exceeded429Too many requestsRetried with exponential backoff
Server error5xxPushwoosh server errorRetried 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.

See more

Questions? Let's figure it out together.

Join the RudderStack Slack community to connect with other users, customers, and the RudderStack team — or reach out for direct support.