Developer docs
A clean REST API with an OpenAPI spec and official SDKs. Grab an API key in the console (Developers), then send your first email.
Quickstart (cURL)
POST /v1/send
curl -X POST https://api.aryasend.com/v1/send \
-H "Authorization: Bearer $ARYASEND_KEY" \
-H "Content-Type: application/json" \
-d '{
"from_email": "hello@yourdomain.com",
"to": "someone@example.com",
"subject": "Hello from AryaSend",
"text": "It works."
}'Official SDKs
Six languages, all thin and dependency-light.
Node
npm install @aryasend/sdkPython
pip install aryasendRuby
gem install aryasendPHP
composer require aryasend/sdkGo
go get github.com/rackset/aryasend-goElixir
{:aryasend, "~> 1.0"}Node.js
npm install @aryasend/sdk
import { AryaSend } from "@aryasend/sdk";
const arya = new AryaSend(process.env.ARYASEND_API_KEY);
await arya.send({ from: "hi@you.com", to: "a@b.com", subject: "Hi", text: "Yo" });Python
pip install aryasend from aryasend import AryaSend arya = AryaSend(os.environ["ARYASEND_API_KEY"]) arya.send(from_email="hi@you.com", to="a@b.com", subject="Hi", text="Yo")
Core endpoints
| POST | /v1/send | Send a message |
| GET | /v1/messages/ | List messages |
| GET | /v1/messages/{id}/ | Message status + events |
| POST | /v1/contacts | Upsert a contact |
| POST | /v1/contacts/batch | Bulk upsert (≤2000) |
| POST | /v1/events | Track an event (automations + revenue) |
| POST | /v1/domains/ | Add a sending domain (returns DNS) |
| POST | /v1/suppressions/ | Suppress an address |
Full reference: OpenAPI spec →
Verify webhooks
X-AryaSend-Signature (HMAC-SHA256)
// Verify the HMAC-SHA256 signature on every webhook (Node)
import crypto from "crypto";
const sig = req.headers["x-aryasend-signature"]; // "sha256=…"
const expected = "sha256=" + crypto.createHmac("sha256", WEBHOOK_SECRET)
.update(rawBody).digest("hex");
if (sig !== expected) return res.status(401).end();Guides
Ready to build?
Get your API key