Program detail
curl --request GET \
--url https://api.sandbox.mocachain.org/v1/catalog/programs/{id}import requests
url = "https://api.sandbox.mocachain.org/v1/catalog/programs/{id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.sandbox.mocachain.org/v1/catalog/programs/{id}', 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.sandbox.mocachain.org/v1/catalog/programs/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.mocachain.org/v1/catalog/programs/{id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sandbox.mocachain.org/v1/catalog/programs/{id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.mocachain.org/v1/catalog/programs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"code": 80000000,
"msg": "success",
"data": {
"programId": "prg_01",
"name": "Age Gate",
"description": "Verify user meets minimum age requirement",
"acceptedCredentials": [
{
"credentialId": "c21s70g0i54sn0023172Cv",
"name": "Age Verification",
"category": "identity",
"holderCount": 120,
"issuanceCount": 200,
"verificationConditions": [
"age >= 18"
]
}
],
"verifierInfo": {
"verifierId": "ver_01",
"name": "Verify Inc",
"verifierDid": "did:air:id:test:7Q33abcDEF"
},
"traction": {
"verificationCount": 85
},
"pricingModel": "per-verification",
"createdAt": "2026-02-01T08:00:00Z"
},
"timestamp": 1772530828000
}{
"error": 404,
"message": "Program not found"
}Catalog
Program detail
Returns a single verification program with the verifier’s identity, pricing model, the full list of accepted credentials (each with holder/issuance counts), and the zero-knowledge verification conditions required for each credential (e.g. age >= 18).
GET
/
catalog
/
programs
/
{id}
Program detail
curl --request GET \
--url https://api.sandbox.mocachain.org/v1/catalog/programs/{id}import requests
url = "https://api.sandbox.mocachain.org/v1/catalog/programs/{id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.sandbox.mocachain.org/v1/catalog/programs/{id}', 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.sandbox.mocachain.org/v1/catalog/programs/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.mocachain.org/v1/catalog/programs/{id}"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sandbox.mocachain.org/v1/catalog/programs/{id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.mocachain.org/v1/catalog/programs/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"code": 80000000,
"msg": "success",
"data": {
"programId": "prg_01",
"name": "Age Gate",
"description": "Verify user meets minimum age requirement",
"acceptedCredentials": [
{
"credentialId": "c21s70g0i54sn0023172Cv",
"name": "Age Verification",
"category": "identity",
"holderCount": 120,
"issuanceCount": 200,
"verificationConditions": [
"age >= 18"
]
}
],
"verifierInfo": {
"verifierId": "ver_01",
"name": "Verify Inc",
"verifierDid": "did:air:id:test:7Q33abcDEF"
},
"traction": {
"verificationCount": 85
},
"pricingModel": "per-verification",
"createdAt": "2026-02-01T08:00:00Z"
},
"timestamp": 1772530828000
}{
"error": 404,
"message": "Program not found"
}Pilot API — Available on Sandbox only at this stage. Endpoint is under active development and may change without notice. Not yet available in production.
Path Parameters
Program ID.
Response
Program with accepted credentials.
Standard API response envelope used by all Catalog endpoints.
Was this page helpful?
⌘I