π‘ API Reference
Programmatically verify certificates of completion. No API key required β the certificate hash is a publicly verifiable claim.
GET/api.php?hash={certificate_hash}
Pretty-URL form (requires mod_rewrite):
https://aii.run.place/api/verify/{certificate_hash} Β·
CORS enabled for all origins Β· No authentication needed
π§ͺ Live tester
Paste any certificate hash and hit Send β this page calls the real API and shows the response.
Same request via curl:
No certificates issued yet on this install β earn one, then paste its hash here.
π Endpoint explorer
Select an endpoint, fill in the parameters, and try it against this live API β exactly like Swagger/OpenAPI tooling.
curl:
Endpoints
curl examples
β Valid certificate
curl -s "https://aii.run.place/api.php?hash=PLACE_YOUR_CERTIFICATE_HASH_HERE"
{
"valid": true,
"schema": "1.0",
"verified_by": "HarDojo",
"certificate": {
"id": "7a8a34d319bdb11e5c89c60e734f971a0cfbe39821897d65",
"learner": "alice",
"path": "MCP",
"path_slug": "mcp",
"completed_at": "2026-08-22 05:04:27",
"lesson_count": 6,
"exercise_count": 8,
"score_pct": 91,
"verify_url": "https://aii.run.place/certificate.php?hash=7a8a34d319bdb11e5c89c60e734f971a0cfbe39821897d65"
}
}
β Revoked certificate (still exists, but is no longer valid)
curl -s "https://aii.run.place/api.php?hash=PLACE_YOUR_CERTIFICATE_HASH_HERE"
{
"valid": false,
"revoked": true,
"revoked_at": "2026-08-22 12:00:00",
"schema": "1.0",
"verified_by": "HarDojo",
"certificate": {
"id": "7a8a34d319bdb11e5c89c60e734f971a0cfbe39821897d65",
"learner": "alice",
"path": "MCP",
"path_slug": "mcp",
"completed_at": "2026-08-22 05:04:27"
}
}
Response reference
Notes
- No auth needed β the 48-character hash is the bearer token. It is a publicly verifiable claim, not a secret: anyone with the link can verify it, which is the point.
- Response is JSON with
Content-Type: application/json; charset=utf-8andCache-Control: public, max-age=300(5-minute browser cache). - CORS β
Access-Control-Allow-Origin: *plus preflight handling, so browser apps on any origin can call it directly withfetch(). - Pretty URLs β if the host supports mod_rewrite,
/api/verify/{hash}works; otherwise use the query-string form. - Revoked β not found. Check
validfirst; a revoked certificate returnsvalid: false, revoked: true(status 200), while an unknown hash returns 404. - Rate limiting β none built in; responses are cached 5 minutes so light abuse is cheap. Add your own limits if you expose this to the public internet.