---
title: "Quickstart"
description: "Send your first WhatsApp message in a few minutes."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.wazapin.id/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

Send your first message today — you only need an API key and a connected WhatsApp number.

## Prerequisites

- Base URL: `https://api.wazapin.com`
- [API key](/api/authentication) (`X-Api-Key`)
- Connected WhatsApp [channel_id](/getting-started/connect-channel)

1. **Send your first text message**

### cURL

```bash
curl -X POST "https://api.wazapin.com/v1/messages" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
"channel_id": "wzp_abc123",
"to": "6281234567890",
"type": "text",
"content": {"body": "Hello from Wazapin"}
  }'
```
### TypeScript

```typescript
import { WazapinClient, textMessage } from "@wazapin/sdk";

const wazapin = new WazapinClient({ apiKey: process.env.WAZAPIN_API_KEY! });

const { data: message } = await wazapin.messages.send(
  textMessage({
channel_id: "wzp_abc123",
to: "6281234567890",
body: "Hello from Wazapin",
  }),
);
```
### Python

```python
import os
import requests

resp = requests.post(
"https://api.wazapin.com/v1/messages",
headers={
    "X-Api-Key": os.environ["WAZAPIN_API_KEY"],
    "Content-Type": "application/json",
},
json={
    "channel_id": "wzp_abc123",
    "to": "6281234567890",
    "type": "text",
    "content": {"body": "Hello from Wazapin"},
},
timeout=30,
)
resp.raise_for_status()
message = resp.json()["data"]
```

   Save the `id` from the response `data` object for the next step.

2. **Track message status**

### cURL

```bash
curl -sS "https://api.wazapin.com/v1/messages/{messageID}" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Accept: application/json"
```
### TypeScript

```typescript
const { data: message } = await wazapin.messages.get("MESSAGE_ID");
```
### Python

```python
import os
import requests

resp = requests.get(
"https://api.wazapin.com/v1/messages/MESSAGE_ID",
headers={"X-Api-Key": os.environ["WAZAPIN_API_KEY"]},
timeout=30,
)
resp.raise_for_status()
message = resp.json()["data"]
```

   Replace `{messageID}` / `MESSAGE_ID` with the UUID from the create response.

3. **Receive events (recommended)**

   Configure a [webhook](/api/webhooks) URL in the app to get inbound messages and delivery updates without polling. See [Webhook payload examples](/api/inbound-webhook-examples).

## What to read next

- [Sending overview](/getting-started/sending-overview) — Session vs template and how to pick a type.
- [Send messages](/getting-started/send-messages) — One guide per message type with specifications.
- [API reference](/api-reference/messages/send-a-message) — Every message type, with playground examples.
- [Authentication](/api/authentication) — Verify keys and handle 401 errors.

:::tip
Use `X-Api-Key` on every server-side request. Tabs labeled **cURL**, **TypeScript**, and **Python** stay in sync when a page has more than one code group.
:::

Source: https://docs.wazapin.id/getting-started/quickstart/index.mdx
