Create Credential Group
curl --request POST \
--url https://api.thehyperstack.com/v1/groups/new \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"certificate_template": "<string>",
"badge_template": "<string>",
"url": "<string>",
"tags": {},
"group_code": "<string>",
"does_expire": true,
"validity": 123,
"blockchain": true
}
'import requests
url = "https://api.thehyperstack.com/v1/groups/new"
payload = {
"title": "<string>",
"description": "<string>",
"certificate_template": "<string>",
"badge_template": "<string>",
"url": "<string>",
"tags": {},
"group_code": "<string>",
"does_expire": True,
"validity": 123,
"blockchain": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
description: '<string>',
certificate_template: '<string>',
badge_template: '<string>',
url: '<string>',
tags: {},
group_code: '<string>',
does_expire: true,
validity: 123,
blockchain: true
})
};
fetch('https://api.thehyperstack.com/v1/groups/new', 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.thehyperstack.com/v1/groups/new",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'description' => '<string>',
'certificate_template' => '<string>',
'badge_template' => '<string>',
'url' => '<string>',
'tags' => [
],
'group_code' => '<string>',
'does_expire' => true,
'validity' => 123,
'blockchain' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.thehyperstack.com/v1/groups/new"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"blockchain\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.thehyperstack.com/v1/groups/new")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"blockchain\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.thehyperstack.com/v1/groups/new")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"blockchain\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"group_key": "aBcDeFgHiJkL"
}
{
"success": false,
"error": "Title and Description are required",
"error_code": "missing_title_description"
}
{
"detail": "Invalid token or organization not found"
}
Credential Groups
Create Credential Group
POST
/
v1
/
groups
/
new
Create Credential Group
curl --request POST \
--url https://api.thehyperstack.com/v1/groups/new \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"certificate_template": "<string>",
"badge_template": "<string>",
"url": "<string>",
"tags": {},
"group_code": "<string>",
"does_expire": true,
"validity": 123,
"blockchain": true
}
'import requests
url = "https://api.thehyperstack.com/v1/groups/new"
payload = {
"title": "<string>",
"description": "<string>",
"certificate_template": "<string>",
"badge_template": "<string>",
"url": "<string>",
"tags": {},
"group_code": "<string>",
"does_expire": True,
"validity": 123,
"blockchain": True
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
description: '<string>',
certificate_template: '<string>',
badge_template: '<string>',
url: '<string>',
tags: {},
group_code: '<string>',
does_expire: true,
validity: 123,
blockchain: true
})
};
fetch('https://api.thehyperstack.com/v1/groups/new', 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.thehyperstack.com/v1/groups/new",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'description' => '<string>',
'certificate_template' => '<string>',
'badge_template' => '<string>',
'url' => '<string>',
'tags' => [
],
'group_code' => '<string>',
'does_expire' => true,
'validity' => 123,
'blockchain' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.thehyperstack.com/v1/groups/new"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"blockchain\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.thehyperstack.com/v1/groups/new")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"blockchain\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.thehyperstack.com/v1/groups/new")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"blockchain\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"group_key": "aBcDeFgHiJkL"
}
{
"success": false,
"error": "Title and Description are required",
"error_code": "missing_title_description"
}
{
"detail": "Invalid token or organization not found"
}
Description
This endpoint allows you to create a new credential group in Hyperstack. A credential group acts as a template container that organizes credentials by program or course.Headers
string
required
Bearer YOUR_API_TOKEN — obtainable from Hyperstack Dashboard → Settings → API Access
Body Parameters
string
required
Title of the credential group.
string
required
Description of the credential group.
string
required
The template key for the certificate. At least one of
certificate_template or badge_template is required.string
required
The template key for the badge. At least one of
certificate_template or badge_template is required.string
required
External URL associated with the credential group.
array[string]
required
Tags related to the credential group.
string
required
A human-readable code for the group (e.g.
CERT-2024). Alphanumeric, hyphens, and spaces only. Auto-generated if not provided.boolean
required
Indicates whether credentials in this group expire. Defaults to
false.number
required
Validity period (in years) if
does_expire is true.boolean
required
Enables decentralized blockchain anchoring for credentials. Defaults to
false.Success Response Fields
boolean
Indicates whether the group creation was successful. Always
true for a 200 response.string
The unique key (ID) assigned to the newly created credential group.
Responses
{
"success": true,
"group_key": "aBcDeFgHiJkL"
}
{
"success": false,
"error": "Title and Description are required",
"error_code": "missing_title_description"
}
{
"detail": "Invalid token or organization not found"
}
curl -X POST "https://api.thehyperstack.com/v1/groups/new" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Course Completion Certificate",
"description": "Awarded upon successful completion of the course.",
"certificate_template": "abcdefg",
"badge_template": "xyz",
"url": "https://acme.com/course",
"tags": ["apple", "mango", "orange"],
"group_code": "CERT-2024",
"does_expire": true,
"validity": 1,
"blockchain": true
}'
Last modified on February 22, 2026
Was this page helpful?
⌘I

