Developer API
Build on SynovAI
Plan retrosynthesis routes programmatically. Submit a target molecule, poll for confidence-scored routes, and pull reaction metadata, literature references, and scores, all over a REST API and a hosted MCP server for agents.
1. Get an API key
API access is included on Professional (with usage limits) and Enterprise (configurable by contract) plans. Signed-in users on those plans can mint keys at Account → API keys. The key is shown once; store it somewhere safe. Authenticate every request with it as a bearer token:
Authorization: Bearer <your-api-key>
# or, equivalently:
X-API-Key: <your-api-key>Not on a paid plan yet? See plans or talk to us.
2. Submit and poll
The core workflow is submit-then-poll. POST /execute creates the job and returns an id; poll GET /jobs/{id} until the status is success or error. Set the SYNOVAI_API_KEY environment variable first.
Submit a target
curl https://platform.synovai.net/api/v1/execute \
-X POST \
-H "Authorization: Bearer $SYNOVAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tool": "predict_route",
"params": { "smiles": "CC(=O)Nc1ccc(O)cc1", "num_steps": 4, "temperature": "Standard" }
}'Response:
{
"status": "accepted",
"job_id": "cltask_01h7x2k0...",
"poll_url": "/api/v1/jobs/cltask_01h7x2k0...",
"cost_usd": 5.0
}num_steps is the maximum route length the model considers (2–8). temperature controls how exploratory the search is: Well-Precedented → Standard → Exploratory → Novel. Run GET /tools for the live list of tools and per-call prices, or POST /forecast to quote a job before running it.
Poll for the result
curl https://platform.synovai.net/api/v1/jobs/$JOB_ID \
-H "Authorization: Bearer $SYNOVAI_API_KEY"
# while "status" is "running", keep polling. Terminal states: "success" or "error".The same flow in Python:
import os, time, requests
API = "https://platform.synovai.net/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SYNOVAI_API_KEY']}"}
# 1. Submit a target
submit = requests.post(f"{API}/execute", headers=HEADERS, json={
"tool": "predict_route",
"params": {"smiles": "CC(=O)Nc1ccc(O)cc1", "num_steps": 4, "temperature": "Standard"},
}).json()
job_id = submit["job_id"]
# 2. Poll until terminal
while True:
job = requests.get(f"{API}/jobs/{job_id}", headers=HEADERS).json()
if job["status"] in ("success", "error"):
break
time.sleep(5)
# 3. Use the routes
print(job["status"], job.get("result"))Endpoints
Base URL https://platform.synovai.net/api/v1. Full request/response schemas are in the interactive reference and the OpenAPI spec.
| Method | Path | Purpose |
|---|---|---|
| POST | /execute | |
| GET | /jobs/{id} | |
| GET | /jobs/{id}/references | |
| GET | /jobs/{id}/scored | |
| POST | /validate-smiles | |
| POST | /forecast | |
| GET | /tools | |
| POST | /patents/check | |
| GET | /usage | |
| POST | /webhooks |
MCP for agents
For agentic integrations we expose a hosted Model Context Protocol server at /api/v1/mcp (Streamable HTTP, JSON-RPC 2.0). Point any MCP-compatible client (Claude Desktop, Cursor, custom agents) at it with your API key as a bearer token, and the agent can drive retrosynthesis directly. Tools exposed:
submit_retrosynthesisget_job_statusget_job_referencesget_job_convergencevalidate_smiles
See the MCP setup guide for Claude Desktop, Cursor, and direct JSON-RPC config.
Ready to build?
Mint a key and make your first call in a couple of minutes.