Search Credentials
curl --request POST \
--url https://api.thehyperstack.com/v1/credentials/search \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {
"name": "<string>",
"email": "<string>"
},
"group_key": "<string>",
"credential_key": "<string>",
"custom_attributes": {},
"start_date": "<string>",
"end_date": "<string>",
"page": 123,
"page_size": 123
}
'import requests
url = "https://api.thehyperstack.com/v1/credentials/search"
payload = {
"recipient": {
"name": "<string>",
"email": "<string>"
},
"group_key": "<string>",
"credential_key": "<string>",
"custom_attributes": {},
"start_date": "<string>",
"end_date": "<string>",
"page": 123,
"page_size": 123
}
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({
recipient: {name: '<string>', email: '<string>'},
group_key: '<string>',
credential_key: '<string>',
custom_attributes: {},
start_date: '<string>',
end_date: '<string>',
page: 123,
page_size: 123
})
};
fetch('https://api.thehyperstack.com/v1/credentials/search', 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/search",
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' => [
'name' => '<string>',
'email' => '<string>'
],
'group_key' => '<string>',
'credential_key' => '<string>',
'custom_attributes' => [
],
'start_date' => '<string>',
'end_date' => '<string>',
'page' => 123,
'page_size' => 123
]),
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/credentials/search"
payload := strings.NewReader("{\n \"recipient\": {\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"group_key\": \"<string>\",\n \"credential_key\": \"<string>\",\n \"custom_attributes\": {},\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"page\": 123,\n \"page_size\": 123\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/credentials/search")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": {\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"group_key\": \"<string>\",\n \"credential_key\": \"<string>\",\n \"custom_attributes\": {},\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"page\": 123,\n \"page_size\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.thehyperstack.com/v1/credentials/search")
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 \"recipient\": {\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"group_key\": \"<string>\",\n \"credential_key\": \"<string>\",\n \"custom_attributes\": {},\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"page\": 123,\n \"page_size\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"total": 1,
"page": 1,
"page_size": 50,
"credentials": [
{
"document_id": "6f1c2a8e-3b4d-4e5f-9a7b-1c2d3e4f5a6b",
"document_url": "https://hyperstack.id/credential/6f1c2a8e-3b4d-4e5f-9a7b-1c2d3e4f5a6b",
"recipient": { "name": "Jane Doe", "email": "jane.doe@example.com" },
"group": { "title": "Cloud Security Fundamentals", "key": "Kq7Zp2LmX9aB", "code": "CSF-2026" },
"issued_on": "2026-03-15T10:30:04.903512Z",
"valid_until": null,
"metadata": { "custom_grade": "A" },
"status": "active",
"privacy": "public"
}
]
}
{
"success": false,
"error": "start_date must be a date in YYYY/MM/DD format",
"error_code": "invalid_date"
}
{
"success": false,
"error": "recipient must be an object with name and email",
"error_code": "invalid_recipient"
}
{
"success": false,
"error": "page must be a whole number of 1 or more, and page_size a whole number up to 500",
"error_code": "invalid_page"
}
{
"detail": "Invalid token or organization not found"
}
Credentials
Search Credentials
POST
/
v1
/
credentials
/
search
Search Credentials
curl --request POST \
--url https://api.thehyperstack.com/v1/credentials/search \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {
"name": "<string>",
"email": "<string>"
},
"group_key": "<string>",
"credential_key": "<string>",
"custom_attributes": {},
"start_date": "<string>",
"end_date": "<string>",
"page": 123,
"page_size": 123
}
'import requests
url = "https://api.thehyperstack.com/v1/credentials/search"
payload = {
"recipient": {
"name": "<string>",
"email": "<string>"
},
"group_key": "<string>",
"credential_key": "<string>",
"custom_attributes": {},
"start_date": "<string>",
"end_date": "<string>",
"page": 123,
"page_size": 123
}
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({
recipient: {name: '<string>', email: '<string>'},
group_key: '<string>',
credential_key: '<string>',
custom_attributes: {},
start_date: '<string>',
end_date: '<string>',
page: 123,
page_size: 123
})
};
fetch('https://api.thehyperstack.com/v1/credentials/search', 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/search",
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' => [
'name' => '<string>',
'email' => '<string>'
],
'group_key' => '<string>',
'credential_key' => '<string>',
'custom_attributes' => [
],
'start_date' => '<string>',
'end_date' => '<string>',
'page' => 123,
'page_size' => 123
]),
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/credentials/search"
payload := strings.NewReader("{\n \"recipient\": {\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"group_key\": \"<string>\",\n \"credential_key\": \"<string>\",\n \"custom_attributes\": {},\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"page\": 123,\n \"page_size\": 123\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/credentials/search")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"recipient\": {\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"group_key\": \"<string>\",\n \"credential_key\": \"<string>\",\n \"custom_attributes\": {},\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"page\": 123,\n \"page_size\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.thehyperstack.com/v1/credentials/search")
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 \"recipient\": {\n \"name\": \"<string>\",\n \"email\": \"<string>\"\n },\n \"group_key\": \"<string>\",\n \"credential_key\": \"<string>\",\n \"custom_attributes\": {},\n \"start_date\": \"<string>\",\n \"end_date\": \"<string>\",\n \"page\": 123,\n \"page_size\": 123\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"total": 1,
"page": 1,
"page_size": 50,
"credentials": [
{
"document_id": "6f1c2a8e-3b4d-4e5f-9a7b-1c2d3e4f5a6b",
"document_url": "https://hyperstack.id/credential/6f1c2a8e-3b4d-4e5f-9a7b-1c2d3e4f5a6b",
"recipient": { "name": "Jane Doe", "email": "jane.doe@example.com" },
"group": { "title": "Cloud Security Fundamentals", "key": "Kq7Zp2LmX9aB", "code": "CSF-2026" },
"issued_on": "2026-03-15T10:30:04.903512Z",
"valid_until": null,
"metadata": { "custom_grade": "A" },
"status": "active",
"privacy": "public"
}
]
}
{
"success": false,
"error": "start_date must be a date in YYYY/MM/DD format",
"error_code": "invalid_date"
}
{
"success": false,
"error": "recipient must be an object with name and email",
"error_code": "invalid_recipient"
}
{
"success": false,
"error": "page must be a whole number of 1 or more, and page_size a whole number up to 500",
"error_code": "invalid_page"
}
{
"detail": "Invalid token or organization not found"
}
Description
Finds published credentials by recipient, group, credential ID, custom attribute or date. Results are newest first. Drafts are not included. All filters are optional. A credential must match every filter you send.Headers
string
required
Your API key:
Bearer YOUR_API_KEY. Create a key in the Studio under Settings → Developers.Body Parameters
object
string
Group key, or part of it.
string
Credential ID (
document_id), or part of it.object
Attribute values the credential must have, such as
{"custom_grade": "A"}. Values must match exactly. Send them as strings, because Hyperstack saves attribute values as text.string
Start of the date range, as
YYYY/MM/DD, for example 2026/03/01. Used only together with end_date.string
End of the date range, as
YYYY/MM/DD. Used only together with start_date.The range runs from the start of start_date to the start of end_date (UTC), so credentials from the end_date day itself are not included. To include a day, set end_date to the next day.number
default:"1"
Page number. Starts at
1. Send a whole number, such as 2 or "2".number
default:"50"
How many credentials on each page, up to
500. A bigger value is cut to 500, and page_size in the response shows the size used.Success Response Fields
boolean
true when the request worked.number
Number of credentials that match.
number
The page number of this response.
number
The page size used.
array[object]
The matching credentials on this page. Each has the same fields as View Credential, without
success.Responses
{
"success": true,
"total": 1,
"page": 1,
"page_size": 50,
"credentials": [
{
"document_id": "6f1c2a8e-3b4d-4e5f-9a7b-1c2d3e4f5a6b",
"document_url": "https://hyperstack.id/credential/6f1c2a8e-3b4d-4e5f-9a7b-1c2d3e4f5a6b",
"recipient": { "name": "Jane Doe", "email": "jane.doe@example.com" },
"group": { "title": "Cloud Security Fundamentals", "key": "Kq7Zp2LmX9aB", "code": "CSF-2026" },
"issued_on": "2026-03-15T10:30:04.903512Z",
"valid_until": null,
"metadata": { "custom_grade": "A" },
"status": "active",
"privacy": "public"
}
]
}
{
"success": false,
"error": "start_date must be a date in YYYY/MM/DD format",
"error_code": "invalid_date"
}
{
"success": false,
"error": "recipient must be an object with name and email",
"error_code": "invalid_recipient"
}
{
"success": false,
"error": "page must be a whole number of 1 or more, and page_size a whole number up to 500",
"error_code": "invalid_page"
}
{
"detail": "Invalid token or organization not found"
}
curl -X POST "https://api.thehyperstack.com/v1/credentials/search" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient": { "email": "@example.com" },
"group_key": "Kq7Zp2LmX9aB",
"start_date": "2026/03/01",
"end_date": "2026/04/01",
"page": 1,
"page_size": 50
}'
Last modified on October 20, 2026
Was this page helpful?

