import { ShoplyCustomer } from "@shoplygg/node";
const buyer = new ShoplyCustomer({ storeId: "YOUR_STORE_ID", token });
const result = await buyer.tickets.list();
<?php
require 'vendor/autoload.php';
$buyer = new Shoply\Customer(['storeId' => 'YOUR_STORE_ID', 'token' => $token]);
$result = $buyer->tickets->list();
import shoply
buyer = shoply.Customer("YOUR_STORE_ID", token=token)
result = buyer.tickets.list()
curl --request GET \
--url https://api.shoply.gg/v1/stores/{storeId}/customer/tickets \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/customer/tickets"
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}/customer/tickets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/customer/tickets")
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": "8e243e4e-58e7-4d63-a9c3-ef057672a8fd",
"orderId": "bc44febe-0f25-4076-92eb-03a5045a57e7",
"subject": "Key says it is already in use",
"status": "answered",
"messages": 2,
"pictures": 0,
"lastMessageAt": "2026-10-22T16:20:19Z",
"lastFrom": "store",
"lastLine": "Sorry about that. Open your order in the customer panel and press Reset Key, then try it again.",
"firstReplyAt": "2026-10-22T16:20:19Z",
"answeredAt": "2026-10-22T16:20:19Z",
"resolvedAt": null,
"resolvedBy": null,
"createdAt": "2026-10-22T16:20:19Z",
"updatedAt": "2026-10-22T16:20:19Z"
}
],
"meta": {
"on": true,
"orders": [
{
"id": "e9ae5h0p1ye-cd7fded3be6-1006662",
"label": "Northwind Pro · Order e9ae5h0p1ye-cd7fded3be6-1006662",
"products": [
"Northwind Pro"
],
"more": 0
},
{
"id": "bc44febe-0f25-4076-92eb-03a5045a57e7",
"label": "Northwind Pro · Order bc44febe-0f25-4076-92eb-03a5045a57e7",
"products": [
"Northwind Pro"
],
"more": 0
}
],
"canOpen": false,
"limits": {
"body": 500,
"subject": 100,
"picturesPerMessage": 3,
"picturesPerTicket": 25,
"pictureBytes": 5242880
}
}
}{
"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": {}
}List support tickets
The buyer’s support tickets at the store, the latest message first. status is open (waiting on the store), answered or resolved. meta.on is whether the store takes tickets (off, the list is empty and nothing can be opened), meta.canOpen whether the buyer may open one now (one open ticket at a time), meta.orders the orders a ticket can be about, each with its label, and meta.limits what a message may hold.
Needs the buyer’s token: Authorization: Bearer shoply_ct_..., from Sign in with the code.
It is counted for the buyer’s token: 300 reads in ten minutes.
import { ShoplyCustomer } from "@shoplygg/node";
const buyer = new ShoplyCustomer({ storeId: "YOUR_STORE_ID", token });
const result = await buyer.tickets.list();
<?php
require 'vendor/autoload.php';
$buyer = new Shoply\Customer(['storeId' => 'YOUR_STORE_ID', 'token' => $token]);
$result = $buyer->tickets->list();
import shoply
buyer = shoply.Customer("YOUR_STORE_ID", token=token)
result = buyer.tickets.list()
curl --request GET \
--url https://api.shoply.gg/v1/stores/{storeId}/customer/tickets \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/customer/tickets"
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}/customer/tickets")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/customer/tickets")
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": "8e243e4e-58e7-4d63-a9c3-ef057672a8fd",
"orderId": "bc44febe-0f25-4076-92eb-03a5045a57e7",
"subject": "Key says it is already in use",
"status": "answered",
"messages": 2,
"pictures": 0,
"lastMessageAt": "2026-10-22T16:20:19Z",
"lastFrom": "store",
"lastLine": "Sorry about that. Open your order in the customer panel and press Reset Key, then try it again.",
"firstReplyAt": "2026-10-22T16:20:19Z",
"answeredAt": "2026-10-22T16:20:19Z",
"resolvedAt": null,
"resolvedBy": null,
"createdAt": "2026-10-22T16:20:19Z",
"updatedAt": "2026-10-22T16:20:19Z"
}
],
"meta": {
"on": true,
"orders": [
{
"id": "e9ae5h0p1ye-cd7fded3be6-1006662",
"label": "Northwind Pro · Order e9ae5h0p1ye-cd7fded3be6-1006662",
"products": [
"Northwind Pro"
],
"more": 0
},
{
"id": "bc44febe-0f25-4076-92eb-03a5045a57e7",
"label": "Northwind Pro · Order bc44febe-0f25-4076-92eb-03a5045a57e7",
"products": [
"Northwind Pro"
],
"more": 0
}
],
"canOpen": false,
"limits": {
"body": 500,
"subject": 100,
"picturesPerMessage": 3,
"picturesPerTicket": 25,
"pictureBytes": 5242880
}
}
}{
"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 buyer's token, from Sign in with the code: Authorization: Bearer shoply_ct_.... It reaches that buyer's own orders at one store, and no route that takes a key.
Path Parameters
The store's ID, from Settings, General in its dashboard. It is not a secret: a page may show it.

