# Quickstart

Send your first SMS over the Transactional API in under five minutes. Grab a token, fire one HTTP request, and point a webhook at the DLR URL to see delivery.

The Transactional API over HTTP needs three things: an account, an `api_sms` token and one POST request. This walkthrough takes you from zero to a delivered message. If you already know you need high throughput or API-driven campaigns, jump straight to [Bulk sending](/transactional-api/http/bulk) — same token, one call, up to 100 messages per request.

#### 1. Create an Instasent account

Sign up at [instasent.com](https://instasent.com) and complete onboarding.
A Transactional API token is issued automatically for your first project.

#### 2. Grab your token

In the dashboard, open **API tokens** and copy the `api_sms` token.
Treat it as a secret — never commit it to version control.

#### 3. Send your first message

#### curl

```bash
curl -X POST https://api.instasent.com/transactional/v1/sms \
  -H "Authorization: Bearer $INSTASENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "Instasent",
    "to": "+34600000000",
    "text": "Hello from Instasent"
  }'
```

#### node

```js
const res = await fetch("https://api.instasent.com/transactional/v1/sms", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.INSTASENT_TOKEN}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    from: "Instasent",
    to: "+34600000000",
    text: "Hello from Instasent",
  }),
});
const sms = await res.json();
```

#### python

```python
import os, requests

res = requests.post(
    "https://api.instasent.com/transactional/v1/sms",
    headers={"Authorization": f"Bearer {os.environ['INSTASENT_TOKEN']}"},
    json={
        "from": "Instasent",
        "to": "+34600000000",
        "text": "Hello from Instasent",
    },
)
sms = res.json()
```

#### 4. Check delivery

The response contains an `id`. Point your webhook endpoint at the DLR URL
in your project settings — Instasent will `POST` delivery updates as the
message progresses through the carrier network. See
[Receiving DLRs](/transactional-api/http/dlrs) for payload details.

## Sending many messages at once

For API-driven campaigns, notification fan-outs or any high-volume dispatch, switch from `POST /sms` to `POST /sms/bulk` — a single call that carries up to 100 messages, returns accepted and rejected items side by side, and queues the accepted ones on the platform for fastest-possible dispatch. The same `api_sms` token works.

```bash
curl -X POST https://api.instasent.com/transactional/v1/sms/bulk \
  -H "Authorization: Bearer $INSTASENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[
    { "from": "Instasent", "to": "+34600000001", "text": "Hello one" },
    { "from": "Instasent", "to": "+34600000002", "text": "Hello two" }
  ]'
```

Full request and response shape, per-request limits, throughput model and partial-success handling live in [Bulk sending](/transactional-api/http/bulk).

## What's next

- **[Bulk sending](/transactional-api/http/bulk)** — `POST /sms/bulk`, 100 messages per request, queue-based throughput. The endpoint to use for campaigns.
- **[Authentication](/transactional-api/http/authentication)** — token scopes, rotation, header vs. query-string.
- **[Rate limits](/transactional-api/http/rate-limits)** — per-endpoint limits and how to read the `X-RateLimit-*` headers. One bulk call counts as one request against the window.
- **[Errors](/transactional-api/http/errors)** — status codes, error payload shape, retry guidance.
- **[Receiving DLRs](/transactional-api/http/dlrs)** — webhook payload and status list.
- **[Reference](/transactional-api/http/reference)** — every endpoint, every parameter.
