API Reference
Issuers
Curated issuers, evidence, and linked assets.
- GET
/v1/List verified and curated issuer entitiesissuers - GET
/v1/Get an issuer profile and linked assetsissuers/ {issuer_id} - GET
/v1/Get published sources for issuer profile factsissuers/ {issuer_id}/ evidence - GET
/v1/Get published issuer validators and instrument administratorsissuers/ {issuer_id}/ relationships
Every endpoint here authenticates with X-API-Key, answers in the standard envelope and fails with the standard error body.
List verified and curated issuer entities
https://api.cantoncap.cc/v1/issuersParameters
limitintegerqueryoptionalMaximum page size, bounded by the caller's plan.
cursorstringqueryoptionalOpaque continuation cursor from the previous response.
If-None-MatchstringheaderoptionalReturn 304 when this entity tag matches the current representation.
Request
curl -s "https://api.cantoncap.cc/v1/issuers?limit=20" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Issuer collection. 304 when If-None-Match matches.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": [
{
"issuer_id": "iss_6b2d8f4a1c3e4b5d9f7a2c4e6b8d0f13",
"legal_name": "Example Issuer Ltd.",
"brand_name": "Example Issuer",
"description": "The native utility token of the Canton Network.",
"website_url": "https://www.example.com",
"logo_url": "https://assets.example.com/logo.png",
"jurisdictions": [
"BVI"
],
"verification_status": "domain_verified",
"asset_ids": [
"ast_515c3eaa72bd4a8b9403297879d78ef6"
],
"official_links": [
{
"label": "Website",
"url": "https://www.example.com"
}
],
"last_updated_at": "2026-10-11T14:00:00.000Z"
}
],
"pagination": {
"next_cursor": "eyJ2IjoxLCJvIjoyNX0"
}
}dataarray of objects13 child fields
issuer_idstringStable opaque CantonCap issuer ID, prefixed
iss_.legal_namestringnullableRegistered legal name. Null when not published.
brand_namestringnullableBrand name. Null when not published.
descriptionstringnullableApproved description. Null when none is published.
website_urlURI stringnullableOfficial website. Null when none is published.
logo_urlURI stringnullableLogo image URL. Null when none is published.
jurisdictionsarray of stringsJurisdictions the issuer states.
verification_statusenumHow the issuer's identity was verified.
asset_idsarray of stringsAsset IDs linked to this record.
official_linksarray of objectsOfficial links, each a label and a URL.
2 child fields
labelstringurlURI string
last_updated_atdate-timenullableTime of the latest represented update. For calculated asset prices it is the stored calculation time. Decide acceptable age from it.
paginationobjectPresent on cursor-paginated collections.
1 child field
next_cursorstringnullableOpaque cursor for the next page, or null on the last page.
Headers
X-RateLimit-LimitRequests allowed in the current one-minute window.X-RateLimit-RemainingRequests left in the window.X-RateLimit-ResetUnix time, in seconds, when the window resets.ETagEntity tag of this representation. Send it back in If-None-Match.Cache-Controlprivate, no-cache: shared caches must not store the answer.VaryX-API-Key: the answer varies by key.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | Request validation failedA parameter is malformed, out of bounds or not one of its allowed values. |
| 400 | invalid_request | Invalid cursorThe cursor is malformed or belongs to a different query. Some endpoints name it more precisely, such as Invalid historical range or cursor. |
| 401 | unauthenticated | A valid API key is requiredX-API-Key is missing or unknown. |
| 403 | forbidden | The API key does not resolve to an active planThe key expired, was suspended or has not started. |
| 403 | quota_exceeded | The requested page exceeds the API plan limitAn explicit limit is above the plan's page size. |
| 429 | rate_limited | The request rate limit was exceededThe key's one-minute window is used up. Retry after Retry-After seconds. |
Get an issuer profile and linked assets
https://api.cantoncap.cc/v1/issuers/{issuer_id}Published issuer profile and linked asset IDs. Sources and technical relationships are available from the evidence and relationships endpoints.
Parameters
issuer_idstringpathrequiredStable opaque CantonCap issuer ID.
If-None-MatchstringheaderoptionalReturn 304 when this entity tag matches the current representation.
Request
curl -s "https://api.cantoncap.cc/v1/issuers/iss_6b2d8f4a1c3e4b5d9f7a2c4e6b8d0f13" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Issuer detail with evidence and linked assets. 304 when If-None-Match matches.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": {
"issuer_id": "iss_6b2d8f4a1c3e4b5d9f7a2c4e6b8d0f13",
"legal_name": "Example Issuer Ltd.",
"brand_name": "Example Issuer",
"description": "The native utility token of the Canton Network.",
"website_url": "https://www.example.com",
"logo_url": "https://assets.example.com/logo.png",
"jurisdictions": [
"BVI"
],
"verification_status": "domain_verified",
"asset_ids": [
"ast_515c3eaa72bd4a8b9403297879d78ef6"
],
"official_links": [
{
"label": "Website",
"url": "https://www.example.com"
}
],
"last_updated_at": "2026-10-11T14:00:00.000Z"
}
}dataobject13 child fields
issuer_idstringStable opaque CantonCap issuer ID, prefixed
iss_.legal_namestringnullableRegistered legal name. Null when not published.
brand_namestringnullableBrand name. Null when not published.
descriptionstringnullableApproved description. Null when none is published.
website_urlURI stringnullableOfficial website. Null when none is published.
logo_urlURI stringnullableLogo image URL. Null when none is published.
jurisdictionsarray of stringsJurisdictions the issuer states.
verification_statusenumHow the issuer's identity was verified.
asset_idsarray of stringsAsset IDs linked to this record.
official_linksarray of objectsOfficial links, each a label and a URL.
2 child fields
labelstringurlURI string
last_updated_atdate-timenullableTime of the latest represented update. For calculated asset prices it is the stored calculation time. Decide acceptable age from it.
Headers
X-RateLimit-LimitRequests allowed in the current one-minute window.X-RateLimit-RemainingRequests left in the window.X-RateLimit-ResetUnix time, in seconds, when the window resets.ETagEntity tag of this representation. Send it back in If-None-Match.Cache-Controlprivate, no-cache: shared caches must not store the answer.VaryX-API-Key: the answer varies by key.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | Request validation failedA parameter is malformed, out of bounds or not one of its allowed values. |
| 401 | unauthenticated | A valid API key is requiredX-API-Key is missing or unknown. |
| 403 | forbidden | The API key does not resolve to an active planThe key expired, was suspended or has not started. |
| 404 | not_found | Issuer not foundThe issuer does not exist or is not published. |
| 429 | rate_limited | The request rate limit was exceededThe key's one-minute window is used up. Retry after Retry-After seconds. |
Get published sources for issuer profile facts
https://api.cantoncap.cc/v1/issuers/{issuer_id}/evidenceGet published sources for issuer profile facts. Only approved public facts are returned.
Parameters
issuer_idstringpathrequiredStable opaque CantonCap issuer ID.
If-None-MatchstringheaderoptionalReturn 304 when this entity tag matches the current representation.
Request
curl -s "https://api.cantoncap.cc/v1/issuers/iss_6b2d8f4a1c3e4b5d9f7a2c4e6b8d0f13/evidence" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Published issuer information 304 when If-None-Match matches.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": [
{
"field": "website_url",
"source_url": "https://docs.example.com/fees",
"retrieved_at": "2026-10-03T09:12:00.000Z"
}
]
}dataarray of objects3 child fields
fieldstringsource_urlURI stringretrieved_atdate-time
Headers
X-RateLimit-LimitRequests allowed in the current one-minute window.X-RateLimit-RemainingRequests left in the window.X-RateLimit-ResetUnix time, in seconds, when the window resets.ETagEntity tag of this representation. Send it back in If-None-Match.Cache-Controlprivate, no-cache: shared caches must not store the answer.VaryX-API-Key: the answer varies by key.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | Request validation failedA parameter is malformed, out of bounds or not one of its allowed values. |
| 401 | unauthenticated | A valid API key is requiredX-API-Key is missing or unknown. |
| 403 | forbidden | The API key does not resolve to an active planThe key expired, was suspended or has not started. |
| 404 | not_found | Issuer not foundThe issuer does not exist or is not published. |
| 429 | rate_limited | The request rate limit was exceededThe key's one-minute window is used up. Retry after Retry-After seconds. |
Get published issuer validators and instrument administrators
https://api.cantoncap.cc/v1/issuers/{issuer_id}/relationshipsGet published issuer validators and instrument administrators. Only approved public facts are returned.
Parameters
issuer_idstringpathrequiredStable opaque CantonCap issuer ID.
If-None-MatchstringheaderoptionalReturn 304 when this entity tag matches the current representation.
Request
curl -s "https://api.cantoncap.cc/v1/issuers/iss_6b2d8f4a1c3e4b5d9f7a2c4e6b8d0f13/relationships" \
-H "X-API-Key: $CANTONCAP_API_KEY"Response
200 Published issuer information 304 when If-None-Match matches.
{
"status": {
"timestamp": "2026-10-11T14:00:00.000Z",
"elapsed_ms": 18,
"error_code": 0,
"error_message": null,
"request_id": "req_7Hk2pQ9xLm"
},
"data": {
"validators": [
{
"validator_id": "validator::1220c5d0a1",
"name": "Canton Coin",
"website_url": "https://www.example.com",
"relationship": "issuer"
}
],
"party_ids": [
"DSO::1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc"
],
"instrument_administrators": [
{
"network": "mainnet",
"instrument_admin": "DSO::1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"relationship": "issuer"
}
]
}
}dataobject10 child fields
validatorsarray of objects4 child fields
validator_idstringnamestringnullableDisplay name. Null when none is published.
website_urlURI stringnullableOfficial website. Null when none is published.
relationshipstringHow the issuer relates to the asset.
party_idsarray of stringsinstrument_administratorsarray of objects3 child fields
networkenumCanton network the record belongs to.
instrument_adminstringCanton party that administers the instrument. With
instrument_idit is the instrument's Canton identity.relationshipstringHow the issuer relates to the asset.
Headers
X-RateLimit-LimitRequests allowed in the current one-minute window.X-RateLimit-RemainingRequests left in the window.X-RateLimit-ResetUnix time, in seconds, when the window resets.ETagEntity tag of this representation. Send it back in If-None-Match.Cache-Controlprivate, no-cache: shared caches must not store the answer.VaryX-API-Key: the answer varies by key.
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | Request validation failedA parameter is malformed, out of bounds or not one of its allowed values. |
| 401 | unauthenticated | A valid API key is requiredX-API-Key is missing or unknown. |
| 403 | forbidden | The API key does not resolve to an active planThe key expired, was suspended or has not started. |
| 404 | not_found | Issuer not foundThe issuer does not exist or is not published. |
| 429 | rate_limited | The request rate limit was exceededThe key's one-minute window is used up. Retry after Retry-After seconds. |