[BETA] Send a push announcement to app users

Sends an announcement as a push and/or in-app notification, and records it in the "Messages" tab of the school's app. content is an array of language variants (title + body + language). Recipients receive the variant matching their device language when that locale is present in content. If it is not, the delivery pipeline uses the first available variant in this fixed fallback order: fr, en, it, es — request array order is not significant.

language is optional only when content has exactly one item: it then falls back to the school language, or to fr when the school language is not one of fr/en/es/it. When content has more than one item, language is required on every item and languages must be unique (DUPLICATE_IN_REQUEST). Supported languages: fr, en, es, it (max 4 variants).

The endpoint validates and resolves external references, then dispatches asynchronously — a 200 confirms dispatch, not delivery.

Inline links: when delivery is push_and_inbox each variant body may contain inline Markdown links — [text](https://url), e.g. Retrouvez tous les détails ici : [Voir le blog](https://edusign.com/blog). The in-app inbox renders them as tappable hyperlinks; the push shows the link text only (a lock-screen notification cannot render links). URLs must be absolute http(s). Inline links are rejected when delivery is push_only (there is no inbox record to render them in).

Scheduling: provide an optional sendAt (ISO 8601 with a timezone — a trailing Z or a numeric offset, must be in the future) to schedule the announcement instead of sending it now. A scheduled announcement returns 202 with the sendAt echoed; it is delivered by the scheduler at that instant (to a granularity of a few minutes). Omit sendAt to send immediately (200). Scheduling is atomic: if the scheduling service is unavailable the request fails with 502 and no message is created, so it is safe to retry.

Availability: this endpoint is only available to schools with a white-label app; it has no effect for schools without one.

Audience note: recipients.type "targeted_users" targets any user stored in the school's users table by their id or external reference — not only students. Some schools register non-student roles there so those users can access the white-label app, so the audience is not limited to actual students.

Public audiences: recipients.type "all" and "unauthenticated" reach anonymous, non-enrolled devices, so they require an active public white-label app. Without it the request is rejected with 403; the other audiences ("authenticated", "targeted_users", "targeted_groups") are unaffected.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…
Body Params
content
array of objects
required

Language variants of the announcement (one per supported language: fr/en/es/it). Languages must be unique (duplicate languages are rejected with DUPLICATE_IN_REQUEST). language is optional only when content has exactly one item (falls back to the school language, or fr when the school language is unsupported).

content*
string
enum
required

push_and_inbox delivers a push and records it in the in-app notification centre; push_only delivers a push without an in-app record.

Allowed:
date-time
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$

ISO 8601 date-time to send the announcement at, with a timezone (a trailing Z or a numeric offset, e.g. 2026-07-23T13:00:00+02:00). When omitted the announcement is sent immediately. When set it must be in the future.

recipients
object
required
Responses

Language
Credentials
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json