iSynth reaction data specification: complete field reference

Specification 1.9.0. All authoring types, field descriptions, allowed values and examples appear on this page. No sign-in or JavaScript is required; this URL can be given directly to an AI reader.

How to use

Human contributors use the simple table. AI, lab software and integrations use Reaction JSON. JSON Schema defines exchange and validation; users need not fill every field, and it is not a database table layout.

Generate one Reaction per experiment → validate and check against the source → upload to a private draft → inspect the reaction preview → submit for review. Each record is serialized as a JSON string in the reaction_record column; authors, provenance and license are separate dataset metadata.

The website provides structures, stage conditions and measurements alongside original files and full JSONL downloads. Once published and prepared for search, records can be queried and retrieved through MCP.

Paper extraction

JSON Schema (Draft 2020-12) defines fields, types and nesting. The model outputs reaction JSON data conforming to it, not the schema itself. Examples follow reference field order; object key order does not affect validation, while segments array order represents the experimental sequence.

Provide the paper, supporting information and this reference. Output one Reaction per experiment; use JSONL with one object per line for multiple experiments. Omit unreported optional fields and preserve unresolved descriptions as text.

Check structure, material references, quantities and measurement ownership, then review against the source. With MCP, call get_reaction_contract(view="extraction"), followed by validate_reaction_records; validation does not save data. If a model cannot open links, supply the files in the downloaded specification bundle.

Conventions

Reaction

Every experiment records material definitions, starting charges, reaction segments and outcomes. Use one segment for an ordinary reaction and ordered segments for a multi-stage reaction.

Object example

{
  "schema_version": "1.9.0",
  "reaction_identifier": "EXP-0001",
  "materials": [
    {
      "id": "alcohol",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CCO"
        }
      ],
      "role": "reactant"
    },
    {
      "id": "reagent",
      "identifiers": [
        {
          "type": "NAME",
          "value": "acetic anhydride"
        }
      ],
      "role": "reagent"
    }
  ],
  "initial_state": {
    "inputs": [
      {
        "material": "alcohol",
        "amount": {
          "value": 0.25,
          "unit": "mmol",
          "raw": "0.25 mmol"
        }
      },
      {
        "material": "reagent"
      }
    ]
  },
  "segments": [
    {
      "conditions": {
        "temperature": {
          "value": 25,
          "unit": "°C",
          "raw": "25 °C"
        }
      }
    }
  ],
  "products": [
    {
      "id": "product",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CCOC(C)=O"
        }
      ]
    }
  ],
  "measurements": [
    {
      "subject": "product",
      "type": "yield",
      "value": {
        "value": 80,
        "scale": "percent",
        "raw": "80%"
      }
    }
  ],
  "provenance": {
    "reference": "Fictional teaching record; Example A"
  },
  "text": "Fictional format illustration, not a measured result. Unreported amounts, method and calculation bases are omitted."
}

Reaction.schema_version

Type: "1.9.0" · Required

Data format version; keep 1.9.0 as provided in the example.

Example

"1.9.0"

Reaction.reaction_identifier

Type: string · Required

The source experiment number, e.g. EXP-0001 or Table 2, entry 5, distinguishing experiments within one source.

Example

"EXP-0001"

Reaction.materials

Type: Material[] · Required

Input material definitions; put products in products.

Example

[
  {
    "id": "alcohol",
    "identifiers": [
      {
        "type": "SMILES",
        "value": "CCO"
      }
    ],
    "role": "reactant"
  },
  {
    "id": "reagent",
    "identifiers": [
      {
        "type": "NAME",
        "value": "acetic anhydride"
      }
    ],
    "role": "reagent"
  }
]

Reaction.initial_state

Type: InitialState · Required

Starting inputs and conditions, including for ordinary reactions.

Example

{
  "inputs": [
    {
      "material": "alcohol",
      "amount": {
        "value": 0.25,
        "unit": "mmol",
        "raw": "0.25 mmol"
      }
    },
    {
      "material": "reagent"
    }
  ]
}

Reaction.segments

Type: Segment[] · Required

Reaction segments in order. An ordinary reaction usually has one segment; use an empty array when no stage conditions or procedure are reported.

Example

[
  {
    "conditions": {
      "temperature": {
        "value": 25,
        "unit": "°C",
        "raw": "25 °C"
      }
    }
  }
]

Reaction.products

Type: Product[] · Optional

Overall reported product identities.

Example

[
  {
    "id": "product_1",
    "identifiers": [
      {
        "type": "SMILES",
        "value": "C[C@H](O)c1ccccc1"
      }
    ],
    "role": "desired_product",
    "text": "Isolated target product",
    "parameters": {
      "reported_stereochemistry": "(S)"
    }
  }
]

Reaction.measurements

Type: Measurement[] · Optional

Overall measurements. Each item specifies subject, type and value; conversion, yield and stereoselectivity share this array.

Example

[
  {
    "subject": "reactant_1",
    "type": "conversion",
    "value": {
      "value": 90,
      "scale": "percent"
    },
    "text": "Determined by GC."
  }
]

Reaction.workup

Type: string · Optional

Workup and purification wording.

Reaction.provenance

Type: Provenance · Optional

Source article DOI and citation.

Example

{
  "reference": "Fictional teaching record; Example A"
}

Reaction.text

Type: string · Optional

Other experiment-wide wording.

Example

"Fictional format illustration, not a measured result. Unreported amounts, method and calculation bases are omitted."

Reaction.parameters

Type: object · Optional

Additional experiment attributes, e.g. run_id. Put conditions in Conditions.parameters.

Example

{
  "run_id": "RUN-0001"
}

Identifier

Use SMILES / INCHI for structures, INCHIKEY for a structure key, NAME for a name or abbreviation (DCM), and CUSTOM for source-local labels (1a, with a source locator). A material may have multiple evidenced identifiers; never infer a structure from a name or label.

Object example

{
  "type": "SMILES",
  "value": "CCO"
}

Identifier.type

Type: string · Required

Specifies the format of value, e.g. SMILES, INCHI or NAME. Together, type and value form one identifier object.

Allowed values: SMILES, NAME, INCHI, INCHIKEY, CUSTOM, UNRESOLVED

Example

"SMILES"

Identifier.value

Type: string · Required

The identifier text matching type, e.g. CCO for SMILES or ethanol for NAME.

Example

"CCO"

Quantity

A quantity, such as {"value":1,"unit":"mmol"}, used for amounts, temperature, time or measurements. raw can retain the source wording.

Object example

[
  {
    "value": 25,
    "unit": "°C"
  },
  {
    "unit": "°C",
    "raw": "20–25 °C",
    "lower": 20,
    "upper": 25
  },
  {
    "value": 25,
    "unit": "°C",
    "raw": "25 ± 2 °C",
    "uncertainty": 2
  },
  {
    "value": 5,
    "scale": "percent",
    "raw": "<5%",
    "qualifier": "<"
  }
]

Quantity.value

Type: number · Optional

The number. Use unit for physical quantities; use scale: percent for percentages, e.g. value 80 for 80%.

Example

25

Quantity.scale

Type: string · Optional

Dimensionless proportion notation: percent uses parts per hundred (80 means 80%); fraction uses parts per one (0.8 means 80%). Use instead of unit.

Allowed values: percent, fraction

Example

"percent"

Quantity.unit

Type: string · Optional

Unit for physical quantities, e.g. mmol, °C, h; relative doses may use equiv or mol%. Use scale for percentages.

Example

"°C"

Quantity.raw

Type: string · Optional

Original wording, consistent with structured values.

Example

"20–25 °C"

Quantity.qualifier

Type: string · Optional

A single-value qualifier, e.g. <5% or approximately 25 °C. Use lower and upper for a two-sided range.

Allowed values: =, <, <=, >, >=, ~

Example

"<"

Quantity.lower

Type: number · Optional

Lower endpoint, e.g. 20 in 20–25 °C.

Example

20

Quantity.upper

Type: number · Optional

Upper endpoint, e.g. 25 in 20–25 °C.

Example

25

Quantity.uncertainty

Type: number · Optional

Reported ± uncertainty: enter 2 for 25 ± 2 °C, in the same unit as value.

Example

2

Material

Input material identity and role. Record the amount and concentration on its Charge.

Object example

{
  "id": "reactant_1",
  "identifiers": [
    {
      "type": "SMILES",
      "value": "CCO"
    }
  ],
  "role": "reactant",
  "is_limiting": true,
  "text": "Ethanol used as the limiting reactant",
  "parameters": {
    "purity": "99.5%"
  }
}

Material.id

Type: string · Required

Material ID within this reaction, e.g. reactant_1 or product_1, linking charges and measurements.

Example

"reactant_1"

Material.identifiers

Type: Identifier[] · Optional

Chemical identifiers, each with type and value. One reported identifier is usually sufficient; multiple entries must identify the same material.

Example

[
  {
    "type": "SMILES",
    "value": "CCO"
  }
]

Material.role

Type: string · Required

Material or outcome role in the experiment.

Allowed values: reactant, reagent, catalyst, solvent, intermediate, mixture, unknown

Example

"reactant"

Material.is_limiting

Type: boolean · Optional

Use true for the reported overall limiting reactant or reagent, false for explicitly non-limiting, and omit if unknown. It is the usual reference for equiv, mol% and overall yield.

Example

true

Material.text

Type: string · Optional

Additional input material wording, e.g. “Crude intermediate used without purification”.

Example

"Ethanol used as the limiting reactant"

Material.parameters

Type: object · Optional

Additional material attributes, e.g. purity: "99.5%".

Example

{
  "purity": "99.5%"
}

Charge

One addition: material identifies the input, amount records the dose, and concentration records the concentration or formulation used in this addition.

Object example

{
  "material": "reagent_1",
  "amount": {
    "value": 2,
    "unit": "mL"
  },
  "concentration": {
    "raw": "2.5 M solution in hexanes"
  }
}

Charge.material

Type: string → Material.id · Required

ID of the added material, e.g. reagent_1; reuse it for repeated additions.

Example

"reagent_1"

Charge.amount

Type: Quantity · Optional

Amount added in this charge, e.g. 1 mmol. Use this same field for starting inputs and later additions.

Example

{
  "value": 2,
  "unit": "mL"
}

Charge.concentration

Type: Quantity · Optional

Concentration or formulation of the reagent used in this charge, e.g. “2.5 M solution in hexanes” or “60% dispersion in mineral oil”. Fill alongside amount.

Example

{
  "raw": "2.5 M solution in hexanes"
}

Conditions

Reaction conditions. Later segments inherit omitted settings; JSON null stops inheriting a setting and does not mean zero. Put elapsed time in Segment.duration.

Object example

{
  "temperature": {
    "value": 25,
    "unit": "°C"
  },
  "pressure": {
    "value": 1,
    "unit": "atm"
  },
  "atmosphere": "nitrogen",
  "parameters": {
    "humidity": {
      "raw": "40% RH"
    },
    "light_source_type": "blue LED",
    "wavelength": "450 nm"
  }
}

Conditions.temperature

Type: Quantity | null · Optional

Temperature Quantity.

Example

{
  "value": 25,
  "unit": "°C"
}

Conditions.pressure

Type: Quantity | null · Optional

Pressure Quantity.

Example

{
  "value": 1,
  "unit": "atm"
}

Conditions.atmosphere

Type: string | null · Optional

Reported atmosphere.

Example

"nitrogen"

Conditions.parameters

Type: object | null · Optional

A few extra conditions as name/value pairs, e.g. milling_frequency: {value:30,unit:"Hz"}. Later segments inherit omitted keys; null stops inheriting that key; parameters:null clears all extra conditions.

Example

{
  "milling_frequency": {
    "value": 30,
    "unit": "Hz"
  }
}

InitialState

Materials and settings present at the start. inputs refers to materials; solvents are materials too.

Object example

{
  "inputs": [
    {
      "material": "reactant_1",
      "amount": {
        "value": 1,
        "unit": "mmol",
        "raw": "1 mmol"
      }
    },
    {
      "material": "solvent_1",
      "amount": {
        "value": 2,
        "unit": "mL",
        "raw": "2 mL"
      }
    }
  ],
  "conditions": {
    "temperature": {
      "value": 0,
      "unit": "°C"
    }
  },
  "text": "The starting materials were charged at 0 °C."
}

InitialState.inputs

Type: Charge[] · Required

Starting charges; each gives a material ID and, when reported, the amount charged.

Example

[
  {
    "material": "reactant_1",
    "amount": {
      "value": 1,
      "unit": "mmol",
      "raw": "1 mmol"
    }
  },
  {
    "material": "solvent_1",
    "amount": {
      "value": 2,
      "unit": "mL",
      "raw": "2 mL"
    }
  }
]

InitialState.conditions

Type: Conditions · Optional

Starting settings; put elapsed time on the corresponding segment.duration.

Example

{
  "temperature": {
    "value": 0,
    "unit": "°C"
  }
}

InitialState.text

Type: string · Optional

Additional wording about this object: procedure and observations on a segment, method and sample on a measurement, and material context on a material.

Example

"The starting materials were charged at 0 °C."

Segment

Ordered additions, settings, duration, procedure and observations. These usually suffice; add products or measurements only for explicitly reported stage results.

Object example

{
  "added_materials": [
    {
      "material": "reagent_1",
      "amount": {
        "value": 1,
        "unit": "mmol"
      }
    }
  ],
  "conditions": {
    "temperature": {
      "value": 0,
      "unit": "°C"
    }
  },
  "duration": {
    "value": 1,
    "unit": "h"
  },
  "text": "The reagent was added dropwise. The solution turned yellow."
}

Segment.added_materials

Type: Charge[] · Optional

Material added in this segment; reuse the ID for repeated additions.

Example

[
  {
    "material": "reagent_1",
    "amount": {
      "value": 1,
      "unit": "mmol"
    }
  }
]

Segment.conditions

Type: Conditions · Optional

Conditions for this segment: supplied values replace previous settings, omitted settings carry forward, and null clears a setting.

Example

{
  "temperature": {
    "value": 0,
    "unit": "°C"
  }
}

Segment.duration

Type: Quantity · Optional

Elapsed time for this segment only, e.g. 1 h.

Example

{
  "value": 1,
  "unit": "h"
}

Segment.text

Type: string · Optional

Procedure and qualitative observations at this stage, such as dropwise addition, colour changes, precipitation or TLC observations.

Example

"The reagent was added dropwise. The solution turned yellow and a precipitate formed."

Segment.products

Type: Product[] · Optional

Explicitly identified stage products or intermediates; define final products in Reaction.products.

Example

[
  {
    "id": "intermediate_1",
    "identifiers": [
      {
        "type": "NAME",
        "value": "Intermediate A (source label)"
      }
    ],
    "role": "intermediate"
  }
]

Segment.measurements

Type: Measurement[] · Optional

Quantitative measurements at this stage; subject identifies the measured material or product. Put qualitative observations in text.

Example

[
  {
    "subject": "reactant_1",
    "type": "conversion",
    "value": {
      "value": 90,
      "scale": "percent"
    },
    "text": "Determined by GC."
  }
]

Product

Product identity, role and attributes. Put measured results in the reaction or segment measurements, referencing this product ID through subject.

Object example

{
  "id": "product_1",
  "identifiers": [
    {
      "type": "SMILES",
      "value": "C[C@H](O)c1ccccc1"
    }
  ],
  "role": "desired_product",
  "text": "Isolated target product",
  "parameters": {
    "reported_stereochemistry": "(S)"
  }
}

Product.id

Type: string · Required

Product ID unique across this reaction, e.g. product_1.

Example

"product_1"

Product.identifiers

Type: Identifier[] · Optional

Chemical identifiers, each with type and value. One reported identifier is usually sufficient; multiple entries must identify the same material.

Example

[
  {
    "type": "SMILES",
    "value": "C[C@H](O)c1ccccc1"
  }
]

Product.role

Type: string · Optional

Product role, e.g. desired_product, byproduct or intermediate.

Allowed values: desired_product, byproduct, intermediate, unknown

Example

"desired_product"

Product.text

Type: string · Optional

Additional product wording, e.g. isolated target product.

Example

"Isolated target product"

Product.parameters

Type: object · Optional

Additional product attributes. A source configuration label may use reported_stereochemistry: "(2R,3S)".

Example

{
  "reported_stereochemistry": "(S)"
}

Measurement

One measurement: subject, metric type, value and context. Use separate items for different metrics or repeated measurements of one object.

Object example

{
  "subject": "product_1",
  "type": "ee",
  "value": {
    "value": 96,
    "scale": "percent",
    "raw": "96%"
  },
  "stereocentres": "(2R,5S)",
  "basis": "(2R,5S):(2S,5R)",
  "text": "Isolated target diastereomer fraction analysed by chiral HPLC."
}

Measurement.subject

Type: string → Material.id / Product.id · Required

ID of the measured object: a reactant such as reactant_1 for conversion, or a product such as product_1 for yield or product selectivity.

Example

"reactant_1"

Measurement.type

Type: string · Required

Measured property, such as yield, conversion, ee, de, er or dr. Use amount for a measured absolute product quantity.

Allowed values: yield, conversion, ee, de, er, dr, ez, rr, selectivity, purity, amount, observation, custom

Example

"ee"

Measurement.value

Type: Quantity · Required

Explicitly reported numerical or identifier value.

Example

{
  "value": 96,
  "scale": "percent",
  "raw": "96%"
}

Measurement.stereocentres

Type: string · Optional

Examined sites and target configurations. One: 5S. Several: (2R,5S), in ascending source-locant order, using ASCII parentheses/commas, no spaces or repeated locants. List only examined sites, not fixed centres. Use R/S; preserve reported pseudoasymmetry as r/s. Locants such as 3aR are supported. Source numbering is not SMILES atom indexing.

Example

"5S"

Measurement.basis

Type: string · Optional

Known comparison terms in ratio order, separated by ASCII colons, e.g. (2R,5S):(2R,5R). Group sums use brackets and +, e.g. [(2R,5S)+(2S,5R)]:[(2R,5R)+(2S,5S)]. Source labels such as syn:anti may be retained; omit unknown comparisons.

Example

"(2R,5S):(2S,5R)"

Measurement.text

Type: string · Optional

Describe the method, sample and other context in one sentence, e.g. “Isolated product analysed by chiral HPLC.” For a custom metric, include its name.

Example

"Isolated product analysed by chiral HPLC."

Provenance

Article source: DOI and citation. The platform preserves the original experimental files separately.

Object example

{
  "doi": "10.1234/isynth.example",
  "reference": "Fictional article for documentation examples"
}

Provenance.doi

Type: string · Optional

Source article DOI or DOI link, e.g. 10.1234/isynth.example (fictional example).

Example

"10.1234/isynth.example"

Provenance.reference

Type: string · Optional

Source title or citation, including sources without a DOI.

Example

"Fictional article for documentation examples"

Complete one-pot example

{
  "schema_version": "1.9.0",
  "reaction_identifier": "EXP-0002",
  "materials": [
    {
      "id": "reactant_1",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "C[C@H](O)c1ccccc1"
        }
      ],
      "role": "reactant"
    },
    {
      "id": "reagent_1",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CC(=O)OC(C)=O"
        }
      ],
      "role": "reagent"
    },
    {
      "id": "solvent_1",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CC#N"
        }
      ],
      "role": "solvent"
    }
  ],
  "initial_state": {
    "inputs": [
      {
        "material": "reactant_1",
        "amount": {
          "value": 1,
          "unit": "mmol",
          "raw": "1 mmol"
        }
      },
      {
        "material": "solvent_1",
        "amount": {
          "value": 2,
          "unit": "mL",
          "raw": "2 mL"
        }
      }
    ],
    "conditions": {
      "temperature": {
        "value": 0,
        "unit": "°C"
      }
    }
  },
  "segments": [
    {
      "added_materials": [
        {
          "material": "reagent_1",
          "amount": {
            "value": 1,
            "unit": "mmol"
          }
        }
      ],
      "duration": {
        "value": 1,
        "unit": "h"
      },
      "text": "The reagent was added dropwise at 0 °C, and the solution turned yellow. After 1 h, an aliquot was taken for HPLC.",
      "measurements": [
        {
          "subject": "reactant_1",
          "type": "conversion",
          "value": {
            "value": 95,
            "scale": "percent",
            "raw": "95 %"
          },
          "text": "Method: HPLC."
        }
      ]
    },
    {
      "added_materials": [
        {
          "material": "reagent_1",
          "amount": {
            "value": 1,
            "unit": "mmol"
          }
        }
      ],
      "conditions": {
        "temperature": {
          "value": 80,
          "unit": "°C"
        }
      },
      "duration": {
        "value": 3,
        "unit": "h"
      },
      "text": "The same mixture was heated to 80 °C for 3 h."
    }
  ],
  "products": [
    {
      "id": "product_1",
      "identifiers": [
        {
          "type": "SMILES",
          "value": "CC(=O)O[C@H](C)c1ccccc1"
        }
      ]
    }
  ],
  "measurements": [
    {
      "subject": "product_1",
      "type": "yield",
      "value": {
        "value": 80,
        "scale": "percent",
        "raw": "80 %"
      },
      "text": "Method: isolated."
    },
    {
      "subject": "product_1",
      "type": "ee",
      "value": {
        "value": 94,
        "scale": "percent",
        "raw": "94 %"
      },
      "text": "Method: chiral HPLC."
    }
  ],
  "workup": "The reaction mixture was worked up and purified as reported.",
  "provenance": {
    "reference": "Fictional documentation fixture. All quantities and observations illustrate format only; no experiment or source paper is claimed."
  },
  "text": "FORMAT EXAMPLE ONLY. Not a laboratory instruction or a reported experimental result."
}