Sécurité et clés API
Types de clés
Section intitulée « Types de clés »| 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 »).
Clés restreintes à un domaine
Section intitulée « Clés restreintes à un domaine »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é.
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);curl -X POST https://api.spacepost.dev/api-keys \ -H "Authorization: Bearer $SPACEPOST_API_KEY" -H "Content-Type: application/json" \ -d '{ "name": "worker-prod", "permission": "sending_access", "domain_id": "0192e1c4-0000-7000-8000-000000000001" }'{ "id": "0192e1c4-0000-7000-8000-0000000000e1", "token": "sp_live_Ab12Cd34Ef56Gh78Ij90Kl12Mn34Op56" }name fait de 1 à 50 caractères. domain_id n’est autorisé qu’avec sending_access.
Comment les clés sont stockées
Section intitulée « Comment les clés sont stockées »- 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-keysaffichent le préfixe (sp_live_plus 4 caractères), la permission, le domaine etlast_used_at. - Supprimer une clé (
DELETE /api-keys/{id}) la révoque immédiatement.
Bonnes habitudes
Section intitulée « Bonnes habitudes »- 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_atde 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.
Transport
Section intitulée « Transport »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.
Où sont stockées vos données
Section intitulée « Où sont stockées vos données »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.
Signaler une vulnérabilité
Section intitulée « Signaler une vulnérabilité »Écrivez à support@spacepost.dev avec les détails. Merci de ne pas effectuer de tests sur les données d’autres clients.