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"Ejecuta spacepost --help para ver todos los comandos y spacepost <command> --help para ver las opciones de un comando.
Autenticación
Sección titulada «Autenticación»spacepost login te pide tu clave de API, la comprueba contra la API y la guarda en ~/.config/spacepost/config.json (modo 0600, respeta XDG_CONFIG_HOME). También funciona con entrada por tubería: echo $KEY | spacepost login. En CI o en scripts, define en su lugar la variable de entorno:
export SPACEPOST_API_KEY="sp_live_YOUR_API_KEY"spacepost whoamiLa clave se toma de --api-key, luego de SPACEPOST_API_KEY y luego del inicio de sesión guardado. La URL base de la API se toma de --base-url, luego de SPACEPOST_BASE_URL, luego del inicio de sesión guardado y, por último, de https://api.spacepost.dev.
Comandos
Sección titulada «Comandos»| Comando | Qué hace |
|---|---|
login, logout, whoami |
Gestionan las credenciales. whoami muestra la clave enmascarada, la URL base y el número de dominios |
send |
Envía un correo |
emails list, emails get <id>, emails cancel <id> |
Inspeccionan correos y cancelan los programados |
domains add <name>, list, get <id|name>, verify <id|name>, doctor <id|name>, rm <id|name> |
Gestionan dominios por id o por nombre |
keys create, keys list, keys rm <id> |
Claves de API |
webhooks list, webhooks create, webhooks rm <id> |
Endpoints de webhooks |
tenants list, create, get <ref>, pause <ref>, unpause <ref>, rm <ref> |
Tenants del modo plataforma |
open |
Imprime (y abre) la URL del panel |
Opciones globales: --api-key, --base-url, --json, -y/--yes (omite las confirmaciones), -h/--help, -v/--version. Los colores respetan 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 -| Opción | Descripción |
|---|---|
--from |
Remitente en un dominio verificado (obligatorio) |
--to |
Destinatario (obligatorio; repite la opción para indicar varios) |
--subject |
Asunto (obligatorio) |
--text, --html, --html-file |
Cuerpo: texto plano (- lee de stdin), HTML en línea o un archivo HTML. Se requiere al menos uno; --html y --html-file no se pueden combinar |
--cc, --bcc, --reply-to |
Repetible |
--tag name=value |
Etiqueta repetible |
--schedule "in 1 hour" |
Hora ISO 8601 o lenguaje natural |
--attach <file> |
Archivo adjunto repetible |
--tenant <id|external-id> |
Envía en nombre de un tenant |
Si todo va bien, imprime ✓ Queued: <id> (con --json, la respuesta de la API { "id": "..." }).
Correos
Sección titulada «Correos»spacepost emails list [--limit 20] [--after <id>] [--before <id>]spacepost emails get <id>spacepost emails cancel <id> # scheduled emails onlyDominios
Sección titulada «Dominios»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 imprime los registros DNS que hay que crear. --tenant hace que el dominio pertenezca a un tenant (consulta Modo plataforma).
domains doctor
Sección titulada «domains doctor»spacepost domains doctor <id|name> consulta en el DNS público cada registro DNS esperado (CNAME, TXT, MX), lo compara con lo que espera SpacePost e imprime lo que falta o es incorrecto, con una solución para cada caso. Detecta el nombre de dominio añadido dos veces por un proveedor de DNS, varios registros SPF, una prioridad MX incorrecta y el proxy de 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. ...Usa --dns-server 1.1.1.1 para saltarte una caché obsoleta del resolvedor local. El código de salida es 1 cuando falta un registro obligatorio o es incorrecto, así que sirve como comprobación en CI.
Claves de API y webhooks
Sección titulada «Claves de API y 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 imprime el token una sola vez. webhooks create imprime el signing_secret. --event es repetible (no existe una forma separada por comas), y --domain requiere --permission sending_access.
Tenants (modo plataforma)
Sección titulada «Tenants (modo plataforma)»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 domainsConsulta Modo plataforma (tenants) para ver qué aíslan los tenants y cómo encajan los dominios y los webhooks.
Scripting
Sección titulada «Scripting»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_eventLos comandos destructivos (domains rm, keys rm, webhooks rm, tenants rm) piden confirmación; en scripts y con --json pasa --yes.
Códigos de salida y errores
Sección titulada «Códigos de salida y errores»| Código | Significado |
|---|---|
0 |
Éxito |
1 |
Error de la API o de ejecución (también domains doctor cuando falta un registro obligatorio) |
2 |
Error de uso: comando u opción desconocidos, falta una opción obligatoria |
Los errores van a stderr con una pista cuando la hay. Con --json se imprimen como JSON en stderr: { "error": { "name", "message", "statusCode", "hint" } }.
Variables de entorno
Sección titulada «Variables de entorno»| Variable | Finalidad |
|---|---|
SPACEPOST_API_KEY |
Clave de API (tiene prioridad sobre el inicio de sesión guardado) |
SPACEPOST_BASE_URL |
URL base alternativa de la API |
SPACEPOST_APP_URL |
URL del panel que imprime spacepost open |
XDG_CONFIG_HOME |
Dónde se guarda el inicio de sesión ($XDG_CONFIG_HOME/spacepost/config.json) |
NO_COLOR |
Desactiva los colores |