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

# Quickstart

> Authenticate with the Keupera API and make your first request in minutes.

## Make your first Keupera API request

Follow these three steps to authenticate, call an endpoint, and inspect a response from the Keupera Public API.

### Step 1: Generate an API key

<AccordionGroup>
  <Accordion icon="key" title="Create a key from the dashboard">
    1. Log in to your [Keupera dashboard](https://app.keupera.com).
    2. Go to **Account → API Keys**.
    3. Click **Create API key** and copy it somewhere safe — you won't see it again.

    <Warning>
      Treat your API key like a password. Never commit it to source control or expose it in client-side code.
    </Warning>
  </Accordion>

  <Accordion icon="shield-check" title="Verify your plan includes API access">
    Public API access is tied to your subscription tier. If requests return `403 Forbidden`, upgrade your plan from **Settings → Billing** or contact [ask@support.keupera.com](mailto:ask@support.keupera.com).
  </Accordion>
</AccordionGroup>

### Step 2: Call your first endpoint

All endpoints live under:

```
https://app.keupera.com/api/v1
```

Authenticate using a `Bearer` token in the `Authorization` header. Here's a minimal request that lists keywords for the website attached to your API key:

<CodeGroup>
  ```bash cURL theme={null}
  curl https://app.keupera.com/api/v1/keywords \
    -H "Authorization: Bearer $KEUPERA_API_KEY"
  ```

  ```js Node.js theme={null}
  const res = await fetch(
    "https://app.keupera.com/api/v1/keywords",
    {
      headers: {
        Authorization: `Bearer ${process.env.KEUPERA_API_KEY}`,
      },
    }
  );
  const json = await res.json();
  console.log(json.data);
  ```

  ```python Python theme={null}
  import os, requests

  res = requests.get(
      "https://app.keupera.com/api/v1/keywords",
      headers={"Authorization": f"Bearer {os.environ['KEUPERA_API_KEY']}"},
  )
  print(res.json()["data"])
  ```
</CodeGroup>

### Step 3: Inspect the response

Successful responses return JSON with a consistent shape:

```json theme={null}
{
  "data": [
    {
      "id": "uuid",
      "term": "best seo tools",
      "volume": 12000,
      "difficulty": 45,
      "status": "active"
    }
  ],
  "meta": { "total": 150, "page": 1, "limit": 100 }
}
```

Errors return an `error` string with an HTTP status code between `400` and `500`:

```json theme={null}
{ "error": "Invalid or missing API key" }
```

## Next steps

Explore the API modules to build deeper integrations:

<CardGroup cols={2}>
  <Card title="Keywords" icon="magnifying-glass" href="/api-reference/keywords">
    Research, enrich, and manage keywords programmatically.
  </Card>

  <Card title="Backlinks" icon="link" href="/api-reference/backlinks">
    Run outreach campaigns and track backlink opportunities.
  </Card>

  <Card title="Content" icon="pen-to-square" href="/api-reference/content">
    Plan, generate, and schedule AI-written articles.
  </Card>

  <Card title="AI Visibility" icon="robot" href="/api-reference/ai-visibility">
    Monitor your brand across LLM answers.
  </Card>

  <Card title="Analytics" icon="chart-line" href="/api-reference/analytics">
    Traffic, Search Console, and AI bot crawl data.
  </Card>

  <Card title="Full API overview" icon="book-open" href="/api-reference/introduction">
    Authentication, pagination, and error reference.
  </Card>
</CardGroup>

<Note>
  Need help? Email [ask@support.keupera.com](mailto:ask@support.keupera.com) or open the in-app chat from your dashboard.
</Note>
