Tout ce qui sépare votre application de la boîte de réception.
Envoi, configuration des domaines, événements, webhooks et les garde-fous autour, opérés pour vous.
Ce qui arrive à un e-mail.
POST /v1/emails avec une clé côté serveur.202.Un envoi qui résiste aux nouvelles tentatives.
Vous recevez un identifiant d'e-mail seulement une fois l'e-mail stocké. S'il ne peut pas l'être, vous recevez un 503 à réessayer, jamais un identifiant inventé.
- E-mails individuels, ou lots jusqu'à 100 par requête
- Planification de 1 minute à 30 jours à l'avance, avec annulation et replanification
- Jusqu'à 50 destinataires par e-mail
- Pièces jointes jusqu'à 15 Mo chacune et 40 Mo par message sur les forfaits payants
Idempotency-Keyconservée au moins 24 heures
curl -X POST https://api.outstamp.dev/v1/emails \
-H "Authorization: Bearer $OUTSTAMP_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: welcome-42" \
-d '{
"from": "Acme <[email protected]>",
"to": "[email protected]",
"subject": "Bienvenue chez Acme",
"html": "<p>Votre compte est prêt.</p>"
}'const response = await fetch("https://api.outstamp.dev/v1/emails", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.OUTSTAMP_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": `welcome-${user.id}`
},
body: JSON.stringify({
from: "Acme <[email protected]>",
to: "[email protected]",
subject: "Bienvenue chez Acme",
html: "<p>Votre compte est prêt.</p>"
})
});
const email = await response.json(); // 202, { id, status: queued }import os, requests
response = requests.post(
"https://api.outstamp.dev/v1/emails",
headers={
"Authorization": f"Bearer {os.environ['OUTSTAMP_API_KEY']}",
"Idempotency-Key": f"welcome-{user.id}",
},
json={
"from": "Acme <[email protected]>",
"to": "[email protected]",
"subject": "Bienvenue chez Acme",
"html": "<p>Votre compte est prêt.</p>",
},
)
email = response.json() # 202, { id, status: queued }Des domaines configurés avec vous.
Nous affichons les enregistrements exacts, les vérifions pour vous et vous disons ce qui manque.
- Trois enregistrements DKIM sont requis ; MAIL FROM et DMARC sont recommandés
- Un domaine avec DKIM seul peut déjà envoyer, marqué comme partiellement vérifié
- Vérifications automatiques pendant 72 heures, puis contrôles réguliers
- Notes pour Cloudflare, Route 53, Namecheap et GoDaddy
| CNAME | DKIM | Vérifié |
| CNAME | DKIM | Vérifié |
| CNAME | DKIM | Vérifié |
| MX | MAIL FROM | Vérifié |
| TXT | SPF | Vérifié |
| TXT | DMARC | Recommandé |
Des événements sur lesquels bâtir.
Soumission, distribution et plaintes sont des faits distincts : un événement tardif n'écrase jamais un plus récent.
- Signature HMAC-SHA256 sur l'identifiant de livraison, l'horodatage et le corps brut
- 10 tentatives de livraison sur 48 heures, et rejeu pendant 30 jours
- Au moins une fois et sans ordre garanti, par conception : dédupliquez sur l'identifiant d'événement
- Quand vous renouvelez le secret, les livraisons portent les deux signatures pendant 24 heures
import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(request, rawBody, secret) {
const id = request.headers["outstamp-id"];
const timestamp = request.headers["outstamp-timestamp"];
const header = request.headers["outstamp-signature"] ?? "";
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = createHmac("sha256", secret)
.update(`${id}.${timestamp}.${rawBody}`)
.digest("hex");
return header.split(",")
.map((part) => part.trim().replace(/^v1=/, ""))
.some((candidate) => candidate.length === expected.length &&
timingSafeEqual(Buffer.from(candidate, "hex"), Buffer.from(expected, "hex")));
}Types d'événements auxquels vous pouvez vous abonner
- email.accepted
- email.scheduled
- email.queued
- email.sent
- email.delivered
- email.delivery_delayed
- email.bounced
- email.complained
- email.rejected
- email.failed
- email.suppressed
- email.opened
- email.clicked
- email.canceled
- email.submission_unknown
- domain.created
- domain.status_changed
- domain.deleted
- suppression.created
- suppression.deleted
- project.quota_warning
- project.reputation_warning
- project.sending_paused
- project.sending_resumed
Test et production, bien séparés.
Des clés différentes, des préfixes différents, et des e-mails de test qui n'atteignent jamais Internet.
- Des clés
os_test_etos_live_que l'on distingue au premier coup d'œil - Des adresses du simulateur pour la distribution, le rebond, le retard, la plainte, la suppression, le rejet, l'échec et la réponse perdue
- Les envois de test produisent les mêmes événements et webhooks qu'en production, et ne sont jamais facturés
- Avant que votre domaine soit prêt, de vrais e-mails aux membres vérifiés de votre espace de travail, 10 par jour
| Envoyer à | Vous recevez |
|---|---|
| delivered@simulator.outstamp.dev | email.delivered |
| bounce@simulator.outstamp.dev | email.bounced |
| transient@simulator.outstamp.dev | email.delivery_delayed |
| complaint@simulator.outstamp.dev | email.complained |
| suppressed@simulator.outstamp.dev | email.suppressed |
Des garde-fous, activés par défaut.
Les contrôles qu'un opérateur d'e-mail rigoureux ferait, appliqués à chaque projet.
- Les rebonds définitifs et les plaintes entraînent la suppression automatique de l'adresse
- Taux de rebond : avertissement à 3 %, action à 5 %. Taux de plainte : avertissement à 0,05 %, action à 0,1 %
- Les limites d'envoi augmentent avec votre historique de distribution
- Les adresses supprimées sont vérifiées avant chaque envoi
- Envoi actif
App Acme
Taux de rebond de 0,4 % sur 24 heures
- Envoi actif
Acme préprod
Taux de rebond de 0,1 % sur 24 heures
- En pause
Projet annexe
Taux de rebond de 5,2 % sur 24 heures
Un tableau de bord pour toute l'équipe.
Ce dont les développeurs, le support et la comptabilité ont besoin, sans partager un même compte.
Journal des e-mails
Retrouvez n'importe quel e-mail avec sa chronologie complète, ses destinataires et son contenu, tant que la conservation le permet.
Domaines et clés
Le statut DNS de chaque enregistrement, et des clés limitées par permission et par domaine.
Webhooks
Chaque tentative de livraison avec sa réponse, un bouton de test et le rejeu.
Suppressions
Pourquoi une adresse est bloquée, et comment la débloquer avec confirmation.
Utilisation
E-mails et destinataires par jour, comparés à votre forfait et à vos limites.
Équipe et sécurité
Rôles propriétaire, administrateur, développeur, analyste et facturation, avec clés d'accès et applications d'authentification.
Vos données, conservées peu de temps.
Une conservation plus courte est un réglage, pas une option payante.
| Données | Conservées | Réglable sur |
|---|---|---|
| Métadonnées de distribution et événements | 30 jours | Fixe |
| Adresses des destinataires et objet | 30 jours | 0, 1, 7 ou 30 jours |
| Corps HTML et texte | 7 jours | 0, 1, 7 ou 30 jours |
| Pièces jointes | Jusqu'à la distribution, plus 24 h au maximum | Supprimées juste après la soumission |
| Corps des requêtes API | 7 jours | Désactivé |
| Événements et tentatives de webhook | 30 jours | Fixe |
- Aucun entraînement de modèles sur vos e-mails, et aucune publicité
- L'accès du support au contenu est audité, et vous pouvez le désactiver
- Désactiver le stockage du contenu ne coûte rien
Pas encore disponible.
Pour que vous puissiez décider avant de vous inscrire, pas après.
Modèles
Envoyez le HTML et le texte que vous générez. Les modèles stockés ne sont pas encore disponibles.
Relais SMTP
Outstamp est une API HTTP. Il n'y a pas encore d'endpoint SMTP.
SDK officiels
Du REST standard avec un schéma OpenAPI : n'importe quel client HTTP fonctionne.
Envoyez votre premier e-mail en mode test.
Sans carte et sans DNS. Ajoutez votre domaine quand vous êtes prêt.
- Pas de carte pour tester
- Prix en euros, hors TVA