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

# Create Collection

> Create a new collection

# Create Collection

Creates a new manual collection in the store. Products are added to the
collection individually — automated ("smart") rule-based collections are not
supported.

## Request

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.launchmystore.io/api/v1/collections.json" \
    -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
      "title": "Summer Collection",
      "body_html": "<p>Our latest summer styles.</p>",
      "handle": "summer-collection",
      "image": "https://example.com/summer-banner.jpg"
    }'
  ```

  ```javascript Node.js theme={null}
  const response = await fetch('https://api.launchmystore.io/api/v1/collections.json', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      title: 'Summer Collection',
      body_html: '<p>Our latest summer styles.</p>',
      handle: 'summer-collection',
      image: 'https://example.com/summer-banner.jpg'
    })
  });
  ```
</CodeGroup>

## Body Parameters

<ParamField body="title" type="string" required>
  The collection title
</ParamField>

<ParamField body="body_html" type="string">
  Collection description (supports HTML)
</ParamField>

<ParamField body="handle" type="string">
  URL-safe handle. Auto-generated from the title (lowercased, spaces → `-`) if
  not provided
</ParamField>

<ParamField body="image" type="string">
  Collection featured image URL
</ParamField>

## Response

Returns HTTP `201` with a bare Shopify-style object: the created collection
under the `collection` key (the same Shopify-compatible shape returned by
[Get Collection](/api-reference/collections/get)). The response is not wrapped
in a `{ status, data }` envelope.

<ResponseField name="collection" type="object">
  The created collection (Shopify-compatible shape)
</ResponseField>

## Example Response

```json theme={null}
{
  "collection": {
    "id": "col_new789",
    "title": "Summer Collection",
    "handle": "summer-collection",
    "body_html": "<p>Our latest summer styles.</p>",
    "description": "<p>Our latest summer styles.</p>",
    "published_at": "2024-03-01T10:00:00Z",
    "published_scope": "web",
    "sort_order": "manual",
    "template_suffix": null,
    "collection_type": "custom",
    "image": {
      "alt": "Summer Collection",
      "src": "https://example.com/summer-banner.jpg"
    },
    "products_count": 0,
    "seo": {
      "title": "Summer Collection",
      "description": "Our latest summer styles.",
      "image": "https://example.com/summer-banner.jpg"
    },
    "url": "/collections/summer-collection",
    "updated_at": "2024-03-01T10:00:00Z"
  }
}
```

## Errors

Validation and other failures return a Shopify-style `{ errors }` body with the
appropriate HTTP status:

```json theme={null}
{
  "errors": {
    "base": ["title is required"]
  }
}
```

| Status | Description                                 |
| ------ | ------------------------------------------- |
| `401`  | Invalid or missing access token             |
| `403`  | App doesn't have the `write_products` scope |
| `400`  | `title` is required / invalid request body  |
