Generate Credential (Draft)
curl --request POST \
--url https://api.thehyperstack.com/v1/credentials/generate \
--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/generate"
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/generate', 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/generate",
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/generate"
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/generate")
.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/generate")
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": "draft",
"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
Generate Credential (Draft)
POST
/
v1
/
credentials
/
generate
Generate Credential (Draft)
curl --request POST \
--url https://api.thehyperstack.com/v1/credentials/generate \
--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/generate"
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/generate', 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/generate",
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/generate"
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/generate")
.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/generate")
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": "draft",
"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 create a credential in draft state without immediately publishing it. The credential can be reviewed and published later using the Publish Credential endpoint.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 generated.
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 generated.
string
The unique ID of the newly created draft credential.
string
URL where the credential will be accessible once published.
string
Publication status of the credential. Will be
"draft" 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 record was created.
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": "draft",
"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/generate" \
-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_location": "Mars"
}
}'
Last modified on February 22, 2026
Was this page helpful?
⌘I

