Authenticatie
Beide methoden gebruiken dezelfde inloggegevens: een API-sleutel met een key ID (openbaar) en een key secret. Maak sleutels aan in het dashboard op app.onesend.eu.
REST-authenticatie gebruikt een Bearer-token dat bestaat uit de key ID en het key secret, gescheiden door een dubbele punt:
Authorization: Bearer YOUR_KEY_ID:YOUR_KEY_SECRET
Bij SMTP is de key ID de gebruikersnaam en het key secret het wachtwoord. Er zijn geen aparte SMTP-inloggegevens om aan te maken. De API-sleutel is de credential voor zowel REST als SMTP.
Verifieer je verzenddomein
Je kunt alleen versturen vanaf een adres op een domein dat je hebt toegevoegd en geverifieerd. Dit is ook tijdens de proefperiode vereist, om de reputatie van het gedeelde IP te beschermen. Verificatie doe je eenmalig, in het dashboard.
Wanneer je een domein toevoegt, genereert onesend een DKIM-sleutel en krijg je vier TXT-records om bij je DNS-provider te publiceren:
| Doel | Host | Waarde (voorbeeld) |
|---|---|---|
| DKIM | onesend._domainkey.yourdomain.com | v=DKIM1; k=rsa; p=MIIB... |
| SPF | yourdomain.com | v=spf1 include:onesend.eu ~all |
| DMARC | _dmarc.yourdomain.com | v=DMARC1; p=none; rua=mailto:dmarc@onesend.eu |
| Eigendom | _onesend.yourdomain.com | onesend-verify=YOUR_TOKEN |
DKIM bepaalt de verificatie. SPF en DMARC worden sterk aanbevolen, maar het domein wordt alleen op basis van DKIM geverifieerd. De DKIM-selector is onesend. Als je al een SPF-record hebt, voeg dan include:onesend.eu toe aan je bestaande record in plaats van een tweede aan te maken, want een domein mag maar één SPF-record hebben. DNS-wijzigingen hebben enkele minuten tot enkele uren nodig om door te voeren.
Versturen met de REST-API
POST https://api.onesend.eu/v1/email/send
Authorization: Bearer YOUR_KEY_ID:YOUR_KEY_SECRET
Content-Type: application/json
Request-body:
{
"from": "hello@yourdomain.com",
"to": ["recipient@example.com"],
"cc": ["optional@example.com"],
"bcc": ["optional@example.com"],
"reply_to": "reply@yourdomain.com",
"subject": "Hello from onesend",
"html": "<h1>It works</h1>",
"text": "It works",
"headers": { "X-Custom": "value" },
"tags": { "campaign": "welcome" }
}
Verplichte velden zijn from, to, subject en ten minste een van html of text. Het from-adres moet op een geverifieerd domein staan. De velden cc, bcc, reply_to, text, headers en tags zijn optioneel.
Bij succes is het antwoord 202 Accepted en wordt het bericht in de wachtrij voor bezorging gezet:
{ "message_id": "...", "status": "queued" }
Als de ontvanger op je onderdrukkingslijst staat, geeft de aanvraag nog steeds 200 (geen fout), wordt de verzending overgeslagen en niet gefactureerd:
{ "message_id": "...", "status": "suppressed", "reason": "Recipient on suppression list (bounce)" }
Versturen via SMTP
Richt je bestaande SMTP-mailer op onesend. Geen codewijzigingen buiten host en inloggegevens.
Host: smtp.onesend.eu
Port: 587
Security: STARTTLS (required)
Username: YOUR_KEY_ID
Password: YOUR_KEY_SECRET
Dezelfde regels als bij REST gelden: het From-adres moet op een geverifieerd domein staan, en onderdrukte ontvangers worden overgeslagen en niet gefactureerd.
Codevoorbeelden
curl (REST)
curl -X POST https://api.onesend.eu/v1/email/send \
-H "Authorization: Bearer $ONESEND_KEY_ID:$ONESEND_KEY_SECRET" \
-H "Content-Type: application/json" \
-d '{
"from": "hello@yourdomain.com",
"to": ["recipient@example.com"],
"subject": "Hello from onesend",
"html": "<h1>It works</h1>",
"text": "It works"
}'
Node.js (REST, fetch)
const res = await fetch("https://api.onesend.eu/v1/email/send", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.ONESEND_KEY_ID}:${process.env.ONESEND_KEY_SECRET}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "hello@yourdomain.com",
to: ["recipient@example.com"],
subject: "Hello from onesend",
html: "<h1>It works</h1>",
}),
});
const data = await res.json();
console.log(res.status, data);
Node.js (SMTP, nodemailer)
import nodemailer from "nodemailer";
const transport = nodemailer.createTransport({
host: "smtp.onesend.eu",
port: 587,
requireTLS: true,
auth: {
user: process.env.ONESEND_KEY_ID,
pass: process.env.ONESEND_KEY_SECRET,
},
});
await transport.sendMail({
from: "hello@yourdomain.com",
to: "recipient@example.com",
subject: "Hello from onesend",
html: "<h1>It works</h1>",
});
Python (REST, requests)
import os, requests
r = requests.post(
"https://api.onesend.eu/v1/email/send",
headers={
"Authorization": f"Bearer {os.environ['ONESEND_KEY_ID']}:{os.environ['ONESEND_KEY_SECRET']}"
},
json={
"from": "hello@yourdomain.com",
"to": ["recipient@example.com"],
"subject": "Hello from onesend",
"html": "<h1>It works</h1>",
},
)
print(r.status_code, r.json())
Python (SMTP, smtplib)
import os, smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg["From"] = "hello@yourdomain.com"
msg["To"] = "recipient@example.com"
msg["Subject"] = "Hello from onesend"
msg.set_content("It works")
msg.add_alternative("<h1>It works</h1>", subtype="html")
with smtplib.SMTP("smtp.onesend.eu", 587) as s:
s.starttls()
s.login(os.environ["ONESEND_KEY_ID"], os.environ["ONESEND_KEY_SECRET"])
s.send_message(msg)
PHP (REST, curl)
$ch = curl_init("https://api.onesend.eu/v1/email/send");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer {$keyId}:{$keySecret}",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode([
"from" => "hello@yourdomain.com",
"to" => ["recipient@example.com"],
"subject" => "Hello from onesend",
"html" => "<h1>It works</h1>",
]),
]);
$response = curl_exec($ch);
Elke andere taal, framework of tool verstuurt via de SMTP-instellingen hierboven, waaronder Go net/smtp, Ruby, Java, Laravel, Rails, Django, WordPress en n8n.
Migreren van een andere provider
De snelste migratie is SMTP: wijzig de host en de inloggegevens en laat de rest ongewijzigd. Voeg in alle gevallen eerst je verzenddomein toe in onesend en verifieer het, want verzenden vereist een geverifieerd domein.
Amazon SES
Voor SMTP wijzig je de host van email-smtp.REGION.amazonaws.com naar smtp.onesend.eu op poort 587, en gebruik je je onesend key ID en key secret in plaats van de SES SMTP-inloggegevens. Dit is kant-en-klaar. Voor REST gebruikt SES met SigV4 ondertekende aanvragen, dus de REST-API van onesend heeft een andere vorm; stap over naar POST /v1/email/send of gebruik SMTP voor een migratie zonder codewijzigingen. Je kunt je SES-onderdrukkingslijst exporteren en de CSV in het dashboard importeren.
SendGrid
Voor SMTP gebruikt SendGrid smtp.sendgrid.net met gebruikersnaam apikey. onesend gebruikt smtp.onesend.eu, met de gebruikersnaam op je key ID en het wachtwoord op je key secret. Voor REST gebruikt SendGrids /v3/mail/send een andere JSON-structuur; gebruik in plaats daarvan POST /v1/email/send van onesend.
Mailgun
Voor SMTP wijzig je de host van smtp.mailgun.org naar smtp.onesend.eu en verwissel je de inloggegevens. Voor REST gebruikt Mailgun form-gecodeerde aanvragen naar /v3/DOMAIN/messages; gebruik in plaats daarvan de JSON POST /v1/email/send van onesend.
Postmark
Voor SMTP wijzig je de host van smtp.postmarkapp.com naar smtp.onesend.eu en verwissel je de inloggegevens. Voor REST gebruikt Postmark een X-Postmark-Server-Token-header en een andere body; gebruik in plaats daarvan POST /v1/email/send van onesend.
Statuswaarden voor bezorging
Een bericht doorloopt deze statussen:
queuedgeaccepteerd en wacht tot de worker het verstuurt.sentovergedragen aan de ontvangende mailserver.bouncedharde bounce (permanent). Het adres wordt aan je onderdrukkingslijst toegevoegd.soft_bouncedtijdelijke fout, zoals een volle mailbox. Opnieuw geprobeerd, niet onderdrukt.complainedontvanger heeft het als spam gemarkeerd. Toegevoegd aan je onderdrukkingslijst.suppressedontvanger stond al op je onderdrukkingslijst. Overgeslagen, niet gefactureerd.invalidadres kwam niet door de validatie voor verzending (onjuiste syntaxis of dood domein).blockedgeblokkeerd door een beleidscontrole voor verzending.failedinterne verzendfout.
Onderdrukkingslijst
onesend houdt per account een onderdrukkingslijst bij. Adressen komen er automatisch op door harde bounces en klachten, door de validatie voor verzending, of je voegt ze zelf toe. onesend legt zowel de reden (waarom onderdrukt) als de bron (hoe het erop kwam) vast, plus de echte diagnosecode. Je beheert de lijst in het dashboard en kunt hem als CSV importeren of exporteren.
Abonnementen en facturatie
Voor verzenden heb je een geverifieerd domein en een abonnement nodig. De proef dekt 100 e-mails zonder tijdslimiet. De betaalde abonnementen zijn Starter en Growth, maandelijks gefactureerd via Mollie (een EU-betaalprovider), met btw correct toegepast voor klanten binnen en buiten de EU, inclusief verlegging voor geverifieerde EU-btw-nummers van bedrijven. Verbruik boven de limiet wordt gefactureerd, niet geblokkeerd, en onderdrukte verzendingen worden nooit meegeteld. Voor actuele prijzen en inbegrepen volumes, zie de prijspagina.
Soevereiniteit en compliance
- Exploiterend bedrijf: WOCOO Management and Consulting GmbH, Wenen, Oostenrijk.
- Infrastructuur: Hetzner, Falkenstein, Duitsland. Geen Amerikaanse subverwerkers in het verzendpad.
- Gebouwd voor de AVG: ontvangergegevens staan in een identiteitskluis, gescheiden van de verzendlogs, en elk account stelt zijn eigen bewaarbeleid in. Gegevens van de onderdrukkingslijst en geaggregeerde statistieken blijven bewaard.
- Bezorgbaarheid: SPF, DKIM met 2048-bits sleutels per domein en DMARC per verzenddomein. Toegewijde verzend-IP's op aanvraag.
Bouw je een integratie met een AI-assistent? Een platte-tekstkopie van deze referentie staat op /llms-full.txt