Update Credential Group
curl --request POST \
--url https://api.thehyperstack.com/v1/group/update/{group_key} \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"url": "<string>",
"tags": {},
"group_code": "<string>",
"does_expire": true,
"validity": 123,
"certificate_template": "<string>",
"badge_template": "<string>",
"blockchain": true,
"do_notify": true
}
'import requests
url = "https://api.thehyperstack.com/v1/group/update/{group_key}"
payload = {
"title": "<string>",
"description": "<string>",
"url": "<string>",
"tags": {},
"group_code": "<string>",
"does_expire": True,
"validity": 123,
"certificate_template": "<string>",
"badge_template": "<string>",
"blockchain": True,
"do_notify": True
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
description: '<string>',
url: '<string>',
tags: {},
group_code: '<string>',
does_expire: true,
validity: 123,
certificate_template: '<string>',
badge_template: '<string>',
blockchain: true,
do_notify: true
})
};
fetch('https://api.thehyperstack.com/v1/group/update/{group_key}', 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/group/update/{group_key}",
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>',
'url' => '<string>',
'tags' => [
],
'group_code' => '<string>',
'does_expire' => true,
'validity' => 123,
'certificate_template' => '<string>',
'badge_template' => '<string>',
'blockchain' => true,
'do_notify' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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/group/update/{group_key}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"blockchain\": true,\n \"do_notify\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
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/group/update/{group_key}")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"blockchain\": true,\n \"do_notify\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.thehyperstack.com/v1/group/update/{group_key}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"blockchain\": true,\n \"do_notify\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true
}
{
"success": false,
"error": "Invalid Badge Template",
"error_code": "invalid_badge_template"
}
{
"success": false,
"error": "Invalid Certificate Template",
"error_code": "invalid_certificate_template"
}
{
"success": false,
"error": "tags must be a list of strings or a comma-separated string",
"error_code": "invalid_tags"
}
{
"success": false,
"error": "group_code must be text of at most 50 letters, digits, hyphens or spaces",
"error_code": "invalid_group_code"
}
{
"success": false,
"error": "Group Not Found",
"error_code": "not_found"
}
{
"detail": "Invalid token or organization not found"
}
Credential Groups
Update Credential Group
POST
/
v1
/
group
/
update
/
{group_key}
Update Credential Group
curl --request POST \
--url https://api.thehyperstack.com/v1/group/update/{group_key} \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"url": "<string>",
"tags": {},
"group_code": "<string>",
"does_expire": true,
"validity": 123,
"certificate_template": "<string>",
"badge_template": "<string>",
"blockchain": true,
"do_notify": true
}
'import requests
url = "https://api.thehyperstack.com/v1/group/update/{group_key}"
payload = {
"title": "<string>",
"description": "<string>",
"url": "<string>",
"tags": {},
"group_code": "<string>",
"does_expire": True,
"validity": 123,
"certificate_template": "<string>",
"badge_template": "<string>",
"blockchain": True,
"do_notify": True
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
description: '<string>',
url: '<string>',
tags: {},
group_code: '<string>',
does_expire: true,
validity: 123,
certificate_template: '<string>',
badge_template: '<string>',
blockchain: true,
do_notify: true
})
};
fetch('https://api.thehyperstack.com/v1/group/update/{group_key}', 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/group/update/{group_key}",
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>',
'url' => '<string>',
'tags' => [
],
'group_code' => '<string>',
'does_expire' => true,
'validity' => 123,
'certificate_template' => '<string>',
'badge_template' => '<string>',
'blockchain' => true,
'do_notify' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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/group/update/{group_key}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"blockchain\": true,\n \"do_notify\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
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/group/update/{group_key}")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"blockchain\": true,\n \"do_notify\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.thehyperstack.com/v1/group/update/{group_key}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"url\": \"<string>\",\n \"tags\": {},\n \"group_code\": \"<string>\",\n \"does_expire\": true,\n \"validity\": 123,\n \"certificate_template\": \"<string>\",\n \"badge_template\": \"<string>\",\n \"blockchain\": true,\n \"do_notify\": true\n}"
response = http.request(request)
puts response.read_body{
"success": true
}
{
"success": false,
"error": "Invalid Badge Template",
"error_code": "invalid_badge_template"
}
{
"success": false,
"error": "Invalid Certificate Template",
"error_code": "invalid_certificate_template"
}
{
"success": false,
"error": "tags must be a list of strings or a comma-separated string",
"error_code": "invalid_tags"
}
{
"success": false,
"error": "group_code must be text of at most 50 letters, digits, hyphens or spaces",
"error_code": "invalid_group_code"
}
{
"success": false,
"error": "Group Not Found",
"error_code": "not_found"
}
{
"detail": "Invalid token or organization not found"
}
Description
Changes a credential group. Only the fields you send are changed. If the call returns an error, nothing is changed.Headers
string
required
Your API key:
Bearer YOUR_API_KEY. Create a key in the Studio under Settings → Developers.Path Parameters
string
required
Key of the group to change.
Body Parameters
string
New title of the group.
string
New description of the group.
string
New web page for the group.
array[string] | string
New tags, as a list or a comma-separated string. They replace all the group’s tags.
string
New short code for the group. Characters other than letters, numbers, hyphens and spaces are removed. What is left must be 50 characters or fewer, or the call returns
400 with invalid_group_code. An empty string is ignored.boolean
true to make credentials expire after validity years. false to make them never expire.If you send true without validity, credentials never expire.number
How many years a credential is valid after it is published. Used only when you also send
does_expire: true.string
Key of a certificate design in your organization. The group’s credentials use this design from now on. An unknown key returns
400 with invalid_certificate_template.string
Key of a badge design in your organization. The group’s credentials use this design from now on. An unknown key returns
400 with invalid_badge_template.boolean
true to anchor credentials on the blockchain, false to stop. It only takes effect if your plan includes blockchain.boolean
false to stop emailing recipients when their credential is published, true to email them.A new expiry applies to credentials published after the change. Credentials already published keep their expiry date. To change one, use Update Credential.
Success Response Fields
boolean
true when the group was saved.Responses
{
"success": true
}
{
"success": false,
"error": "Invalid Badge Template",
"error_code": "invalid_badge_template"
}
{
"success": false,
"error": "Invalid Certificate Template",
"error_code": "invalid_certificate_template"
}
{
"success": false,
"error": "tags must be a list of strings or a comma-separated string",
"error_code": "invalid_tags"
}
{
"success": false,
"error": "group_code must be text of at most 50 letters, digits, hyphens or spaces",
"error_code": "invalid_group_code"
}
{
"success": false,
"error": "Group Not Found",
"error_code": "not_found"
}
{
"detail": "Invalid token or organization not found"
}
curl -X POST "https://api.thehyperstack.com/v1/group/update/Kq7Zp2LmX9aB" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Cloud Security Fundamentals (2026)",
"tags": ["security", "cloud", "2026"],
"does_expire": true,
"validity": 3
}'
Last modified on October 20, 2026
Was this page helpful?

