---
title: "Read who your Notify email is from"
method: GET
path: "/products/notify/email-sender"
tags: ["notify"]
---

# Read who your Notify email is from

`GET /products/notify/email-sender`

## Request

- Base URL: `https://api.sparkvault.com/v1`
- URL: `https://api.sparkvault.com/v1/products/notify/email-sender`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer
- TypeScript: <https://skmtc.dev/sparkvault/apis/sparkvault-api/docs/products/notify/email-sender/get.ts> (a function with typed inputs; its response is checked against the schema)

The address the organization's Notify email goes out from: its handle under send.sv, or the domain of its own that the config's email.sending_domain selects while that domain serves sending, with the selected domain's readiness.

## Response `200`

Who the organization's Notify email is from.

- object
  - `data` NotifyEmailSender, required: Who the organization's Notify email is from: `"{organization name}" <from_address>`, carrying a notice that names SparkVault Notify. A reply reaches no one when the email goes out from the handle host, or from a domain of the organization's own that is set up as a help-desk web host (its `web.status` anything but not_requested) or receives the help desk's email; from a domain that only sends, a reply goes wherever that domain's own MX records route it.
    - `state` 'ready' | 'handle_required' | 'platform_sender', required: ready: the email goes out from from_address. handle_required: the organization holds no handle, so a send that would email someone is refused 409 HANDLE_REQUIRED until it chooses one. platform_sender: SparkVault's own account, whose Notify email is platform mail.
    - `from_address` string, nullable, required: The address in effect: notify@{handle}.send.sv, or notify@{domain} while the selected domain serves sending; SparkVault's platform address for platform_sender; null for handle_required.
    - `handle_host` string, nullable, required: The organization's host under send.sv, which the email falls back to whenever the selected domain stops serving. Null unless the state is ready.
    - `sending_domain` string, nullable, required: The domain the config selects, whether or not it serves sending now. Null for platform_sender.
    - `sending_host` string, nullable, required: The host the email goes out from now: the selected domain while it serves sending, else the handle host. Null unless the state is ready.
    - `domain_readiness` DomainReadiness, required: A domain's readiness: each capability ready, and whether each mail product may select it.
      - `email_sending_ready` boolean, required
      - `email_receiving_ready` boolean, required
      - `web_ready` boolean, required
      - `help_desk_selectable` boolean, required: Whether the mail product `help_desk` may select the domain: its ownership verified, its email sending ready and its web host live, on a domain that is not a zone apex.
      - `notify_selectable` boolean, required: Whether the mail product `notify` may select the domain: its ownership verified and its email sending ready, a zone apex included.
  - `meta` ResponseMeta: Envelope metadata present on every successful response.
    - `api_version` string
    - `request_id` string
    - `response_ms` integer
    - `timestamp` integer: Unix seconds.
    - `pools` object: Storage and bandwidth capacity snapshot for the account.
    - `billing` object
      - `past_due` boolean
    - `quota` object: This minute of the account request budget. Present on authenticated success responses that passed the throttle; absent otherwise.
      - `limit` integer
      - `used` integer
      - `remaining` integer
      - `resets_at` integer: Unix seconds.

## Other responses

- `400`: VALIDATION_ERROR — the message names the offending field.
- `401`: AUTHENTICATION_ERROR — missing or invalid credentials.
- `403`: FORBIDDEN — the caller may not act on this account.
- `429`: RATE_LIMIT_EXCEEDED — the account exceeded 5000 requests this minute. `Retry-After` carries the seconds to wait, and `details` carries limit/resets_at, plus `used` whenever the request was counted. A request refused because the limiter itself was unavailable reports no `used`.

## Changes

- **2026-10-28** `a9a10e328ba5`: 16 info
  - the response property `error/details` became required for the status `400`
  - the response property `error/details` became required for the status `401`
  - the response property `error/details` became required for the status `403`
  - the response property `error/details` became required for the status `429`
  - …12 more
- **2026-10-28** `56d7c265a77a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/sparkvault/apis/sparkvault-api/changes/products/notify/email-sender/get.md)

---

[API](https://skmtc.dev/sparkvault/apis/sparkvault-api.md) - [All operations](https://skmtc.dev/sparkvault/apis/sparkvault-api/llms.txt) - [OpenAPI document](https://skmtc.dev/sparkvault/apis/sparkvault-api/revisions/97cfadccd0c0?raw)
