Skip to main content

API Changelog

All notable changes to the Public Dataset API will be documented here.

[1.3.0] - 2026-10-13​

Changed​

  • New layout of the downloadable dataset (Excel and the new CSV), see The dataset files:

    • Excel sheets: README (version, license, citation, conventions), Runs, Publications and Dictionary.
    • Runs: one row per run, flat columns grouped by topic, no JSON in cells.
    • Fixed units: every value is in the unit named in its column (voltage_kV, flow_rate_mL_h, fiber_diameter_nm, …), converted from the unit it was entered in. Empty cells mean "not reported".
    • Identifiers: doi holds only real DOIs; web links go to publication_url.
    • Versions released before this change keep their original layout.
  • Review feedback for contributors. A moderator's comment on /moderation/{id}/status (and approve/reject) is now stored with the run. The owner of a contribution gets it in /data/my-submissions and /data/submission/{id} as reviewNote and reviewedAt; runs that need an update also carry openIssues (what is missing, in words). These fields never appear in the public dataset.

  • DELETE /data/submission/{id}: the contributor withdraws a contribution; its runs that are not approved are deleted, approved runs stay.

  • PUT /data/update-submission/{id}: runs of the contribution that are missing from the request are deleted (approved runs excepted) and returned as removedRecords. A rejected run is changed only when it carries "resubmit": true; it then goes back to review. Every edited run that is complete goes back to PENDING.

  • New layout of the image dataset (zip), see The image dataset: README.md, an index images.csv (one row per image with format, size in pixels, checksum, scale bar, magnification and the run's key values), runs.csv (the runs with images, in the dataset's columns), and the images as images/{record_id}/{image_id}_{type}.{ext} with their real file extension. The per-image annotations/*.json files are gone; image files missing on the server are left out instead of written as empty files.

  • Explore view and ML features: columns labelled with a unit (Voltage (kV), Flow Rate (mL/h), Fiber Diameter (nm), …) now hold values converted to that unit; before, values entered in another unit were shown unconverted. Exports from the Explore view write empty cells instead of -.

Added​

  • format=csv for /public/dataset/export and /{version}/export, and /cache/download/csv (/{id}) for the website's download.
  • The downloaded file can be uploaded again (bulk upload, and the web form's Import from Excel).
  • Bulk upload: an optional Solutions sheet describes solutions that Data rows refer to with solution (a mix of separately prepared solutions) or core_solution / middle_solution / shell_solution (coaxial, triaxial), with channel flow rates flow_rate_core / flow_rate_middle / flow_rate_shell. /data/import/validate and /commit accept the sheet's rows as solutions; the report returns them with their problems and the rows using them.
  • Dataset filters polymerType (Homopolymer, Copolymer, Blend, Core/shell) and solutionPreparation (Single solution, Mixed solutions, Core/shell solutions), also in the dataset explorer. The Excel export's polymer_type says core/shell for runs with separate channel solutions.
  • Coaxial and triaxial runs can describe a solution per needle channel: solutions then holds one feed per channel ("channel": "CORE", "SHELL", and "MIDDLE" for triaxial), each dissolved together (one stock) or mixed, with its own measured properties (viscosity, surface tension, conductivity, evaporation rate, pH). The channels must match the needle type. processParameter carries flowRateCore, flowRateMiddle, flowRateShell (in flowRateUnit); flowRate is then their sum. Such records have no single solutionProperty.concentration. The Excel export adds flow_rate_core, flow_rate_middle and flow_rate_shell.
  • Records can describe a spun solution mixed from separately prepared solutions: solutions is a list of feeds (for now one, channel: "MAIN"), each {"preparation": "MIXED", "mixRatioUnit": "v/v" | "w/w", "stocks": [...]}. A stock has its own polymers, solvents, additives, concentration (+ unit) and share in the mix; ratios inside a stock are within that stock. Absent solutions means everything was dissolved together, as before. With solutions, the flat fields are a view of the spun solution: solutionProperty.concentration is the derived polymer concentration, weightRatio / volumeRatio are shares of all polymer / all solvent (null where not derivable), and each component carries a stock index. effectiveValuesEstimated is true for a v/v mix of wt% solutions, where the derivation assumes equal densities. The Excel export adds solution_preparation (e.g. "Mixed 70:30 v/v: A = PCL 10 wt% in DCM; B = GELATIN 8 wt% in HFIP") and solutions (JSON).
  • Copolymers are described in the polymer list: GET /metadata/polymers returns polymerType (HOMOPOLYMER / COPOLYMER), architecture (RANDOM, ALTERNATING, BLOCK, GRAFT) and monomers (composition order, e.g. PLGA = ["LA", "GA"]). New: GET /metadata/monomers, GET /metadata/additives.
  • polymerComponents[] carries a copolymer's composition ([{"monomer": "LA", "fraction": 75}, …]), compositionUnit (mol% / wt%) and a read-only copolymer flag.
  • Records carry additives ([{"additiveName", "amount", "amountUnit", "amountBasis"}]). amountUnit is wt% or mg/mL; amountBasis says what the amount is relative to: polymer, solution or solvent (mg/mL only of the solution or the solvent). Without a basis, wt% means of the polymer and mg/mL of the solution. The Excel export and upload template have additive_N_amount_basis.
  • Needle sizes can be given as a gauge or as an inner diameter in mm: needleDefinition.diameterUnit (and innerDiameterUnit, middleDiameterUnit, outerDiameterUnit) is G or mm. The upload template's needle_gauge columns get a unit column (needle_gauge_unit, …); the Excel export has needle_diameter_mm (and inner, middle, outer) next to the gauge columns. The needle filter and the ML features use gauges only.
  • Excel export: polymer_type (homopolymer / copolymer / blend), additive_components, additive(s) at the end. ML and Virtual Lab datasets gain the categorical features Polymer Type and Additive(s).
  • A write request can define a polymer that is not in the list yet, e.g. a new copolymer: give the component a newPolymer object (polymerType, architecture, monomers, optional fullName, casNumber, note). It is filed for an administrator's review; the record is stored as NEEDS_UPDATE (its missingFields say it awaits approval) and goes to review automatically once the polymer is approved. Reading such a record returns the waiting component with newPolymer and pendingApproval: true.

Changed​

  • The polymer list no longer contains additives (silver nitrate, nanoparticles, drugs, …); they moved to the additive list. Duplicates (e.g. PA6, SILK, PEO_4000) were merged; their old names are still accepted as aliases.
  • The Excel export's polymer(s) column joins blend members with + instead of -, so a blend no longer looks like a copolymer name such as PVDF-HFP.

Fixed​

  • GET /data/submission/{id} returned any contribution to any signed-in user; it is now limited to the contributor and to moderators.

[1.2.0] - 2026-10-12​

Added​

  • Dataset records carry provenance: dataOrigin (LITERATURE / OWN_LAB), sourceLocation (e.g. "Table 2"), extractionMethod (REPORTED / DIGITISED / ESTIMATED) and completenessScore (0-100).
  • fiberProperty carries the diameter's precision: fiberDiameterQualifier (EXACT / APPROXIMATE / RANGE), fiberDiameterMin, fiberDiameterMax (for ranges; fiberDiameter then holds the midpoint), diameterMethod and diameterNMeasured.
  • The Excel export has matching columns at the end; existing column positions are unchanged.
  • Authenticated bulk upload: GET /data/import/template, POST /data/import/parse, /validate and /commit (see Contributing data).

Changed​

  • Write requests (/data/submit, /data/update) check the same mandatory fields as the web form and reject invalid values (unknown units, out-of-range numbers) with a message naming the field. See Authentication & API Tokens.

[1.1.0] - 2026-05-10​

Changed​

  • Migrated public read-only API to a dedicated subdomain: https://api.electrospinning-data.org/public/dataset.
  • Standardized documentation terminology: "read-only API," "dataset records," and "version snapshots."
  • Improved code examples (cURL, Python, R) with explicit output filenames and research-oriented comments.
  • Updated OpenAPI specification to reflect the new production domain and paths.

[1.0.0] - 2026-05-09​

Added​

  • Initial release of the Public Dataset REST API (/api/public/v1/*).
  • Fully unauthenticated programmatic access.
  • Support for complex filtering using JSON objects (Voltage, Morphology, Polymers, Collector Types).
  • Export endpoints for JSON, XLSX, and Cache ZIP bundles.
  • OpenAPI specification documentation directly integrated into this developer portal.