Switching and Data Portability at nele.ai
As of: 10.09.2026
nele.ai supports switching to another provider of a comparable data processing service or to the customer's own IT infrastructure and, insofar as technically possible, the parallel use of multiple providers.
This page provides information on switching and transfer options, available import and export formats, technical limitations, and the data structures and interoperability standards of nele.ai.
Contents
- 1. Switching from nele.ai to Another Provider
- 2. Switching to nele.ai
- 3. Exportable Data and Digital Assets
- 4. Non-exportable Data and Components
- 5. Online Directory of Data Structures and Data Formats
- 6. Interfaces and Interoperability
- 7. Known Technical Limitations and Constraints
- 8. Security during Switching
- 9. Retrieval Period and Deletion
- 10. Switching Costs
- 11. ICT Infrastructure Used
- 12. Protection against Incompatible Governmental Access from Third Countries
- 13. Assistance and Contact
1. Switching from nele.ai to Another Provider
Switching from nele.ai is initiated by a notice of termination or a switching request pursuant to Clause 15 of the Terms of Use.
A switching request may be submitted via support@nele.ai.
Where possible, please provide the following information:
- the customer account concerned
- whether the switch is to be to another provider or to the customer's own IT infrastructure
- in the case of a switch of provider, the necessary details of the new provider
- which data and content are to be transferred
- the desired date of the switch
Switching Procedure
Upon expiry of the applicable notice period, a transitional period of, in principle, no more than 30 calendar days begins. During this period, nele.ai remains available within the existing contractual scope, and the data can be exported and transferred.
The customer may extend the transitional period once, by a period that the customer considers appropriate.
If switching within 30 calendar days is not possible for technical reasons, GAL Digital informs the customer within 14 business days of receipt of the switching request of the reasons and the alternative transitional period required. This period shall not exceed seven months.
GAL Digital provides reasonable assistance to the customer and third parties authorised by the customer in carrying out the switch and implementing the customer's exit strategy.
Expected technical duration of a typical export: 72 hours on working days.
The actual duration may depend, in particular, on the volume of data and the export method selected.
2. Switching to nele.ai
The following import options are available for switching from another data processing service to nele.ai:
| Import Method | Supported Content | Formats | Technical Notes |
|---|---|---|---|
| File upload | Chats, knowledge bases, users, groups, assistants | Files (csv, doc, docx, html, json, jsonl, md, odp, ods, odt, pdf, ppt, pptx, rtf, txt, xls, xlsx, xml and, where applicable, others) | Individual processing via the user interface |
| Assisted import | Chats, knowledge bases | Original formats (csv, doc, docx, html, json, jsonl, md, odp, ods, odt, pdf, ppt, pptx, rtf, txt, xls, xlsx, xml and, where applicable, others) and JSON for configurations and chats. | Request via support@nele.ai |
3. Exportable Data and Digital Assets
In principle, the data and content provided by the customer and generated for the customer in the course of use can be exported.
These include, in particular:
| Data Category | Exportable | Export Format | Export Method |
|---|---|---|---|
| Content and files uploaded by the customer | Yes | Original format | Email with a download link |
| Chats, including user inputs | Yes | Original formats and JSON | Email with a download link |
| AI-generated responses | Yes | Original formats and JSON | Email with a download link |
| Assistant configurations | Yes | Original formats and JSON | Email with a download link |
| Knowledge base content | Yes | Original formats and JSON | Email with a download link |
| Permanent knowledge | Yes | Original formats and JSON | Email with a download link |
| Associated metadata | Yes | JSON | Email with a download link |
The detailed structures and formats of these exports are described in Section 5.
4. Non-exportable Data and Components
Data and technical components that do not form part of the customer's exportable data or digital assets are not included in the export.
| Category | Reason |
|---|---|
| Software and technical components of nele.ai | GAL Digital's own technical infrastructure and software |
| AI models | Models of the respective model providers or of GAL Digital |
| Internal technical representations | Internal operation or protected technical structures |
| Third-party data in respect of which the customer does not hold the necessary rights | Third-party rights |
| Passwords, two-factor codes, API key values | Stored exclusively using a one-way function. No portable plain text exists; exporting the hash value would provide no benefit and would merely create a target for attack. For API keys, the name, owner, expiry and last use are exported, so that the inventory of issued keys remains traceable. |
| Credentials for external systems in knowledge base entries | The customer's credentials for external source systems, stored in encrypted form. Decrypted in a downloadable archive, they would constitute a channel for data leakage without any gain in portability — the customer already has them at the source system. The type, source, context and status are exported so that the connection can be set up again. |
| Privacy filter mapping table (pseudonym → original value) | Redundant and subject to disproportionate risk. Both the original text and the masked version are exported; the placeholders themselves indicate the type of information detected. The mapping can be reconstructed from these. The table itself adds no information to the export, but does add a consolidated, machine-readable index of all detected references to individuals. Omitting it entails no loss and removes a significant risk. |
| Embedding vectors of the knowledge bases | Derived data that arise only through additional processing (see Recital 15 of the Data Regulation), and that can be used only with the same embedding model. The portable assets are the source document and the extracted text; both are included. The segmentation can be reproduced from the exported values for chunk size and overlap. |
| Aggregated usage data for analysis | Daily and user analyses are produced by aggregating the usage records already included. They contain no information of their own and can be recalculated from the exported records at any time. |
| Chunk texts and internal segmentation data | Verbatim extracts from the source documents already included. Exporting them additionally would substantially increase the size of the archive without adding information. |
| Vendor-curated prompt templates | Content supplied with the product, rather than data generated through use of the service. If a user copies a template into their own prompt collection, that copy is included. |
| Operational telemetry, error and job queues, sessions, one-time login tokens | Operational and diagnostic data and transient infrastructure state. Sessions and one-time tokens are active login credentials. |
| Organisation attributes set by the provider | The subscribed feature set, billing identifier, monthly credit limit of the organisation, and the flags for usage monitoring and automatic payment authorisation. The provider sets these values within the contractual relationship; they are not data of the organisation generated through use. The limits that the organisation itself assigns to its members and groups are included. |
| User account attributes set by the provider or via SSO | The flag indicating whether an account may change its own password, and the group names transmitted by the identity provider at login. Neither is maintained by the organisation; they result from the provision of the service or from the connected login system. |
| Configuration of login via an identity provider (SSO) | Security configuration data. They describe how access to the service is secured and are not content generated through use of the service. They include the identity provider's connection data and certificates, the mapping of transmitted groups, and the service provider's key, which is assigned to the application rather than to the organisation in any event. The groups themselves maintained in the service are exported. |
| Data holdings and identifiers of the payment service provider | Invoice and subscription data are maintained by the payment service provider. Neither a partial copy of those data holdings nor the identifiers used there for customers, subscriptions or invoices are exported: they are internal references to an external system that have no meaning outside that system. The invoice documents themselves and the credit allowances maintained in the service are exported. |
| Deleted and expired data | Chats and images removed under retention rules are permanently deleted and cannot be exported. |
| Legacy data from Version 1 of the service | Are not described by this directory. The directory covers exclusively the current data model; no schema is published for data holdings from Version 1. |
5. Online Directory of Data Structures and Data Formats
This directory is provided pursuant to Article 30(1) of Regulation (EU) 2023/2854 (Data Regulation, “Data Act”).
The following directory describes the structures and formats in which the exportable data of nele.ai are made available.
5.1 Basis and Structure of the Directory
Unit of reference. An export always relates to an organisation (the account of the contracting party), rather than to individual users. Much of the content — assistants, prompts, knowledge bases, files — is assigned to the organisation and continues to exist regardless of whether the creating user account still exists. A subset limited to an individual would therefore silently omit components of the account.
Structure. The export is provided as a ZIP archive. It contains the structured data as JSON files under data/, the associated files in their original format under files/ — each under its respective identifier — and, under schemas/, a verbatim copy of the schema definitions. This allows an archive to be validated entirely offline, without access to this page.
Schema definitions. The binding structural descriptions are provided as JSON Schema (Draft 07) and are reproduced in full and verbatim under 5.4. Each schema file is named in the tables and linked to an anchor within this page. All references between the files are relative; the schemas can be resolved without network access.
Identifiers. Internal identifiers are not exported. Each record has its own opaque identifier from which neither the internal key nor a sequence, a counter value or a creation time can be derived. Within an archive, this identifier is consistent, so that sharing permissions, folder structures and file references remain resolvable. Files under files/ are addressed solely by their identifier; no particular path structure within this directory is guaranteed, and such a path must not be constructed from the information provided. Which file belongs to which record is determined solely by the location that references it; the file is also described there.
Format version. The version of the export format (manifest.formatVersion) is independent of any software, release or service version of nele.ai. It changes exclusively through changes to the schemas published here: additive changes increase the minor version, and breaking changes increase the major version. A new version of the application does not increase it.
Open value lists. Where this directory lists values — tools, permissions, processing states, languages, chunk sizes — these are examples as at the time of publication and not an exhaustive list. These vocabularies grow with the service's feature set. Processing systems must accept unknown values and must not reject a record on that ground. Only the specifications that describe the format itself are exhaustive, such as character encoding, the checksum algorithm and the distinction between model selection options.
Completeness. Each archive itself specifies in its manifest under excluded which data it does not contain. Section 4 provides the reasons for each of these omissions.
5.2 Container and Cross-cutting Formats
| Data Category | Format | Structure / Schema | Character Encoding / Version | Relevant Standard or Open Specification |
|---|---|---|---|---|
| Export archive (container) | ZIP | manifest.json as the index; directories data/, files/, schemas/ | ZIP 6.3.10, Deflate/Store, unencrypted | PKWARE APPNOTE 6.3.10; profile in accordance with ISO/IEC 21320-1:2015 |
| Export manifest | JSON | manifest.schema.json | UTF-8 / Format version 1.0.0 | RFC 8259 (STD 90) |
| Schema definitions | JSON Schema | data-act-schemas/*.schema.json | UTF-8 / Draft 07 | JSON Schema Draft 07 (draft-handrews-json-schema-01 and -validation-01) |
| Character encoding (all text files) | — | UTF-8 throughout, without BOM | UTF-8 | RFC 3629; ISO/IEC 10646 |
| Time information | String | common.schema.json → timestamp; UTC with suffix Z | RFC 3339 profile | RFC 3339 (profile of ISO 8601-1:2019) |
| Checksums | String (hexadecimal) | manifest.files[].sha256 | SHA-256 | FIPS PUB 180-4; RFC 6234 |
| Identifiers | String | common.schema.json → exportId | opaque, consistent within the archive | no external standard; deliberately vendor-specific and opaque (see 5.1) |
| Amounts and credit values | String with a decimal point | common.schema.json → decimalString | up to 64 digits, of which 16 are decimal places | RFC 8259 Section 6 — represented as a string to avoid loss of precision |
| Language codes | String | common.schema.json → locale | two-letter; the set of languages offered is not fixed | ISO 639-1 |
| Country codes | String | common.schema.json → countryCode | ALL and Alpha-2 codes | ISO 3166-1 Alpha-2 |
| Media types | String | common.schema.json → mimeType | — | RFC 2046; IANA Media Types Registry |
| Email addresses | String | account.schema.json | — | RFC 5322 |
5.3 Data Categories
| Data Category | Format | Structure / Schema | Character Encoding / Version | Relevant Standard or Open Specification |
|---|---|---|---|---|
| Chats | JSON | data/chats.json → chats.schema.json | UTF-8 / 1.0 | RFC 8259; JSON Schema Draft 07 |
| Message content and AI responses | Markdown in a JSON string | common.schema.json → message, field content | UTF-8 / CommonMark 0.31.2 | CommonMark 0.31.2, plus the tables and strikethrough extensions; RFC 8259 |
| AI reasoning steps (Reasoning) | Text in a JSON string | common.schema.json → message, field reasoning | UTF-8 / 1.0 | RFC 8259 |
| AI tool calls | JSON | common.schema.json → toolCalls | UTF-8 / 1.0 | RFC 8259 |
| Model configuration | JSON | common.schema.json → modelConfiguration | UTF-8 / 1.0 | RFC 8259 |
| System prompt and response configuration | JSON | common.schema.json → systemPrompt | UTF-8 / 1.0 | RFC 8259 |
| Folder and filing structure | JSON | common.schema.json → folderNode, in each domain file under folders | UTF-8 / 1.0 | RFC 8259 |
| Sharing and permissions | JSON | common.schema.json → permission | UTF-8 / 1.0 | RFC 8259 |
| Assistants | JSON | data/assistants.json → assistants.schema.json | UTF-8 / 1.0 | RFC 8259 |
| Assistant chats and messages | JSON | assistants.schema.json, section assistantChats | UTF-8 / 1.0 | RFC 8259 |
| Permanent knowledge (assistant files) | Original format | Files under files/, referenced in assistants.schema.json under permanentKnowledge | Original encoding; index UTF-8 | RFC 2046; format standards of the respective individual file |
| Prompts (multilingual) | JSON | data/prompts.json → prompts.schema.json; one version per language, addressed by the language code | UTF-8 / 1.0 | RFC 8259; ISO 639-1 |
| Prompt attachments | Original format | Files under files/, referenced in prompts.schema.json under attachments | Original encoding | RFC 2046 |
| Knowledge bases (metadata) | JSON | data/knowledge-bases.json → knowledge-bases.schema.json | UTF-8 / 1.0 | RFC 8259 |
| Knowledge base source documents | Original format | Files under files/, referenced in knowledge-bases.schema.json under sourceFile | Original encoding | Format standards of the individual file, e.g. ISO 32000-1 (PDF), ISO/IEC 29500 (DOCX) |
| Extracted text from source documents | Plain text | Files under files/, referenced in knowledge-bases.schema.json under extractedTextFile | UTF-8 / 1.0 | RFC 2046 (text/plain); RFC 3629 |
| Chat and message attachments | Original format | Files under files/, referenced in common.schema.json → message under attachments | Original encoding | RFC 2046 |
| Audio recordings | Original format | Files under files/, referenced in transcriptions.schema.json under audioFile | Original encoding | RFC 2046 |
| Transcriptions | Plain text + JSON | data/transcriptions.json → transcriptions.schema.json; text under files/ | UTF-8 / 1.0 | RFC 8259; RFC 3629 |
| User accounts | JSON | data/account.json → account.schema.json, section users | UTF-8 / 1.0 | RFC 8259; RFC 5322 |
| Organisation and groups | JSON | account.schema.json, sections account and groups | UTF-8 / 1.0 | RFC 8259 |
| Invitations | JSON | account.schema.json, section invitations | UTF-8 / 1.0 | RFC 8259 |
| Settings | JSON | data/settings.json → settings.schema.json | UTF-8 / 1.0 | RFC 8259 |
| Content filters | JSON | data/content-filters.json → content-filters.schema.json | UTF-8 / 1.0 | RFC 8259 |
| Usage data and credit consumption | JSON | data/usage.json → usage.schema.json | UTF-8 / 1.0 | RFC 8259 |
| API keys (metadata only) | JSON | data/api-keys.json → api-keys.schema.json | UTF-8 / 1.0 | RFC 8259 |
| Activity log | JSON | data/activity-log.json → activity-log.schema.json | UTF-8 / 1.0 | RFC 8259 |
| Invoices | PDF with embedded XML | Invoice document of the payment service provider with embedded CII-XML | PDF 1.x; CII UN/CEFACT D16B | ISO 32000-1:2008; EN 16931-1:2017; CIUS XRechnung 3.0 (KoSIT); embedding in accordance with ZUGFeRD 2.x / Factur-X |
5.4 Schema Definitions
The following 13 files are the binding structural descriptions of the export format. They are reproduced here verbatim from the files that each archive includes under schemas/.
Each file, each definition and each top-level element has its own anchor in the form #schema-<datei> or #<datei>-definitions-<name>. The anchors are located within this page; every schema reference in the tables above leads directly to the corresponding definition, and every $ref within the schemas refers to its target on this page.
| Schema File | Subject Matter | Scope | Anchor |
|---|---|---|---|
account.schema.json | Account | 4 elements | #schema-account |
activity-log.schema.json | Activity log | 1 element | #schema-activity-log |
api-keys.schema.json | API keys | 1 element | #schema-api-keys |
assistants.schema.json | Assistants | 3 elements | #schema-assistants |
chats.schema.json | Chats | 2 elements | #schema-chats |
common.schema.json | Common definitions | 37 definitions | #schema-common |
content-filters.schema.json | Content filters | 1 element | #schema-content-filters |
knowledge-bases.schema.json | Knowledge bases | 2 elements | #schema-knowledge-bases |
manifest.schema.json | Export manifest | 9 elements | #schema-manifest |
prompts.schema.json | Prompts | 3 elements | #schema-prompts |
settings.schema.json | Settings | 1 element | #schema-settings |
transcriptions.schema.json | Transcriptions | 1 element | #schema-transcriptions |
usage.schema.json | Usage | 2 elements | #schema-usage |
The schema definitions are initially collapsed. Jumping to a definition expands the corresponding section.
5.4.1 account.schema.json — Account
The organisation holding the contract, its members, groups and pending invitations. Credentials are never part of the export: passwords and two-factor codes are stored as one-way hashes and there is nothing portable to hand over. Settings that the provider defines for the organisation rather than the organisation itself, and the single sign-on configuration, are outside the scope of the export; the directory explains why.
Top-level elements: account, users, groups, invitations
Show schema definition account.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Account",
"description": "The organisation holding the contract, its members, groups and pending invitations. Credentials are never part of the export: passwords and two-factor codes are stored as one-way hashes and there is nothing portable to hand over. Settings that the provider defines for the organisation rather than the organisation itself, and the single sign-on configuration, are outside the scope of the export; the directory explains why.",
"type": "object",
"properties": {
"account": {
"title": "Organisation",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"name": {
"type": "string"
},
"ownerId": {
"$ref": "common.schema.json#/definitions/exportId"
},
"buyerReference": {
"description": "Reference the customer requires on invoices.",
"type": "string"
},
"chatText": {
"description": "Organisation-specific notice shown in the chat area.",
"type": [
"string",
"null"
]
},
"isTwoFactorRequired": {
"type": "boolean"
},
"isWebSearchEnabled": {
"type": "boolean"
},
"defaultPrivacyFilterActive": {
"description": "Whether personal data is masked before being sent to the model provider by default.",
"type": "boolean"
},
"defaultModel": {
"$ref": "common.schema.json#/definitions/nullableModelConfiguration"
},
"defaultImageModel": {
"$ref": "common.schema.json#/definitions/nullableModelConfiguration"
},
"logo": {
"description": "Branding logo of the organisation.",
"$ref": "common.schema.json#/definitions/nullableFileReference"
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"name",
"ownerId",
"createdAt"
],
"additionalProperties": false
},
"users": {
"type": "array",
"items": {
"title": "User",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"email": {
"type": "string",
"format": "email"
},
"firstname": {
"type": [
"string",
"null"
]
},
"lastname": {
"type": [
"string",
"null"
]
},
"locale": {
"$ref": "common.schema.json#/definitions/locale"
},
"abilities": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/ability"
}
},
"groupIds": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/exportId"
}
},
"creditLimitPerMonth": {
"$ref": "common.schema.json#/definitions/creditLimit"
},
"creditLimitPerDay": {
"$ref": "common.schema.json#/definitions/creditLimit"
},
"receivesUsageInfo": {
"type": "boolean"
},
"webSearchCountry": {
"$ref": "common.schema.json#/definitions/countryCode"
},
"webSearchConsentedAt": {
"$ref": "common.schema.json#/definitions/nullableTimestamp"
},
"usageExportConsentedAt": {
"description": "When the user consented to appearing by name in the usage report.",
"$ref": "common.schema.json#/definitions/nullableTimestamp"
},
"inactiveChatsExpirationTime": {
"$ref": "common.schema.json#/definitions/expirationTime"
},
"redactions": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/redactionNotice"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"email",
"locale",
"abilities",
"createdAt"
],
"additionalProperties": false
}
},
"groups": {
"type": "array",
"items": {
"title": "Group",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"name": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"creditLimitPerMonth": {
"$ref": "common.schema.json#/definitions/creditLimit"
},
"creditLimitPerDay": {
"$ref": "common.schema.json#/definitions/creditLimit"
},
"abilities": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/ability"
}
},
"memberIds": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/exportId"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"name",
"enabled",
"abilities",
"memberIds",
"createdAt"
],
"additionalProperties": false
}
},
"invitations": {
"description": "Invitations issued but not yet accepted. The invitation token is a credential and is not exported.",
"type": "array",
"items": {
"title": "Invitation",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"email": {
"type": "string",
"format": "email"
},
"invitedById": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"locale": {
"$ref": "common.schema.json#/definitions/locale"
},
"abilities": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/ability"
}
},
"groupIds": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/exportId"
}
},
"creditLimitPerMonth": {
"$ref": "common.schema.json#/definitions/creditLimit"
},
"creditLimitPerDay": {
"$ref": "common.schema.json#/definitions/creditLimit"
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"email",
"locale",
"createdAt"
],
"additionalProperties": false
}
}
},
"required": [
"account",
"users",
"groups",
"invitations"
],
"additionalProperties": false
}
5.4.2 activity-log.schema.json — Activity log
Audit trail of changes made within the organisation. Each entry records that a change occurred, which record it concerned and who caused it.
Top-level elements: activities
Show schema definition activity-log.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Activity log",
"description": "Audit trail of changes made within the organisation. Each entry records that a change occurred, which record it concerned and who caused it.",
"type": "object",
"properties": {
"activities": {
"type": "array",
"items": {
"title": "Activity",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"description": {
"type": "string"
},
"event": {
"enum": [
"created",
"updated",
"deleted",
"restored",
null
]
},
"subject": {
"description": "The record the entry concerns.",
"anyOf": [
{
"$ref": "common.schema.json#/definitions/logReference"
},
{
"type": "null"
}
]
},
"causer": {
"description": "The user who caused the change.",
"anyOf": [
{
"$ref": "common.schema.json#/definitions/logReference"
},
{
"type": "null"
}
]
},
"properties": {
"description": "Additional context recorded with the entry, after redaction.",
"type": [
"object",
"null"
]
},
"redactions": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/redactionNotice"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"description",
"event",
"subject",
"causer",
"createdAt"
],
"additionalProperties": false
}
}
},
"required": [
"activities"
],
"additionalProperties": false
}
5.4.3 api-keys.schema.json — API keys
Metadata of the API keys issued for the organisation. The key itself is stored as a one-way hash and its plain text exists only once, at creation, so it cannot be exported.
Top-level elements: apiKeys
Show schema definition api-keys.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "API keys",
"description": "Metadata of the API keys issued for the organisation. The key itself is stored as a one-way hash and its plain text exists only once, at creation, so it cannot be exported.",
"type": "object",
"properties": {
"apiKeys": {
"type": "array",
"items": {
"title": "API key",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"name": {
"type": "string"
},
"userId": {
"description": "The user the key was issued to.",
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"lastUsedAt": {
"$ref": "common.schema.json#/definitions/nullableTimestamp"
},
"expiresAt": {
"$ref": "common.schema.json#/definitions/nullableTimestamp"
},
"redactions": {
"description": "Always records that the key material itself was withheld.",
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/redactionNotice"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"name",
"userId",
"createdAt"
],
"additionalProperties": false
}
}
},
"required": [
"apiKeys"
],
"additionalProperties": false
}
5.4.4 assistants.schema.json — Assistants
Assistants configured by the organisation, the permanent knowledge files attached to them, and the conversations held with them.
Top-level elements: assistants, assistantChats, folders
Show schema definition assistants.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Assistants",
"description": "Assistants configured by the organisation, the permanent knowledge files attached to them, and the conversations held with them.",
"type": "object",
"properties": {
"assistants": {
"type": "array",
"items": {
"title": "Assistant",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"title": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"enabled": {
"type": "boolean"
},
"creatorId": {
"description": "Null when the creating account has since been deleted; the assistant belongs to the organisation and survives.",
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"folderId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"position": {
"$ref": "common.schema.json#/definitions/treePosition"
},
"isShared": {
"type": "boolean"
},
"permissions": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/permission"
}
},
"systemPrompt": {
"description": "Instructions that govern the assistant's behaviour.",
"type": [
"string",
"null"
]
},
"modelConfiguration": {
"$ref": "common.schema.json#/definitions/modelConfiguration"
},
"imageModelConfiguration": {
"$ref": "common.schema.json#/definitions/nullableModelConfiguration"
},
"tools": {
"$ref": "common.schema.json#/definitions/toolConfiguration"
},
"options": {
"$ref": "common.schema.json#/definitions/chatOptions"
},
"knowledge": {
"description": "The knowledge this assistant draws on: either automatic selection or the knowledge bases explicitly attached to it.",
"$ref": "common.schema.json#/definitions/knowledgeConfiguration"
},
"permanentKnowledge": {
"description": "Files that are permanently part of the assistant's context, as opposed to a knowledge base, which is consulted per query.",
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/fileReference"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"title",
"enabled",
"creatorId",
"isShared",
"createdAt"
],
"additionalProperties": false
}
},
"assistantChats": {
"type": "array",
"items": {
"title": "Assistant chat",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"assistantId": {
"$ref": "common.schema.json#/definitions/exportId"
},
"title": {
"type": "string"
},
"creatorId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"creditUsage": {
"$ref": "common.schema.json#/definitions/decimalString"
},
"creditUsageUpdatedAt": {
"$ref": "common.schema.json#/definitions/nullableTimestamp"
},
"messages": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/message"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"assistantId",
"title",
"creatorId",
"messages",
"createdAt"
],
"additionalProperties": false
}
},
"folders": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/folderNode"
}
}
},
"required": [
"assistants",
"assistantChats",
"folders"
],
"additionalProperties": false
}
5.4.5 chats.schema.json — Chats
Conversations held in the chat area, including every message, the folder tree they are filed in and the permissions under which they were shared.
Top-level elements: chats, folders
Show schema definition chats.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Chats",
"description": "Conversations held in the chat area, including every message, the folder tree they are filed in and the permissions under which they were shared.",
"type": "object",
"properties": {
"chats": {
"type": "array",
"items": {
"title": "Chat",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"title": {
"type": "string"
},
"creatorId": {
"description": "The user who started the conversation. Null when that account has since been deleted; the chat itself belongs to the organisation and survives.",
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"folderId": {
"description": "Folder this chat is filed in, or null when it sits at the root of the tree.",
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"position": {
"$ref": "common.schema.json#/definitions/treePosition"
},
"isShared": {
"type": "boolean"
},
"permissions": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/permission"
}
},
"modelConfiguration": {
"$ref": "common.schema.json#/definitions/modelConfiguration"
},
"imageModelConfiguration": {
"$ref": "common.schema.json#/definitions/nullableModelConfiguration"
},
"tools": {
"$ref": "common.schema.json#/definitions/toolConfiguration"
},
"options": {
"$ref": "common.schema.json#/definitions/chatOptions"
},
"systemPrompt": {
"$ref": "common.schema.json#/definitions/systemPrompt"
},
"creditUsage": {
"description": "Credits consumed by this conversation.",
"$ref": "common.schema.json#/definitions/decimalString"
},
"creditUsageUpdatedAt": {
"$ref": "common.schema.json#/definitions/nullableTimestamp"
},
"messages": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/message"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"title",
"creatorId",
"isShared",
"messages",
"createdAt"
],
"additionalProperties": false
}
},
"folders": {
"description": "Folder tree of the chat area, one tree per user.",
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/folderNode"
}
}
},
"required": [
"chats",
"folders"
],
"additionalProperties": false
}
5.4.6 common.schema.json — Common definitions
Shared building blocks referenced by every other schema of the nele.ai data export. This file declares no top-level structure of its own; it exists solely to be referenced via relative $ref, for example {"$ref": "common.schema.json#/definitions/exportId"}.
Definitions: exportId, nullableExportId, timestamp, nullableTimestamp, decimalString, creditLimit, sha256, mimeType, locale, countryCode, localeMap, modelConfiguration, nullableModelConfiguration, systemPrompt, localizedSystemPrompt, toolName, toolConfiguration, knowledgeConfiguration, toolCall, toolCalls, chatOptions, messageRole, messageStatus, message, ability, permission, treePosition, folderNode, fileReference, nullableFileReference, expirationTime, chunkSize, chunkOverlap, itemStatus, itemType, logReference, redactionNotice
Show schema definition common.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Common definitions",
"description": "Shared building blocks referenced by every other schema of the nele.ai data export. This file declares no top-level structure of its own; it exists solely to be referenced via relative $ref, for example {\"$ref\": \"common.schema.json#/definitions/exportId\"}.",
"definitions": {
"exportId": {
"title": "Export identifier",
"description": "Opaque identifier of a record inside the archive. Internal identifiers are never exported: they are replaced by generated values from which neither the internal identifier nor an ordering, a counter position or a creation time can be derived. The same entity carries the same identifier in every file of one archive, which is what keeps permissions, folder trees and the file index resolvable. No stability is promised across two archives.",
"type": "string",
"minLength": 8,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_-]+$"
},
"nullableExportId": {
"title": "Optional reference",
"description": "An export identifier, or null where the reference is absent — for example a record filed at the root of a tree, or one whose creator's account has since been deleted.",
"anyOf": [
{
"$ref": "#/definitions/exportId"
},
{
"type": "null"
}
]
},
"timestamp": {
"title": "Timestamp",
"description": "Point in time in UTC, formatted according to RFC 3339 with the literal offset 'Z'.",
"type": "string",
"format": "date-time",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\\.[0-9]+)?Z$"
},
"nullableTimestamp": {
"title": "Optional timestamp",
"description": "A timestamp, or null where the event it marks has not occurred.",
"anyOf": [
{
"$ref": "#/definitions/timestamp"
},
{
"type": "null"
}
]
},
"decimalString": {
"title": "Exact decimal",
"description": "Decimal number carried as a JSON string. The underlying columns are numeric(64,16); RFC 8259 section 6 only guarantees interoperability within IEEE 754 double precision, which 16 fractional digits exceed. Consumers must parse this with an arbitrary-precision decimal type, never as a floating point number.",
"type": "string",
"pattern": "^-?[0-9]+(\\.[0-9]+)?$"
},
"creditLimit": {
"title": "Credit limit",
"description": "Upper bound on the credits that may be consumed in the given period, or null when no limit applies.",
"type": [
"integer",
"null"
]
},
"sha256": {
"title": "SHA-256 checksum",
"description": "Lower-case hexadecimal SHA-256 digest (FIPS PUB 180-4).",
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"mimeType": {
"title": "Media type",
"description": "IANA media type of the referenced content (RFC 2046).",
"type": "string",
"pattern": "^[a-zA-Z0-9!#$&^_.+-]+/[a-zA-Z0-9!#$&^_.+-]+$"
},
"locale": {
"title": "Locale",
"description": "Language tag as a two-letter ISO 639-1 code. Which languages the service offers changes over time; the form is fixed, the set is not.",
"type": "string",
"pattern": "^[a-z]{2}$",
"examples": [
"de",
"en",
"fr"
]
},
"countryCode": {
"title": "Country code",
"description": "Region used to bias web search results. 'ALL' means no regional restriction; every other value is an ISO 3166-1 alpha-2 code.",
"type": "string",
"pattern": "^(ALL|[A-Z]{2})$",
"examples": [
"ALL",
"DE",
"AT",
"CH"
]
},
"localeMap": {
"title": "Translated text",
"description": "Text held per locale, keyed by ISO 639-1 code. Sparsely populated: only locales that actually carry a translation are present.",
"type": "object",
"propertyNames": {
"pattern": "^[a-z]{2}$"
},
"additionalProperties": {
"type": "string"
}
},
"modelConfiguration": {
"title": "Model configuration",
"description": "Which model was used. Either automatic selection, a model of the provider identified by its original name, or a model the organisation configured itself.",
"oneOf": [
{
"title": "Automatic model selection",
"type": "object",
"properties": {
"type": {
"const": "auto"
}
},
"required": [
"type"
],
"additionalProperties": false
},
{
"title": "Provider model",
"type": "object",
"properties": {
"type": {
"enum": [
"text_model",
"image_model"
]
},
"name": {
"description": "Original name of the model as issued by the model provider, for example the name under which it is addressed at that provider's API. Carried instead of an internal identifier so that the selection remains meaningful outside this service.",
"type": "string",
"minLength": 1
},
"configuration": {
"description": "Model parameters. Keys and values are always strings and never nested; an empty object is the common case.",
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"type",
"name",
"configuration"
],
"additionalProperties": false
},
{
"title": "Organisation model",
"type": "object",
"properties": {
"type": {
"const": "team_model"
},
"id": {
"description": "The model configured by the organisation itself.",
"$ref": "#/definitions/exportId"
},
"configuration": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"type",
"id",
"configuration"
],
"additionalProperties": false
}
]
},
"nullableModelConfiguration": {
"title": "Optional model configuration",
"description": "A model configuration, or null where none was recorded.",
"anyOf": [
{
"$ref": "#/definitions/modelConfiguration"
},
{
"type": "null"
}
]
},
"systemPrompt": {
"title": "System prompt",
"description": "Behavioural configuration of the assistant for one conversation. Always present in full; the application falls back to its default rather than storing null.",
"type": "object",
"properties": {
"useCustomSystemMessage": {
"description": "Whether systemMessage is applied.",
"type": "boolean"
},
"systemMessage": {
"description": "Free-text system message. Its maximum length is a configured limit of the service and is therefore not fixed in this schema.",
"type": "string"
},
"answerLength": {
"enum": [
"short",
"standard",
"detailed"
]
},
"answerStyle": {
"enum": [
"friendly",
"factual",
"formal"
]
}
},
"required": [
"useCustomSystemMessage",
"systemMessage",
"answerLength",
"answerStyle"
],
"additionalProperties": false
},
"localizedSystemPrompt": {
"title": "Localized system prompt",
"description": "System prompt held per locale, keyed by ISO 639-1 code. Every locale the service offers carries an entry; the set of locales is not fixed by this schema.",
"type": "object",
"propertyNames": {
"pattern": "^[a-z]{2}$"
},
"additionalProperties": {
"$ref": "#/definitions/systemPrompt"
},
"minProperties": 1
},
"toolName": {
"title": "Tool name",
"description": "A tool the model may call while answering. This vocabulary is open: it grows with the service, so a consumer must accept values not listed here rather than reject the record. The values in use at the time of publication are given as examples.",
"type": "string",
"minLength": 1,
"examples": [
"generate_image",
"optimize_prompt",
"search_web"
]
},
"toolConfiguration": {
"title": "Tool configuration",
"description": "Which tools the model may call: either automatic selection, or an explicit list.",
"oneOf": [
{
"const": "auto"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/toolName"
},
"uniqueItems": true
}
]
},
"knowledgeConfiguration": {
"title": "Knowledge configuration",
"description": "Which knowledge the model may draw on while answering: either automatic selection, or an explicit list of knowledge bases. One single field carries both cases, because the service treats them as mutually exclusive. The content of the referenced knowledge bases is exported in knowledge-bases.json.",
"oneOf": [
{
"const": "auto"
},
{
"type": "array",
"items": {
"$ref": "#/definitions/exportId"
},
"uniqueItems": true
}
]
},
"toolCall": {
"title": "Tool call",
"description": "A single tool invocation performed while answering, including its result.",
"type": "object",
"properties": {
"type": {
"const": "dynamic-tool"
},
"toolName": {
"$ref": "#/definitions/toolName"
},
"toolCallId": {
"type": "string"
},
"state": {
"enum": [
"output-available",
"output-error"
]
},
"input": {
"description": "Arguments the model passed to the tool.",
"type": "object"
},
"output": {
"description": "Result returned by the tool. Null when the call failed."
},
"errorText": {
"description": "Error description. Null when the call succeeded.",
"type": [
"string",
"null"
]
}
},
"required": [
"type",
"toolName",
"toolCallId",
"state",
"input",
"output",
"errorText"
],
"additionalProperties": false,
"allOf": [
{
"description": "A failed call carries no output.",
"if": {
"properties": {
"state": {
"const": "output-error"
}
},
"required": [
"state"
]
},
"then": {
"properties": {
"output": {
"type": "null"
}
}
}
},
{
"description": "A successful call carries no error text.",
"if": {
"properties": {
"state": {
"const": "output-available"
}
},
"required": [
"state"
]
},
"then": {
"properties": {
"errorText": {
"type": "null"
}
}
}
}
]
},
"toolCalls": {
"title": "Tool calls",
"type": "array",
"items": {
"$ref": "#/definitions/toolCall"
}
},
"chatOptions": {
"title": "Conversation options",
"description": "Options active for a conversation. 'pseudonymize' means personal data was masked before the text was sent to the model provider.",
"type": "array",
"items": {
"enum": [
"pseudonymize"
]
},
"uniqueItems": true
},
"messageRole": {
"title": "Message role",
"type": "string",
"enum": [
"user",
"assistant",
"system",
"tool_call",
"tool_result"
]
},
"messageStatus": {
"title": "Message status",
"type": "string",
"enum": [
"pending",
"success",
"error",
"stopped"
]
},
"message": {
"title": "Message",
"description": "A single message of a conversation. Chat messages and assistant-chat messages share this structure; only the conversation they belong to differs.",
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/exportId"
},
"role": {
"$ref": "#/definitions/messageRole"
},
"status": {
"$ref": "#/definitions/messageStatus"
},
"content": {
"description": "Message text as authored or generated. The format is CommonMark, extended with tables and strikethrough. A strict CommonMark reader renders those two constructs as plain text and therefore loses their formatting, not their content.",
"type": "string"
},
"pseudonymizationContent": {
"description": "The redacted variant of content that was actually transmitted to the model provider, present only when the privacy filter was active. The mapping from placeholder back to the original value is deliberately not part of the export; see the exclusions section of the directory.",
"type": [
"string",
"null"
]
},
"reasoning": {
"description": "Reasoning trace of the model, where the model returned one.",
"type": [
"string",
"null"
]
},
"toolCalls": {
"anyOf": [
{
"$ref": "#/definitions/toolCalls"
},
{
"type": "null"
}
]
},
"modelConfiguration": {
"$ref": "#/definitions/nullableModelConfiguration"
},
"imageModelConfiguration": {
"$ref": "#/definitions/nullableModelConfiguration"
},
"tools": {
"anyOf": [
{
"$ref": "#/definitions/toolConfiguration"
},
{
"type": "null"
}
]
},
"options": {
"anyOf": [
{
"$ref": "#/definitions/chatOptions"
},
{
"type": "null"
}
]
},
"systemPrompt": {
"anyOf": [
{
"$ref": "#/definitions/systemPrompt"
},
{
"type": "null"
}
]
},
"attachments": {
"description": "Files attached to this message, referencing entries of the file index.",
"type": "array",
"items": {
"$ref": "#/definitions/fileReference"
}
},
"isComplete": {
"type": "boolean"
},
"completedAt": {
"$ref": "#/definitions/nullableTimestamp"
},
"createdAt": {
"$ref": "#/definitions/timestamp"
},
"updatedAt": {
"$ref": "#/definitions/timestamp"
}
},
"required": [
"id",
"role",
"status",
"content",
"isComplete",
"createdAt"
],
"additionalProperties": false
},
"ability": {
"title": "Ability",
"description": "A permission that can be granted to a user or a group. This vocabulary is open: it grows with the service, so a consumer must accept values not listed here rather than reject the record. The values in use at the time of publication are given as examples.",
"type": "string",
"minLength": 1,
"examples": [
"assistants_create",
"chats_create",
"prompts_create",
"invoices",
"team",
"usage",
"users"
]
},
"permission": {
"title": "Share permission",
"description": "Grants one action on a shared object to a user, a group or the whole organisation.",
"type": "object",
"properties": {
"ownerType": {
"enum": [
"user",
"group",
"team"
]
},
"ownerId": {
"description": "The user, group or organisation the permission was granted to. Null when it applies to the organisation as a whole.",
"$ref": "#/definitions/nullableExportId"
},
"action": {
"enum": [
"view",
"use",
"update",
"delete"
]
}
},
"required": [
"ownerType",
"ownerId",
"action"
],
"additionalProperties": false
},
"treePosition": {
"title": "Position",
"description": "Zero-based sort position among the siblings of the same parent.",
"type": "integer",
"minimum": 0
},
"folderNode": {
"title": "Folder",
"description": "One folder of a filing tree. Folders nest through parentId; a null parentId marks a root folder. Objects state which folder they sit in through their own folderId.",
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/exportId"
},
"parentId": {
"$ref": "#/definitions/nullableExportId"
},
"ownerId": {
"description": "The user whose personal filing tree this folder belongs to.",
"$ref": "#/definitions/exportId"
},
"title": {
"type": "string"
},
"position": {
"$ref": "#/definitions/treePosition"
},
"createdAt": {
"$ref": "#/definitions/timestamp"
},
"updatedAt": {
"$ref": "#/definitions/timestamp"
}
},
"required": [
"id",
"parentId",
"ownerId",
"title",
"position"
],
"additionalProperties": false
},
"fileReference": {
"title": "File reference",
"description": "Describes a file contained in the archive under files/ and is the only place that file is described. The file is identified by its identifier alone; the archive makes no promise about how the files are arranged inside that directory, so consumers must resolve a file through this identifier rather than by constructing a path.",
"type": "object",
"properties": {
"id": {
"$ref": "#/definitions/exportId"
},
"originalFilename": {
"description": "File name as supplied by the user at upload time.",
"type": "string"
},
"mimeType": {
"$ref": "#/definitions/mimeType"
},
"sha256": {
"$ref": "#/definitions/sha256"
}
},
"required": [
"id",
"originalFilename"
],
"additionalProperties": false
},
"nullableFileReference": {
"title": "Optional file reference",
"description": "A file reference, or null where no such file exists for the record.",
"anyOf": [
{
"$ref": "#/definitions/fileReference"
},
{
"type": "null"
}
]
},
"expirationTime": {
"title": "Chat retention period",
"description": "After how long without activity a chat is deleted automatically. This vocabulary is open: it grows with the service, so a consumer must accept values not listed here rather than reject the record. The values in use at the time of publication are given as examples.",
"type": "string",
"minLength": 1,
"examples": [
"never",
"one_day",
"thirty_days",
"one_year"
]
},
"chunkSize": {
"title": "Chunk size",
"description": "Character length of the segments a source document is split into before indexing. Which lengths the service offers is a configuration matter, so only the form is fixed here.",
"type": "integer",
"minimum": 1,
"examples": [
1000,
2000,
4000
]
},
"chunkOverlap": {
"title": "Chunk overlap",
"description": "Character overlap between consecutive segments.",
"type": "integer",
"minimum": 0,
"examples": [
100,
200,
400
]
},
"itemStatus": {
"title": "Knowledge base item status",
"description": "Processing state of a knowledge base entry. Further values express that the processing of an entry did not complete. This vocabulary is open: it grows with the service, so a consumer must accept values not listed here rather than reject the record. The values in use at the time of publication are given as examples.",
"type": "string",
"minLength": 1,
"examples": [
"draft",
"pending",
"embedded"
]
},
"itemType": {
"title": "Knowledge base item type",
"description": "Whether the entry originates from an uploaded document or from a retrieved URL.",
"type": "string",
"enum": [
"document",
"url"
]
},
"logReference": {
"title": "Log reference",
"description": "Reference to the record a log entry concerns, written as the kind of record and its identifier joined by a colon, for example chat:k7Qb2mXr9TfA. The set of kinds is open and grows with the service, so a consumer must accept kinds not seen before. The kind names an exported record, never an internal class.",
"type": "string",
"pattern": "^[a-z_]+:[A-Za-z0-9_-]+$"
},
"redactionNotice": {
"title": "Redaction notice",
"description": "Records that a single field was removed from the export. A visible gap is preferable to a silent one.",
"type": "object",
"properties": {
"field": {
"description": "Name of the omitted field.",
"type": "string"
},
"reason": {
"description": "Why it was omitted. The directory explains each reason in full.",
"type": "string",
"enum": [
"credential",
"third_party_credential",
"personal_data_index",
"derived_data",
"vendor_content"
]
}
},
"required": [
"field",
"reason"
],
"additionalProperties": false
}
}
}
5.4.7 content-filters.schema.json — Content filters
Content filters that apply within the organisation. Filters the organisation defined itself are exported with their terms. Filters provided with the product are vendor content rather than data generated by using the service, so they are referenced by identifier and name only. Which filters are active for an individual user is recorded in settings.schema.json.
Top-level elements: contentFilters
Show schema definition content-filters.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Content filters",
"description": "Content filters that apply within the organisation. Filters the organisation defined itself are exported with their terms. Filters provided with the product are vendor content rather than data generated by using the service, so they are referenced by identifier and name only. Which filters are active for an individual user is recorded in settings.schema.json.",
"type": "object",
"properties": {
"contentFilters": {
"description": "Content filters defined by the organisation. Filters provided by the vendor are not customer data and are referenced by identifier only.",
"type": "array",
"items": {
"title": "Content filter",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"name": {
"type": "string"
},
"scope": {
"description": "Whether the filter was defined by the organisation or provided with the product.",
"enum": [
"organisation",
"vendor"
]
},
"terms": {
"description": "The blocked terms or patterns. Present only for filters the organisation defined itself.",
"type": "array",
"items": {
"type": "string"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"name",
"scope"
],
"additionalProperties": false
}
}
},
"required": [
"contentFilters"
],
"additionalProperties": false
}
5.4.8 knowledge-bases.schema.json — Knowledge bases
Knowledge bases of the organisation and the entries they are built from. The portable substance of an entry is its source document and the text extracted from it; both are contained in the archive under files/. The representations computed for retrieval are not exported.
Top-level elements: knowledgeBases, folders
Show schema definition knowledge-bases.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Knowledge bases",
"description": "Knowledge bases of the organisation and the entries they are built from. The portable substance of an entry is its source document and the text extracted from it; both are contained in the archive under files/. The representations computed for retrieval are not exported.",
"type": "object",
"properties": {
"knowledgeBases": {
"type": "array",
"items": {
"title": "Knowledge base",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"enabled": {
"type": "boolean"
},
"creatorId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"folderId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"position": {
"$ref": "common.schema.json#/definitions/treePosition"
},
"permissions": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/permission"
}
},
"chunkSize": {
"$ref": "common.schema.json#/definitions/chunkSize"
},
"chunkOverlap": {
"$ref": "common.schema.json#/definitions/chunkOverlap"
},
"items": {
"type": "array",
"items": {
"title": "Knowledge base item",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"title": {
"type": "string"
},
"type": {
"$ref": "common.schema.json#/definitions/itemType"
},
"status": {
"$ref": "common.schema.json#/definitions/itemStatus"
},
"sourceUrl": {
"description": "Address the entry was retrieved from, for entries of type 'url'.",
"type": [
"string",
"null"
]
},
"context": {
"description": "Additional context stored alongside the entry.",
"type": [
"object",
"null"
]
},
"chunkSize": {
"$ref": "common.schema.json#/definitions/chunkSize"
},
"chunkOverlap": {
"$ref": "common.schema.json#/definitions/chunkOverlap"
},
"sourceFile": {
"description": "The uploaded or retrieved source document.",
"$ref": "common.schema.json#/definitions/nullableFileReference"
},
"extractedTextFile": {
"description": "Plain text extracted from the source document and actually used for indexing.",
"$ref": "common.schema.json#/definitions/nullableFileReference"
},
"redactions": {
"description": "Fields omitted from this entry, in particular credentials held for authenticated sources.",
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/redactionNotice"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"title",
"type",
"status",
"createdAt"
],
"additionalProperties": false
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"title",
"enabled",
"creatorId",
"items",
"createdAt"
],
"additionalProperties": false
}
},
"folders": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/folderNode"
}
}
},
"required": [
"knowledgeBases",
"folders"
],
"additionalProperties": false
}
5.4.9 manifest.schema.json — Export manifest
Index of one export archive. It is the entry point for any consumer: it names the format version, lists every payload file with its checksum and record counts, and states explicitly which data was left out.
Top-level elements: formatVersion, generatedAt, characterEncoding, checksumAlgorithm, scope, timeRange, counts, files, excluded
Show schema definition manifest.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Export manifest",
"description": "Index of one export archive. It is the entry point for any consumer: it names the format version, lists every payload file with its checksum and record counts, and states explicitly which data was left out.",
"type": "object",
"properties": {
"formatVersion": {
"description": "Version of the export format itself. It is independent of any software, release or service version of nele.ai and moves only when these schemas change: additive changes raise the minor version, breaking changes the major one. A release of the service does not raise it.",
"type": "string",
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
},
"generatedAt": {
"description": "When the archive was produced.",
"$ref": "common.schema.json#/definitions/timestamp"
},
"characterEncoding": {
"description": "Character encoding of every text file in the archive.",
"const": "UTF-8"
},
"checksumAlgorithm": {
"description": "Algorithm behind every checksum in this manifest.",
"const": "SHA-256"
},
"scope": {
"description": "The account the archive belongs to. An export always covers a whole organisation, which is the contracting party.",
"type": "object",
"properties": {
"type": {
"const": "account"
},
"accountId": {
"$ref": "common.schema.json#/definitions/exportId"
},
"accountName": {
"type": "string"
}
},
"required": [
"type",
"accountId",
"accountName"
],
"additionalProperties": false
},
"timeRange": {
"description": "Period the export covers. A null 'from' means the archive reaches back to the beginning of the account.",
"type": "object",
"properties": {
"from": {
"$ref": "common.schema.json#/definitions/nullableTimestamp"
},
"to": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"from",
"to"
],
"additionalProperties": false
},
"counts": {
"description": "Record counts across the whole archive, for a quick completeness check.",
"type": "object",
"additionalProperties": {
"type": "integer",
"minimum": 0
}
},
"files": {
"description": "Every payload file of the archive. Large collections may be split into several parts; each part validates against the same schema and is listed here separately.",
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"description": "Archive-relative path of the file.",
"type": "string"
},
"schema": {
"description": "File name of the schema this file validates against, resolvable inside the schemas/ directory of the archive.",
"type": "string",
"pattern": "\\.schema\\.json$"
},
"mediaType": {
"$ref": "common.schema.json#/definitions/mimeType"
},
"sha256": {
"$ref": "common.schema.json#/definitions/sha256"
},
"recordCounts": {
"type": "object",
"additionalProperties": {
"type": "integer",
"minimum": 0
}
}
},
"required": [
"path",
"schema",
"mediaType",
"sha256"
],
"additionalProperties": false
}
},
"excluded": {
"description": "Data deliberately not contained in the archive. Stating the gaps here is what makes the export self-describing; the online directory carries the full reasoning.",
"type": "array",
"items": {
"type": "object",
"properties": {
"category": {
"enum": [
"credential",
"third_party_credential",
"personal_data_index",
"derived_data",
"vendor_content",
"operational_telemetry",
"legacy_data",
"provider_configuration",
"security_configuration"
]
},
"items": {
"description": "The omitted fields or stores, named as in the directory.",
"type": "array",
"items": {
"type": "string"
}
},
"reason": {
"type": "string"
}
},
"required": [
"category",
"items",
"reason"
],
"additionalProperties": false
}
}
},
"required": [
"formatVersion",
"generatedAt",
"characterEncoding",
"checksumAlgorithm",
"scope",
"timeRange",
"counts",
"files",
"excluded"
],
"additionalProperties": false
}
5.4.10 prompts.schema.json — Prompts
Reusable prompts of the organisation. Title, description and template are held per locale. Prompts curated and shipped by the vendor are not part of the export; a copy a user made into their own prompt library is.
Top-level elements: prompts, folders, favorites
Show schema definition prompts.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Prompts",
"description": "Reusable prompts of the organisation. Title, description and template are held per locale. Prompts curated and shipped by the vendor are not part of the export; a copy a user made into their own prompt library is.",
"type": "object",
"properties": {
"prompts": {
"type": "array",
"items": {
"title": "Prompt",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"enabled": {
"type": "boolean"
},
"defaultLocale": {
"$ref": "common.schema.json#/definitions/locale"
},
"title": {
"$ref": "common.schema.json#/definitions/localeMap"
},
"description": {
"$ref": "common.schema.json#/definitions/localeMap"
},
"template": {
"description": "The prompt text itself, per locale.",
"$ref": "common.schema.json#/definitions/localeMap"
},
"systemPrompt": {
"$ref": "common.schema.json#/definitions/localizedSystemPrompt"
},
"creatorId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"folderId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"position": {
"$ref": "common.schema.json#/definitions/treePosition"
},
"isShared": {
"type": "boolean"
},
"permissions": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/permission"
}
},
"modelConfiguration": {
"$ref": "common.schema.json#/definitions/modelConfiguration"
},
"imageModelConfiguration": {
"$ref": "common.schema.json#/definitions/nullableModelConfiguration"
},
"tools": {
"$ref": "common.schema.json#/definitions/toolConfiguration"
},
"options": {
"$ref": "common.schema.json#/definitions/chatOptions"
},
"knowledge": {
"description": "The knowledge this prompt draws on: either automatic selection or an explicit list of knowledge bases.",
"$ref": "common.schema.json#/definitions/knowledgeConfiguration"
},
"attachments": {
"description": "Files appended to the first message when the prompt is used. Unlike an assistant's permanent knowledge these are not continuously part of the context.",
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/fileReference"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"enabled",
"defaultLocale",
"title",
"template",
"creatorId",
"isShared",
"createdAt"
],
"additionalProperties": false
}
},
"folders": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/folderNode"
}
},
"favorites": {
"description": "Which user marked which prompt as a favourite.",
"type": "array",
"items": {
"type": "object",
"properties": {
"userId": {
"$ref": "common.schema.json#/definitions/exportId"
},
"promptId": {
"$ref": "common.schema.json#/definitions/exportId"
}
},
"required": [
"userId",
"promptId"
],
"additionalProperties": false
}
}
},
"required": [
"prompts",
"folders",
"favorites"
],
"additionalProperties": false
}
5.4.11 settings.schema.json — Settings
Per-user preferences: default models, privacy filter, personal system prompt and which models and content filters are released for the user. The content filters themselves are defined in content-filters.schema.json and referenced here by identifier.
Top-level elements: userSettings
Show schema definition settings.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Settings",
"description": "Per-user preferences: default models, privacy filter, personal system prompt and which models and content filters are released for the user. The content filters themselves are defined in content-filters.schema.json and referenced here by identifier.",
"type": "object",
"properties": {
"userSettings": {
"type": "array",
"items": {
"title": "User settings",
"type": "object",
"properties": {
"userId": {
"$ref": "common.schema.json#/definitions/exportId"
},
"defaultModel": {
"$ref": "common.schema.json#/definitions/nullableModelConfiguration"
},
"defaultImageModel": {
"$ref": "common.schema.json#/definitions/nullableModelConfiguration"
},
"defaultPrivacyFilterActive": {
"type": "boolean"
},
"systemPrompt": {
"$ref": "common.schema.json#/definitions/systemPrompt"
},
"enabledModels": {
"description": "Models released for this user, named as the model provider names them — the same form modelConfiguration uses, so that a release list stays meaningful outside this service.",
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"enabledContentFilterIds": {
"type": "array",
"items": {
"$ref": "common.schema.json#/definitions/exportId"
}
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"userId",
"defaultPrivacyFilterActive",
"systemPrompt"
],
"additionalProperties": false
}
}
},
"required": [
"userSettings"
],
"additionalProperties": false
}
5.4.12 transcriptions.schema.json — Transcriptions
Audio recordings submitted for transcription and their resulting text. The recording and the transcript are contained in the archive under files/ and are referenced here; the name and media type of each are carried by those references.
Top-level elements: transcriptions
Show schema definition transcriptions.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Transcriptions",
"description": "Audio recordings submitted for transcription and their resulting text. The recording and the transcript are contained in the archive under files/ and are referenced here; the name and media type of each are carried by those references.",
"type": "object",
"properties": {
"transcriptions": {
"type": "array",
"items": {
"title": "Transcription",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"userId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"status": {
"enum": [
"stored",
"completed",
"failed"
]
},
"failureReason": {
"description": "Why the transcription failed, absent or null when it did not. This vocabulary is open: it grows with the service, so a consumer must accept values not listed here rather than reject the record.",
"type": [
"string",
"null"
],
"examples": [
"credit_limit_exceeded",
"transcription_failed"
]
},
"credits": {
"$ref": "common.schema.json#/definitions/decimalString"
},
"audioFile": {
"$ref": "common.schema.json#/definitions/nullableFileReference"
},
"transcriptFile": {
"$ref": "common.schema.json#/definitions/nullableFileReference"
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"userId",
"status",
"credits",
"createdAt"
],
"additionalProperties": false
}
}
},
"required": [
"transcriptions"
],
"additionalProperties": false
}
5.4.13 usage.schema.json — Usage
Consumption records and credit balances of the organisation. All amounts are carried as exact decimal strings. Records whose user account has since been deleted are retained in anonymised form for billing and appear here with a null userId.
Top-level elements: usages, creditBalances
Show schema definition usage.schema.json
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Usage",
"description": "Consumption records and credit balances of the organisation. All amounts are carried as exact decimal strings. Records whose user account has since been deleted are retained in anonymised form for billing and appear here with a null userId.",
"type": "object",
"properties": {
"usages": {
"type": "array",
"items": {
"title": "Usage record",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"userId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"type": {
"description": "What the consumption was charged for. This vocabulary is open: it grows as the service gains capabilities, so a consumer must accept values not listed here rather than reject the record. The values in use at the time of publication are given as examples.",
"type": "string",
"minLength": 1,
"examples": [
"embedding_generation",
"image_generation",
"speech_to_text",
"text_generation",
"web_search"
]
},
"subtype": {
"description": "Name of the model the consumption is attributed to.",
"type": "string"
},
"credits": {
"$ref": "common.schema.json#/definitions/decimalString"
},
"creditBalanceId": {
"$ref": "common.schema.json#/definitions/nullableExportId"
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"userId",
"type",
"subtype",
"credits",
"createdAt"
],
"additionalProperties": false
}
},
"creditBalances": {
"type": "array",
"items": {
"title": "Credit balance",
"type": "object",
"properties": {
"id": {
"$ref": "common.schema.json#/definitions/exportId"
},
"validFrom": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"validTo": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"creditsAllowance": {
"$ref": "common.schema.json#/definitions/decimalString"
},
"creditsUsed": {
"$ref": "common.schema.json#/definitions/decimalString"
},
"creditsBalance": {
"$ref": "common.schema.json#/definitions/decimalString"
},
"createdAt": {
"$ref": "common.schema.json#/definitions/timestamp"
},
"updatedAt": {
"$ref": "common.schema.json#/definitions/timestamp"
}
},
"required": [
"id",
"validFrom",
"validTo",
"creditsAllowance",
"creditsUsed",
"creditsBalance"
],
"additionalProperties": false
}
}
},
"required": [
"usages",
"creditBalances"
],
"additionalProperties": false
}
5.5 Referenced Open Specifications
| Abbreviation | Title |
|---|---|
| RFC 8259 (STD 90) | The JavaScript Object Notation (JSON) Data Interchange Format |
| RFC 3629 | UTF-8, a transformation format of ISO 10646 |
| RFC 3339 | Date and Time on the Internet: Timestamps |
| RFC 2046 | MIME Part Two: Media Types |
| RFC 4180 | Common Format and MIME Type for CSV Files |
| RFC 5322 | Internet Message Format |
| RFC 6234 | US Secure Hash Algorithms |
| RFC 9110 | HTTP Semantics |
| JSON Schema Draft 07 | draft-handrews-json-schema-01, draft-handrews-json-schema-validation-01 |
| CommonMark 0.31.2 | CommonMark Specification (in the service, plus the tables and strikethrough extensions) |
| OpenAPI 3.1.0 | OpenAPI Specification |
| ISO/IEC 21320-1:2015 | Document Container File — Core |
| PKWARE APPNOTE 6.3.10 | .ZIP File Format Specification |
| ECMA-376 / ISO/IEC 29500 | Office Open XML File Formats |
| ISO 32000-1:2008 | Portable Document Format (PDF 1.7) |
| EN 16931-1:2017 | Electronic invoicing — Semantic data model |
| CIUS XRechnung 3.0 | XRechnung Standard (KoSIT) |
| ISO 639-1 | Language codes |
| ISO 3166-1 Alpha-2 | Country codes |
| ISO 8601-1:2019 | Date and time information |
| FIPS PUB 180-4 | Secure Hash Standard |
5.6 Status and Updating of the Directory
Format version 1.0.0. Changes to the schemas follow the versioning scheme described in the preamble; previously published major versions remain available for retrieval for as long as archives referring to them are in circulation.
Insofar as harmonised standards or common specifications for the interoperability of data processing services become binding for the respective type of service, this directory will be updated accordingly.
Last technical update of the directory: 10.09.2026
6. Interfaces and Interoperability
nele.ai provides the following interfaces and export options for transferring data:
Export function: Request via support@nele.ai; provided as a ZIP archive by email with a download link. The layout of the archive and the structure of the files it contains are described in Section 5.
API / open interface: REST API v1, described as an OpenAPI document in accordance with OpenAPI 3.1.0. Authentication is by API keys; their name, owner, expiry and last use are exported, but the key value itself is not (see api-keys.schema.json).
API format or protocol: JSON over HTTPS (RFC 9110, RFC 8259).
The interfaces intended for switching are provided for that purpose at no additional charge.
7. Known Technical Limitations and Constraints
The following technical limitations, in particular, must be taken into account when switching:
| Limitation | Possible Impact |
|---|---|
| Provider-specific or nele.ai-specific data structures | The target system may be unable to adopt individual configurations directly |
| Internal technical representations are not exported | The knowledge index must be recreated in the target system. The segmentation can be reproduced from the exported values for chunk size and overlap; the source document and the extracted text are included. |
| Assistants use nele.ai-specific tools | The tools may not be available in the target system. The export records which tools an assistant was permitted to use. |
| Message content follows CommonMark plus the tables and strikethrough extensions | A parser that strictly follows CommonMark reads these two constructs as ordinary text. This results in the loss of their formatting, rather than their content. |
| The CSV export deliberately deviates from RFC 4180 (language-dependent delimiter, prepended UTF-8 BOM) | Processing systems must detect the delimiter and skip the BOM. The deviation is intended to allow direct readability in spreadsheet applications. |
| No conformity with PDF/A-3 is guaranteed for the invoice PDF | The embedded CII-XML in accordance with XRechnung 3.0 is machine-readable; conformity of the document as a whole with archiving requirements must not be assumed, as the base document originates from the payment service provider. |
| Value lists are open (tools, permissions, processing states, languages, chunk sizes) | Processing systems must accept unknown values and must not reject a record on that ground. |
| Identifiers are consistent within an archive, but are not stable across two archives | Two archives of the same account cannot be matched by their identifiers. |
| Large collections are split across several part files within the archive | Processing systems must read all part files listed in the manifest under files; each part file validates against the same schema. |
During the switching process, GAL Digital informs the customer of any further specifically known risks to the continuity of the functions and services provided in accordance with the contract.
8. Security during Switching
GAL Digital maintains an appropriate level of security throughout the switching and retrieval periods.
These include, in particular:
- access to exports only for persons authorised for that purpose
- encrypted transmission of the data
- protection of the data during the transitional and retrieval periods
9. Retrieval Period and Deletion
After the end of the transitional period, the exportable data remain available for retrieval for a further 30 calendar days.
Upon expiry of this retrieval period, the customer's exportable data and digital assets are deleted, insofar as no statutory retention obligations or other mandatory legal grounds preclude deletion.
Customers should therefore ensure that they have retrieved all required data in full within the retrieval period.
10. Switching Costs
GAL Digital does not charge separate switching or export fees for switching or for exporting the data.
Data traffic caused by the export is likewise not charged separately.
The contractually agreed fee for the continued provision and use of nele.ai during the transitional period remains unaffected.
11. ICT Infrastructure Used
An up-to-date overview of the locations and jurisdictions to which the ICT infrastructure used for nele.ai is subject:
The contractually agreed ICT services or the functions assigned to subcontractors are provided at the locations listed below:
| Contractor (AN) / Subcontractor (UAN) | Subject Matter of the Service | Region of Service Provision | Country of Service Provision | Jurisdiction |
|---|---|---|---|---|
| Anthropic (UAN) | Models Claude 3 Haiku, Claude 3 Opus, Claude 3.5 Sonnet | Third country | USA | USA |
| AWS Bedrock (UAN) | Models Claude 3 Haiku, Claude 3.5 Sonnet | EU/EEA* | EU/EEA* | The respective EU/EEA country in which the server is located |
| Azure (UAN) | Models GPT-4o, GPT-4o mini, GPT-4 Turbo, GPT-3.5 Turbo, DALL·E 3, Mistral Large, Mistral Small | EU/EEA* | EU/EEA* | The respective EU/EEA country in which the server is located |
| BRAVE (UAN) | BRAVE Search API | EU/EEA* | EU/EEA | The respective EU/EEA country in which the server is located |
| Brevo (UAN) | Email delivery and automation services | EU/EEA | BE, FR | Belgium and France |
| Elevenlabs | Generative Voice AI | Third country | USA | USA |
| Gemini | EU/EEA | EU/EEA* | The respective EU/EEA country in which the server is located | |
| Hetzner (UAN) | Hosting/storage of customer data | EU/EEA | Germany | Germany |
| Microsoft Azure (UAN) | Hosting/storage of customer data | EU/EEA | Germany | Germany |
| Microsoft Office 365 | Office software: email, Word, Excel, OneDrive | EU/EEA* | EU/EEA* | The respective EU/EEA country in which the server is located |
| Mistral AI (UAN) | Models Mistral Large, Mistral Small (directly via La Plateforme/API) | EU/EEA* | SE, NO, NL | Sweden, Norway and the Netherlands |
| nele.ai (AN) | Provision of AI-based services | Germany | DE | Germany |
| OpenAI (UAN) | Models GPT-4o, GPT-4o mini, GPT-4 Turbo, GPT-3.5 Turbo, DALL·E 3 | Third country | USA | USA |
| Pipedrive | Customer support / CRM | EU/EEA | EE | Estonia |
| Scaleway (UAN) | Generative APIs (AI text generation on own infrastructure) | EU/EEA | FR | France |
* The respective server location within the EU or the EEA determines the country and jurisdiction of service provision.
12. Protection against Incompatible Governmental Access from Third Countries
GAL Digital implements technical, organisational and contractual measures to protect non-personal customer data stored in the European Union against governmental access from third countries or a corresponding transfer, insofar as such access or transfer would be incompatible with Union law or the law of a Member State.
These measures include, in particular:
- restricting access rights in accordance with the principle of necessity
- encrypting data in transit
- carefully selecting service providers used and placing them under contractual obligations
- contractual requirements for handling requests for disclosure by public authorities
- insofar as legally and factually possible, reviewing the lawfulness of requests for disclosure by public authorities
- insofar as legally and factually possible, challenging requests for disclosure that conflict with requirements under Union law
- informing affected customers of such access or requests for disclosure, insofar as legally permissible
Further information on the technical and organisational measures and the service providers used is available at /de/avv and /subcontractors.
13. Assistance and Contact
GAL Digital provides reasonable assistance to customers in planning and carrying out a switch and in developing an exit strategy.
Please address enquiries about switching and data portability to:
GAL Digital GmbH
Email: support@nele.ai
Please specify the customer account concerned in your enquiry and describe the desired switching or export scenario as precisely as possible.