Skip to content
WeZend

Channels

In-app inbox

A persistent message center inside your own product — messages that wait for the user instead of interrupting them.

Not every message deserves an interruption. The in-app inbox is a message center you embed in your own web app — announcements, feature news and account notices land there and wait until the user logs in.

Why an inbox channel

  • Zero fatigue — it never buzzes a phone. Perfect for "nice to know" content that would hurt your push opt-in rate.
  • Guaranteed reach — no spam filter, no notification permission needed; every active user sees it.
  • A journey step like any other — journeys can deliver to inapp exactly like SMS or email, so "announce in-app, escalate to email if unread after 3 days" is a standard pattern.

Embedding

Two ways to read the inbox. From your backend, fetch a contact's inbox and render it in your own UI — this endpoint requires a dashboard session (a JWT from POST /v1/auth/login), not an API key. Add ?unread=1 for unread messages only:

curl "https://api.wezend.com/v1/inapp/c_123" \
  -H "Authorization: Bearer $WEZEND_JWT"
# → { "messages": [ { "id": "…", "title": "…", "body": "…", "url": "…", "read_at": null, "created_at": "…" } ], "unread": 2 }

Or straight from the browser with your public tracking key (wz_pk_…) and the signed-in user's email — no secret ever reaches the client:

curl -X POST https://api.wezend.com/v1/inapp/feed \
  -H "Content-Type: application/json" \
  -d '{ "key": "wz_pk_…", "email": "user@example.com", "unread_only": true }'

Mark read state back so unread badges stay correct (pass a message id, or "all" to clear everything):

curl -X POST https://api.wezend.com/v1/inapp/read \
  -H "Content-Type: application/json" \
  -d '{ "key": "wz_pk_…", "email": "user@example.com", "id": "msg_456" }'

Sending

In-app is not a channel on POST /v1/messages/send — use the dedicated endpoint (dashboard session), targeting a contact_id or a known email:

curl -X POST https://api.wezend.com/v1/inapp/send \
  -H "Authorization: Bearer $WEZEND_JWT" \
  -H "Content-Type: application/json" \
  -d '{ "email": "user@example.com", "title": "New feature", "body": "Journeys now support push.", "url": "https://app.example.com/news" }'

Or add an in-app step in a journey. Each message carries a title, a body and an optional call-to-action URL.

One platform. Every customer interaction.

Replace your patchwork of messaging APIs, CDP and automation tools with a single engagement platform built for scale.

No credit card required · EU data residency · 99.99% uptime SLA