Developer Portal
Build with the MultiEndpointTox API
A plain REST/JSON API — no SDK required, callable from any language. Everything on this page is verified against the live, deployed contract.
Overview
Base URL: https://api.bionexusdiscovery.com. Interactive OpenAPI docs (FastAPI's built-in Swagger UI) are live at /docs , with the raw OpenAPI schema at /openapi.json. That live Swagger UI is the API Explorer — a first-party interactive playground is not separately built on this site (see the roadmap).
Note: the backend repo's own docs/API.md describes an older contract (v0.3.0, 6 endpoints, no auth or rate limiting). Everything below reflects the current deployed v1.2 contract, verified against the live API and the backend source — not that stale doc.
Authentication
Authentication is optional by default (REQUIRE_AUTH is unset/false in the deployed environment as of this writing — every endpoint documented here is publicly callable without a token, exactly like the live demo on this site). The backend does implement full authentication for deployments that enable it: JWT access tokens (30 min) with rotating, reuse-detected refresh tokens (30 day TTL), role-based access control (admin/researcher/reviewer/student), and API keys (POST/GET/DELETE /auth/api-keys, stored as SHA-256 hashes, the raw key shown exactly once at creation). See the backend's own src/api/routes/auth.py for the full contract if you're deploying your own instance with REQUIRE_AUTH=true.
Quick Start
# Health check
curl https://api.bionexusdiscovery.com/health
# Single-endpoint prediction
curl -X POST https://api.bionexusdiscovery.com/predict \
-H "Content-Type: application/json" \
-d '{"smiles": "CC(=O)Nc1ccc(O)cc1", "endpoint": "hepatotox"}'
# Full integrated assessment (all 7 endpoints + SHAP)
curl -X POST https://api.bionexusdiscovery.com/predict/integrated \
-H "Content-Type: application/json" \
-d '{"smiles": "CC(=O)Nc1ccc(O)cc1", "include_interpretation": true, "top_k": 8}'SDKs & Examples
No published Python/JS/R package exists yet (roadmap item) — the API is plain REST/JSON, directly callable from any HTTP client today.
Rate Limits
| POST /predict | 60 / minute |
| POST /predict/multi | 30 / minute |
| POST /predict/batch | 10 / minute (max 1000 SMILES per request) |
| POST /predict/integrated | Not rate-limited (as of the code reviewed) |
| POST /predict/interpret | Not rate-limited (as of the code reviewed) |
| POST /validate, GET /health, /version, /status | Not rate-limited |
Error Handling
{
"error": {
"code": "string",
"message": "human-readable description",
"request_id": "uuid, echoes X-Request-ID if you sent one",
"details": { "...": "validation-error-specific, when applicable" }
}
}| 200 | Success |
| 400 | Bad request — invalid SMILES or invalid endpoint name |
| 422 | Validation error — missing/malformed request fields |
| 429 | Rate limit exceeded (see Rate Limits above) |
| 503 | Service unavailable — predictor not yet initialized (cold start) |
Changelog
The full, real changelog lives in the backend repository — rendering it here would risk drifting out of sync with each release. View CHANGELOG.md on GitLab
Status
Live health, version, and response latency, fetched directly from the deployed API.
View live status