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

# Quickstart

> Make your first API call in under 5 minutes.

## 1. Get your API key

1. Log in to [app.sendora.ai](https://app.sendora.ai)
2. Navigate to **Settings → API Keys**
3. Click **Generate new key**
4. Copy the key, it starts with `sk_live_` or `sk_test_`. Do not assume a test-prefixed key is isolated from production side effects.

<Warning>
  API keys are shown once. Store yours in a secrets manager (AWS Secrets Manager, Vault, `.env` file) immediately. If you lose it, generate a new one.
</Warning>

## 2. Make a test request

Verify your key works by fetching your leads:

<CodeGroup>
  ```bash cURL theme={"dark"}
  curl https://api.sendora.ai/api/v1/public/leads \
    -H "X-API-Key: sk_live_your_key_here"
  ```

  ```python Python theme={"dark"}
  import httpx

  client = httpx.Client(
      base_url="https://api.sendora.ai",
      headers={"X-API-Key": "sk_live_your_key_here"},
  )

  resp = client.get("/api/v1/public/leads")
  print(resp.json())
  ```

  ```javascript JavaScript theme={"dark"}
  const resp = await fetch("https://api.sendora.ai/api/v1/public/leads", {
    headers: { "X-API-Key": "sk_live_your_key_here" },
  });
  const data = await resp.json();
  console.log(data);
  ```

  ```go Go theme={"dark"}
  req, _ := http.NewRequest("GET", "https://api.sendora.ai/api/v1/public/leads", nil)
  req.Header.Set("X-API-Key", os.Getenv("SENDORA_API_KEY"))
  resp, err := http.DefaultClient.Do(req)
  if err != nil { log.Fatal(err) }
  defer resp.Body.Close()
  ```
</CodeGroup>

You should get back a JSON envelope:

```json theme={"dark"}
{
  "items": [...],
  "total": 142,
  "page": 1,
  "per_page": 50
}
```

## 3. Create a lead

This changes workspace data but does not send a message or start a call. Use a
test workspace and a synthetic address while validating your integration.

<CodeGroup>
  ```bash cURL theme={"dark"}
  curl -X POST https://api.sendora.ai/api/v1/public/leads \
    -H "X-API-Key: sk_live_your_key_here" \
    -H "Content-Type: application/json" \
    -d '{
      "first_name": "Jane",
      "last_name": "Smith",
      "email": "jane@acme.com",
      "company": "Acme Corp",
      "phone_number": "+14155550123"
    }'
  ```

  ```python Python theme={"dark"}
  resp = client.post("/api/v1/public/leads", json={
      "first_name": "Jane",
      "last_name": "Smith",
      "email": "jane@acme.com",
      "company": "Acme Corp",
      "phone_number": "+14155550123",
  })
  lead = resp.json()
  print(lead["id"])
  ```
</CodeGroup>

<Tip>
  All Sendora write operations are **idempotent**, submitting the same request twice produces the same result without side effects. Enrolling a lead who is already in a campaign returns `skipped: 1` rather than an error. Safe to retry on network failures.
</Tip>

## 4. Enroll the lead into a campaign

```bash theme={"dark"}
curl -X POST "https://api.sendora.ai/api/v1/public/campaigns/{campaign_id}/leads" \
  -H "X-API-Key: sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "lead_ids": ["<lead_id_from_step_3>"] }'
```

```json theme={"dark"}
{ "enrolled": 1, "skipped": 0, "total_requested": 1 }
```

## 5. Register a webhook (optional)

Get notified when things happen:

```bash theme={"dark"}
curl -X POST https://api.sendora.ai/api/v1/public/webhook-endpoints \
  -H "X-API-Key: sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-server.com/sendora-webhook",
    "event_types": ["reply.received", "meeting.booked", "campaign.finished"]
  }'
```

Sendora will now POST signed payloads to your URL whenever those events fire. See [Webhooks](/guides/webhooks) for the full event catalog and signature verification.

## Next steps

<CardGroup cols={2}>
  <Card title="Leads guide" icon="users" href="/guides/leads">
    Import, enrich, and update lead data at scale.
  </Card>

  <Card title="Campaigns guide" icon="bullhorn" href="/guides/campaigns">
    Launch and control multi-channel outreach sequences.
  </Card>

  <Card title="Webhooks guide" icon="bolt" href="/guides/webhooks">
    Real-time events for every key action.
  </Card>

  <Card title="Full API reference" icon="code" href="/api-reference/introduction">
    Every endpoint with interactive playground.
  </Card>
</CardGroup>


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