1. Validate issuer domain
GET /api/validate-issuer-domain
API Surface
Authenticated write endpoints live under /api/*. Public verification endpoints live under
/public/api/*, enforce SSRF protections, and include rate-limited trust-log bootstrap.
Use this exact sequence to test end-to-end behavior in minutes.
GET /api/validate-issuer-domain
POST /api/issuer
POST /api/badge-class
POST /api/credential-subject
GET /public/api/verify/badge/:badgeUrl(*)
Authentication
X-API-KeyAttach the key to admin and issuance requests. Public verification and public issuer trust bootstrap are keyless.
X-API-Key: <API_KEY>
curl "https://badges.firmament.works/public/api/verify/badge/https%3A%2F%2Fexample.com%2Fbadges%2Fassertion.json"
curl -X POST "https://badges.firmament.works/api/issuer" \
-H "Content-Type: application/json" \
-H "X-API-Key: <API_KEY>" \
-d '{
"id":"https://demo.example.org/issuer",
"name":"Demo Academy",
"url":"https://demo.example.org",
"email":"[email protected]"
}'
Endpoint map
Public verification plane
GET /public/api/verify/badge/:badgeUrl(*)
Fetch and verify a remote badge URL.
GET /public/api/verify/issuer/:issuerUrl(*)
Verify an issuer profile URL.
POST /public/api/verify/json
Verify inline badge JSON object.
POST /public/api/issuers/verify
Verify domain well-known profile and add issuer to trust log (rate-limited).
Issuance plane
GET /api/validate-issuer-domain
Validate domain usage constraints.
POST /api/issuer
Create a hosted issuer JSON resource.
POST /api/badge-class
Create a hosted badge class JSON resource.
POST /api/credential-subject
Issue a hosted assertion JSON resource.
Issuer operations
POST /api/issuers/verify
Verify domain ownership via well-known profile.
GET /api/issuers
List verified issuer records.
POST /api/issuers/:domain/reverify
Re-run issuer verification.
Proof and key operations
POST /api/sign-badge
Add a proof block to badge payload.
POST /api/cache-public-key
Cache issuer public keys by domain.
GET /api/badge-files
List hosted JSON resources.
Public safety
Public verification routes validate protocols and block internal/private address ranges.
Issuer trust
Issuer verification and re-verification endpoints enforce well-known profile ownership checks.
Automation
CLI, MCP, and llms.txt support machine-readable issuance and verification workflows.