> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pulse-send.jiordiviera.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Send your first email with a test key, then go live.

## 1. Get a test key

Sign up at [pulse-send.jiordiviera.me](https://pulse-send.jiordiviera.me/register), open **API keys** and create a **test** key. It starts with `ps_test_`.

<Warning>
  The full key is shown once. Store it in your environment, for example
  `PULSESEND_API_KEY`, and never ship it in a browser or mobile app.
</Warning>

## 2. Send an email

Test keys skip domain verification and never deliver, so you can call the API from any sender address.

<CodeGroup>
  ```bash cURL theme={"dark"}
  curl https://pulse-send.jiordiviera.me/api/v1/emails \
    -H "Authorization: Bearer $PULSESEND_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "from": "Acme <hello@acme.com>",
      "to": "jane@example.com",
      "subject": "Your verification code",
      "html": "<p>Your code is <strong>482913</strong></p>"
    }'
  ```

  ```js Node.js theme={"dark"}
  const response = await fetch(
      'https://pulse-send.jiordiviera.me/api/v1/emails',
      {
          method: 'POST',
          headers: {
              Authorization: `Bearer ${process.env.PULSESEND_API_KEY}`,
              'Content-Type': 'application/json',
          },
          body: JSON.stringify({
              from: 'Acme <hello@acme.com>',
              to: 'jane@example.com',
              subject: 'Your verification code',
              html: '<p>Your code is <strong>482913</strong></p>',
          }),
      },
  );

  const email = await response.json();
  console.log(email.id, email.status); // em_..., "queued"
  ```

  ```php Laravel theme={"dark"}
  use Illuminate\Support\Facades\Http;

  $email = Http::withToken(config('services.pulsesend.key'))
      ->post('https://pulse-send.jiordiviera.me/api/v1/emails', [
          'from' => 'Acme <hello@acme.com>',
          'to' => 'jane@example.com',
          'subject' => 'Your verification code',
          'html' => '<p>Your code is <strong>482913</strong></p>',
      ])
      ->throw()
      ->json();
  ```

  ```python Python theme={"dark"}
  import os, requests

  email = requests.post(
      "https://pulse-send.jiordiviera.me/api/v1/emails",
      headers={"Authorization": f"Bearer {os.environ['PULSESEND_API_KEY']}"},
      json={
          "from": "Acme <hello@acme.com>",
          "to": "jane@example.com",
          "subject": "Your verification code",
          "html": "<p>Your code is <strong>482913</strong></p>",
      },
  ).json()
  ```
</CodeGroup>

The API answers `202 Accepted` with the email:

```json theme={"dark"}
{
    "object": "email",
    "id": "em_01jbz8m3k2q7x9c4v5n6p8r0st",
    "from": "Acme <hello@acme.com>",
    "to": ["jane@example.com"],
    "cc": null,
    "bcc": null,
    "subject": "Your verification code",
    "status": "queued",
    "test_mode": true,
    "tags": null,
    "credits_charged": 0,
    "created_at": "2026-10-17T09:41:00Z"
}
```

It also shows up on the **Emails** page of your dashboard, tagged as a test, with its status and delivery events.

## 3. Go live

<Steps>
  <Step title="Verify your domain">
    Add the domain you send from and its DNS records. See [Verify a
    domain](/guides/domains).
  </Step>

  <Step title="Create a live key">
    Same page, choose **live**. It starts with `ps_live_`.
  </Step>

  <Step title="Swap the key">
    Replace the test key in your environment. The code doesn't change.
  </Step>
</Steps>

## Next

* [Follow delivery with webhooks](/guides/webhooks)
* [Retry safely with idempotency keys](/guides/idempotency)
* [Handle errors](/errors)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.