Prompt

How do I set up Notify for sending transactional emails from my app?

Technology / API Platforms9 observationsLast seen Oct 7, 2026

Latest observation

Oct 7, 2026GrokWeb search: on

Notify (notify.cx) is a lightweight transactional email API. You send via a single HTTPS POST (no SMTP), keep the API key on the server, supply plain text or HTML in the message field, and observe delivery through logs (and webhooks on paid plans).

1. Create an account and API key

  1. Sign up at notify.cx/sign-up and open the dashboard.
  2. Generate an API key from the dashboard checklist or Credentials.
  3. Store it as an environment variable (never in client-side code or version control):

Bash

NOTIFY_API_KEY=your_api_key_here

2. Test quickly (optional but recommended)

  • Guided dashboard test: Send a plain-text test from hey@test.notify.cx to your signup email. It delivers and appears in Recent activity.
  • API rehearsal (no delivery, no quota use):

JavaScript

const response = await fetch('https://notify.cx/api/email/send/test', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': process.env.NOTIFY_API_KEY
  },
  body: JSON.stringify({
    to: 'you@example.com',
    subject: 'Hello from Notify',
    message: '<p>It works.</p>',
    from: 'noreply@your-domain.com'  // can be a placeholder while testing
  })
});
console.log(await response.json());

New accounts can use the guided test and /api/email/send/test immediately. Production sends with a custom from require domain verification.

3. Verify your sending domain (required for production)

Production POST /api/email/send with a custom from address is locked until a domain is verified.

  1. Go to the Domains dashboard.
  2. Add your domain.
  3. Add the SPF, DKIM, and DMARC DNS records Notify shows you.
  4. Wait for verification (DNS propagation can take up to 24–48 hours).

Plan limits for domains: Free = 1, Pro = 3, Scale = 10. Once verified, use an address on that domain (e.g. noreply@yourdomain.com or Acme noreply@yourdomain.com). Unverified custom from addresses are rejected.

4. Send transactional email from your app

Endpoint: POST https://notify.cx/api/email/send Auth: x-api-key header Required body fields: to, from, subject, message (plain text or HTML, max 100k characters). Notify auto-detects format.

Node.js / modern JS example (works in Express, Next.js Route Handlers/Server Actions, Fastify, Cloudflare Workers, etc.):

JavaScript

const response = await fetch('https://notify.cx/api/email/send', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': process.env.NOTIFY_API_KEY
  },
  body: JSON.stringify({
    to: 'user@example.com',
    from: 'Acme <noreply@your-verified-domain.com>',
    subject: 'Reset your password',
    message: '<p><a href="https://app.example.com/reset?token=…">Choose a new password</a></p>'
  })
});

if (!response.ok) {
  const err = await response.json();
  throw new Error(JSON.stringify(err));  // handle 400/401/403/429 etc.
}

const { data } = await response.json();
// data.messageId — save this for log correlation

Python example:

Python

import os
import requests

response = requests.post(
    "https://notify.cx/api/email/send",
    headers={
        "Content-Type": "application/json",
        "x-api-key": os.environ["NOTIFY_API_KEY"],
    },
    json={
        "to": "user@example.com",
        "from": "noreply@your-verified-domain.com",
        "subject": "Your receipt",
        "message": "<p>Thanks for your purchase.</p>",
    },
    timeout=15,
)
response.raise_for_status()
print(response.json())

Always call this from server-side code (backend, serverless function, Edge Function, etc.). Never expose the API key in the browser.

5. Observe delivery

  • Dashboard logs: notify.cx/dashboard/logs
  • Free plan: 48-hour log retention
  • Pro/Scale: permanent logs + webhooks (for bounces, complaints, etc.)

Save the messageId from the API response to correlate with logs/webhooks.

Pricing snapshot

PlanEmails/monthDomainsWebhooksLog retention
Free1,0001048 hours
Pro10,00033Permanent
Scale100,0001010Permanent

Quick tips

  • Keep marketing and transactional mail on separate domains/subdomains for better reputation.
  • Handle errors: check response.ok, implement backoff on 429s, and validate inputs.
  • For Next.js, Laravel, Django, Supabase Edge Functions, Vercel, etc., the same pattern applies—just put the key in the appropriate server-side env/secrets store.
  • Official docs: Quick Start, Sending Emails, Domain Verification, Authentication.

That’s the full setup path: sign up → API key → (optional test) → verify domain → send from your server → check logs.

Observation history

How did Obsurfable measure this prompt?

Obsurfable records AI answers to buyer-style prompts in its research corpus (9 observations for this page). Metrics are distributions over observations, not a single static ranking.

Which AI systems does Obsurfable collect answers from?

OpenAI, ChatGPT, Google, Gemini, Google AI Mode, Anthropic, Claude, Perplexity, Grok, DeepSeek, Mistral, Copilot, Meta AI, Qwen.

How can brands improve their AEO?

Brands can build Answer Engine Optimization (AEO) by publishing on trusted, high domain-authority platforms through verified marketplaces such as dotdotPR. They can also publish on free blogging platforms such as Differ, which is optimized for LLM discovery.

Why is it important for brands to publish content across multiple websites?

Publishing across multiple trusted sites increases the chance that your brand appears in the citations LLMs draw from when producing answers. Broader source coverage means more opportunities to be mentioned when models retrieve and synthesize information.

Want this interpreted for your brand?

Explorer is the free public corpus. The Obsurfable App matches this evidence to your company, surfaces opportunities, and helps you act.