EUDAMED submission methods

Common EUDAMED XML validation errors and how to fix them

A EUDAMED XML validation error is a rejection the bulk upload service returns when your file fails one of three checks: a structural check on the whole file, a data check on each device, or Notified Body confirmation for Class III and Class IIb implantable devices. This page pairs the common rejections with the literal fix for each.

Last reviewed Validated against EUDAMED v3.0.30 Recently updated

An EUDAMED XML validation error is a rejection the EUDAMED bulk upload service returns when your file fails one of three checks: a structural check on the whole file, a data check on each device, and, for some devices, a Notified Body confirmation step that follows later. This page pairs the common rejections at each check with the literal fix. It assumes you have already signed in, run a bulk upload, and had a rejection come back, rather than that you are still working out what EUDAMED is. Which of the three checks fired is the fastest thing you can read off the response, and it points straight at who fixes what. As of this article’s last review, the current schema is v3.0.30 and the platform release is v2.27.0.

What the three checks do

The structural check on the file rejects the whole upload when the XML does not match the schema. Nothing is processed. Fix the file and resubmit.

The per-device data check runs on each device on its own. Valid devices in the same batch are accepted; only the failing ones come back in the response, each with the EC business rule that broke.

Notified Body confirmation is the third check and applies only to Class III and Class IIb implantable devices. The Basic UDI-DI sits in Submitted status until the notified body confirms it.

What EUDAMED tells you when your upload fails, and what it doesn’t

The bulk upload service returns a response file for every submission. You download it from the Response column in the Upload management table once processing has finished. Each device you submitted comes back marked either SUCCESS or ERROR, and only the ERROR rows need another look. The EC’s help page on the bulk upload flow sets out the model plainly: a batch of several devices is processed one device at a time, and the outcomes are gathered into a single response.

What an ERROR row gives you is the error code, the identifier of the object it attaches to when there is a recognisable one, and a short note on the rule that was broken. What it does not always give you is the exact field that failed. For some rejections the response sits at the record level, not the field level, and finding the field means comparing the failing record against a known-good sample. That gap, between what EUDAMED returns and what your team needs to fix the source, is the reason this page exists.

A response row looks like this, in outline:

ErrorCode: E-I-40000
ObjectId: 0123ABC-BASIC-UDI-DI
RuleViolated: Element could not be matched to a known object
Location: (not provided)

The shape of the response depends on which check fired. A structural failure rejects the whole file with no per-device detail. A per-device failure returns each failing device with the rule that broke. A device waiting on notified-body confirmation sits in Submitted status with no rejection at all until the notified body acts.

Why one file gets rejected outright and another gets rejected in pieces

The three checks run in order. A file that fails the first never reaches the second, and a device that fails the second never reaches the third. Which one fired is the fastest read on your response. If the whole file bounced, the problem is structural. If some devices came back accepted and others rejected, the problem is in the data of the ones that failed. If a Class III device is sitting in Submitted status with no rejection, you are waiting on your notified body, not on a fix.

The plain names are worth pinning to the formal ones once, because the EC documents and the vendor tools use the formal set. The structural check is XSD validation. The per-device data check is business-rule validation. The third is Notified Body confirmation. This page uses the plain names from here on.

What EUDAMED didWhat your response looks likeWhere the fix lives
The structural check rejected the whole fileWhole file rejected, no per-device detailThe XML itself: your RA data team, or IT if a tool generates the file
The per-device check rejected specific devicesSome devices come back SUCCESS, the failing ones ERROR with the rule that brokeThe source record for each failing device, with the notified body on certificate rows
Notified Body confirmation is pendingNo rejection; the Basic UDI-DI sits in Submitted statusThe notified body’s workflow: you wait

On a small team those labels collapse into the people you actually have. The structural fixes are the file itself, so they sit with whoever generates it: your IT function, or the external consultant who runs your uploads today. The per-device fixes are your source data, so they sit with your Quality Engineer or RA, with the PRRC signing off on anything that changes a device’s grouping or declaration. Reading which check fired tells you which of the two to hand the response to.

The structural check runs against the schema the EC publishes on its Technical Documentation page; the current version is v3.0.30, matched to platform release v2.27.0. The per-device check runs against the business-rule PDFs the EC publishes beside the schema. The confirmation step applies Article 29 of Regulation (EU) 2017/745 to devices in scope for Annex IX or Annex X.

The common rejections and the specific fix for each

The two checks that produce almost every rejection are the structural check on the file and the per-device data check. The rules behind the per-device check are the ones the EC publishes in its UDI Devices business rules, and they validate against the UDI Devices data dictionary on the same page. The two catalogs below pair each rejection with the fix and name who on your side does the fixing. Your response gives you a code and a short rule text; match the rule text to the pattern in the catalogs below, and use the EC’s Annex 1 to translate the numeric code if you need to.

Structural rejections: what breaks the whole file

A structural rejection means the XML itself does not match the schema. The response is all or nothing: the whole upload bounces, with no per-device detail. The fix is in the file, not in the data.

Error patternRoot causeFixWho fixes this
Malformed XML the parser cannot readAn unescaped character in a text field, an unclosed element, or a file saved in the wrong encodingEscape the special characters, close every element, save as UTF-8Your RA data team, or IT if a tool generates the file
Missing required fieldA core mandatory field left out: UDI-DI code, risk class, EMDN code, intended purposeAdd the field and populate it from the source dataYour RA data team
Wrong data typeText in a number field, or a date written as 01/03/2026 rather than 2026-03-01Use the type the schema expects; dates in ISO 8601 (YYYY-MM-DD)Your RA data team
Field too longA free-text field longer than the schema allowsTrim to the limit the data dictionary lists for that fieldYour RA data team
Value not on the allowed listRisk class entered as the label (Class IIa) instead of the schema code (IIA), or a code from a stale extractUse the code from the EC’s published list, not the human-readable labelYour RA data team
Too many or too few of a fieldA field repeated more often than the schema allows, or a required group left outMatch the count of each element to what the schema allowsYour RA data team
Schema version mismatchThe file was built against an older schema after EUDAMED moved to a newer oneDownload the current schema from the Technical Documentation page and regenerateIT, or the vendor whose tool emits the file
Attachment reference does not resolveThe XML points at an attachment by a path that is not in the uploadCheck every attachment reference points at a file included under the right pathYour RA data team, or IT if a tool assembles the upload

The most common structural rejection is a value that is not on the allowed list, and the usual culprit is the risk class. Risk class is a coded field. The label is Class IIa; the code the schema wants is IIA. Files hand-mapped from a labelling spreadsheet fail this constantly.

Invalid:

<Device>
  <UDIDICode>05012345678901</UDIDICode>
  <RiskClass>Class IIa</RiskClass>
  <EMDNCode>W0101010101</EMDNCode>
  <IntendedPurpose>Diagnostic imaging accessory</IntendedPurpose>
</Device>

Valid:

<Device>
  <UDIDICode>05012345678901</UDIDICode>
  <RiskClass>IIA</RiskClass>
  <EMDNCode>W0101010101</EMDNCode>
  <IntendedPurpose>Diagnostic imaging accessory</IntendedPurpose>
</Device>

Only the codes on the EC’s published list pass. A label, a translation, or a vendor’s internal code all fail the same way. The element names and values here are illustrative; take the exact tags and codes from the data dictionary and the published enumerations.

If becoming your own in-house EUDAMED XML expert is not the capability you want to build, EUDAPrep runs the same structural check against the EC’s current schema and tells you which field failed and why. The RA team reads the flagged field, the source or the emitting tool gets the fix, and the file re-runs. The check is deterministic, not a guess.

Per-device rejections: what breaks specific devices

A per-device rejection means the file was structurally clean but one or more devices failed the EC’s business rules. Valid devices in the same batch are accepted and written to the database; the failing ones come back with the rule that broke and, where the rule allows, a short note pointing at the field. The rules are the ones the EC publishes in the UDI Devices business rules beside the schema.

Error patternRoot causeFixWho fixes this
Duplicate Basic UDI-DIA Basic UDI-DI already registered under your SRN is submitted again as newUse the update path, not the insert path; the EC samples cover bothYour RA data team
Grouping mismatchA Basic UDI-DI groups devices with different intended purposes, risk classes, or essential design characteristics, against the Basic UDI-DI grouping rules in MDCG 2018-1 Rev. 4Split the group into per-purpose, per-risk-class, per-design Basic UDI-DIs and reassign the UDI-DIsYour RA data team, with PRRC sign-off on the regrouping
Conformity-assessment mismatchThe procedure declared does not qualify under the Annex combination for the device’s risk classRealign the declared procedure with the device’s Annex combination; MDCG 2018-1 Rev. 4 is the referenceYour RA data team and the notified body
Legacy tagged as new, or new tagged as legacyThe legislative-framework tag is wrong; the legacy path uses a EUDAMED-DI rather than a Basic UDI-DISet the correct framework tag; legacy devices follow a separate pathYour RA data team
UDI-DI length wrongA GTIN not padded to 14 digits (GTIN-8 needs 6 leading zeros, GTIN-12 needs 2, GTIN-13 needs 1)Pad to 14 digits in the source data before the file is generatedYour RA data team, or IT
UDI-DI check-digit failureThe check digit was recomputed wrong during relabelling, or transcribed from poor OCRRecompute per the issuing entity’s rule (GS1, HIBCC, IFA, ICCBBA) and regenerateYour RA data team
Orphan UDI-DIA UDI-DI submitted without a Basic UDI-DI parent it can resolve toSubmit the Basic UDI-DI first, or point the UDI-DI at an existing parentYour RA data team
Obsolete EMDN codeA code from a stale extract; the EC has pruned the list since you pulled itRefresh the extract and pick a terminal EMDN code from the current listYour RA data team
Non-terminal EMDN codeA parent node picked instead of a leaf; the device needs the most granular, terminal termRe-select the terminal (leaf-level) term under the same branchYour RA data team
Certificate not in EUDAMED yetThe notified body has not uploaded the certificate to the Certificates moduleCoordinate with the notified body to upload it, then resubmitYour RA data team and the notified body
Certificate scope mismatchThe certificate does not cover the device’s risk class, Annex combination, or intended purposeCite a certificate whose scope covers the device, or query the notified bodyYour RA data team and the notified body
Expired certificateThe certificate expired or was withdrawn before the device was submittedCite the active certificate; without one the device cannot register on this pathYour RA data team and the notified body
SRN role not activeThe actor record exists but the asserted role (manufacturer, importer, distributor, pack producer) is not activeActivate the role on the actor record; roles are activated separately from the actorYour RA data team
Non-EU manufacturer without an Authorised RepresentativeA non-EU manufacturer submits without a linked EU AR, against Article 11Link the AR’s actor record; the AR has to be registered with an active roleYour RA data team and the AR

When the per-device check is where your batch is failing, the lever is the upstream source data, not the XML. EUDAPrep runs every one of the EC’s published business rules against your file and, on each rejection, names the rule that broke and the field it broke on. Your RA team reads the list, fixes the source record, and re-runs the batch. There is no rules document to hand-parse and no in-house rule set to keep in sync with the EC’s next revision. EUDAPrep uses the EC’s published rules directly and updates when the EC does.

Notified Body confirmation: the sub-population case

The third check applies only to Class III devices and Class IIb implantable devices under Annex IX or Annex X, per Article 29 of Regulation (EU) 2017/745. Once a Basic UDI-DI clears the first two checks, it sits in Submitted status until the relevant notified body confirms it. Confirmation is the notified body’s workflow, not something you control. If your devices are outside that scope, you can skip this section.

BlockerRoot causeWho fixes this
Wrong Annex declaredThe Basic UDI-DI declares an Annex combination that does not match the device’s actual conformity-assessment routeYour RA team, with PRRC sign-off on the revised declaration
Notified body not designated for the Annex combinationThe notified body holds the certificate but is not designated in NANDO for the Annex combination declaredYour RA team and the notified body
Certificate not uploadedThe notified body has not uploaded the certificate to the Certificates moduleThe notified body; you wait
Grouping changed after the certificate issuedRegrouping after the certificate was issued leaves its scope no longer covering the new groupYour RA team and the notified body
Notified-body backlog before the deadlineThe notified body’s queue runs longer than your planning window before 28 November 2026The notified body; ease it by submitting confirmations early

Submitted status is not a rejection. The record exists in EUDAMED; what is outstanding is the notified-body step that moves it to Registered.

Before you upload: catching these upstream

The way to stop the next batch going the same way is to run the same two checks EUDAMED runs, on your file, before you upload. The first is the structural check against the current schema. The second is the field-by-field check against the business rules the EC publishes beside it. Both live on the EC Technical Documentation page. The EC also runs a Playground environment alongside Production, so you can push a full test upload through the same checks without writing to the live database.

#Pre-upload checkWhat it catches
1Validated against the current schema (v3.0.30 / platform v2.27.0)Structural
2Every required field populated against the data dictionaryStructural
3All dates written in ISO 8601 (YYYY-MM-DD)Structural
4UDI-DI padded to the issuing entity’s length (14 digits for GS1)Per-device
5Risk class matches the technical file and the certificate’s coveragePer-device
6Conformity-assessment procedure matches the certificate’s Annex combinationPer-device
7EMDN codes current and terminal (leaf-level)Per-device
8Basic UDI-DI grouping consistent: same intended purpose, risk class, and essential design per groupPer-device
9Device description matches the Declaration of ConformityPer-device
10Actor SRN active and role correctPer-device
11Certificates uploaded by the notified body before the device references themPer-device
12Legacy versus Regulation framework tag correctPer-device
13Attachments referenced in the XML are included under the right pathStructural
14No duplicate UDI-DI in the batchPer-device
15A Playground test upload completed end-to-endAll three checks

The real decision the checklist forces is whether to build that pre-upload check in-house, with the engineering time and the standing job of tracking every EC revision that comes with it, or to run the file through a tool that already carries the current EC files and updates when the EC does. EUDAPrep is the second option. It runs both checks on your file, the structural check against the current schema and every published business rule against your file, and shows you which fields failed and why before the file leaves the tool. The check is deterministic, not a guess. The workflow is the same whether your in-house RA function or an external consultant runs it: the operator reviews what failed and fixes the source, the PRRC signs off, and you upload through the EC portal. For the CFO, the comparison is not the tool price alone. It is the tool cost plus the review hours your PRRC and consultant still put in, set against a full from-scratch engagement. EUDAPrep does not submit to EUDAMED on your behalf.

Frequently asked questions

6 questions
Why did EUDAMED reject my whole file when only one device had a problem?

Because the rejection came from the structural check on the file, not the per-device data check. The structural check rejects the whole upload when the XML does not match the schema; the per-device check runs on each device on its own, accepts the valid ones, and lists only the failing ones. If one bad device killed the whole upload, the fault was structural: malformed XML, a missing required field, a wrong type, or a value not on the allowed list. The response tells you which check fired.

What does the error code E-I-40000 mean?

It is what EUDAMED returns when the file references something the service cannot match to a known object. In practice it usually means the file was built against a stale schema version, carries an obsolete code, or names an identifier EUDAMED does not have on record. The fix is to validate against the current schema (v3.0.30) and confirm every code in the file resolves against the EC's current list. The EC's Annex 1 (error codes) carries the full dictionary.

What schema version does EUDAMED currently validate against?

v3.0.30, matched to platform release v2.27.0, per the EC EUDAMED Information Centre's Technical documentation page. Third-party tools pinned to an older schema version have to be updated before they emit a file the platform will accept.

Is there a EUDAMED XML template I can start from?

There is no single Excel template. The EC publishes the schema, the data dictionaries, and worked sample XML files on its Technical documentation page. The EUDAMED XML template guide walks through the asset set and how to pick the sample that matches your device.

Can I test my file before uploading to Production?

Yes. The EC runs a Playground environment alongside Production, so you can upload the same file there first and see how the checks fire without writing to the live database.

How many devices can I upload in one XML file?

Up to 300 device records per file. Larger portfolios are split across several files. Within a file, EUDAMED processes device by device, accepts the valid ones, and returns only the failures in the same response. Some third-party tools set a smaller cap of their own for workflow reasons; that is the tool's limit, not EUDAMED's.

Written by Sam Patton, Founder · EUDAPrep · Updated
References Primary sources · checked July 2026
  1. EC Information Centre
    EUDAMED Information Centre: Technical documentation
    The asset hub for the schema, the data dictionaries, the business-rule PDFs, and the worked XML samples the upload validates against.
    EUDAMED Information Centre ↗
  2. EC Annex 1
    EUDAMED Annex 1 (error codes)
    The primary-source reference for the EUDAMED error-code dictionary, including the E-I-40000 class.
    Annex 1 (error codes) ↗
  3. EC Annex 2
    EUDAMED Annex 2 (XML files index)
    The index mapping each worked sample XML file to a use case and device type.
    Annex 2 (XML files index) ↗
  4. EC Bulk upload
    EUDAMED bulk upload: how the service processes an XML file
    The EC help page describing the bulk upload flow and the per-device response model.
    Bulk upload ↗
  5. EUR-Lex Article 27
    Regulation (EU) 2017/745, Article 27 (UDI system)
    The UDI assignment obligation and the issuing-entity framework behind UDI-DI structure and check-digit rules.
    EUR-Lex ↗
  6. EUR-Lex Article 29
    Regulation (EU) 2017/745, Article 29 (Basic UDI-DI confirmation)
    The Notified Body confirmation requirement for Basic UDI-DI on Class III and Class IIb implantable devices.
    EUR-Lex ↗
  7. EUR-Lex Article 11
    Regulation (EU) 2017/745, Article 11 (Authorised Representative)
    The Authorised Representative obligation for non-EU manufacturers, checked in EUDAMED through the operator role validation.
    EUR-Lex ↗
  8. EUR-Lex Annex VI part C
    Regulation (EU) 2017/745, Annex VI part C (Basic UDI-DI grouping)
    The grouping rules that decide when devices can share a Basic UDI-DI and when they cannot.
    EUR-Lex ↗
  9. EUR-Lex Annex IX and X
    Regulation (EU) 2017/745, Annex IX and Annex X (conformity assessment)
    The conformity-assessment procedures that trigger Notified Body involvement and shape certificate linkage.
    EUR-Lex ↗
  10. MDCG 2018-1 Rev. 4
    MDCG 2018-1 Rev. 4: Guidance on Basic UDI-DI and changes to UDI-DI
    Coordination Group guidance on Basic UDI-DI assignment and the issuing-entity options EUDAMED accepts.
    MDCG 2018-1 Rev. 4 ↗