---
title: "Create Custom Store"
method: POST
path: "/v2/projects/{id}/custom-stores"
tags: ["Custom Stores"]
---

# Create Custom Store

`POST /v2/projects/{id}/custom-stores`

## Request

- Base URL: `https://api.superwall.com`
- URL: `https://api.superwall.com/v2/projects/{id}/custom-stores`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `accounts_superwall_token`
  - HTTP bearer

Creates a custom store in the project. Names are unique within a project. Requires custom_stores:write scope.

## Path parameters

- `id` string, required

## Request body

- object
  - `name` string, required

## Response `200`

Success

- object
  - `id` string, required
  - `object` 'custom_store', required: Object type, always `custom_store`
  - `project_id` string, required
  - `name` string, required: Display name, unique within the project
  - `product_count` number, required: Number of active (non-archived) products in this custom store
  - `created_at` string, required: ISO 8601 timestamp of when the custom store was created
  - `reporting_since` string, nullable, required: ISO 8601 timestamp from which this store reports its revenue from your server through the custom store events API, or `null` if it does not. From this instant on, revenue charts count this store's purchases only from your server's events and drop what the SDK reported about them; before it, SDK purchase events count as well. It is set automatically when the first `production` event is accepted (to the time that request was received) and never changed automatically afterwards. If you send events from before it (a backfill), move it back to the start of the backfill so those purchases are not counted twice. It cannot be set by hand before the first `production` event. Once set it can be moved but never cleared, and the store can no longer be deleted, so its revenue history stays intact.

## Other responses

- `400`: The request did not match the expected schema | The request was invalid or malformed
- `401`: No API key was provided in the request | The API key does not have a valid format | The API key is invalid or has been revoked | An error occurred while validating the API key | The session cookie is invalid or expired
- `403`: The API key does not have permission to perform this action
- `404`: The requested resource was not found
- `409`: Another custom store in this project already has this name.
- `429`: Too many requests have been made in a short period
- `500`: An unexpected error occurred on the server

## Changes

- **2026-10-29** `778a11cd2c15`: 6 warning, 2 info
  - added the new `credentials_missing` enum value to the `anyOf[subschema #2]/code` response property for the response status `400`
  - added the new `credentials_missing` enum value to the `code/anyOf[subschema #1]/` response property for the response status `403`
  - added the new `credentials_missing` enum value to the `code/anyOf[subschema #1]/` response property for the response status `404`
  - added the new `credentials_missing` enum value to the `code/anyOf[subschema #1]/` response property for the response status `409`
  - …4 more
- **2026-10-21** `b43ec4cfe172`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/superwall/apis/superwall-api-v2/changes/v2/projects/:id/custom-stores/post.md)

---

[API](https://skmtc.dev/superwall/apis/superwall-api-v2.md) - [All operations](https://skmtc.dev/superwall/apis/superwall-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/superwall/apis/superwall-api-v2/revisions/523b4734dfab?raw)
