BYTETOOLS

OPSIN API

Free OPSIN web service at EMBL-EBI with no key: parse systematic IUPAC chemical names into SMILES, InChI or CML algorithmically. Open source, deterministic, no lookup table.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the OPSIN API?

OPSIN is a free, key-free web service that converts systematic IUPAC chemical names into structures. It parses names algorithmically using chemical nomenclature grammar rather than looking them up, and returns SMILES, standard InChI, InChIKey or CML by file extension.

OPSIN — Open Parser for Systematic IUPAC Nomenclature — was built at the University of Cambridge's Centre for Molecular Informatics and is now hosted at EMBL-EBI. What makes it different from every name-to-structure lookup service is that it does not look anything up. It parses the name the way a chemist reads it, decomposing `2-acetyloxybenzoic acid` into a benzene ring, a carboxylic acid and an acetyl ester, and assembling the structure from those parts. A name it has never encountered still works, provided it follows the nomenclature rules.

That determinism is the reason to reach for it. A lookup service returns whatever it happens to hold and can silently give you the wrong compound for a mistyped name; OPSIN either parses a name correctly or reports `FAILURE`, which is a far better failure mode for automated pipelines. The flip side is that trade names, common names and abbreviations are outside its remit — `aspirin` will not parse, though its systematic name will. The output format is chosen by extension: `.smi` returns bare text, `.json` wraps SMILES, InChI and a full CML document together. The parser is also Apache-licensed and packaged for Java and Python, so heavy users can run it locally instead.

Quick facts

Base URL
https://www.ebi.ac.uk/opsin/ws
Authentication
No API key or account. OPSIN is open source under the Apache 2.0 licence and is hosted as a free service by EMBL-EBI; the library can be run locally for bulk work.
Rate limit
No published limit. EMBL-EBI applies fair-use throttling; for large batches run the OPSIN library yourself rather than looping over the web service.
Pricing
Free. The software is Apache 2.0 licensed and the hosted service costs nothing.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the OPSIN API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Parse a systematic IUPAC name into a SMILES string

GET https://www.ebi.ac.uk/opsin/ws/2-acetyloxybenzoic%20acid.smi

curl
curl 'https://www.ebi.ac.uk/opsin/ws/2-acetyloxybenzoic%20acid.smi'
JavaScript (fetch)
const res = await fetch("https://www.ebi.ac.uk/opsin/ws/2-acetyloxybenzoic%20acid.smi");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://www.ebi.ac.uk/opsin/ws/2-acetyloxybenzoic%20acid.smi", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
C(C)(=O)OC1=C(C(=O)O)C=CC=C1

Parameters

ParameterTypeRequiredDescription
namepath segmentRequiredThe systematic IUPAC name, URL-encoded. Spaces become %20. 2-acetyloxybenzoic%20acid
.smipath extensionOptionalReturn the SMILES string as plain text with no envelope. .smi
.jsonpath extensionOptionalReturn a JSON object containing status, SMILES, InChI and a CML document. .json
.inchi / .stdinchi / .stdinchikeypath extensionOptionalReturn InChI, standard InChI or standard InChIKey. .stdinchikey
.cmlpath extensionOptionalReturn Chemical Markup Language, the fullest structural description. .cml

Response fields

(body, .smi)text
The SMILES string alone, ready to feed to a cheminformatics toolkit.
statusstring
In JSON responses: `SUCCESS` or `FAILURE`. A failure means the name could not be parsed, not that the compound does not exist.
messagestring
Diagnostic text explaining a parse failure, usually naming the token that could not be interpreted.
smiles / inchi / stdinchikeystring
The parsed structure in each requested representation.
cmlstring
A full Chemical Markup Language document with explicit atoms, bonds and locant labels. Large — this is why `.json` responses are bulky.

What you can build with the OPSIN API

  • Convert systematic names from a patent or paper into structures
  • Validate that chemical names in a dataset are well-formed IUPAC nomenclature
  • Build a name-to-structure step into a text-mining pipeline
  • Generate InChIKeys for deduplicating compounds by structure
  • Check a student's or an author's systematic name for correctness

Common errors and how to fix them

FAILURE status

The name is not systematic IUPAC nomenclature.

Fix: Trade names and common names will never parse. Try a lookup service such as the NCI resolver for those, and OPSIN only for systematic names.

404

The name segment was not URL-encoded.

Fix: Spaces, commas, brackets and primes all need encoding. Unencoded spaces are the usual cause.

Huge JSON response

The `.json` view embeds a full CML document.

Fix: Use `.smi` or `.stdinchikey` when you only need the identifier — those return a single line.

Ambiguous name parsed unexpectedly

Missing locants or stereo descriptors.

Fix: OPSIN parses exactly what you give it. If the name omits stereochemistry the structure will too — that is correct behaviour, not a bug.

OPSIN API — frequently asked questions

Is OPSIN free to use?

Yes. The hosted web service at EMBL-EBI is free with no key, and OPSIN itself is open source under the Apache 2.0 licence, so you can run it locally including in commercial products.

Why will OPSIN not parse a name like aspirin?

Because it parses nomenclature rather than looking names up. `Aspirin` is a trade name with no structural information in it; its systematic equivalent, 2-acetyloxybenzoic acid, parses perfectly. For trade and common names you need a lookup service instead.

How accurate is algorithmic name parsing?

For well-formed systematic names it is highly reliable, and it fails loudly rather than guessing when it cannot interpret a token. The practical risk is names that are themselves ambiguous or incomplete — OPSIN will faithfully reproduce whatever the name actually specifies.

Should I use the web service or the library?

Use the web service for occasional conversions and prototyping. For bulk work run the Java or Python package locally: it is the same parser, far faster without network round trips, and it keeps load off EMBL-EBI's shared infrastructure.

Tools that pair with this API

OPSIN is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.