Quickstart

Quolle is a transactional email API. Go from zero to a delivered email in under 5 minutes.

1

Get your API key

Sign up at app.quolle.com — the Starter plan is free with 3,000 emails/month, no credit card required. Then go to API Keys → Create key. Copy it immediately — keys start with qle_ and are shown only once.

Store it as an environment variable rather than hardcoding it:

export QUOLLE_API_KEY=qle_your_api_key
2

Verify a sending domain

Every email must originate from a domain you've verified. Go to Domains → Add domain in the dashboard, enter your sending domain (e.g. mail.yourdomain.com), and add the DNS records shown. Without this, POST /send returns 400 Sending domain not verified.

Domain setup guide →

3

Send your first email

Replace hello@mail.yourdomain.com with your verified sender address.

# Install the official SDK first
npm install @quolle/sdk
import { Quolle } from "@quolle/sdk";

const quolle = new Quolle({ apiKey: process.env.QUOLLE_API_KEY! });

const { id } = await quolle.emails.send({
  from:    "hello@mail.yourdomain.com",
  to:      "you@example.com",
  subject: "Hello from Quolle",
  html:    "<p>Your first email via Quolle.</p>",
});

console.log("Queued:", id);
curl -X POST https://api.quolle.com/v1/emails/send \
  -H "Authorization: Bearer $QUOLLE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "hello@mail.yourdomain.com",
    "to": "you@example.com",
    "subject": "Hello from Quolle",
    "html": "<p>Your first email via Quolle.</p>"
  }'
import os
import requests

response = requests.post(
    "https://api.quolle.com/v1/emails/send",
    headers={
        "Authorization": f"Bearer {os.environ['QUOLLE_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "from": "hello@mail.yourdomain.com",
        "to": "you@example.com",
        "subject": "Hello from Quolle",
        "html": "<p>Your first email via Quolle.</p>",
    },
    timeout=15,
)
response.raise_for_status()
data = response.json()
print("Queued:", data["id"])

A successful response:

{
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "message": "Email queued successfully"
}

The SDK surfaces { id }. The raw REST API (cURL/Python) also returns message.

Check Logs in the dashboard to track delivery status in real time. Statuses flow: queued → sent → delivered (or bounced/failed).
Test email landed in junk? That's normal for a brand-new sending domain — and usually not a configuration problem. Read Deliverability before you debug.
Testing without real email. Send to delivered@test.quolle.com, bounced@test.quolle.com, or complained@test.quolle.com to simulate each outcome — statuses and webhooks fire exactly like production, but nothing is actually sent and your sending reputation is never affected. Never test bounce handling with made-up addresses: those cause real bounces that count against you. See Test addresses.

Next steps