Aller au contenu

Sécurité et clés API

Permission Peut faire À utiliser pour
full_access Tous les endpoints Vos propres outils, la CLI, le serveur MCP, les scripts d’administration
sending_access Uniquement POST /emails et POST /emails/batch Les serveurs applicatifs qui ne font qu’envoyer des e-mails

Appeler n’importe quel autre endpoint avec une clé sending_access renvoie 401 restricted_api_key (« This API key is restricted to only send emails »).

Une clé sending_access peut en outre être liée à un domaine avec domain_id. Elle ne peut alors envoyer que depuis des adresses de ce domaine ; tout autre from renvoie 401 restricted_api_key. Utilisez-la pour donner à chaque produit ou client sa propre clé.

api-keys.ts
import { SpacePost } from "@spacepost/node";
const spacepost = new SpacePost();
// A key that can only send, and only from one domain.
const { data: key, error } = await spacepost.apiKeys.create({
name: "worker-prod",
permission: "sending_access",
domainId: "0192e1c4-0000-7000-8000-000000000001",
});
if (error) throw new Error(error.message);
console.log(key.token); // sp_live_..., shown only once
const { data: keys } = await spacepost.apiKeys.list();
console.log(keys?.data.map((k) => `${k.name} ${k.prefix}... ${k.permission}`));
await spacepost.apiKeys.remove(key.id);

name fait de 1 à 50 caractères. domain_id n’est autorisé qu’avec sending_access.

  • Les clés ressemblent à sp_live_ suivi de 32 caractères base62 aléatoires.
  • SpacePost ne stocke qu’un hachage SHA-256. La clé complète n’est affichée qu’une fois, à la création. Si vous la perdez, créez-en une nouvelle.
  • Le tableau de bord et GET /api-keys affichent le préfixe (sp_live_ plus 4 caractères), la permission, le domaine et last_used_at.
  • Supprimer une clé (DELETE /api-keys/{id}) la révoque immédiatement.
  • Ne mettez jamais de clés dans du code côté client, des applications mobiles ou des dépôts publics. L’API autorise les requêtes cross-origin uniquement pour que les playgrounds d’API fonctionnent ; envoyez les e-mails depuis votre serveur.
  • Utilisez une clé par service et par environnement, avec un nom clair (worker-prod, ci-staging).
  • Préférez sending_access, restreinte à un domaine.
  • Faites la rotation en créant une nouvelle clé, en la déployant, en vérifiant le last_used_at de l’ancienne, puis en supprimant l’ancienne.
  • Gardez les clés dans un gestionnaire de secrets ou des variables d’environnement, pas dans le code.
  • Révoquez immédiatement une clé qui fuite. Si elle a été commitée sur GitHub, considérez-la comme compromise.
  • SMTP utilise la même clé comme mot de passe. Voir Relais SMTP.

Tout le trafic utilise TLS. L’API est servie sur https://api.spacepost.dev, et le relais SMTP sur smtp.spacepost.dev:25976 exige STARTTLS avant l’authentification (le TLS implicite sur le port 465 n’est pas encore proposé).

Autres protections : les échecs d’authentification SMTP sont limités par IP ; les endpoints de webhook et les URL de pièces jointes doivent résoudre vers des adresses publiques (les réseaux privés sont refusés) ; les liens de désabonnement sont signés par contact.

SpacePost est exploité par Studio 404 d.o.o., une entreprise de l’UE établie en Slovénie, et conserve les données de ses clients dans l’UE :

  • Envoi : Amazon SES dans la région AWS eu-central-1 (Francfort, Allemagne). Tous les domaines envoient depuis cette région.
  • Application et base de données : l’API, le tableau de bord, les workers et la base de données Postgres tournent sur Railway, dans sa région UE (Amsterdam, Pays-Bas).
  • Isolation : chaque équipe envoie via son propre tenant SES, de sorte que les problèmes de réputation d’un client n’affectent pas les autres.
  • Le site web et la documentation sont des pages statiques servies par le réseau mondial de Cloudflare ; aucune donnée client n’y est stockée.

Certains fournisseurs (AWS, Stripe, Railway) sont des entreprises américaines. Ils figurent, avec ce qu’ils traitent et où, sur la liste des sous-traitants (disponible en anglais). Un avenant relatif au traitement des données (DPA) conforme au RGPD fait partie des conditions d’utilisation, régies par le droit slovène.

Écrivez à support@spacepost.dev avec les détails. Merci de ne pas effectuer de tests sur les données d’autres clients.