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

# Update Custom Store

`PATCH /v2/projects/{id}/custom-stores/{custom_store_id}`

## Request

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

Renames a custom store or moves when it started reporting revenue from your server (`reporting_since`, not in the future; it can be moved earlier or later but never cleared). `reporting_since` is set by the store's first `production` event: until then, setting it is refused with 409. Omitted fields are unchanged; an unknown field is rejected with 400. Names are unique within a project. Requires custom_stores:write scope.

## Path parameters

- `id` string, required
- `custom_store_id` string, required

## Request body

- object
  - `name` string
  - `reporting_since` string

## 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. | `reporting_since` can only be moved once the store's first `production` event has set it.
- `429`: Too many requests have been made in a short period
- `500`: An unexpected error occurred on the server

## Changes

- **2026-10-29** `778a11cd2c15`: 5 warning, 4 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 `429`
  - …5 more
- **2026-10-28** `b3fbbd82cfe5`: 4 breaking, 3 warning, 1 info
  - the response's body type changed from `object` to no type for status `409`
  - removed the required property `_tag` from the response with the `409` status
  - removed the required property `message` from the response with the `409` status
  - removed the required property `name` from the response with the `409` status
  - …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/:custom_store_id/patch.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)
