Quickstart
Go from zero to a delivered transactional email in six steps.
1
Create an account
Sign up at dashboard.xurel.co/signup. No credit card required — Free includes 3,000 emails/month.
2
Add and verify your domain
Add your domain in the dashboard, add the DNS records (SPF, DKIM, DMARC), then Verify. Full walkthrough: Domain verification.
3
Create an API key
Dashboard › API Keys › New API key. Copy the key (xrl_prd_…) — it is shown only once.
4
Install an SDK
Node.js
npm install xurel Python
pip install xurel Go
go get github.com/xurel/xurel-go PHP
composer require xurel/xurel-php5
Send your first email
Node.js
import { Xurel } from 'xurel';
const xurel = new Xurel(process.env.XUREL_API_KEY);
const email = await xurel.emails.send({
from: 'hello@yourdomain.com',
to: 'user@example.com',
subject: 'Hello from Xurel',
html: '<p>Your first email.</p>',
type: 'transactional',
});
console.log(email.id); // em_... Python
import os
import xurel
client = xurel.Client(api_key=os.environ["XUREL_API_KEY"])
email = client.emails.send(
from_="hello@yourdomain.com",
to=["user@example.com"],
subject="Hello from Xurel",
html="<p>Your first email.</p>",
type="transactional",
)
print(email["id"]) Go
package main
import (
"context"
"fmt"
"os"
"github.com/xurel/xurel-go"
)
func main() {
client := xurel.New(os.Getenv("XUREL_API_KEY"))
email, err := client.Emails.Send(context.Background(), &xurel.SendParams{
From: "hello@yourdomain.com",
To: []string{"user@example.com"},
Subject: "Hello from Xurel",
HTML: "<p>Your first email.</p>",
Type: "transactional",
})
if err != nil {
panic(err)
}
fmt.Println(email.ID)
} cURL
curl https://api.xurel.co/v1/emails \
-H "Authorization: Bearer $XUREL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "hello@yourdomain.com",
"to": ["user@example.com"],
"subject": "Hello from Xurel",
"html": "<p>Your first email.</p>",
"type": "transactional"
}'6
Check delivery
The response returns { "id": "em_...", "status": "queued" }.
Track status via GET /v1/emails/{id}
or webhooks.
Response
{
"id": "em_a1b2c3d4",
"status": "queued"
}