API

Verstuur e-mail via REST of SMTP.

onesend biedt een REST-API en een kant-en-klaar SMTP-relay voor transactionele e-mail. EU-soeverein, AVG-conform, gehost in Duitsland. Stap over van Amazon SES, SendGrid, Mailgun of Postmark door alleen host en sleutel te wijzigen.

REST-basis

https://api.onesend.eu

Verzendeindpunt

POST /v1/email/send

REST-auth

Authorization: Bearer KEY_ID:KEY_SECRET

Dashboard

https://app.onesend.eu

SMTP-host

smtp.onesend.eu

SMTP-poort

587 (STARTTLS)

SMTP-gebruikersnaam

KEY_ID

SMTP-wachtwoord

KEY_SECRET

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:

DoelHostWaarde (voorbeeld)
DKIMonesend._domainkey.yourdomain.comv=DKIM1; k=rsa; p=MIIB...
SPFyourdomain.comv=spf1 include:onesend.eu ~all
DMARC_dmarc.yourdomain.comv=DMARC1; p=none; rua=mailto:dmarc@onesend.eu
Eigendom_onesend.yourdomain.comonesend-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:

  • queued geaccepteerd en wacht tot de worker het verstuurt.
  • sent overgedragen aan de ontvangende mailserver.
  • bounced harde bounce (permanent). Het adres wordt aan je onderdrukkingslijst toegevoegd.
  • soft_bounced tijdelijke fout, zoals een volle mailbox. Opnieuw geprobeerd, niet onderdrukt.
  • complained ontvanger heeft het als spam gemarkeerd. Toegevoegd aan je onderdrukkingslijst.
  • suppressed ontvanger stond al op je onderdrukkingslijst. Overgeslagen, niet gefactureerd.
  • invalid adres kwam niet door de validatie voor verzending (onjuiste syntaxis of dood domein).
  • blocked geblokkeerd door een beleidscontrole voor verzending.
  • failed interne 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