Skip to content

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-PrecedentedStandardExploratory 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.

MethodPath
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_retrosynthesis
  • get_job_status
  • get_job_references
  • get_job_convergence
  • validate_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.