Python + HTTP API
Same vocabulary across both. Pydantic models on the wire; FullOutput Pydantic in Python. OpenAPI spec auto-generated at /openapi.json.
Python (in-process)
# Submit a SMILES, get a signed .mfsig.json
curl -X POST https://api.mfsig.com/v1/sigma_profile \
-H "Authorization: Bearer $MFSIG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"smiles": "CC(=O)Oc1ccccc1C(=O)O",
"tier": "pro",
"solvent": "water"
}'
# → 202 Accepted
# { "job_id":"job_8K2…", "status":"queued",
# "eta_s": 22 }HTTP (FastAPI service)
# Poll, or supply a webhook_url and we POST on completion.
curl https://api.mfsig.com/v1/jobs/job_8K2... \
-H "Authorization: Bearer $MFSIG_API_KEY"
# → 200 OK
# { "status": "done",
# "mfsig_url":"https://mfsig.com/d/aspirin.mfsig.json",
# "sha256": "e3b0c44298fc1c14...",
# "gates": {"scf":true,"sigma":true,"audit":true,
# "geometry":true} }Routes
Liveness probe. Always returns 200 if the process is running. Use as Kubernetes livenessProbe.
Readiness probe. 503 if no backend is importable.
Grade availability matrix: Pro / Platinum / Reference + versions + presets.
The headline route — σ-profile for one SMILES. Pro / Platinum / Reference grades with full option vocabulary.
Conformer-ensemble σ-profile for flexible scaffolds. Boltzmann-weighted output. Same .mfsig audit trail per molecule.
Vendor .cosmo → MolForge FullOutput JSON. Pass content inline or server_path. Auto-detect vendor or specify explicitly.
MolForge JSON → vendor text format. Turbomole / COSMOtherm σ / JSON / CSV.
Server-side batch directory migration. Idempotent, resumable, per-file diagnostics in ConversionReport.
Wrap a σ-profile result into .mfsig.json v2.0-apex — SHA-256 audit + reproducibility + optional legacy_vault.
Verify the SHA-256 trust hash. Tamper-evident.
Machine-readable OpenAPI 3.x spec.
Swagger UI for interactive exploration.
Redoc UI for read-friendly browsing.
Authentication + security
Observability
{
"ts": "2026-05-12T01:24:01Z",
"level": "INFO",
"logger": "molforge_sigma.api",
"msg": "sigma_profile smiles='O' method='dft' wall=12.4s n_atoms=3 n_segments=1432"
}