Public API — v0
Read-only JSON over HTTPS. No auth, no key, no SDK required. Data is regenerated at each build by the open-source Python engine — grades are never computed here, only served. Base URL: https://www.arunights.com
Response envelope
Every response — success or error — carries a meta block: as_of (evidence date), methodology_version, generated (engine run date), disclaimer and license. Errors always have this shape, with an appropriate HTTP status:
{"error": {"code": "NOT_FOUND", "message": "no coverage for asset id 'frxusd' — GET /api/v0/assets lists covered ids"}, "meta": {...}}Endpoints
All graded assets, brief form: id, grade, score, confidence, status, haircut, flags, summary.
- ?class= — optional filter: yield_dollar, vault, curator, rwa_wrapper
curl "https://www.arunights.com/api/v0/assets?class=rwa_wrapper"
Full rating detail for one asset: pillar scores with notes and evidence links, falsifier, haircut derivation.
curl "https://www.arunights.com/api/v0/assets/usde"
Risk-adjust a book of positions using published grades and haircuts — the same arithmetic as the monitor page. Returns adjusted values, haircut drag, exposure-weighted score, policy checks, warnings.
- body — {positions: [{id, amount_usd}]}, JSON, 1–200 positions, max 100 KB
- id — must be a covered asset id (unknown ids are a 400; see GET /api/v0/assets)
- amount_usd — finite number, 0 to 1e13; unknown fields are rejected
- curator ids are entities, not holdable instruments — those positions come back in `rejected` and are excluded from totals
curl -X POST "https://www.arunights.com/api/v0/assess" \
-H "content-type: application/json" \
-d '{"positions":[{"id":"usdc","amount_usd":40000000},{"id":"usde","amount_usd":10000000},{"id":"susde","amount_usd":5000000}]}'The published methodology, verbatim markdown, plus its version.
curl "https://www.arunights.com/api/v0/methodology"
The raw engine artifact is also served unmodified at https://www.arunights.com/ratings.json — same bytes the API reads.
Rate limit
60 requests per minute per IP across all v0 endpoints. Exceeding it returns 429 with a Retry-After header (seconds). Need more for an integration? dhruv.arunights@gmail.com.
Errors
| Status | Code | When |
|---|---|---|
| 400 | INVALID_CLASS / INVALID_JSON / VALIDATION_FAILED | bad query param, malformed JSON, or a body that fails validation |
| 404 | NOT_FOUND | asset id not covered |
| 413 | BODY_TOO_LARGE | request body over 100 KB |
| 415 | UNSUPPORTED_MEDIA_TYPE | POST without content-type: application/json |
| 429 | RATE_LIMITED | over 60 requests/min from one IP — honor the Retry-After header |
| 500 | INTERNAL | our fault; no stack traces are ever returned |
License & attribution
free with attribution — use the data in research, dashboards, risk systems or agents, commercial or not, as long as you attribute “Arunights Research” with a link to the methodology. Don’t present grades as your own, as credit ratings, or as investment advice. No issuer pays for a grade; grades are never for sale.
Disclaimer
Arunights Risk Grades are independent research opinions on loss resilience — not credit ratings, not investment advice, not margin requirements. Grades are draft/provisional pending verification; haircuts are illustrative. No issuer pays for a grade.