Preparing a Submission
ENA rejects a submission for reasons that are cheap to fix before you send it and expensive to diagnose afterwards. This page covers what SeqDesk itself validates, what it silently passes through, and what a well-prepared study looks like.
The two ENA paths have different requirements. Registration is deliberately
permissive — it only needs enough to build valid PROJECT and SAMPLE XML. The
submg pipeline is strict, because it has to stage real files and drive
webin-cli. Prepare for registration first; prepare for submg only when you
actually intend to publish data files.
What XML registration requires
These are hard checks in POST /api/admin/submissions. Each one returns
HTTP 400 and no XML is generated or sent.
| Requirement | Failure message |
|---|---|
| ENA credentials configured | ENA credentials not configured. Please configure your Webin credentials in Admin > Data Upload > ENA Configuration. |
| Study exists | Study not found (404) |
| Study not already registered in production | Study already registered with ENA (PRJEB…) |
| Non-empty title | Study title is required for ENA registration |
| Non-empty description | Study description is required for ENA registration |
| At least one sample | Study must have at least one sample for ENA registration |
| A taxonomy ID on every sample | N sample(s) missing taxonomy ID (TAXON_ID is required by ENA) |
Notice what is not checked: there is no minimum length on the title or description, no uniqueness check on the alias, no requirement that the study is marked ready, and no validation of MIxS completeness. A study with a one-character description and no environmental metadata will register successfully — and produce a nearly useless public record. The quality bar is yours to set.
The study alias sent to ENA is study.alias if you set one, and the
study’s internal database id otherwise. The alias is the key ENA uses to
detect duplicate submissions inside your Webin account, so setting a
deliberate, human-readable alias (for example
human-gut-shotgun-prjeb54724) makes duplicate errors legible instead of
cryptic.
The check panel in the UI
The Register at ENA screen shows the same requirements as a live checklist before you can click anything. In Test mode the panel is titled Submission Requirements and lists five rows, each with a pencil icon that jumps straight to the relevant edit screen:
| Row | Passes when | Edit link |
|---|---|---|
| Title | The study title is non-empty | Study edit, details section |
| Description | The study description is non-empty | Study edit, details section |
| Samples | At least one sample is linked | Study edit, samples section |
| Taxonomy ID | Every sample has a non-empty taxId | Study edit, samples section |
| Metadata | Checklist metadata is complete, or not required for this study | Study edit, metadata section |
The Metadata row is the only one with no server-side counterpart — the registration API will happily proceed without it. It exists because sample attributes are the part of the record that makes the data reusable, and the easiest moment to fill them is before the record is public.
Switching the toggle to Production replaces the panel with Production Requirements, which is a different, stricter set. See the test-first gate.
What the submg pipeline requires
submg validation runs twice: once when the run is created (in
validatePipelineMetadata) and again when the run is prepared (in the submg
runner). Both refuse to start the run rather than sending a partial submission,
so a failed check costs you nothing but time.
Per study:
- The study must already have a
PRJ…accession. Register first. - If the global ENA target is Test, the study must additionally have a test registration that is less than 24 hours old. An expired or missing test registration is a hard error, not a warning.
- submg only runs on study targets. There is no sequencing-order-scoped variant.
Per sample:
| Requirement | Why |
|---|---|
A non-empty taxId | Written into the submg YAML as METAGENOME_TAXID |
| At least one read with both R1 and R2 | submg’s read manifest is paired-end only; single-end reads are ignored |
| MD5 checksums on both R1 and R2 of every paired read | webin-cli verifies the upload against them |
| Both FASTQ files present on disk | The runner resolves the stored path and checks it exists |
| A resolvable assembly FASTA that exists on disk | Normally produced by the MAG pipeline |
collection date in checklist metadata | A required top-level key in the submg YAML |
geographic location (country and/or sea) in checklist metadata | Same |
Bins are optional. A sample with no bins produces a warning, not an error,
and is submitted without a BINS: block.
If a read’s FASTQ is missing at the recorded path, the runner tries a small
set of near-miss variants first — .fastq.gz ↔ .fq.gz, gzipped ↔
uncompressed. If one of those exists it is used and the run records a
warning naming both paths. Only if none exist does it fail. Read the run
warnings even on a successful run.
Assembly coverage
submg’s assembly manifest needs a COVERAGE_VALUE. SeqDesk looks for one in
the sample’s custom fields first and then the sequencing order’s custom
fields, trying these keys in order:
assembly_coverage_value, coverage_value, coverage_depth,
target_coverage_depth, target_coverage, coverage
If none is found and no assemblyCoverageValue was set in the pipeline
configuration, it falls back to 1 and emits a warning naming the sample.
A coverage of 1 is almost never true. Set coverage_depth on the sample or
sequencing order, or override assemblyCoverageValue when you launch the run,
if the number matters for your submission.
How sample attributes are built
This is the part that surprises people. The SAMPLE_ATTRIBUTE entries in the
XML are not a copy of one field — they are a merge of four sources, applied
in this order, where later sources overwrite earlier ones on key collision:
Study metadata
study.studyMetadata, the study-level MIxS values. These apply to every
sample in the study.
Sequencing order custom fields
order.customFields for the order each sample belongs to. Shared by all
samples in that order.
Sample custom fields
sample.customFields, the per-sample values captured on the order form.
Sample checklist data
sample.checklistData, the MIxS checklist answers. These win.
Only non-empty string values are carried through at each stage; blanks are
dropped rather than overwriting a good value with an empty one. The study’s
checklistType is emitted separately as an ENA-CHECKLIST attribute so ENA
validates the sample against the right checklist.
The practical consequence: if a value looks wrong in the generated XML, check all four sources, not just the checklist. The Submissions Dashboard shows the exact XML that was sent, which is the fastest way to see the merged result.
The field-name mapping
ENA expects specific attribute names, several of which contain spaces and parentheses. SeqDesk rewrites a fixed list of internal keys onto them. Anything not in this list is sent verbatim under whatever key your form used.
| Internal keys | Sent to ENA as |
|---|---|
collection_date, collectionDate, Collection Date | collection date |
geo_loc_name_country, geo_loc_name, geographic_location, geographicLocation, country, geographic_location_country_and_or_sea, Geographic Location (Country) | geographic location (country and/or sea) |
lat_lon, latitude, geographic_location_latitude | geographic location (latitude) |
longitude, geographic_location_longitude | geographic location (longitude) |
env_broad_scale | broad-scale environmental context |
env_local_scale | local environmental context |
env_medium | environmental medium |
isolation_source | isolation source |
host | host |
host_scientific_name | host scientific name |
depth, altitude, elevation | unchanged |
So a form field named broad_scale_environmental_context — a perfectly
reasonable name, and one the built-in demo data uses — is not rewritten,
because the map keys that field as env_broad_scale. It reaches ENA as a
custom attribute called broad_scale_environmental_context. It will not fail
validation, but it will not satisfy the checklist’s mandatory
broad-scale environmental context field either.
If a checklist field is being reported as missing by ENA even though you filled it in, this mapping is the first place to look.
A worked example
A twelve-sample human gut metagenome study, prepared for both paths:
Study
title Human Gut Shotgun Metagenomes (PRJEB54724)
alias human-gut-shotgun-prjeb54724
description Twelve paired-end Illumina shotgun metagenomes from adult
faecal samples collected in the Netherlands, 2016.
checklist host-associated
Sample HGM-01
sampleId HGM-01 -> SAMPLE alias
sampleTitle Human faecal shotgun metagenome Subject-01
taxId 408170 -> TAXON_ID
scientificName human gut metagenome -> SCIENTIFIC_NAME
checklistData
collection_date 2016-05-12
geographic_location_country_and_or_sea Netherlands
env_broad_scale host-associated habitat [ENVO:00009003]
env_local_scale gastrointestinal tract environment [ENVO:2100002]
env_medium feces [ENVO:00002003]
host_scientific_name Homo sapiens
customFields
coverage_depth 28That yields a sample element carrying ENA-CHECKLIST, a mapped
collection date, a mapped
geographic location (country and/or sea), three mapped environmental context
attributes, host scientific name, and a coverage_depth attribute that also
serves as the submg coverage source.
Pre-flight checklist
Confirm credentials
In Administration → ENA Credentials, save the Webin username and password and press Test connection. A green result means the drop-box endpoint accepted your Basic auth.
Fill the study fields
Title, description, and a deliberate alias. Set the checklist type so
ENA-CHECKLIST is emitted.
Give every sample a taxonomy ID
Use the organism autocomplete rather than typing an ID. For metagenomes pick
the metagenome taxon (for example 408170, human gut metagenome), not the
host species.
Fill the mandatory checklist fields
At minimum collection date and
geographic location (country and/or sea) — these two are required by submg
and by most MIxS checklists.
Register on the Test server
Then read the generated XML in the Submissions Dashboard and confirm the attributes look the way you expect before you go near Production.
Where to go next
- Submitting to ENA — the workflow itself.
- Troubleshooting ENA — when a check fails or ENA rejects the XML.
- Study Metadata & MIxS — where checklist fields come from.