Search Credentials
curl --request POST \
--url https://api.thehyperstack.com/v1/credentials/search \
--header 'Content-Type: application/json' \
--data '
{
"recipient": {},
"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": {},
"group_key": "<string>",
"credential_key": "<string>",
"custom_attributes": {},
"start_date": "<string>",
"end_date": "<string>",
"page": 123,
"page_size": 123
}
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: {},
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' => [
],
'group_key' => '<string>',
'credential_key' => '<string>',
'custom_attributes' => [
],
'start_date' => '<string>',
'end_date' => '<string>',
'page' => 123,
'page_size' => 123
]),
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/search"
payload := strings.NewReader("{\n \"recipient\": {},\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("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("Content-Type", "application/json")
.body("{\n \"recipient\": {},\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["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": {},\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": "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" },
"status": "active",
"privacy": "public"
}
]
}
{
"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 'Content-Type: application/json' \
--data '
{
"recipient": {},
"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": {},
"group_key": "<string>",
"credential_key": "<string>",
"custom_attributes": {},
"start_date": "<string>",
"end_date": "<string>",
"page": 123,
"page_size": 123
}
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: {},
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' => [
],
'group_key' => '<string>',
'credential_key' => '<string>',
'custom_attributes' => [
],
'start_date' => '<string>',
'end_date' => '<string>',
'page' => 123,
'page_size' => 123
]),
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/search"
payload := strings.NewReader("{\n \"recipient\": {},\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("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("Content-Type", "application/json")
.body("{\n \"recipient\": {},\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["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": {},\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": "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" },
"status": "active",
"privacy": "public"
}
]
}
{
"detail": "Invalid token or organization not found"
}
Description
This endpoint allows you to search and filter credentials based on recipient details, group key, credential key, custom attributes, date range, and pagination.Headers
string
required
Bearer YOUR_API_TOKEN — obtainable from Hyperstack Dashboard → Settings → API Access
Body Parameters
object
required
Filter by recipient details. Can include:
name— recipient’s name (partial match)email— recipient’s email (partial match)
string
required
Filter credentials by credential group key (partial match).
string
required
Filter by a specific credential key (partial match).
object
required
Filter by custom attributes stored with the credentials.
string
required
Filter credentials issued on or after this date. Format:
YYYY/MM/DD.string
required
Filter credentials issued on or before this date. Format:
YYYY/MM/DD. Must be used together with start_date.number
required
The page number for pagination (default is 1).
number
required
The number of credentials to return per page (default is 50).
Success Response Fields
boolean
Indicates whether the credential search was successful.
array[object]
An array of credential objects matching the search criteria. Each object contains the same fields as the View Credential response.
number
Total number of credentials matching the search criteria.
number
Current page number.
number
Number of credentials returned per page.
Responses
{
"success": true,
"total": 1,
"page": 1,
"page_size": 50,
"credentials": [
{
"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" },
"status": "active",
"privacy": "public"
}
]
}
{
"detail": "Invalid token or organization not found"
}
Last modified on February 22, 2026
Was this page helpful?
⌘I

