CLI
npm install -g spacepost # or run without installing: npx spacepost <command>, bunx spacepost <command>spacepost loginspacepost send --from "Acme <hi@acme.com>" --to you@example.com --subject Hello --text "It works"Lancez spacepost --help pour toutes les commandes et spacepost <command> --help pour les options d’une commande.
Authentification
Section intitulée « Authentification »spacepost login demande votre clé API, la vérifie auprès de l’API et la stocke dans ~/.config/spacepost/config.json (mode 0600, respecte XDG_CONFIG_HOME). L’entrée par tube fonctionne aussi : echo $KEY | spacepost login. En CI ou dans des scripts, définissez plutôt la variable d’environnement :
export SPACEPOST_API_KEY="sp_live_YOUR_API_KEY"spacepost whoamiLa clé provient de --api-key, puis de SPACEPOST_API_KEY, puis de la connexion stockée. L’URL de base de l’API provient de --base-url, puis de SPACEPOST_BASE_URL, puis de la connexion stockée, puis de https://api.spacepost.dev.
Commandes
Section intitulée « Commandes »| Commande | Ce qu’elle fait |
|---|---|
login, logout, whoami |
Gérer les identifiants. whoami affiche la clé masquée, l’URL de base et le nombre de domaines |
send |
Envoyer un e-mail |
emails list, emails get <id>, emails cancel <id> |
Inspecter les e-mails, annuler les e-mails planifiés |
domains add <name>, list, get <id|name>, verify <id|name>, doctor <id|name>, rm <id|name> |
Gérer les domaines par id ou par nom |
keys create, keys list, keys rm <id> |
Clés API |
webhooks list, webhooks create, webhooks rm <id> |
Endpoints de webhook |
tenants list, create, get <ref>, pause <ref>, unpause <ref>, rm <ref> |
Tenants du mode plateforme |
open |
Afficher (et ouvrir) l’URL du tableau de bord |
Global flags: --api-key, --base-url, --json, -y/--yes (skip confirmations), -h/--help, -v/--version. Colors honor NO_COLOR.
spacepost send \ --from "Acme <hello@acme.com>" \ --to user@example.com \ --subject "Hello from the CLI" \ --html "<p>It works.</p>"
spacepost send --from hello@acme.com --to a@example.com --to b@example.com --subject "Newsletter" --html-file ./email.htmlspacepost send --from hello@acme.com --to user@example.com --subject "Reminder" --text "Call at 3" --schedule "in 1 hour"echo "body from stdin" | spacepost send --from hello@acme.com --to user@example.com --subject Hi --text -| Option | Description |
|---|---|
--from |
Expéditeur sur un domaine vérifié (obligatoire) |
--to |
Destinataire (obligatoire ; répétez l’option pour en indiquer plusieurs) |
--subject |
Objet (obligatoire) |
--text, --html, --html-file |
Corps : texte brut (- lit stdin), HTML en ligne, ou un fichier HTML. Au moins un est requis ; --html et --html-file ne peuvent pas être combinés |
--cc, --bcc, --reply-to |
Répétable |
--tag name=value |
Tag répétable |
--schedule "in 1 hour" |
Heure ISO 8601 ou langage naturel |
--attach <file> |
Pièce jointe répétable |
--tenant <id|external-id> |
Envoyer au nom d’un tenant |
En cas de succès, elle affiche ✓ Queued: <id> (avec --json, la réponse de l’API { "id": "..." }).
spacepost emails list [--limit 20] [--after <id>] [--before <id>]spacepost emails get <id>spacepost emails cancel <id> # scheduled emails onlyDomaines
Section intitulée « Domaines »spacepost domains add acme.com [--region eu-central-1] [--tenant cust_123]spacepost domains list [--limit 20]spacepost domains get acme.com # id or name, includes DNS recordsspacepost domains verify acme.comspacepost domains rm acme.com [--yes]domains add affiche les enregistrements DNS à créer. --tenant rend le domaine propriété d’un tenant (voir Mode plateforme).
domains doctor
Section intitulée « domains doctor »spacepost domains doctor <id|name> recherche chaque enregistrement DNS attendu (CNAME, TXT, MX) dans le DNS public, le compare à ce que SpacePost attend et affiche ce qui manque ou est incorrect, avec une solution pour chacun. Il détecte le nom de domaine ajouté deux fois par un fournisseur DNS, plusieurs enregistrements SPF, une mauvaise priorité MX et le proxy Cloudflare.
$ spacepost domains doctor acme.comacme.com API status: pending
RECORD TYPE HOST RESULT✓ DKIM CNAME abc._domainkey.acme.com matches✗ SPF MX send.acme.com not found✗ SPF TXT send.acme.com found v=spf1 include:_spf.google.com ~all! DMARC TXT _dmarc.acme.com not found (recommended)
How to fix ✗ MX send.acme.com Add a MX record: name "send", value "feedback-smtp.eu-central-1.amazonses.com", priority 10. ✗ TXT send.acme.com Your SPF record lacks the SpacePost include. ...Utilisez --dns-server 1.1.1.1 pour contourner un cache de résolveur local périmé. Le code de sortie est 1 lorsqu’un enregistrement requis est manquant ou incorrect, ce qui permet de l’utiliser comme contrôle en CI.
Clés API et webhooks
Section intitulée « Clés API et webhooks »spacepost keys create --name worker-prod --permission sending_access --domain <domain-id>spacepost keys listspacepost keys rm <id> [--yes]
spacepost webhooks listspacepost webhooks create --endpoint https://acme.com/webhooks/spacepost --event email.delivered --event email.bouncedspacepost webhooks rm <id> [--yes]keys create affiche le jeton une seule fois. webhooks create affiche le signing_secret. --event est répétable (il n’existe pas de forme séparée par des virgules), et --domain exige --permission sending_access.
Tenants (mode plateforme)
Section intitulée « Tenants (mode plateforme) »spacepost tenants create --name "Acme Inc" --external-id cust_123 --daily-limit 500spacepost tenants list [--limit 20]spacepost tenants get cust_123 # <ref> is our id or your external idspacepost tenants pause cust_123 --reason "Investigating spam reports"spacepost tenants unpause cust_123 # 403 for reputation pauses unless your team is trustedspacepost tenants rm cust_123 [--yes] # 422 while the tenant still has domainsVoir Mode plateforme (tenants) pour ce que les tenants isolent et comment s’articulent domaines et webhooks.
spacepost emails list --json | jq -r '.data[] | select(.last_event=="bounced") | .to[]'id=$(spacepost send --from hello@acme.com --to delivered@test.spacepost.dev --subject Test --text hi --json | jq -r .id)spacepost emails get "$id" --json | jq .last_eventLes commandes destructrices (domains rm, keys rm, webhooks rm, tenants rm) demandent une confirmation ; dans les scripts et avec --json, passez --yes.
Codes de sortie et erreurs
Section intitulée « Codes de sortie et erreurs »| Code | Signification |
|---|---|
0 |
Succès |
1 |
Erreur d’API ou d’exécution (aussi domains doctor lorsqu’un enregistrement requis est manquant) |
2 |
Erreur d’utilisation : commande ou option inconnue, option obligatoire manquante |
Les erreurs vont sur stderr avec une indication lorsqu’il y en a une. Avec --json, elles sont affichées en JSON sur stderr : { "error": { "name", "message", "statusCode", "hint" } }.
Variables d’environnement
Section intitulée « Variables d’environnement »| Variable | Rôle |
|---|---|
SPACEPOST_API_KEY |
Clé API (remplace la connexion stockée) |
SPACEPOST_BASE_URL |
URL de base alternative de l’API |
SPACEPOST_APP_URL |
URL du tableau de bord affichée par spacepost open |
XDG_CONFIG_HOME |
Emplacement de stockage de la connexion ($XDG_CONFIG_HOME/spacepost/config.json) |
NO_COLOR |
Désactiver les couleurs |