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

# Quickstart

> Get started with the Shipstar API in under 5 minutes

## Prerequisites

Before you begin, you'll need:

* A Shipstar account ([sign up here](https://app.shipstar.ai))
* An API key from your [Dashboard](https://app.shipstar.ai/dashboard)
* At least one GitHub repository connected

## Get Your API Key

<Steps>
  <Step title="Log in to Dashboard">
    Go to [app.shipstar.ai](https://app.shipstar.ai) and log in to your account.
  </Step>

  <Step title="Navigate to API Keys">
    Click on **API Keys** in the sidebar to access your API key management.
  </Step>

  <Step title="Create a New Key">
    Click **Create API Key**, give it a name, and copy your new API key.

    <Warning>
      Store your API key securely. You won't be able to see it again after creation.
    </Warning>
  </Step>
</Steps>

## Connect a GitHub Repository

Before generating content, connect your GitHub account and select repositories to track:

<Steps>
  <Step title="Connect GitHub">
    In the dashboard, go to **Sources** and click **Connect GitHub**. Authorize Shipstar to access your repositories.
  </Step>

  <Step title="Select Repositories">
    Choose which repositories to track. Shipstar will analyze commits from these repos when generating content.
  </Step>
</Steps>

## Generate Your First Content

### Generate a Changelog

Use the following request to generate a changelog from your recent commits:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.shipstar.ai/api/internal/sources/github/changelog" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{}'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch('https://api.shipstar.ai/api/internal/sources/github/changelog', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({})
  });

  const data = await response.json();
  console.log(data);
  ```

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

  response = requests.post(
      'https://api.shipstar.ai/api/internal/sources/github/changelog',
      headers={'Authorization': 'Bearer YOUR_API_KEY'},
      json={}
  )

  data = response.json()
  print(data)
  ```
</CodeGroup>

### Example Response

```json theme={null}
{
  "content_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "pending"
}
```

Content generation runs in the background. The status will transition from `pending` to `processing` to `completed`.

### Check Content Status

Poll for the result using the content ID:

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.shipstar.ai/api/internal/sources/content/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
    -H "Authorization: Bearer YOUR_API_KEY"
  ```

  ```javascript JavaScript theme={null}
  const result = await fetch(
    'https://api.shipstar.ai/api/internal/sources/content/a1b2c3d4-e5f6-7890-abcd-ef1234567890',
    {
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY'
      }
    }
  );

  const content = await result.json();
  console.log(content);
  ```

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

  result = requests.get(
      'https://api.shipstar.ai/api/internal/sources/content/a1b2c3d4-e5f6-7890-abcd-ef1234567890',
      headers={'Authorization': 'Bearer YOUR_API_KEY'}
  )

  content = result.json()
  print(content)
  ```
</CodeGroup>

### Customize the Date Range

By default, Shipstar analyzes the last 7 days of commits. You can specify a custom range:

```bash cURL theme={null}
curl -X POST "https://api.shipstar.ai/api/internal/sources/github/changelog" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "start_date": "2025-03-01T00:00:00Z",
    "end_date": "2025-03-31T23:59:59Z",
    "product_name": "My Product"
  }'
```

## Publish Your Content

Once content is generated, publish it to get a public URL:

```bash cURL theme={null}
curl -X POST "https://api.shipstar.ai/api/internal/content/a1b2c3d4-e5f6-7890-abcd-ef1234567890/publish" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

```json Response theme={null}
{
  "public_slug": "my-product-changelog-march-2025",
  "is_published": true,
  "public_url": "https://api.shipstar.ai/api/v1/changelog/my-product-changelog-march-2025"
}
```

Published content is accessible without authentication at the public URL and includes an RSS feed.

## Try Other Content Types

Replace the endpoint path to generate different types of content:

| Content Type          | Endpoint                                     |
| --------------------- | -------------------------------------------- |
| Daily Product Update  | `POST /sources/github/daily-product-update`  |
| Weekly Product Update | `POST /sources/github/weekly-product-update` |
| Blog Post             | `POST /sources/github/blog-post`             |
| LinkedIn Post         | `POST /sources/github/linkedin-post`         |
| Twitter Thread        | `POST /sources/github/twitter-thread`        |
| Feature Page          | `POST /sources/github/feature-page`          |
| KB Articles           | `POST /sources/github/kb-articles`           |
| Changelog             | `POST /sources/github/changelog`             |
| Release Notes Email   | `POST /sources/github/release-notes-email`   |

All endpoints accept the same request body with optional `start_date`, `end_date`, and `product_name`.

## Next Steps

<CardGroup cols={2}>
  <Card title="How It Works" icon="gear" href="/how-it-works">
    Learn how Shipstar transforms commits into content
  </Card>

  <Card title="Authentication" icon="key" href="/guides/authentication">
    Deep dive into API authentication
  </Card>

  <Card title="Error Handling" icon="triangle-exclamation" href="/guides/error-handling">
    Learn how to handle API errors
  </Card>

  <Card title="API Reference" icon="terminal" href="/api-reference/overview">
    Explore the full API documentation
  </Card>
</CardGroup>
