Node.js
import Shoply from "@shoplygg/node";
const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });
const result = await shoply.couponCategories.list();
<?php
require 'vendor/autoload.php';
$shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);
$result = $shoply->couponCategories->list();
import shoply
client = shoply.Client() # reads SHOPLY_API_KEY
result = client.couponCategories.list()
curl --request GET \
--url https://api.shoply.gg/v1/stores/{storeId}/coupon-categories \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/coupon-categories"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.shoply.gg/v1/stores/{storeId}/coupon-categories")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/coupon-categories")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": null,
"code": null,
"data": [
{
"id": "406d63ce-4ba1-487b-9e7e-05cfc9f03b18",
"storeId": "743d82fb-6aad-44bb-ab00-d54c4b0eecb7",
"name": "Default",
"slug": "default",
"description": "Coupons without another category.",
"sort": 0,
"systemKey": "default",
"couponCount": 0,
"activeCount": 0,
"uses": 0,
"discountGiven": 0,
"dateCreated": "2026-10-22T16:20:18Z",
"updatedAt": "2026-10-22T16:20:18.796Z"
},
{
"id": "62fc3f0e-0160-47f3-9ba0-b02592d4590f",
"storeId": "743d82fb-6aad-44bb-ab00-d54c4b0eecb7",
"name": "Partners",
"slug": "partners",
"description": "Codes handed to partners.",
"sort": 0,
"systemKey": "",
"couponCount": 1,
"activeCount": 1,
"uses": 0,
"discountGiven": 0,
"dateCreated": "2026-10-22T16:20:18Z",
"updatedAt": "2026-10-22T16:20:18.770Z"
}
]
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}Coupon categories
List coupon categories
The categories the store files its coupons in, in the store’s own order, each with how many coupons it holds. Two are the store’s from the start and cannot be renamed or deleted: Default, and First Timer, which holds the codes the first-order reward makes.
Needs the coupons.read permission (Read Coupons).
GET
/
stores
/
{storeId}
/
coupon-categories
Node.js
import Shoply from "@shoplygg/node";
const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });
const result = await shoply.couponCategories.list();
<?php
require 'vendor/autoload.php';
$shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);
$result = $shoply->couponCategories->list();
import shoply
client = shoply.Client() # reads SHOPLY_API_KEY
result = client.couponCategories.list()
curl --request GET \
--url https://api.shoply.gg/v1/stores/{storeId}/coupon-categories \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/coupon-categories"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.shoply.gg/v1/stores/{storeId}/coupon-categories")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/coupon-categories")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": null,
"code": null,
"data": [
{
"id": "406d63ce-4ba1-487b-9e7e-05cfc9f03b18",
"storeId": "743d82fb-6aad-44bb-ab00-d54c4b0eecb7",
"name": "Default",
"slug": "default",
"description": "Coupons without another category.",
"sort": 0,
"systemKey": "default",
"couponCount": 0,
"activeCount": 0,
"uses": 0,
"discountGiven": 0,
"dateCreated": "2026-10-22T16:20:18Z",
"updatedAt": "2026-10-22T16:20:18.796Z"
},
{
"id": "62fc3f0e-0160-47f3-9ba0-b02592d4590f",
"storeId": "743d82fb-6aad-44bb-ab00-d54c4b0eecb7",
"name": "Partners",
"slug": "partners",
"description": "Codes handed to partners.",
"sort": 0,
"systemKey": "",
"couponCount": 1,
"activeCount": 1,
"uses": 0,
"discountGiven": 0,
"dateCreated": "2026-10-22T16:20:18Z",
"updatedAt": "2026-10-22T16:20:18.770Z"
}
]
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}Authorizations
A secret API key, made under Developers in the dashboard: Authorization: Bearer shoply_sk_...
Path Parameters
The store's ID. A key reaches the store it was made in: GET /key answers which.

