Skip to main content
POST
Notify members

Restrictions

Usage

  • Only callable with a credential minted for an AI SRE session; any other credential is rejected with AccessDenied.
  • Delivery is asynchronous — accepted means the email was queued, not that it was delivered.
  • Recipients that are not active members of the caller’s account, or that have no email address on file, are skipped rather than failing the whole request.
  • Whether email is included follows each recipient’s own notification preferences for this kind of message; a recipient with no preference set defaults to receiving it.
  • Recipients receive exactly the sanitized html as the email body, with nothing added around it. The sender name shows the caller’s name followed by “(via AI SRE)”.
  • Before sending, the server inspects the submitted html and rejects the request with 400 / InvalidParameter when it contains constructs whose removal would change what recipients see (<style>, <svg>, <iframe>, <object>, <embed>, <form>, <input>, <button>, an <img> with a missing or non-https src, or an <a> whose href scheme is not http, https, or mailto); the error message names each construct and what to change, and nothing is queued — neither the hourly limit nor the per-turn duplicate check is consumed. Tags whose removal does not change rendering (<script>, <meta>, <link>, <base>, on* handlers) are still sanitized silently and never trigger a rejection.
  • At most 20 emails are delivered to the same recipient through this endpoint per hour; further deliveries to that recipient in the same window are skipped with rate_limited.
  • Retrying the same call within the same AI SRE session turn does not send a duplicate email to a recipient who already received one; the repeat is skipped with duplicate.

Authorizations

app_key
string
query
required

APP Key created in the Flashduty console under My → APP Key. Send it as the app_key query parameter or in the Fd-App-Key request header. Its effective access is the intersection of the key's permission scope and the creator's current role permissions. Keep it secret.

Body

application/json

Notify members by email request

subject
string
required

Email subject, used as written. Required, 1–200 characters. Line breaks are replaced with a space; leading/trailing whitespace is trimmed.

Required string length: 1 - 200
html
string
required

Email body as an HTML fragment (no <html>/<head>/<body> wrapper needed); recipients receive it as the whole email body. Required, up to 102,400 bytes of raw UTF-8 input (larger messages are clipped by common email clients), and must be non-empty after sanitization. <script>, <meta>, <link>, and <base> tags and all on* event handlers are silently removed before sending, since email clients never execute them; inline style attributes are kept as written. <style>, <svg>, <iframe>, <object>, <embed>, <form>, <input>, and <button> tags, an <img> with a missing or non-https src (including data:), or an <a> whose href scheme is not http, https, or mailto are rejected instead of stripped: the request fails with 400 rather than silently changing what recipients see.

Maximum string length: 102400
person_ids
integer<int64>[]

Recipient member IDs. Optional, up to 20, no duplicates. Omitted or empty sends to the caller only.

Maximum array length: 20

Response

Success

Success response envelope. On every 2xx response, request_id identifies the call (also mirrored in the Flashcat-Request-Id header) and data holds the endpoint-specific payload. Failure responses use a different shape — see ErrorResponse.

request_id
string
required

Unique ID for this request. Mirrored in the Flashcat-Request-Id response header. Include it when reporting issues.

Example:

"01HK8XQE3Z7JM2NTFQ5YJ8P9R4"

data
object

Notify members by email response