Skip to Content
ENA SubmissionPreparing a Submission

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.

RequirementFailure message
ENA credentials configuredENA credentials not configured. Please configure your Webin credentials in Admin > Data Upload > ENA Configuration.
Study existsStudy not found (404)
Study not already registered in productionStudy already registered with ENA (PRJEB…)
Non-empty titleStudy title is required for ENA registration
Non-empty descriptionStudy description is required for ENA registration
At least one sampleStudy must have at least one sample for ENA registration
A taxonomy ID on every sampleN 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:

RowPasses whenEdit link
TitleThe study title is non-emptyStudy edit, details section
DescriptionThe study description is non-emptyStudy edit, details section
SamplesAt least one sample is linkedStudy edit, samples section
Taxonomy IDEvery sample has a non-empty taxIdStudy edit, samples section
MetadataChecklist metadata is complete, or not required for this studyStudy 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:

RequirementWhy
A non-empty taxIdWritten into the submg YAML as METAGENOME_TAXID
At least one read with both R1 and R2submg’s read manifest is paired-end only; single-end reads are ignored
MD5 checksums on both R1 and R2 of every paired readwebin-cli verifies the upload against them
Both FASTQ files present on diskThe runner resolves the stored path and checks it exists
A resolvable assembly FASTA that exists on diskNormally produced by the MAG pipeline
collection date in checklist metadataA required top-level key in the submg YAML
geographic location (country and/or sea) in checklist metadataSame

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 keysSent to ENA as
collection_date, collectionDate, Collection Datecollection 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_latitudegeographic location (latitude)
longitude, geographic_location_longitudegeographic location (longitude)
env_broad_scalebroad-scale environmental context
env_local_scalelocal environmental context
env_mediumenvironmental medium
isolation_sourceisolation source
hosthost
host_scientific_namehost scientific name
depth, altitude, elevationunchanged

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 28

That 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