# Inicio rápido

De no tener cuenta a un correo entregado: crea una clave y haz tu primer envío.

### Crea una cuenta

Si todavía no tienes una organización, [crea una cuenta](https://app.e-comms.dev) — es
gratis empezar, y todo lo que creas dentro (miembros, plantillas, claves de API) vive dentro
de esa organización.

### Crea una clave de API

Desde **Settings → Claves de API**, crea una clave con el permiso *Enviar mensajes*. El botón
**Crear clave** te muestra el token una sola vez — cópialo en ese momento. La
[guía de autenticación](/docs/get-started/authentication) tiene el detalle completo, con
capturas de pantalla del panel.

### Envía tu primer correo

La superficie pública de la API — la única que un integrador externo puede llamar — vive bajo
`/v1` y lee la organización desde la clave misma, no desde la URL. `from` tiene que nombrar un
remitente ya registrado en tu organización — la dirección con la que te registraste ya es uno,
verificado desde el momento en que se creó tu cuenta, así que funciona aquí sin nada más que
configurar:

```bash
curl -X POST https://api.e-comms.dev/v1/email \
  -H "Authorization: Bearer ek_live_<tu-clave>" \
  -H "Content-Type: application/json" \
  -d '{
    "idempotencyKey": "inicio-rapido-2026-09-19",
    "to": ["tu@example.com"],
    "from": "tu@example.com",
    "content": {
      "type": "raw",
      "subject": "Mi primer correo",
      "html": "<p>¡Funciona!</p>",
      "text": "¡Funciona!"
    }
  }'
```

```js
const response = await fetch("https://api.e-comms.dev/v1/email", {
  method: "POST",
  headers: {
    Authorization: "Bearer ek_live_<tu-clave>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    idempotencyKey: "inicio-rapido-2026-09-19",
    to: ["tu@example.com"],
    from: "tu@example.com",
    content: {
      type: "raw",
      subject: "Mi primer correo",
      html: "<p>¡Funciona!</p>",
      text: "¡Funciona!",
    },
  }),
})

const body = await response.json()
```

```python
import requests

response = requests.post(
    "https://api.e-comms.dev/v1/email",
    headers={"Authorization": "Bearer ek_live_<tu-clave>"},
    json={
        "idempotencyKey": "inicio-rapido-2026-09-19",
        "to": ["tu@example.com"],
        "from": "tu@example.com",
        "content": {
            "type": "raw",
            "subject": "Mi primer correo",
            "html": "<p>¡Funciona!</p>",
            "text": "¡Funciona!",
        },
    },
)

body = response.json()
```

Enviar desde otra dirección — tu propio dominio, una vez verificado — es cuestión de registrar
un nuevo remitente en **Settings → Sending**, sin ningún cambio de código aquí.

### Confirma que se envió

Una respuesta `202` significa que el correo fue admitido — no que ya llegó. Cada destinatario
aparece con su propio estado en `results`:

```json
{
  "results": [
    {
      "address": "tu@example.com",
      "messageId": "01a0ba31-3fe4-7cc4-a1c6-64bdaaa5d99c",
      "status": "claimed"
    }
  ]
}
```

`claimed` es el único estado posible en esta respuesta — el proveedor todavía no fue llamado
cuando se arma. Guarda el `messageId`: es lo que [consultas](/docs/messaging/email/retrieve)
para saber si el envío realmente llegó, y lo que correlaciona un evento de
[webhook](/docs/reference/webhooks) con este mismo correo. Un error trae un `code` de un
conjunto cerrado — revisa la [referencia de errores](/docs/reference/errors) para ver qué
código responde a qué situación.
