List pass groups
curl --request GET \
--url https://api.zenamu.com/v1/pass-groups \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zenamu.com/v1/pass-groups"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zenamu.com/v1/pass-groups', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zenamu.com/v1/pass-groups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zenamu.com/v1/pass-groups"
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.zenamu.com/v1/pass-groups")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zenamu.com/v1/pass-groups")
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{
"statusCode": 200,
"message": "Success",
"data": [
{
"id": 42,
"name": "10-entry pass",
"order": 0,
"state": "active"
},
{
"id": 57,
"name": "Unlimited",
"order": 1,
"state": "archived"
}
]
}{
"statusCode": 401,
"error": "Error",
"message": "Missing access token. You must send your access token in the request header ('Authorization: Bearer YOUR_ACCESS_TOKEN' )"
}{
"statusCode": 403,
"error": "Error",
"message": "The Zenamu API is only available on the Ultimate tariff."
}{
"statusCode": 404,
"error": "Error",
"message": "API key not found"
}{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded: up to 100 requests per minute per endpoint."
}{
"statusCode": 500,
"error": "Internal Server Error",
"message": "We apologize, but there was an error on our end. If problems persist, please contact us at [email protected]"
}List pass groups
Returns your studio’s entry-pass groups. Use a group’s id as the
passGroupId when granting passes, so the entries land in the intended
group.
Both active and archived groups are returned. Archived groups are
hidden in public booking widgets, but clients may still hold a balance
in one and you can still top it up.
See the Pass group object for details.
GET
/
v1
/
pass-groups
List pass groups
curl --request GET \
--url https://api.zenamu.com/v1/pass-groups \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zenamu.com/v1/pass-groups"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zenamu.com/v1/pass-groups', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zenamu.com/v1/pass-groups",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zenamu.com/v1/pass-groups"
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.zenamu.com/v1/pass-groups")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zenamu.com/v1/pass-groups")
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{
"statusCode": 200,
"message": "Success",
"data": [
{
"id": 42,
"name": "10-entry pass",
"order": 0,
"state": "active"
},
{
"id": 57,
"name": "Unlimited",
"order": 1,
"state": "archived"
}
]
}{
"statusCode": 401,
"error": "Error",
"message": "Missing access token. You must send your access token in the request header ('Authorization: Bearer YOUR_ACCESS_TOKEN' )"
}{
"statusCode": 403,
"error": "Error",
"message": "The Zenamu API is only available on the Ultimate tariff."
}{
"statusCode": 404,
"error": "Error",
"message": "API key not found"
}{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Rate limit exceeded: up to 100 requests per minute per endpoint."
}{
"statusCode": 500,
"error": "Internal Server Error",
"message": "We apologize, but there was an error on our end. If problems persist, please contact us at [email protected]"
}Authorizations
Your secret API key (zen_live_…), sent as Authorization: Bearer <key>. Backend-to-backend only — never expose it in a browser. See Authentication.

