Skip to Content
ReferenceSequencing Technology API

Sequencing Technology API

SeqDesk keeps a curated catalog of sequencing hardware: platforms, devices, flow cells, kits, barcode schemes, and control software. The catalog drives the technology selector on the order form, feeds compatibility hints to pipelines, and supplies the images shown next to each device.

There are two distinct use cases, and they use different endpoints:

GoalEndpoint
Read what your own instance currently offers usersGET /api/sequencing-tech on your host
Serve a catalog that a SeqDesk instance can sync fromGET /api/registry/sequencing-tech on seqdesk.org, or your own URL implementing the same contract

The second is the interesting one. A facility that runs instruments the public catalog does not cover can host its own JSON document and point SeqDesk at it — this page is the contract that document must satisfy.

Base URL

  • Public registry: https://seqdesk.org/api
  • Your instance: https://<your-host>/api

The registry a SeqDesk instance syncs from defaults to https://seqdesk.org/api/registry/sequencing-tech, overridable per instance by the syncUrl stored with the configuration, or globally by the SEQDESK_API_URL environment variable.

Reading your instance’s catalog

GET /api/sequencing-tech

Returns the locally stored configuration after filtering. Unauthenticated — the order form needs it before a session is fully established — and served Cache-Control: no-store, because it must reflect an admin’s edits immediately.

curl -s https://<your-host>/api/sequencing-tech
{ "technologies": [ { "id": "ont-minion", "name": "MinION", "manufacturer": "Oxford Nanopore", "shortDescription": "Portable nanopore sequencing platform", "platformFamily": "oxford-nanopore", "readLengthClass": "long", "supportedReadLayouts": ["single"], "specs": [{ "label": "Read length", "value": "up to 4 Mb" }], "pros": [{ "text": "Portable" }], "cons": [{ "text": "Lower per-run throughput than PromethION" }], "bestFor": ["Rapid turnaround"], "available": true, "order": 10 } ], "devices": [ { "id": "ont-minion-mk1d", "platformId": "ont-minion", "name": "MinION Mk1D", "manufacturer": "Oxford Nanopore", "productOverview": "Portable nanopore sequencer", "shortDescription": "Portable nanopore sequencing device", "specs": [], "compatibleFlowCells": ["flo-min114"], "compatibleKits": ["sqk-lsk114"], "compatibleSoftware": ["minknow"], "available": true, "order": 10 } ], "flowCells": [], "kits": [], "software": [], "barcodeSchemes": [], "barcodeSets": [] }

What the filter actually does

The filtering rules are not uniform across collections, which surprises people:

CollectionIncluded whenSorted by
technologiesavailable and not comingSoonorder
devicesavailable and not comingSoonorder
flowCellsavailableorder
kitsavailableorder
softwareavailableorder
barcodeSchemesalways — passed through unfilteredsource order
barcodeSetsalways — passed through unfilteredsource order

So comingSoon hides a platform or a device from users while leaving it visible in the admin catalog, but it does not hide a flow cell or kit. Use available: false for those.

The response deliberately carries no version and no syncUrl. Those live on the stored configuration and are visible to admins under Admin → Sequencing Technology, not on the public read.

If the catalog cannot be loaded at all, the endpoint returns 500 {"error":"Failed to fetch technologies"}.

On a fresh instance with no stored configuration, this endpoint fetches the default registry once, filters it, and serves the result. A first request on a brand-new install therefore depends on outbound network access to the registry host. If it is unavailable the endpoint returns empty collections rather than failing, and the admin can populate the catalog manually.

Serving a catalog: the sync contract

GET /api/registry/sequencing-tech

curl -s https://seqdesk.org/api/registry/sequencing-tech

This returns the full, unfiltered dataset and is exactly the contract SeqDesk accepts when you configure a custom sync URL in Admin → Sequencing Technology.

SeqDesk accepts either a wrapped document:

{ "config": { "version": 6, "technologies": [] } }

or the raw configuration object:

{ "version": 6, "technologies": [], "devices": [], "flowCells": [], "kits": [], "software": [], "barcodeSchemes": [], "barcodeSets": [] }

Anything that is not an object — an array, a string, null — is rejected with “Registry returned invalid sequencing tech config”. Any collection that is not an array is coerced to [] rather than failing, so a partial document is tolerated.

Required fields

FieldTypeDescription
versionintegerMonotonic version used for update detection. Non-numeric values are coerced to 0
technologiesarrayPlatform definitions. The only collection that must be present

Optional collections

FieldTypeNotes
devicesarrayDevices linked to a platform through platformId
flowCellsarrayReferenced from devices[].compatibleFlowCells
kitsarrayReferenced from devices[].compatibleKits
softwarearrayReferenced from devices[].compatibleSoftware
barcodeSchemesarrayBarcode scheme metadata
barcodeSetsarrayBarcode set metadata

A platform entry

FieldTypeDescription
idstringStable unique identifier; this is the merge key
namestringDisplay name
manufacturerstringVendor or platform owner
shortDescriptionstringOne-line summary used in the selector
platformFamilystringCompatibility family — matched against a pipeline’s sequencingCompatibility.platformFamilies
readLengthClassstringshort, long, both, or unknown
supportedReadLayoutsarraye.g. ["single"], ["paired"], ["single","paired"]
specsarray{ label, value, unit? }
prosarray{ text, tooltip? }
consarray{ text, tooltip? }
bestForarrayShort use-case labels
iconstringOptional asset path; see asset resolution below
availablebooleanWhether it is selectable. A local instance can override this
comingSoonbooleanWhen true, excluded from GET /api/sequencing-tech — a teaser only
orderintegerDisplay order

A device entry

FieldTypeDescription
idstringStable unique identifier
platformIdstringMust match a technologies[].id
namestringDisplay name
manufacturerstringVendor
productOverviewstringLonger description
shortDescriptionstringOne-line summary
specsarrayTechnical specs
compatibleFlowCellsarrayFlow-cell ids
compatibleKitsarrayKit ids
compatibleSoftwarearraySoftware ids
imagestringOptional asset path
availablebooleanSelectable by default
comingSoonbooleanExcluded from GET /api/sequencing-tech
orderintegerDisplay order

Kits may additionally carry barcoding metadata — kitKind, doradoKitName, and a barcoding block with barcodeSetId, maxBarcodesPerRun, and compatibleBarcodeKits. SeqDesk treats the appearance of this metadata on an existing kit as an update, even without a version bump, so barcoding data can be backfilled into a catalog that has already been synced.

Asset resolution

icon and image may be relative paths such as /images/sequencers/devices/ont-minion-mk1d.png. SeqDesk resolves them against the origin of the sync URL, so a custom registry can serve its own images from its own host without rewriting the paths. Absolute URLs are passed through unchanged.

Update detection and merging

When an admin checks a registry for updates, SeqDesk fetches the document and decides whether anything changed. It updates if any of these hold:

  • the remote version is greater than the local version;
  • the local catalog has no technologies and the remote one does;
  • the remote contains an id that is missing locally, in any of technologies, devices, flowCells, kits, or software;
  • the remote adds barcoding metadata (kitKind, doradoKitName, barcoding, or richer barcoding fields) to a kit that already exists locally, or new barcode schemes or sets.

The last two matter: a registry that adds an entry without bumping version is still picked up. Nothing is deleted — an item that exists locally but not remotely is kept.

Merging is per item, by id:

Local itemResult
AbsentThe remote item is taken as-is
Present, localOverrides: trueLocal fields win field-by-field over the remote ones
Present, no overridesThe remote item wins, except available, which keeps the local value

That exception is the important one. Turning a platform off in your instance survives every future sync, without you having to mark the entry as locally overridden. Set localOverrides: true only when you have edited more than availability — a renamed device, corrected specs, your own image.

After a successful merge SeqDesk stores the remote version, the resolved syncUrl, and lastSyncedAt, and reports how many new technologies arrived.

Custom registry checklist

Serve JSON over HTTP or HTTPS

Only http: and https: URLs are accepted; anything else is rejected with “syncUrl must be a valid http(s) URL”. The fetch is a plain server-side GET with Accept: application/json and no caching.

Do not expect authentication

SeqDesk sends no authentication headers to a custom registry URL. If your catalog must be private, restrict it by network or by an unguessable path — do not expect a token to be forwarded.

Give every item a stable id

id is the merge key. Changing an id creates a second entry and orphans the first; both then appear in the catalog.

Bump version when you change anything

New ids are detected without it, but edits to existing entries are not. Treat version as a monotonic integer and increment it on every publish.

Point the instance at it

Set the sync URL under Admin → Sequencing Technology, then run the update check. The response tells you the new version and how many technologies were added.

Errors

EndpointConditionResponse
GET /api/sequencing-techCatalog could not be loaded500 {"error":"Failed to fetch technologies"}
Admin syncRegistry returns a non-2xx statusThe failure is surfaced as API returned <status>
Admin syncRegistry returns a non-object body”Registry returned invalid sequencing tech config”
Admin savetechnologies is not an array400 {"error":"Technologies must be an array"}
Admin savesyncUrl is not an http(s) URL400 {"error":"syncUrl must be a valid http(s) URL"}

Caching and CORS

  • The public seqdesk.org registry endpoints are CDN-cached with s-maxage=300, stale-while-revalidate=600. A change you publish can take up to five minutes to reach an instance.
  • Your instance’s GET /api/sequencing-tech is served no-store.
  • Custom registry sync is a server-side fetch, so CORS headers on your registry are irrelevant to SeqDesk — but adding them lets you test the URL from a browser.