Returns the main registry collection. Use query parameters to narrow results by category, KYC posture, geography, free-text search, or response shape.
example request
curl -s "https://cunicula.com/api/v1/services?category=vpn&q=monero&limit=2&sort=trust_score&order=desc"
parameters
| name | in | type | required | description |
|---|
category | query | string | no | Filter by category slug or label. e.g. vpn |
kyc | query | string | no | Filter by KYC level or posture. e.g. none |
country | query | string | no | Filter by supported country code. e.g. US |
jurisdiction | query | string | no | Filter by service jurisdiction code. e.g. PA |
q | query | string | no | Alias for search. If both q and search are sent, q wins. e.g. monero |
search | query | string | no | Legacy free-text match parameter. Use q for new clients. e.g. monero |
limit | query | integer | no | Maximum number of rows to return. e.g. 25 |
offset | query | integer | no | Pagination offset for large result sets. e.g. 0 |
sort | query | string | no | Field to sort by. e.g. trust_score |
order | query | string | no | Sort direction. e.g. desc |
fields | query | string | no | Comma-separated field projection. e.g. slug,name,kyc,jurisdiction |
example response
{
"data": [
{
"slug": "mullvad",
"name": "Mullvad",
"domain": "mullvad.net",
"url": "https://mullvad.net",
"trust_score": 93,
"trust_grade": "A",
"kyc": "none",
"jurisdiction": "SE",
"primary_category": "VPN",
"primary_bucket": "privacy",
"categories": [
"VPN",
"Privacy Tools"
],
"countries": [
"GLOBAL"
],
"networks": [
"Bitcoin",
"Monero"
],
"status": "active"
},
{
"slug": "ivpn",
"name": "IVPN",
"domain": "ivpn.net",
"url": "https://www.ivpn.net",
"trust_score": 90,
"trust_grade": "A",
"kyc": "none",
"jurisdiction": "GI",
"primary_category": "VPN",
"primary_bucket": "privacy",
"categories": [
"VPN",
"Privacy Tools"
],
"countries": [
"GLOBAL"
],
"networks": [
"Bitcoin",
"Monero",
"Lightning"
],
"status": "active"
}
],
"meta": {
"total": 2,
"limit": 2,
"offset": 0,
"sort": "trust_score",
"order": "desc",
"api_version": "v1",
"powered_by": "cunicula.com"
}
}
Returns the expanded registry record for a single provider, including trust signals, notes, features, and operational metadata where available.
example request
curl -s "https://cunicula.com/api/v1/services/bitrefill"
parameters
| name | in | type | required | description |
|---|
slug | path | string | yes | Unique service slug. e.g. bitrefill |
example response
{
"data": {
"service": "Bitrefill",
"slug": "bitrefill",
"domain": "bitrefill.com",
"url": "https://www.bitrefill.com",
"trust_score": 85,
"trust_grade": "A",
"kyc": "light",
"kyc_note": "May require phone, email, or additional verification depending on product and jurisdiction.",
"jurisdiction": "SE",
"jurisdiction_risk": "medium",
"trust_level": "verified",
"warrant_canary": false,
"primary_category": "Gift Cards",
"primary_bucket": "spending",
"categories": [
"Gift Cards",
"Mobile Top-Ups",
"Travel"
],
"networks": [
"Bitcoin",
"Lightning",
"Ethereum",
"Litecoin"
],
"fee": "varies by product",
"countries": [
"GLOBAL"
],
"features": [
"Gift cards",
"Mobile top-ups",
"eSIM",
"Lightning support"
],
"status": "active",
"last_checked": "2026-03-28T18:42:00Z",
"privacy_warning": "Account activity and delivery details may be linked to your contact information.",
"founderIntel": {
"score": 78,
"notes": [
"Public leadership team",
"Long operating history"
]
},
"vcIntel": {
"backed": true,
"notes": [
"Outside investment reported in public sources"
]
},
"followTheMoney": {
"score": 71,
"notes": [
"Commercial payment processor exposure",
"Crypto treasury support"
]
},
"profile_url": "https://cunicula.com/bitrefill"
},
"meta": {
"total": 1,
"api_version": "v1",
"powered_by": "cunicula.com"
}
}
Useful for building faceted navigation, category landing pages, and summary dashboards without downloading the full registry.
example request
curl -s "https://cunicula.com/api/v1/categories"
example response
{
"data": [
{
"key": "vpn",
"slug": "vpn",
"count": 18,
"label": "VPN"
},
{
"key": "exchange",
"slug": "exchange",
"count": 32,
"label": "Exchange"
},
{
"key": "gift_cards",
"slug": "gift-cards",
"count": 11,
"label": "Gift Cards"
}
],
"meta": {
"total": 3,
"api_version": "v1",
"powered_by": "cunicula.com"
}
}
Searches service names, descriptive fields, and related metadata. Use this for instant search UIs or lightweight discovery flows.
example request
curl -s "https://cunicula.com/api/v1/search?q=monero"
parameters
| name | in | type | required | description |
|---|
q | query | string | yes | Search query string. e.g. monero |
example response
{
"data": [
{
"service": "Trocador",
"slug": "trocador",
"domain": "trocador.app",
"url": "https://trocador.app",
"trust_score": 86,
"trust_grade": "A",
"kyc": "none",
"jurisdiction": "unknown",
"primary_category": "Exchange Aggregator",
"primary_bucket": "exchange",
"categories": [
"Exchange",
"Aggregator"
],
"networks": [
"Bitcoin",
"Monero",
"Lightning"
],
"status": "active",
"relevance_score": 0.98
},
{
"service": "XMRBazaar",
"slug": "xmrbazaar",
"domain": "xmrbazaar.com",
"url": "https://xmrbazaar.com",
"trust_score": 74,
"trust_grade": "B",
"kyc": "none",
"jurisdiction": "unknown",
"primary_category": "Marketplace",
"primary_bucket": "commerce",
"categories": [
"Marketplace",
"Peer-to-Peer"
],
"networks": [
"Monero"
],
"status": "active",
"relevance_score": 0.93
}
],
"meta": {
"total": 2,
"query": "monero",
"api_version": "v1",
"powered_by": "cunicula.com"
}
}
Returns article metadata for guides, reviews, and supporting editorial content. Useful for feeds, tag pages, and searchable resource indexes.
example request
curl -s "https://cunicula.com/api/v1/articles?tag=vpn&search=monero&limit=2&offset=0&sort=date&order=desc"
parameters
| name | in | type | required | description |
|---|
tag | query | string | no | Filter articles by tag. e.g. vpn |
search | query | string | no | Free-text search against article metadata. e.g. monero |
limit | query | integer | no | Maximum number of rows to return. e.g. 10 |
offset | query | integer | no | Pagination offset for large result sets. e.g. 0 |
sort | query | string | no | Field to sort by. e.g. date |
order | query | string | no | Sort direction. e.g. desc |
example response
{
"data": [
{
"slug": "best-no-kyc-vpns",
"title": "Best No-KYC VPNs",
"tags": [
"vpn",
"privacy",
"guides"
],
"desc": "A practical guide to VPN providers that minimize account friction and identity collection.",
"time": "8 min read",
"date": "2026-03-11",
"lastReviewed": "2026-03-24",
"url": "https://cunicula.com/articles/best-no-kyc-vpns"
},
{
"slug": "monero-services-roundup",
"title": "Monero Services Roundup",
"tags": [
"monero",
"exchange",
"guides"
],
"desc": "A curated look at wallets, swaps, and merchants that support Monero in practice.",
"time": "11 min read",
"date": "2026-02-28",
"lastReviewed": "2026-03-18",
"url": "https://cunicula.com/articles/monero-services-roundup"
}
],
"meta": {
"total": 104,
"limit": 2,
"offset": 0,
"sort": "date",
"order": "desc",
"api_version": "v1",
"powered_by": "cunicula.com"
}
}
Returns the full article metadata object for a single editorial page, including related articles for recommendation widgets and internal linking.
example request
curl -s "https://cunicula.com/api/v1/articles/best-no-kyc-vpns"
parameters
| name | in | type | required | description |
|---|
slug | path | string | yes | Unique article slug. e.g. best-no-kyc-vpns |
example response
{
"data": {
"slug": "best-no-kyc-vpns",
"title": "Best No-KYC VPNs",
"tags": [
"vpn",
"privacy",
"guides"
],
"desc": "A practical guide to VPN providers that minimize account friction and identity collection.",
"time": "8 min read",
"date": "2026-03-11",
"lastReviewed": "2026-03-24",
"url": "https://cunicula.com/articles/best-no-kyc-vpns",
"related_articles": [
{
"slug": "best-private-browsers",
"title": "Best Private Browsers",
"tags": [
"privacy",
"browsers"
],
"url": "https://cunicula.com/articles/best-private-browsers"
},
{
"slug": "monero-services-roundup",
"title": "Monero Services Roundup",
"tags": [
"monero",
"guides"
],
"url": "https://cunicula.com/articles/monero-services-roundup"
}
]
},
"meta": {
"total": 1,
"api_version": "v1",
"powered_by": "cunicula.com"
}
}
Returns the scorecard-oriented view for a single service, including trust grade, KYC posture, jurisdiction risk, features, and profile metadata.
example request
curl -s "https://cunicula.com/api/score/bitrefill"
parameters
| name | in | type | required | description |
|---|
slug | path | string | yes | Unique service slug. e.g. bitrefill |
example response
{
"service": "Bitrefill",
"slug": "bitrefill",
"domain": "bitrefill.com",
"url": "https://www.bitrefill.com",
"trust_score": 85,
"trust_grade": "A",
"kyc": "light",
"kyc_note": "Verification can vary by product and geography.",
"jurisdiction": "SE",
"jurisdiction_risk": "medium",
"trust_level": "verified",
"warrant_canary": false,
"categories": [
"Gift Cards",
"Mobile Top-Ups",
"Travel"
],
"networks": [
"Bitcoin",
"Lightning",
"Ethereum",
"Litecoin"
],
"fee": "varies by product",
"countries": [
"GLOBAL"
],
"features": [
"Gift cards",
"Mobile top-ups",
"eSIM",
"Lightning support"
],
"status": "active",
"last_checked": "2026-03-28T18:42:00Z",
"privacy_warning": "Account activity and delivery details may be linked to your contact information.",
"profile_url": "https://cunicula.com/bitrefill",
"api_version": "v1",
"powered_by": "cunicula.com"
}
Returns an HTTP 302 redirect to the destination service URL with outbound tracking parameters. This endpoint does not return a JSON body.
example request
curl -I "https://cunicula.com/api/go?s=bitrefill"
parameters
| name | in | type | required | description |
|---|
s | query | string | yes | Service slug to redirect to. e.g. bitrefill |
example response
HTTP/2 302
location: https://www.bitrefill.com/?utm_source=cunicula.com&utm_medium=affiliate&utm_campaign=directory
[redirect response, no JSON body]
Returns a compact metrics payload suitable for dashboards, status pages, and external monitoring.
example request
curl -s "https://cunicula.com/api/v1/stats"
example response
{
"data": {
"total_services": 214,
"by_kyc_level": {
"light": 49,
"none": 87
},
"by_category": {
"exchange": 32,
"vpn": 18,
"gift_cards": 11,
"marketplace": 14
},
"by_jurisdiction": {
"PA": 12,
"SE": 9,
"CH": 7,
"unknown": 46
},
"by_trust_grade": {
"A": 41,
"B": 63,
"C": 57,
"D": 28,
"F": 25
},
"last_updated": "2026-03-28T21:00:00Z"
},
"meta": {
"total": 214,
"api_version": "v1",
"powered_by": "cunicula.com"
}
}
Use this for SDK generation, contract validation, schema inspection, or importing the API into tools like Postman, Bruno, or Stoplight.
example request
curl -s "https://cunicula.com/api/v1/openapi.json"
example response
{
"openapi": "3.1.0",
"info": {
"title": "Cunicula API",
"version": "1.0.0"
},
"paths": {
"/api/v1/services": {
"get": {
"summary": "List services"
}
},
"/api/v1/services/{slug}": {
"get": {
"summary": "Get one service"
}
},
"/api/v1/articles": {
"get": {
"summary": "List articles"
}
},
"/api/v1/articles/{slug}": {
"get": {
"summary": "Get one article"
}
},
"/api/score/{slug}": {
"get": {
"summary": "Get score payload"
}
},
"/api/go": {
"get": {
"summary": "Affiliate redirect"
}
}
}
}