> Documentation index: https://docs.sellhidden.com/llms.txt

# API reference

Source: https://docs.sellhidden.com/reference

Everything the dashboard does, from your own code. Send your key as a Bearer token from your server.

## Groups

Base URL https://api.sellhidden.com/v1 · Authorization: Bearer · 120/min per key · cursor pagination · Idempotency-Key on POST · No test mode

Send `Authorization: Bearer hsk_live_…` with a key you created under [Developers, API keys](https://docs.sellhidden.com/start#authentication). Everything is scoped to the key's store and to the key's scopes. Responses are never cached (`cache-control: no-store`). Writes go through the same rules as the dashboard: plan limits, delivery checks, payment locks and the audit log all apply. Orders are created by buyers at checkout; the API manages them afterwards.

Every call is live. To look around safely, make a temporary read-only key in [Try it](https://docs.sellhidden.com/reference#try-it); it expires in 60 minutes.

- Products: 14 endpoints
- Categories: 6 endpoints
- Coupons: 5 endpoints
- Orders: 10 endpoints
- Subscriptions: 4 endpoints
- Customers: 5 endpoints
- Reviews: 5 endpoints
- Tickets: 5 endpoints
- Store: 2 endpoints
- Webhooks: 8 endpoints
- Analytics: 1 endpoints
- Your key: 1 endpoints

## Every endpoint

All 71 endpoints on one list, public ones first. Filter by path, name or scope; every row links to its reference.

| Method | Path | Summary | Scope |
| --- | --- | --- | --- |
| GET | `/public/products/{storeSlug}` | Products of a store | no key |
| GET | `/public/products/{storeSlug}/{slug}` | One product | no key |
| GET | `/public/categories/{storeSlug}` | Categories of a store | no key |
| GET | `/public/reviews/{storeSlug}` | Visible reviews | no key |
| GET | `/public/recent-sales/{storeSlug}` | Recent sales | no key |
| GET | `/products` | List products | `products:read` |
| POST | `/products` | Create a product | `products:write` |
| GET | `/products/{id}` | Get a product | `products:read` |
| PATCH | `/products/{id}` | Update a product | `products:write` |
| DELETE | `/products/{id}` | Delete a product | `products:write` |
| GET | `/products/{id}/variations` | List variations | `products:read` |
| POST | `/products/{id}/variations` | Add a variation | `products:write` |
| GET | `/products/{id}/variations/{variationId}` | Get a variation | `products:read` |
| PATCH | `/products/{id}/variations/{variationId}` | Update a variation | `products:write` |
| DELETE | `/products/{id}/variations/{variationId}` | Remove a variation | `products:write` |
| GET | `/products/{id}/keys` | Pool counts and unused keys | `products:read` |
| POST | `/products/{id}/keys` | Add keys in bulk | `products:write` |
| DELETE | `/products/{id}/keys` | Remove unused keys | `products:write` |
| POST | `/products/{id}/stock` | Set or adjust stock | `products:write` |
| GET | `/categories` | List categories | `categories:read` |
| POST | `/categories` | Create a category | `categories:write` |
| GET | `/categories/{id}` | Get a category | `categories:read` |
| PATCH | `/categories/{id}` | Update a category | `categories:write` |
| DELETE | `/categories/{id}` | Delete a category | `categories:write` |
| POST | `/categories/reorder` | Reorder categories | `categories:write` |
| GET | `/coupons` | List coupons | `coupons:read` |
| POST | `/coupons` | Create a coupon | `coupons:write` |
| GET | `/coupons/{id}` | Get a coupon | `coupons:read` |
| PATCH | `/coupons/{id}` | Update a coupon | `coupons:write` |
| DELETE | `/coupons/{id}` | Delete a coupon | `coupons:write` |
| GET | `/orders` | List orders | `orders:read` |
| GET | `/orders/{id}` | Get an order | `orders:read` |
| POST | `/orders/{id}/approve` | Approve a manual payment | `orders:write` |
| POST | `/orders/{id}/reject` | Reject a manual payment | `orders:write` |
| POST | `/orders/{id}/cancel` | Cancel an order | `orders:write` |
| POST | `/orders/{id}/redeliver` | Run delivery again | `orders:write` |
| POST | `/orders/{id}/resend-receipt` | Resend the receipt | `orders:write` |
| POST | `/orders/{id}/refund` | Refund to store balance | `orders:write` |
| PUT | `/orders/{id}/note` | Write the private note | `orders:write` |
| DELETE | `/orders/{id}/note` | Remove the private note | `orders:write` |
| GET | `/subscriptions` | List subscriptions | `subscriptions:read` |
| GET | `/subscriptions/{id}` | Get a subscription | `subscriptions:read` |
| POST | `/subscriptions/{id}/cancel` | Cancel a subscription | `subscriptions:write` |
| POST | `/subscriptions/{id}/extend` | Extend by one period | `subscriptions:write` |
| GET | `/customers` | List customers | `customers:read` |
| GET | `/customers/{id}` | Get a customer | `customers:read` |
| POST | `/customers/{id}/balance` | Adjust store balance | `customers:write` |
| POST | `/customers/{id}/ban` | Ban a customer | `customers:write` |
| DELETE | `/customers/{id}/ban` | Lift a ban | `customers:write` |
| GET | `/reviews` | List reviews | `reviews:read` |
| GET | `/reviews/{id}` | Get a review | `reviews:read` |
| PATCH | `/reviews/{id}` | Hide or show a review | `reviews:write` |
| PUT | `/reviews/{id}/reply` | Reply in public | `reviews:write` |
| DELETE | `/reviews/{id}/reply` | Remove the reply | `reviews:write` |
| GET | `/tickets` | List tickets | `tickets:read` |
| GET | `/tickets/{id}` | Get a ticket | `tickets:read` |
| POST | `/tickets/{id}/messages` | Reply to a ticket | `tickets:write` |
| PATCH | `/tickets/{id}` | Change the status | `tickets:write` |
| POST | `/tickets/{id}/close` | Close a ticket | `tickets:write` |
| GET | `/store` | Get the store | `store:read` |
| PATCH | `/store` | Update basic settings | `store:write` |
| GET | `/webhooks` | List endpoints | `webhooks:read` |
| POST | `/webhooks` | Create an endpoint | `webhooks:write` |
| GET | `/webhooks/{id}` | Get an endpoint | `webhooks:read` |
| PATCH | `/webhooks/{id}` | Update an endpoint | `webhooks:write` |
| DELETE | `/webhooks/{id}` | Delete an endpoint | `webhooks:write` |
| POST | `/webhooks/{id}/rotate-secret` | Rotate the secret | `webhooks:write` |
| POST | `/webhooks/{id}/test` | Send a test event | `webhooks:write` |
| GET | `/webhooks/{id}/deliveries` | Delivery log | `webhooks:read` |
| GET | `/analytics` | Revenue and orders | `analytics:read` |
| GET | `/me` | Inspect the key you are using | no key |

## Try it

Send a request from this page. Signed in? Press **Use a temporary test key** and we make one for the store you pick: read-only unless you allow writes, gone after 60 minutes, and listed under your API keys so you can revoke it early. Or paste a key of your own. Either way the key stays in this tab and goes to the API only. Writes are real changes to your store.

Use the Try it panel at https://docs.sellhidden.com/reference#try-it.
