---
title: "Send email"
method: POST
path: "/api/notifications/{project_id}/email"
tags: ["Notifications"]
---

# Send email

`POST /api/notifications/{project_id}/email`

## Request

- Base URL: `https://core.blink.new`
- URL: `https://core.blink.new/api/notifications/{project_id}/email`
- Auth: HTTP bearer

Send a transactional email on behalf of a project using the project's
dedicated sending domain.

Either `html` or `text` (or both) must be provided as the email body. Omit
`from` to send from the project's default sender. `from` can pick one of the
project's verified senders (Hosting > Email) or, on a verified domain, set a
display name; any other value is ignored and reported in `warning`.

Up to **10 attachments** can be included; each attachment is fetched from
its `url` and streamed for delivery.
Recipients (`to`, `cc`, `bcc`): the secret key may email anyone, a signed-in
user or a signed-out caller only the project owner.

## Path parameters

- `project_id` string, required

## Request body

- SendEmailRequest: Email sending request. Either html or text (or both) must be provided.
  - `to` union, required: Recipient email address(es)
    - string, email: Single recipient email address
    - string[]: Array of recipient email addresses
  - `subject` string, required: Email subject line
  - `html` string: HTML content of the email
  - `text` string: Plain text content of the email
  - `from` string: Optional. Omit it to send from the project's default sender. An address picks one of the project's verified senders (Hosting > Email); a display name (no `@`) renames the sender on a verified custom domain. Any other value is ignored and reported in `warning` — it never fails the send.
  - `replyTo` string, email: Reply-to email address
  - `cc` union: Carbon copy recipient(s)
    - string, email: Single CC recipient
    - string[]: Array of CC recipients
  - `bcc` union: Blind carbon copy recipient(s)
    - string, email: Single BCC recipient
    - string[]: Array of BCC recipients
  - `attachments` EmailAttachment[]: File attachments to include in the email
    - `filename` string, required: Name of the attachment file
    - `type` string: MIME type of the attachment. Inferred from the filename when omitted.
    - `url` string, uri, required: Public URL to fetch the attachment file

## Response `200`

Email sent successfully

- SendEmailResponse
  - `success` boolean: Whether the email was sent successfully
  - `messageId` string: Unique message ID from the email provider
  - `from` string, email: Actual sender email address used
  - `to` string[]: List of recipient email addresses
  - `subject` string: Email subject line
  - `timestamp` string, date-time: When the email was sent
  - `warning` string: Present when part of the request was ignored, e.g. a `from` address that is not a verified sender for the project.

## Other responses

- `400`: Validation error
- `401`: Authentication required or invalid API key
- `403`: RECIPIENT_NOT_ALLOWED — a recipient is outside what this caller may email
- `429`: EMAIL_DAILY_LIMIT — a daily limit for non-secret-key sends (per signed-in user, and per project)
- `500`: Internal server error
- `503`: EMAIL_SCOPE_UNAVAILABLE — the recipient check could not run; retry

---

[API](https://skmtc.dev/blink/apis/blink-apis.md) - [All operations](https://skmtc.dev/blink/apis/blink-apis/llms.txt) - [OpenAPI document](https://skmtc.dev/blink/apis/blink-apis/revisions/4c59c706078e?raw)
