Node.js
import Shoply from "@shoplygg/node";
const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });
const result = await shoply.webhooks.list();<?php
require 'vendor/autoload.php';
$shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);
$result = $shoply->webhooks->list();
import shoply
client = shoply.Client() # reads SHOPLY_API_KEY
result = client.webhooks.list()
curl --request GET \
--url https://api.shoply.gg/v1/stores/{storeId}/webhooks \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/webhooks"
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}/webhooks")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/webhooks")
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": "321460bf-ba98-4333-a6cd-f0e24de90f5e",
"url": "https://example.com/webhooks/shoply",
"description": "Order sync",
"events": [
"order.paid",
"order.refunded"
],
"enabled": true,
"pausedAt": null,
"failures": 0,
"lastDeliveryAt": null,
"lastStatus": null,
"dateCreated": "2026-10-22T16:20:20Z",
"updatedAt": "2026-10-22T16:20:20.408Z",
"recentDeliveries": []
}
],
"meta": {
"limit": 20,
"events": [
{
"group": "Orders",
"events": [
{
"name": "order.created",
"about": "An order was made: a buyer started a checkout, or the store raised an invoice."
},
{
"name": "order.payment_started",
"about": "The buyer pressed Pay and a payment was opened with a payment method."
}
]
},
{
"group": "Reviews",
"events": [
{
"name": "review.created",
"about": "A review was left on an order, by its buyer or by itself after seven days."
},
{
"name": "review.removed",
"about": "A review the store flagged was removed by Shoply. It is no longer anywhere, and its order can be given no other."
}
]
}
],
"maxAttempts": 8,
"keptDays": 30,
"pauseAfter": 20
}
}{
"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": {}
}Webhook endpoints
List webhook endpoints
The store’s webhook endpoints, each with the events it is sent and how its last delivery went. recentDeliveries is how its last twenty stand, oldest first: delivered, failed or pending. meta.events is every event there is. A store holds up to 20 endpoints.
Needs the webhooks.read permission (Read Webhooks).
GET
/
stores
/
{storeId}
/
webhooks
Node.js
import Shoply from "@shoplygg/node";
const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });
const result = await shoply.webhooks.list();<?php
require 'vendor/autoload.php';
$shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);
$result = $shoply->webhooks->list();
import shoply
client = shoply.Client() # reads SHOPLY_API_KEY
result = client.webhooks.list()
curl --request GET \
--url https://api.shoply.gg/v1/stores/{storeId}/webhooks \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/webhooks"
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}/webhooks")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/webhooks")
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": "321460bf-ba98-4333-a6cd-f0e24de90f5e",
"url": "https://example.com/webhooks/shoply",
"description": "Order sync",
"events": [
"order.paid",
"order.refunded"
],
"enabled": true,
"pausedAt": null,
"failures": 0,
"lastDeliveryAt": null,
"lastStatus": null,
"dateCreated": "2026-10-22T16:20:20Z",
"updatedAt": "2026-10-22T16:20:20.408Z",
"recentDeliveries": []
}
],
"meta": {
"limit": 20,
"events": [
{
"group": "Orders",
"events": [
{
"name": "order.created",
"about": "An order was made: a buyer started a checkout, or the store raised an invoice."
},
{
"name": "order.payment_started",
"about": "The buyer pressed Pay and a payment was opened with a payment method."
}
]
},
{
"group": "Reviews",
"events": [
{
"name": "review.created",
"about": "A review was left on an order, by its buyer or by itself after seven days."
},
{
"name": "review.removed",
"about": "A review the store flagged was removed by Shoply. It is no longer anywhere, and its order can be given no other."
}
]
}
],
"maxAttempts": 8,
"keptDays": 30,
"pauseAfter": 20
}
}{
"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.

