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.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||

