Issue Credential
curl --request POST \
--url https://api.thehyperstack.com/v1/credentials/new \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {},
"recipient.name": "<string>",
"recipient.email": "<string>",
"group_key": "<string>",
"custom_attributes": {}
}
'import requests
url = "https://api.thehyperstack.com/v1/credentials/new"
payload = {
"recipient": {},
"recipient.name": "<string>",
"recipient.email": "<string>",
"group_key": "<string>",
"custom_attributes": {}
}
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({
recipient: {},
'recipient.name': '<string>',
'recipient.email': '<string>',
group_key: '<string>',
custom_attributes: {}
})
};
fetch('https://api.thehyperstack.com/v1/credentials/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/credentials/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([
'recipient' => [
],
'recipient.name' => '<string>',
'recipient.email' => '<string>',
'group_key' => '<string>',
'custom_attributes' => [
]
]),
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/credentials/new"
payload := strings.NewReader("{\n \"recipient\": {},\n \"recipient.name\": \"<string>\",\n \"recipient.email\": \"<string>\",\n \"group_key\": \"<string>\",\n \"custom_attributes\": {}\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/credentials/new")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": {},\n \"recipient.name\": \"<string>\",\n \"recipient.email\": \"<string>\",\n \"group_key\": \"<string>\",\n \"custom_attributes\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.thehyperstack.com/v1/credentials/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 \"recipient\": {},\n \"recipient.name\": \"<string>\",\n \"recipient.email\": \"<string>\",\n \"group_key\": \"<string>\",\n \"custom_attributes\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": "published",
"document_id": "j4nDvaxF6ehodPXI84p4X1yhQe7lrYgx",
"document_url": "https://hyperstack.id/credential/j4nDvaxF6ehodPXI84p4X1yhQe7lrYgx",
"recipient": { "name": "John Doe", "email": "john@example.com" },
"group": { "title": "Cloud Certification", "key": "GcI6H5b66a3v", "code": "CC-2024" },
"issued_on": "2024-03-15T10:30:00Z",
"valid_until": null,
"metadata": { "custom_location": "Mars" },
"privacy": "public"
}
{
"success": false,
"error": "Recipient Name and Email are required",
"error_code": "missing_recipient"
}
{
"success": false,
"error": "Low balance",
"error_code": "low_balance"
}
{
"success": false,
"error": "Group Not Found",
"error_code": "group_not_found"
}
{
"success": false,
"error": "Credential already exists for this recipient, to overwrite, set duplication to true in group settings.",
"error_code": "credential_exists"
}
{
"detail": "Invalid token or organization not found"
}
Credentials
Issue Credential
POST
/
v1
/
credentials
/
new
Issue Credential
curl --request POST \
--url https://api.thehyperstack.com/v1/credentials/new \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {},
"recipient.name": "<string>",
"recipient.email": "<string>",
"group_key": "<string>",
"custom_attributes": {}
}
'import requests
url = "https://api.thehyperstack.com/v1/credentials/new"
payload = {
"recipient": {},
"recipient.name": "<string>",
"recipient.email": "<string>",
"group_key": "<string>",
"custom_attributes": {}
}
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({
recipient: {},
'recipient.name': '<string>',
'recipient.email': '<string>',
group_key: '<string>',
custom_attributes: {}
})
};
fetch('https://api.thehyperstack.com/v1/credentials/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/credentials/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([
'recipient' => [
],
'recipient.name' => '<string>',
'recipient.email' => '<string>',
'group_key' => '<string>',
'custom_attributes' => [
]
]),
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/credentials/new"
payload := strings.NewReader("{\n \"recipient\": {},\n \"recipient.name\": \"<string>\",\n \"recipient.email\": \"<string>\",\n \"group_key\": \"<string>\",\n \"custom_attributes\": {}\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/credentials/new")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": {},\n \"recipient.name\": \"<string>\",\n \"recipient.email\": \"<string>\",\n \"group_key\": \"<string>\",\n \"custom_attributes\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.thehyperstack.com/v1/credentials/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 \"recipient\": {},\n \"recipient.name\": \"<string>\",\n \"recipient.email\": \"<string>\",\n \"group_key\": \"<string>\",\n \"custom_attributes\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": "published",
"document_id": "j4nDvaxF6ehodPXI84p4X1yhQe7lrYgx",
"document_url": "https://hyperstack.id/credential/j4nDvaxF6ehodPXI84p4X1yhQe7lrYgx",
"recipient": { "name": "John Doe", "email": "john@example.com" },
"group": { "title": "Cloud Certification", "key": "GcI6H5b66a3v", "code": "CC-2024" },
"issued_on": "2024-03-15T10:30:00Z",
"valid_until": null,
"metadata": { "custom_location": "Mars" },
"privacy": "public"
}
{
"success": false,
"error": "Recipient Name and Email are required",
"error_code": "missing_recipient"
}
{
"success": false,
"error": "Low balance",
"error_code": "low_balance"
}
{
"success": false,
"error": "Group Not Found",
"error_code": "group_not_found"
}
{
"success": false,
"error": "Credential already exists for this recipient, to overwrite, set duplication to true in group settings.",
"error_code": "credential_exists"
}
{
"detail": "Invalid token or organization not found"
}
Description
This endpoint allows you to issue a new credential to a recipient within a specific credential group. The credential is immediately published.
Legacy endpoint: POST /v1/credential/issue is also supported for backward compatibility.
Headers
string
required
Bearer YOUR_API_TOKEN — obtainable from Hyperstack Dashboard → Settings → API Access
Body Parameters
object
required
Information about the recipient of the credential.
string
required
Full name of the recipient.
string
required
Email address of the recipient.
string
required
The unique key of the credential group in which this credential will be issued.
object
required
Key-value pairs of custom attributes to embed in the credential. Keys must match the custom fields (prefixed with
custom_) configured for your account.Success Response Fields
boolean
Indicates whether the credential was successfully issued.
string
The unique ID of the newly created credential.
string
URL to view the newly created credential.
string
Publication status of the credential. Will be
"published" for this endpoint.object
Object containing
name and email of the recipient.object
Object containing
title, key, and code of the credential group.string
ISO 8601 timestamp of when the credential was issued.
string
ISO 8601 expiry timestamp.
null if the credential does not expire.object
Custom attribute values stored with the credential.
string
Visibility of the credential —
"public" or "private".Responses
{
"success": true,
"status": "published",
"document_id": "j4nDvaxF6ehodPXI84p4X1yhQe7lrYgx",
"document_url": "https://hyperstack.id/credential/j4nDvaxF6ehodPXI84p4X1yhQe7lrYgx",
"recipient": { "name": "John Doe", "email": "john@example.com" },
"group": { "title": "Cloud Certification", "key": "GcI6H5b66a3v", "code": "CC-2024" },
"issued_on": "2024-03-15T10:30:00Z",
"valid_until": null,
"metadata": { "custom_location": "Mars" },
"privacy": "public"
}
{
"success": false,
"error": "Recipient Name and Email are required",
"error_code": "missing_recipient"
}
{
"success": false,
"error": "Low balance",
"error_code": "low_balance"
}
{
"success": false,
"error": "Group Not Found",
"error_code": "group_not_found"
}
{
"success": false,
"error": "Credential already exists for this recipient, to overwrite, set duplication to true in group settings.",
"error_code": "credential_exists"
}
{
"detail": "Invalid token or organization not found"
}
curl -X POST "https://api.thehyperstack.com/v1/credentials/new" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"recipient": {
"name": "John Doe",
"email": "john@example.com"
},
"group_key": "GcI6H5b66a3v",
"custom_attributes": {
"custom_date": "2035",
"custom_location": "Mars"
}
}'
Last modified on February 22, 2026
Was this page helpful?
⌘I

