Data Export Formats
Last updated: 25 September 2026
This page is the register of the data structures and formats of data exported from DGM One, published under Article 26 of the EU Data Act (Regulation (EU) 2023/2854).
How to export your data or switch provider
Your organisation's contact for notices can ask at any time, by email to privacy@emfara.com, for an export of all its data, or to switch to another provider or to its own systems.
For a switch, you choose a notice period of up to 2 months. A 30-day transition period follows, during which we keep providing DGM One and complete the export. You then have at least 30 days to retrieve your data, after which we delete it and confirm deletion in writing.
We make no charge for export, switching or deletion.
Known restriction: no organisation wide export tool and no customer facing deletion tool exist yet. Both an export and a deletion are carried out by Emfara by hand on request; there is nothing a customer can run for itself.
Formats and standards
- Structured data: JSON (RFC 8259) or CSV (RFC 4180 with a header row), both UTF-8 encoded.
- Dates and times: ISO 8601, in UTC.
- Documents and photographs: the files as kept in DGM One, unchanged. Documents uploaded for a document check or a lithium battery check, and training certificates, are kept as the PDF files that were uploaded; images and documents attached to checklists are kept as JPEG images.
- Checklist copies: PDF, produced by DGM One from each submitted checklist.
What is not exported
These are not exported:
- Emfara's software, rule sets, models and other trade secrets;
- other organisations' data;
- security credentials such as password hashes and access token hashes.
Datasets
An export includes one data file for each dataset below in which your organisation has records, together with the documents, photographs and certificates your users uploaded and a PDF copy of each submitted checklist. The datasets are:
- Organisation and settings:
organisation - Users and roles:
users - Shipments:
shipments,shipment_events - Documents and data extracted from them:
document_checks,document_types,document_extractions,battery_checks - Package photographs:
photos - Verification results:
checklists,checklist_revisions,document_findings,battery_results,rule_checks - Audit trail:
activity_log,signatures,document_check_events,battery_check_events - AI decision records:
ai_tasks,suggestion_overrides,ai_feedback,ai_result_feedback - Training records:
certificates,certificate_reminders
If your organisation holds any other records in DGM One, its export also includes them, in the same formats, with a description of each file.
Each dataset is supplied as one file, in JSON (<name>.json) or CSV (<name>.csv). A JSON file holds a list of records, each an object whose keys are the field names. In a CSV file each record is a row and the header row gives the field names; a field that holds an object or a list contains it as JSON text. An empty value (null in JSON, an empty cell in CSV) means that nothing was recorded or that the field does not apply.
The Type column uses these terms: Identifier (text that identifies a record), Text, Whole number, True or false, Date and time, Object (a group of named values) and List.
Every file holds only your organisation's records. Records refer to each other by identifier: for example, submission_id in photos is the id of a record in checklists. A reference to a record that has since been deleted is kept, although that record is not in the export. Uploaded documents, photographs and certificates, and the PDF copies of checklists, are supplied in folders. Each file (or, for a lithium battery check, each folder of files) is named after the id of its record, as shown under the dataset it belongs to.
Organisation and settings
Organisation
One record describing your organisation's account and settings.
File: organisation.json or organisation.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Short identifier of your organisation in DGM One. |
name | Text | Name of your organisation. |
config | Object | Your organisation's branding: display name (name), identifier (slug), logo (logo), colours (colors), fonts (fonts), footer text (footer), company name (companyName), design settings (tokens) and the labels used for standard terms (terms). Apart from your organisation's name, values are DGM One's defaults unless they were changed for your organisation. |
features | Object | Settings for PDF copies of checklists: pdf_page_size (letter or a4) and timezone (the time zone in which dates and times are printed). The values in use are given, including default values. |
created_at | Date and time | Date and time your organisation's account was set up. |
Users and roles
Users
One record for each user who has access to your organisation or appears in its records.
File: users.json or users.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the user. |
name | Text | The user's full name. |
email | Text | The email address the user signs in with. |
role | Text | The user's role: inspector, or admin for users who manage people and settings. |
banned | True or false | Whether the user's access has been deactivated. |
opted_out_of_cert_reminders | True or false | Whether reminder emails before a training certificate expires are switched off for the user; reminders are still recorded in certificate_reminders. |
created_at | Date and time | Date and time the user's account was created. |
updated_at | Date and time | Date and time the user's account was last changed. |
Shipments
Shipments
One record for each shipment your users recorded.
File: shipments.json or shipments.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the shipment. |
waybill | Text | Waybill number of the shipment. |
origin | Text | Place the shipment leaves from. |
destination | Text | Place the shipment is going to. |
consignee_text | Text | Consignee of the shipment, as entered. |
carrier | Text | Carrier transporting the shipment. |
status | Text | Status of the shipment: draft, in_transit, delivered, exception or on_hold. |
submission_id | Identifier | The checklist linked to the shipment, if any (an id in checklists). |
created_at | Date and time | Date and time the shipment record was created. |
updated_at | Date and time | Date and time the shipment record was last saved, which can be later than the last change to its details. |
Shipment events
The history of each shipment, one record per event.
File: shipment_events.json or shipment_events.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the event. |
shipment_id | Identifier | The shipment the event belongs to (an id in shipments). |
event_type | Text | Kind of event, for example created or status_change. |
occurred_at | Date and time | Date and time the event happened. |
evidence_url | Text | Web link to supporting evidence given with the event, if any. |
notes | Text | Note about the event; for a status change, the previous and new status. |
created_by | Identifier | The user who recorded the event (an id in users). |
created_at | Date and time | Date and time the event was saved. |
Documents and data extracted from them
Documents uploaded for a document check or a lithium battery check are supplied as the PDF files that were uploaded, unchanged.
Document checks
One record for each document uploaded for a document check.
File: document_checks.json or document_checks.csv
The uploaded document is supplied as document_checks/<id>.pdf, where <id> is the id of the record.
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the document check. |
user_id | Identifier | The user who uploaded the document (an id in users). |
profile_id | Identifier | The type of document the file was checked as (an id in document_types). |
status | Text | Stage or outcome of the check: pending, extracting, validating, completed, failed, failed_validation (stopped because of a critical finding, in document_findings) or cancelled. |
extraction_id | Identifier | The values read from the document (an id in document_extractions). |
profile_overrides | Object | Corrections a user made to values read from the document, keyed by field. |
error_code | Text | Short code for the reason a check could not be completed, if it failed. |
shipment_id | Identifier | The shipment the document is linked to, if any (an id in shipments). |
created_at | Date and time | Date and time the document was uploaded. |
updated_at | Date and time | Date and time the check was last updated. |
Document types
The types of document your document checks used, so that the values read from each document can be understood.
File: document_types.json or document_types.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the document type. |
slug | Text | Short fixed name of the document type. |
label | Text | Display name of the document type. |
description | Text | Longer explanation of the document type. |
schema_json | List | The fields read from this type of document, each with its key, label, type and description, and whether it is required. |
override_allowlist | List | Keys of the fields a user may correct after the document has been read. |
created_at | Date and time | Date and time the document type was created. |
updated_at | Date and time | Date and time the document type was last changed. |
Values read from documents
The values DGM One read from documents uploaded for a document check. Several document checks can point to the same set of values, which holds the most recent reading.
File: document_extractions.json or document_extractions.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the set of values. |
profile_id | Identifier | The type of document the values were read against (an id in document_types). |
extraction | Object | The values read from the document, keyed by the field keys of the document type. |
extraction_mode | Text | How the values were read: ai (by DGenius) or deterministic (without AI). |
created_at | Date and time | Date and time the values were first stored. |
Lithium battery checks
One record for each lithium battery check.
File: battery_checks.json or battery_checks.csv
The uploaded documents are supplied as battery_checks/<id>/safety_data_sheet.pdf, battery_checks/<id>/un38_3_test_summary.pdf and, where one was uploaded, battery_checks/<id>/shipping_paper.pdf, where <id> is the id of the record. A check that was run again uses the documents of the earlier check, which are supplied again under its own id.
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the lithium battery check. |
user_id | Identifier | The user who started the check (an id in users). |
parent_job_id | Identifier | The earlier check that this check repeats, if a user ran a check again (an id in battery_checks). |
status | Text | Stage or outcome of the check: pending, extracting, cross_validating, classifying, completed, failed, failed_validation (stopped because the documents did not match) or cancelled. |
reg_version | Object | The regulation editions the check used, such as the IATA DGR edition and year and the 49 CFR edition. |
error_code | Text | Short code for the reason a check could not be completed, if it failed. |
shipment_id | Identifier | The shipment the check is linked to, if any (an id in shipments). |
created_at | Date and time | Date and time the check was started. |
updated_at | Date and time | Date and time the check was last updated. |
Package photographs
Photographs
One record for each image attached to a checklist: photographs of packages and images of documents.
File: photos.json or photos.csv
Each image is supplied as photos/<id>.jpg, where <id> is the id of the record. This is the image as DGM One keeps it: when an image is attached, it is saved as a JPEG file, reduced in size if it is large, and details embedded in the file, such as the place where it was taken, are removed. A document attached as a PDF file is kept only as JPEG images of some or all of its pages. Photographs imported from a previous system are kept as they were received from it.
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the photograph. |
submission_id | Identifier | The checklist the photograph is attached to (an id in checklists). |
user_id | Identifier | The user who added the photograph (an id in users). |
category | Text | Part of the checklist the photograph was added to, as a short code, for example package_front, package_side, overpack_context, failure_evidence, acceptance_photo or supplementary. |
item_id | Text | The checklist question the photograph was added to, if any. |
section_index | Text | For a supplementary photograph added at the end of a checklist section, the position of that section, counting from 0; 12 for package and acceptance photographs added at the start of the checklist or in the final photographs step; empty for other photographs, such as those added to a question (a number written as text). |
note | Text | Note the user wrote about the photograph, if any. |
file_size | Text | Size of the image file in bytes (a number written as text). |
width | Text | Width of the image in pixels (a number written as text); 0 if not known, or empty for imported photographs. |
height | Text | Height of the image in pixels (a number written as text); 0 if not known, or empty for imported photographs. |
mime_type | Text | File format of the image: image/jpeg. |
captured_at | Date and time | Date and time the photograph was taken or selected in DGM One, from the clock of the user's device; for photographs imported from a previous system, the date and time of the import. |
uploaded_at | Date and time | Date and time the photograph was saved in DGM One. |
Verification results
Checklists
One record for each dangerous goods acceptance checklist your users completed or started.
File: checklists.json or checklists.csv
A PDF copy of each submitted checklist, showing each question with its answer, is supplied as checklists/<id>.pdf, where <id> is the id of the record.
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the checklist. |
user_id | Identifier | The user who created the checklist (an id in users). |
shipment_reference | Text | Your own reference for the shipment. |
awb | Text | Air waybill number of the consignment. |
origin | Text | Origin of the consignment, usually an airport code. |
destination | Text | Destination of the consignment, usually an airport code. |
shipper | Text | Shipper of the consignment. |
consignee | Text | Consignee of the consignment. |
aircraft_type | Text | PAX (passenger aircraft) or CAO (cargo aircraft only); empty when not applicable. |
inspector_name | Text | Name of the person who carried out the check. |
place | Text | Place where the check was carried out. |
inspection_date | Date and time | Date of the check, with the time where one was recorded. |
responses | Object | The answers, one entry per checklist question keyed by the question identifier (for example q1), each with answer (YES, NO or NA; empty if not yet answered) and note. Checklists imported from a previous system may hold answers as they were recorded there. |
determination | Text | Outcome of the checklist: ACCEPTED, REJECTED or NOT_ELIGIBLE; empty for drafts. |
status | Text | draft or submitted. |
checklist_variant | Text | Identifier of the checklist form used, for example non-radioactive or dry-ice-pi954. |
source | Text | How the checklist was created: app, offline (completed without a connection and synchronised later), wizard (a sample created while setting up your account), or the name of the system it was imported from. |
extra_metadata | Object | Further details recorded on the checklist form. The keys depend on the form, for example vesselName, voyageNumber and billOfLading on ocean forms. |
signature_data | Text | The signature drawn or typed when the checklist was submitted, as an image embedded in the text (a data URL, normally PNG). |
signed_at | Date and time | Date and time the checklist was signed. |
auto_check_results | List | Automated suggestions for checklist questions, each with itemId (the question), suggestedAnswer (YES, NO, NA, or UNABLE when no suggestion could be made), confidence (HIGH, MEDIUM or LOW), source (rule or ai), reasoning and, where available, citationRefs (regulation references). Holds the suggestions from the most recent run of the automated checks. |
auto_check_metadata | Object | Record of the most recent run of the automated checks: startedAt and completedAt, and modelVersions (the AI model versions used). |
hazard_class | Text | Hazard class or division of the dangerous goods, where it was determined; may be empty. |
transport_mode | Text | Mode of transport the checklist covers, for example air or ocean; may be empty. |
form_started_at | Date and time | Date and time the user started the checklist form. |
parent_submission_id | Identifier | The earlier rejected checklist that this checklist redoes, if any (an id in checklists). |
shipment_id | Identifier | The shipment the checklist is linked to, if any (an id in shipments). |
created_at | Date and time | Date and time the checklist was created. |
updated_at | Date and time | Date and time the checklist was last changed. |
Checklist revisions
Links between a rejected checklist and the new checklist created to redo it.
File: checklist_revisions.json or checklist_revisions.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the revision. |
parent_submission_id | Identifier | The rejected checklist that was redone (an id in checklists). |
child_submission_id | Identifier | The new checklist created to redo it (an id in checklists). |
reason | Text | Why the new checklist was created: redo. |
created_at | Date and time | Date and time the new checklist was submitted. |
Document check findings
Findings raised by document checks.
File: document_findings.json or document_findings.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the finding. |
job_id | Identifier | The document check that raised the finding (an id in document_checks). |
severity | Text | How serious the finding is: critical or warning. |
rule_id | Text | Identifier of the check that raised the finding. |
message | Text | Explanation of the finding. |
evidence | Object | Details supporting the finding, such as the field concerned and the value read from the document. |
created_at | Date and time | Date and time the finding was raised. |
Lithium battery check results
The result of each lithium battery check for each set of transport rules.
File: battery_results.json or battery_results.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the result. |
job_id | Identifier | The lithium battery check the result belongs to (an id in battery_checks). |
mode | Text | Transport rules the result applies to, for example iata for air or imdg for sea; none when the check stopped because the documents did not match. |
result | Object | The classification under those rules, including UN number, proper shipping name, class, packing instruction, required marks, labels and documents, quantity limits, notes and regulation references; empty when mode is none. |
findings | List | Issues found in the values read from the documents, each with a rule identifier, severity, message and supporting values. |
override_of_parent | Identifier | Set to the check's own identifier when the result was recalculated after a user overrode a mismatch between the documents; empty otherwise. |
created_at | Date and time | Date and time the result was first produced; when a result is recalculated, result and findings are replaced but this time is kept. |
Checklist rule checks
Each run of the automated rule checks for a checklist.
File: rule_checks.json or rule_checks.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the run. |
submission_id | Identifier | The checklist the checks were run on (an id in checklists). |
user_id | Identifier | The user who ran the checks (an id in users). |
findings_count | Whole number | Number of issues found. |
findings | List | The issues found, each with the field concerned, severity (error, warning or info), message, the value expected and, where available, a regulation reference. |
created_at | Date and time | Date and time the checks were run. |
Audit trail
The audit trail is supplied as four datasets: the activity log of your organisation's account, the signatures given on checklists, and the event histories of document checks and lithium battery checks.
Activity log
One record for each action recorded in your organisation's account.
File: activity_log.json or activity_log.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the record. |
actor_id | Identifier | The user who carried out the action (an id in users); system when DGM One recorded it automatically; or support when DGM One support staff carried it out on your account. |
action | Text | The action, as a short code such as user_invite, certification_create or shipment.update_status. |
target_type | Text | The kind of record the action applied to, such as user, certification or shipment. |
target_id | Identifier | The record the action applied to, where there is one. |
details | Object | Further facts about the action, which depend on the action, such as the role given to a user or the new status of a shipment. |
created_at | Date and time | Date and time the action was recorded. |
Signatures
One record for each signature given when a checklist was submitted.
File: signatures.json or signatures.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the record. |
submission_id | Identifier | The checklist that was signed (an id in checklists). |
user_id | Identifier | The user who signed (an id in users). |
signature_data | Text | The signature drawn or typed, as an image embedded in the text (a data URL, normally PNG). |
signed_at | Date and time | Date and time the checklist was signed. |
Document check events
The history of each document check and of changes to document types.
File: document_check_events.json or document_check_events.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the event. |
job_id | Identifier | The document check the event belongs to (an id in document_checks); empty for changes to document types. |
event | Text | What happened, as a short code such as uploaded, override.applied or cancelled. An uploaded event with an empty actor_id records that the check finished, and a cancelled event with an empty actor_id that it stopped because of a critical finding. |
actor_id | Identifier | The user who performed or started the action (an id in users), or support when DGM One support staff did so; empty for some automatic steps. |
metadata | Object | Further details, which depend on the event, such as the fields corrected and the reason given. |
created_at | Date and time | Date and time of the event. |
Lithium battery check events
The history of each lithium battery check.
File: battery_check_events.json or battery_check_events.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the event. |
job_id | Identifier | The lithium battery check the event belongs to (an id in battery_checks). |
event | Text | What happened, as a short code such as uploaded, reclassified, override_validation or cancelled. |
actor_id | Identifier | The user who performed the action (an id in users). |
metadata | Object | Further details, which depend on the event, such as a corrected value and the reason given or, for a check that was run again, the new check (an id in battery_checks). |
created_at | Date and time | Date and time of the event. |
AI decision records
For automated checklist suggestions, the suggestions from the most recent run and the AI model versions used are in checklists (auto_check_results and auto_check_metadata). The datasets below hold the other records of AI use, and of how your users responded to automated suggestions.
AI model use
One record for each use of an AI model by DGM One for your organisation, including any retry. A single check can create several records.
File: ai_tasks.json or ai_tasks.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the record. |
user_id | Identifier | The user whose action led to the use (an id in users). |
model | Text | Name and version of the AI model used. |
created_at | Date and time | Date and time the model was used. |
Changed suggestions
One record for each time a user changed an automated suggestion on a checklist.
File: suggestion_overrides.json or suggestion_overrides.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the change. |
submission_id | Identifier | The checklist the suggestion belonged to (an id in checklists). |
user_id | Identifier | The user who changed the answer (an id in users). |
item_id | Text | The checklist question, for example q28. |
original_answer | Text | The answer suggested: YES, NO or NA. |
original_confidence | Text | Confidence of the suggestion: HIGH, MEDIUM or LOW. |
override_answer | Text | The answer the user chose instead: YES, NO or NA. |
reason | Text | Reason the user gave, if any. |
created_at | Date and time | Date and time the answer was changed. |
Responses to AI suggestions
Records of a user accepting or rejecting an AI suggestion for a checklist question, where DGM One stored the response.
File: ai_feedback.json or ai_feedback.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the record. |
submission_id | Identifier | The checklist the suggestion belonged to (an id in checklists). |
user_id | Identifier | The user who responded (an id in users). |
item_id | Text | The checklist question, for example q12. |
action | Text | accepted or rejected. |
suggested_answer | Text | The answer the AI suggested: YES, NO or NA. |
actual_answer | Text | The answer recorded when the suggestion was accepted; empty when it was rejected. |
confidence | Text | Confidence the AI gave: HIGH, MEDIUM or LOW. |
model | Text | Name and version of the AI model that made the suggestion. |
reasoning | Text | The explanation the AI gave for its suggestion. |
created_at | Date and time | Date and time of the response. |
Ratings of AI results
The latest rating each user gave to an AI result, with one record for each user and result. If a user rates the same result again, the new rating and comment replace the earlier ones.
File: ai_result_feedback.json or ai_result_feedback.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the rating. |
user_id | Identifier | The user who gave the rating (an id in users). |
finding_kind | Text | The kind of result rated: submission_auto_check (an automated suggestion for a checklist question), document_intel_finding (the result of a document check) or battery_finding (the result of a lithium battery check). |
finding_id | Text | The result that was rated. For submission_auto_check, the checklist id (an id in checklists) and the question, for example q12, joined by a colon. For document_intel_finding, an id in document_checks. For battery_finding, an id in battery_checks. |
rating | Whole number | 1 for agree or -1 for disagree. |
comment | Text | Comment the user added with their latest rating, if any. |
created_at | Date and time | Date and time the rating was first given. |
Training records
Training certificates
One record for each training certificate held by a user.
File: certificates.json or certificates.csv
Certificates uploaded as files are supplied as certificates/<id>.pdf, where <id> is the id of the record.
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the certificate. |
user_id | Identifier | The user who holds the certificate (an id in users). |
type | Text | Name of the training or certificate, for example IATA DGR. |
edition | Text | Edition of the regulations the training covered, for example 67th Edition. |
issued_at | Date and time | Date the certificate was issued. |
expires_at | Date and time | Date the certificate expires. |
scope_text | Text | What the certificate covers. |
status | Text | active, or archived when a renewed certificate replaced it. |
archived_at | Date and time | Date and time the certificate was archived. |
replaced_by_cert_id | Identifier | The renewed certificate that replaced this one (an id in certificates). |
created_at | Date and time | Date and time the record was created. |
updated_at | Date and time | Date and time the record was last changed. |
Certificate reminders
One record for each reminder issued before a certificate expires.
File: certificate_reminders.json or certificate_reminders.csv
| Field | Type | Description |
|---|---|---|
id | Identifier | Unique identifier of the reminder. |
cert_id | Identifier | The certificate the reminder is about (an id in certificates). |
user_id | Identifier | The user the reminder was for (an id in users). |
threshold_days | Whole number | Days before expiry the reminder was issued: 90, 30 or 7. |
sent_at | Date and time | Date and time the reminder was issued in DGM One. |
email_delivered_at | Date and time | Date and time the reminder email was handed over for delivery; empty if no email was sent. |
created_at | Date and time | Date and time the record was created. |