import Shoply from "@shoplygg/node";
const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });
const result = await shoply.team.get();<?php
require 'vendor/autoload.php';
$shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);
$result = $shoply->team->get();
import shoply
client = shoply.Client() # reads SHOPLY_API_KEY
result = client.team.get()
curl --request GET \
--url https://api.shoply.gg/v1/stores/{storeId}/team \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/team"
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}/team")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/team")
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": {
"teams": [
{
"id": "76da1aed-1f2d-4fc5-8b6c-d2ec8235f7de",
"name": "Support",
"permissions": [
"orders.view",
"customers.view"
],
"sensitive": 0,
"reach": [
"Orders",
"Audience"
],
"people": [
{
"id": "c680707e-2171-421f-bb2e-e0204898fd6e",
"userId": "6555d424-6a96-4c06-8152-027ccf47df8e",
"teamId": "76da1aed-1f2d-4fc5-8b6c-d2ec8235f7de",
"name": "Mila Novak",
"email": "mila@example.com",
"avatarUrl": null,
"invitedBy": "owner@example.com",
"joinedAt": "2026-10-24T16:33:36Z",
"lastSeenAt": null,
"keys": 0,
"me": false
}
],
"waiting": 1,
"createdAt": "2026-10-24T16:33:36Z",
"updatedAt": "2026-10-24T16:33:36Z"
},
{
"id": "39f41117-fab9-4758-8a48-f4cc36d1eac0",
"name": "Packers",
"permissions": [
"orders.view"
],
"sensitive": 0,
"reach": [
"Orders"
],
"people": [],
"waiting": 0,
"createdAt": "2026-10-24T16:33:36Z",
"updatedAt": "2026-10-24T16:33:36Z"
}
],
"invites": [
{
"id": "4518a713-d7d0-4d0a-89ec-f905cf2a9e55",
"kind": "email",
"email": "sam@example.com",
"teamId": "76da1aed-1f2d-4fc5-8b6c-d2ec8235f7de",
"team": "Support",
"invitedBy": "owner@example.com",
"sends": 1,
"sentAt": "2026-10-24T16:33:36Z",
"expiresAt": "2026-10-31T16:33:36Z",
"expired": false
}
],
"owner": {
"userId": "030385fc-91cf-452b-ab61-0cf43e9d9367",
"name": null,
"email": "owner@example.com",
"avatarUrl": null
},
"me": {
"role": "key",
"teamId": null,
"permissions": [
"sales.figures",
"orders.view"
]
},
"permissions": {
"groups": [
{
"id": "dashboard",
"title": "Dashboard",
"permissions": [
{
"id": "sales.figures",
"label": "See Sales Figures",
"about": "Revenue, orders and average order on the Dashboard with their charts, and every money figure in Analytics.",
"sensitive": false,
"needs": []
}
]
},
{
"id": "orders",
"title": "Orders",
"permissions": [
{
"id": "orders.view",
"label": "View Orders",
"about": "The list and each order's page: what was bought, the buyer, how it was paid and its timeline.",
"sensitive": false,
"needs": []
},
{
"id": "orders.delivered",
"label": "See What Was Delivered",
"about": "The keys, files and text an order handed over. Without it an order says how many, not what.",
"sensitive": true,
"needs": [
"orders.view"
]
}
]
}
],
"presets": [
{
"id": "support",
"name": "Support",
"about": "Orders and what they delivered, customers, tickets and reviews.",
"permissions": [
"orders.view",
"orders.delivered"
]
},
{
"id": "catalogue",
"name": "Catalogue",
"about": "Products, stock, categories, coupons and upsells.",
"permissions": [
"products.view",
"products.edit"
]
}
]
},
"limits": {
"teams": 10,
"people": 30,
"name": 40,
"perInvite": 10,
"inviteDays": 7
}
}
}{
"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": {}
}Get the team
The store’s teams, each with its permissions, how many of them are sensitive, the parts of the dashboard it reaches, its people and how many invites are waiting; every invite not yet taken up; the store’s owner, who is on no team and can do everything; and permissions, every permission there is in its groups, each with its label, what it lets a person do (about), whether it is sensitive and what it needs, and the presets a team can start from. limits says how many teams a store and people a team may have (10 and 30, invites not yet taken up counted among the people), how long a team’s name may be, how many addresses one invite takes (perInvite) and how many days an invite lasts (inviteDays).
Needs the team.read permission (Read the Team).
import Shoply from "@shoplygg/node";
const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });
const result = await shoply.team.get();<?php
require 'vendor/autoload.php';
$shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);
$result = $shoply->team->get();
import shoply
client = shoply.Client() # reads SHOPLY_API_KEY
result = client.team.get()
curl --request GET \
--url https://api.shoply.gg/v1/stores/{storeId}/team \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/team"
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}/team")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/team")
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": {
"teams": [
{
"id": "76da1aed-1f2d-4fc5-8b6c-d2ec8235f7de",
"name": "Support",
"permissions": [
"orders.view",
"customers.view"
],
"sensitive": 0,
"reach": [
"Orders",
"Audience"
],
"people": [
{
"id": "c680707e-2171-421f-bb2e-e0204898fd6e",
"userId": "6555d424-6a96-4c06-8152-027ccf47df8e",
"teamId": "76da1aed-1f2d-4fc5-8b6c-d2ec8235f7de",
"name": "Mila Novak",
"email": "mila@example.com",
"avatarUrl": null,
"invitedBy": "owner@example.com",
"joinedAt": "2026-10-24T16:33:36Z",
"lastSeenAt": null,
"keys": 0,
"me": false
}
],
"waiting": 1,
"createdAt": "2026-10-24T16:33:36Z",
"updatedAt": "2026-10-24T16:33:36Z"
},
{
"id": "39f41117-fab9-4758-8a48-f4cc36d1eac0",
"name": "Packers",
"permissions": [
"orders.view"
],
"sensitive": 0,
"reach": [
"Orders"
],
"people": [],
"waiting": 0,
"createdAt": "2026-10-24T16:33:36Z",
"updatedAt": "2026-10-24T16:33:36Z"
}
],
"invites": [
{
"id": "4518a713-d7d0-4d0a-89ec-f905cf2a9e55",
"kind": "email",
"email": "sam@example.com",
"teamId": "76da1aed-1f2d-4fc5-8b6c-d2ec8235f7de",
"team": "Support",
"invitedBy": "owner@example.com",
"sends": 1,
"sentAt": "2026-10-24T16:33:36Z",
"expiresAt": "2026-10-31T16:33:36Z",
"expired": false
}
],
"owner": {
"userId": "030385fc-91cf-452b-ab61-0cf43e9d9367",
"name": null,
"email": "owner@example.com",
"avatarUrl": null
},
"me": {
"role": "key",
"teamId": null,
"permissions": [
"sales.figures",
"orders.view"
]
},
"permissions": {
"groups": [
{
"id": "dashboard",
"title": "Dashboard",
"permissions": [
{
"id": "sales.figures",
"label": "See Sales Figures",
"about": "Revenue, orders and average order on the Dashboard with their charts, and every money figure in Analytics.",
"sensitive": false,
"needs": []
}
]
},
{
"id": "orders",
"title": "Orders",
"permissions": [
{
"id": "orders.view",
"label": "View Orders",
"about": "The list and each order's page: what was bought, the buyer, how it was paid and its timeline.",
"sensitive": false,
"needs": []
},
{
"id": "orders.delivered",
"label": "See What Was Delivered",
"about": "The keys, files and text an order handed over. Without it an order says how many, not what.",
"sensitive": true,
"needs": [
"orders.view"
]
}
]
}
],
"presets": [
{
"id": "support",
"name": "Support",
"about": "Orders and what they delivered, customers, tickets and reviews.",
"permissions": [
"orders.view",
"orders.delivered"
]
},
{
"id": "catalogue",
"name": "Catalogue",
"about": "Products, stock, categories, coupons and upsells.",
"permissions": [
"products.view",
"products.edit"
]
}
]
},
"limits": {
"teams": 10,
"people": 30,
"name": 40,
"perInvite": 10,
"inviteDays": 7
}
}
}{
"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.

