Skip to Content
ENA SubmissionSubmissions Dashboard

Submissions Dashboard

/submissions is the facility-admin view of every ENA registration attempt this installation has ever made. Where Submitting to ENA describes how one submission flows, this page is the queue you watch them from and the forensic record you fall back on when one goes wrong.

It covers the XML registration path only. submg runs are pipeline runs and appear under pipeline monitoring instead.

Researchers cannot reach this page — they are redirected to /orders. In the public demo it is replaced by a notice explaining that external archive submission is blocked.

Layout

The page is titled Archive Queue. Under the title is a live count:

14 submissions · 9 accepted · 1 pending · 2 issues

“pending” counts PENDING and SUBMITTED; “issues” counts REJECTED, ERROR and PARTIAL. A Refresh button re-fetches without a page reload.

If there are no submissions at all the table is replaced by No submissions yet and a View Studies link, because registration is always started from a study, never from here.

Filters

ControlBehaviour
Search boxMatches the entity name (study title or sample id), the submitting user’s name, the submission type, or the submission id
All StatusPENDING, SUBMITTED, PARTIAL, ACCEPTED, REJECTED, ERROR, CANCELLED
All TypesStudy or Sample
ClearAppears once any filter is active

Row summary

ColumnSource
EntityStudy title, or the sample id for sample-scoped rows. Reads Deleted Study / Deleted Sample when the record is gone, and the subtitle adds · Entity Deleted
StatusThe status field, colour-coded. Test rows also carry an expiry countdown
AccessionThe first value in the accessionNumbers map — normally the study accession
DatecreatedAt
ActionsA link to the study’s publishing tab, and a delete button

The subtitle under the entity name shows the submission type and appends · Test for test submissions.

Expanded row

Clicking a row expands it.

  • Registration Steps — a timeline rebuilt from response.steps[]. Each step has a number, a name, a status, a timestamp, and an expandable details block. Step names are Validation, Generate XML, Send Study to ENA (or Reuse Existing Study), Send Samples to ENA, and Update Database. XML values inside the details render as scrollable code blocks with a Copy button.
  • Accession Numbers — every entry in the map, each deep-linked into the ENA browser. Test rows link to wwwdev.ebi.ac.uk, production rows to www.ebi.ac.uk. The study entry is labelled “Study”; the rest are labelled Sample: <sampleId>. A footnote states whether these are temporary or permanent.
  • Generated XML — the concatenated study, sample, and submission XML from xmlContent, exactly as sent.
  • ActionsRetry Submission, Processing…, and Delete, depending on status.

Older rows written before the step timeline existed fall back to a Submission Details block showing just the server, the target, and the message.

Statuses

The registration path itself produces four of these. The rest exist for display and for manual state changes.

StatusSet when
PENDINGThe row was created and registration has not finished. Shows a disabled Processing… button
ACCEPTEDA study accession was received and every sample in the study has an accession
PARTIALThe study registered but at least one sample did not
ERRORThe study call failed, no usable accession came back, or the request threw
SUBMITTEDNot produced by registration; recognised for filtering and treated as in-flight by the concurrency guard
REJECTEDNot produced by registration; recognised for filtering, and enables Retry Submission
CANCELLEDSet manually through PATCH /api/admin/submissions/[id]

PARTIAL cannot be set manually — the PATCH endpoint accepts only PENDING, SUBMITTED, ACCEPTED, REJECTED, ERROR and CANCELLED, and rejects anything else with Invalid status.

Test-mode expiry

ENA’s test server drops accessions 24 hours after they are issued. The dashboard reflects that, but does not verify it:

  • Test rows show Expires in Xh (or Xm in the final hour) beside the status badge.
  • After the deadline the badge reads Expired, struck through.
  • The countdown is computed entirely in the browser from createdAt plus 24 hours. SeqDesk never asks ENA whether the record is still there.

A row is treated as a test submission unless its stored response explicitly says otherwise, so a malformed or missing response is assumed to be a test.

Retry semantics

Retry Submission appears only on ERROR, REJECTED and PARTIAL rows whose entity type is study. PENDING rows show a disabled Processing… button; ACCEPTED rows offer no retry.

There is no dedicated retry endpoint. The button re-POSTs /api/admin/submissions with the same entityType, entityId, and the same test/production target the original attempt used. That means:

  • Fresh XML is generated, so any database fixes you made since take effect.
  • If the study already holds an accession for that target, the project registration is skipped and only the samples still missing an accession are sent.
  • A new Submission row is created. The failed one stays for the record.
  • The same pre-checks apply, so a retry can bounce immediately with, for example, Study and samples are already registered on the ENA Test Server.

Deleting

Delete asks for confirmation, warning that “For test submissions, this will also clear the accession numbers from the study.”

That warning is precise and important:

  • Test submission — the study’s studyAccessionId, submitted, submittedAt and testRegisteredAt are cleared (only if the stored study accession still matches the one this submission recorded), and each sample’s sampleAccessionNumber is cleared where it matches. This is the intended way to reset after a test cycle.
  • Production submission — nothing is cleared. Only the audit row disappears. Deleting it does not withdraw anything from ENA and does not let you re-register the study.

The Submission record

Defined in prisma/schema.prisma:

FieldTypePurpose
idcuidSubmission identifier; searchable from the dashboard
submissionTypestringSTUDY for this path
statusstringCurrent state, default PENDING
xmlContentstring?The study, sample and submission XML that was sent, concatenated with comment separators
responsestring? (JSON)Server URL, isTest, message, the steps[] timeline, a nested receipt (holding studyReceiptXml and samplesReceiptXml), any samplesError, and a debug block
accessionNumbersstring? (JSON){ "study": "PRJEB12345", "<sampleId>": "ERS…", … }, keyed by the sample’s sampleId, not its database id
entityTypestringstudy or sample
entityIdstringThe study or sample id
createdAt / updatedAtdatetimeStandard timestamps

There is no receiptXml, requestPayload or error-message column. The receipt and all error text live inside response.

API

CallPurpose
GET /api/admin/submissionsThe list, enriched with entity details and a parsed accessionNumbers
POST /api/admin/submissionsStart a registration — also what Retry Submission calls
GET /api/admin/submissions/[id]One raw submission row
PATCH /api/admin/submissions/[id]Change status
DELETE /api/admin/submissions/[id]Delete, with the test-accession cleanup described above

All five require FACILITY_ADMIN; anything else returns 401.

When to use it

  • Watching a registration land. The step timeline is the only place the full request/response detail is kept.
  • Post-mortem on a rejection. Expand, read the XML, read the receipt, fix the record, retry. See Troubleshooting ENA.
  • Periodic test-mode cleanup. Delete expired test rows so the queue keeps reflecting real state — and so a stale accession does not block a future registration.
  • Clearing a stuck PENDING row that is blocking new registrations with A submission for this study is already in progress.