Reaction.schema_version
Data format version; keep 1.9.0 as provided in the example.
"1.9.0"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.
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.
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.
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.
{
"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_versionData format version; keep 1.9.0 as provided in the example.
"1.9.0"Reaction.reaction_identifierThe source experiment number, e.g. EXP-0001 or Table 2, entry 5, distinguishing experiments within one source.
"EXP-0001"Reaction.materialsInput material definitions; put products in products.
[
{
"id": "alcohol",
"identifiers": [
{
"type": "SMILES",
"value": "CCO"
}
],
"role": "reactant"
},
{
"id": "reagent",
"identifiers": [
{
"type": "NAME",
"value": "acetic anhydride"
}
],
"role": "reagent"
}
]Reaction.initial_stateStarting inputs and conditions, including for ordinary reactions.
{
"inputs": [
{
"material": "alcohol",
"amount": {
"value": 0.25,
"unit": "mmol",
"raw": "0.25 mmol"
}
},
{
"material": "reagent"
}
]
}Reaction.segmentsReaction segments in order. An ordinary reaction usually has one segment; use an empty array when no stage conditions or procedure are reported.
[
{
"conditions": {
"temperature": {
"value": 25,
"unit": "°C",
"raw": "25 °C"
}
}
}
]Reaction.productsOverall reported product identities.
[
{
"id": "product_1",
"identifiers": [
{
"type": "SMILES",
"value": "C[C@H](O)c1ccccc1"
}
],
"role": "desired_product",
"text": "Isolated target product",
"parameters": {
"reported_stereochemistry": "(S)"
}
}
]Reaction.measurementsOverall measurements. Each item specifies subject, type and value; conversion, yield and stereoselectivity share this array.
[
{
"subject": "reactant_1",
"type": "conversion",
"value": {
"value": 90,
"scale": "percent"
},
"text": "Determined by GC."
}
]Reaction.workupWorkup and purification wording.
Reaction.provenanceSource article DOI and citation.
{
"reference": "Fictional teaching record; Example A"
}Reaction.textOther experiment-wide wording.
"Fictional format illustration, not a measured result. Unreported amounts, method and calculation bases are omitted."Reaction.parametersAdditional experiment attributes, e.g. run_id. Put conditions in Conditions.parameters.
{
"run_id": "RUN-0001"
}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.
{
"type": "SMILES",
"value": "CCO"
}
Identifier.typeSpecifies 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
"SMILES"Identifier.valueThe identifier text matching type, e.g. CCO for SMILES or ethanol for NAME.
"CCO"A quantity, such as {"value":1,"unit":"mmol"}, used for amounts, temperature, time or measurements. raw can retain the source wording.
[
{
"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.valueThe number. Use unit for physical quantities; use scale: percent for percentages, e.g. value 80 for 80%.
25Quantity.scaleDimensionless 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
"percent"Quantity.unitUnit for physical quantities, e.g. mmol, °C, h; relative doses may use equiv or mol%. Use scale for percentages.
"°C"Quantity.rawOriginal wording, consistent with structured values.
"20–25 °C"Quantity.qualifierA single-value qualifier, e.g. <5% or approximately 25 °C. Use lower and upper for a two-sided range.
Allowed values: =, <, <=, >, >=, ~
"<"Quantity.lowerLower endpoint, e.g. 20 in 20–25 °C.
20Quantity.upperUpper endpoint, e.g. 25 in 20–25 °C.
25Quantity.uncertaintyReported ± uncertainty: enter 2 for 25 ± 2 °C, in the same unit as value.
2Input material identity and role. Record the amount and concentration on its Charge.
{
"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.idMaterial ID within this reaction, e.g. reactant_1 or product_1, linking charges and measurements.
"reactant_1"Material.identifiersChemical identifiers, each with type and value. One reported identifier is usually sufficient; multiple entries must identify the same material.
[
{
"type": "SMILES",
"value": "CCO"
}
]Material.roleMaterial or outcome role in the experiment.
Allowed values: reactant, reagent, catalyst, solvent, intermediate, mixture, unknown
"reactant"Material.is_limitingUse 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.
trueMaterial.textAdditional input material wording, e.g. “Crude intermediate used without purification”.
"Ethanol used as the limiting reactant"Material.parametersAdditional material attributes, e.g. purity: "99.5%".
{
"purity": "99.5%"
}One addition: material identifies the input, amount records the dose, and concentration records the concentration or formulation used in this addition.
{
"material": "reagent_1",
"amount": {
"value": 2,
"unit": "mL"
},
"concentration": {
"raw": "2.5 M solution in hexanes"
}
}
Charge.materialID of the added material, e.g. reagent_1; reuse it for repeated additions.
"reagent_1"Charge.amountAmount added in this charge, e.g. 1 mmol. Use this same field for starting inputs and later additions.
{
"value": 2,
"unit": "mL"
}Charge.concentrationConcentration 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.
{
"raw": "2.5 M solution in hexanes"
}Reaction conditions. Later segments inherit omitted settings; JSON null stops inheriting a setting and does not mean zero. Put elapsed time in Segment.duration.
{
"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.temperatureTemperature Quantity.
{
"value": 25,
"unit": "°C"
}Conditions.pressurePressure Quantity.
{
"value": 1,
"unit": "atm"
}Conditions.atmosphereReported atmosphere.
"nitrogen"Conditions.parametersA 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.
{
"milling_frequency": {
"value": 30,
"unit": "Hz"
}
}Materials and settings present at the start. inputs refers to materials; solvents are materials too.
{
"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.inputsStarting charges; each gives a material ID and, when reported, the amount charged.
[
{
"material": "reactant_1",
"amount": {
"value": 1,
"unit": "mmol",
"raw": "1 mmol"
}
},
{
"material": "solvent_1",
"amount": {
"value": 2,
"unit": "mL",
"raw": "2 mL"
}
}
]InitialState.conditionsStarting settings; put elapsed time on the corresponding segment.duration.
{
"temperature": {
"value": 0,
"unit": "°C"
}
}InitialState.textAdditional wording about this object: procedure and observations on a segment, method and sample on a measurement, and material context on a material.
"The starting materials were charged at 0 °C."Ordered additions, settings, duration, procedure and observations. These usually suffice; add products or measurements only for explicitly reported stage results.
{
"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_materialsMaterial added in this segment; reuse the ID for repeated additions.
[
{
"material": "reagent_1",
"amount": {
"value": 1,
"unit": "mmol"
}
}
]Segment.conditionsConditions for this segment: supplied values replace previous settings, omitted settings carry forward, and null clears a setting.
{
"temperature": {
"value": 0,
"unit": "°C"
}
}Segment.durationElapsed time for this segment only, e.g. 1 h.
{
"value": 1,
"unit": "h"
}Segment.textProcedure and qualitative observations at this stage, such as dropwise addition, colour changes, precipitation or TLC observations.
"The reagent was added dropwise. The solution turned yellow and a precipitate formed."Segment.productsExplicitly identified stage products or intermediates; define final products in Reaction.products.
[
{
"id": "intermediate_1",
"identifiers": [
{
"type": "NAME",
"value": "Intermediate A (source label)"
}
],
"role": "intermediate"
}
]Segment.measurementsQuantitative measurements at this stage; subject identifies the measured material or product. Put qualitative observations in text.
[
{
"subject": "reactant_1",
"type": "conversion",
"value": {
"value": 90,
"scale": "percent"
},
"text": "Determined by GC."
}
]Product identity, role and attributes. Put measured results in the reaction or segment measurements, referencing this product ID through subject.
{
"id": "product_1",
"identifiers": [
{
"type": "SMILES",
"value": "C[C@H](O)c1ccccc1"
}
],
"role": "desired_product",
"text": "Isolated target product",
"parameters": {
"reported_stereochemistry": "(S)"
}
}
Product.idProduct ID unique across this reaction, e.g. product_1.
"product_1"Product.identifiersChemical identifiers, each with type and value. One reported identifier is usually sufficient; multiple entries must identify the same material.
[
{
"type": "SMILES",
"value": "C[C@H](O)c1ccccc1"
}
]Product.roleProduct role, e.g. desired_product, byproduct or intermediate.
Allowed values: desired_product, byproduct, intermediate, unknown
"desired_product"Product.textAdditional product wording, e.g. isolated target product.
"Isolated target product"Product.parametersAdditional product attributes. A source configuration label may use reported_stereochemistry: "(2R,3S)".
{
"reported_stereochemistry": "(S)"
}One measurement: subject, metric type, value and context. Use separate items for different metrics or repeated measurements of one object.
{
"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.subjectID of the measured object: a reactant such as reactant_1 for conversion, or a product such as product_1 for yield or product selectivity.
"reactant_1"Measurement.typeMeasured 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
"ee"Measurement.valueExplicitly reported numerical or identifier value.
{
"value": 96,
"scale": "percent",
"raw": "96%"
}Measurement.stereocentresExamined 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.
"5S"Measurement.basisKnown 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.
"(2R,5S):(2S,5R)"Measurement.textDescribe the method, sample and other context in one sentence, e.g. “Isolated product analysed by chiral HPLC.” For a custom metric, include its name.
"Isolated product analysed by chiral HPLC."Article source: DOI and citation. The platform preserves the original experimental files separately.
{
"doi": "10.1234/isynth.example",
"reference": "Fictional article for documentation examples"
}
Provenance.doiSource article DOI or DOI link, e.g. 10.1234/isynth.example (fictional example).
"10.1234/isynth.example"Provenance.referenceSource title or citation, including sources without a DOI.
"Fictional article for documentation examples"{
"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."
}