Last date modified: 2026-Sep-16
RSMF field reference
The Relativity Short Message Format (RSMF) stores normalized short-message data in a single, searchable file. Sources include chats from Microsoft Teams, Slack, Google Chat, and mobile sources collected through Cellebrite/Universal Forensic Extraction Device Report (UFDR). When you process an RSMF file, Relativity extracts its headers and metadata, and maps them to workspace fields you can search, sort, filter, and produce on.
- For the underlying file format itself (the
rsmf_manifest.jsonschema, and the participant, conversation, and event objects), see The Relativity Short Message Format. - For the general field‑mapping workflow in the Field Catalog, see Mapping processing fields. This topic covers only RSMF-specific behavior.
RSMF field mapping process
This section explains how data moves from the file a converter produces, through Relativity's processing discovery, to the mappable fields you see in the Field Catalog. Understanding this pipeline helps you anticipate which fields are available for a given source and how to map them correctly during processing.
Anatomy of an RSMF file
An RSMF file is an RFC 5322-compliant (email-style) message with two nested levels:
- Message headers—a set of
X-RSMF-*headers on the outer message that summarize the file (version, date range, source application, participants, and counts).X-RSMF-Versionis required and must appear first. rsmf.zip—a single attachment on the message that holds everything else:rsmf_manifest.json—the required manifest at the root of the zip; the structured body that describes participants, conversations, and events (individual messages, along with their reactions, edits, and attachments).- Referenced files—the attachments, avatars, and platform icons named in the manifest.
From RSMF file to workspace field
RSMF data reaches a mappable Relativity field in three stages:
- Conversion or collection writes the file. Each converter, such as Microsoft Teams, Slack, Cellebrite/UFDR, or Google Chat, populates the RSMF headers and manifest. A converter sets only the fields that apply to its source, so field coverage varies by source. See Source coverage.
- Processing discovery extracts the headers. Relativity reads each
X-RSMF-<Name>header and produces an extracted‑metadata entry namedRsmf/<Name>. Recognized headers are given typed, friendly fields (for example,X-RSMF-EventCountbecomes the message‑count field andX-RSMF-BeginDatebecomes a date field). A header that Relativity does not specifically recognize is still captured asRsmf/<Name>. - Field mapping surfaces the data. Discovered RSMF fields appear in the Field Catalog under names such as RSMF Application, RSMF Message Count, RSMF Participants, and RSMF Version. You map these to workspace fields the same way you map any processing field. An extracted value that you do not map to a field is still available through the Other Metadata field. See Known issues and limitations.
- You will not see RSMF fields in the Field Catalog until you discover them. RSMF fields
are not pre-defined processing fields; they are generated when you process RSMF data, and are then
available for mapping, including custom
X-RSMF-*headers, which are discovered asRsmf/<Name>. - Up to three names can refer to the same piece of data: the RSMF header
(
X-RSMF-Application), the extracted-metadata key (Rsmf/Application), and the discovered field name shown in the Field Catalog (RSMF Application). The following tables list the header and the discovered field name.
Manifest contents
The manifest body is what the Short Message
Viewer renders, and it drives how a conversation is displayed. At its root the
manifest requires
version, participants, conversations, and events, plus an
optional eventcollectionid. The main objects are:
| Object | Fields | Purpose |
|---|---|---|
| Attachment | id(required), display, size |
A file referenced from an event; id matches a filename in
rsmf.zip.
|
| Conversation | id(required), platform(required),
participants(required), display, type,
custodian, icon, custom |
A time-bound set of events on one platform. type is direct (fixed
participants) or channel (participants may enter and leave). |
| Edit | participant(required), timestamp, previous,
new |
A change made to an event's body. |
| Event | type(required), id, conversation,
participant, timestamp, body,
parent,
deleted, importance, direction,
reactions,
attachments, edits, read_receipts,
custom |
A single item in a conversation, usually a message. |
| Participant | id(required), display, email,
account_id, avatar, custom |
A person in a conversation. account_id holds a phone number or platform handle
where one is available. At least one participant is required. |
| Reaction | value(required), count, participants |
An emoji or reaction applied to an event. |
| Read receipt | participant(required), timestamp, action |
Delivery or read status for an event (delivered or read). |
The RSMF 2.0 event type values are message,
disclaimer, join, leave, history, and unknown.
A source event type that has no direct RSMF equivalent (for example, a Microsoft Teams
Media_CallRecording)
is written as an unknown event and flagged as a placeholder. See Known issues and limitations.
RSMF header fields
The following X-RSMF-* headers summarize an RSMF file and become searchable metadata during processing. RSMF fields are not pre-defined in the processing Field Catalog. They are discovered from the headers when you process RSMF data, then become available for mapping. The names below are the discovered field names as documented on the Mapping processing fields page. The exact set you see depends on which headers are present in your data.
| RSMF header | Discovered field name | Description and format | Notes and limitations |
|---|---|---|---|
X-RSMF-Application
|
RSMF Application | Identifies the source application. Typical values: Teams; Slack;
Cellebrite - <platform> (for example,
Cellebrite - WhatsApp,
Cellebrite - SMS/MMS); and the Google Chat application name.
|
Best single indicator of the source app, but it does not reliably distinguish every underlying platform. See Identifying the original data source. |
X-RSMF-AttachmentCount
|
RSMF Attachment Count (key Rsmf/AttachmentCount) |
Total number of attachments across all events (whole number). | |
X-RSMF-BeginDate
|
RSMF Begin Date (key Rsmf/BeginDate) |
ISO 8601 time stamp of the earliest event in the file. | Used as a fallback Sent Date. Not available as an inventory date-range filter. See Known issues and limitations. |
X-RSMF-Custodian
|
RSMF Custodian | Intended to identify the custodian the data was collected from. | Recognized when present (for example, in externally built RSMF files) but not written by the Microsoft Teams, Slack, Cellebrite/UFDR, or Google Chat converters, so it is typically empty for RSMF that Relativity generates. Use the processing set's custodian assignment instead. |
X-RSMF-DuplicatedEventCount
|
(discovered as Rsmf/DuplicatedMessageCount)
|
Count of events identified as duplicates during conversion. | Cellebrite/UFDR only. Note the extracted key is Rsmf/DuplicatedMessageCount,
not
…EventCount.
|
X-RSMF-EndDate
|
RSMF End Date (key Rsmf/EndDate) |
ISO 8601 time stamp of the latest event in the file. | Used as a fallback Last Modified date. Same inventory date-range filter limitation as Begin Date. |
X-RSMF-EventCollectionID
|
RSMF Event Collection Id | A shared ID that keeps multiple RSMF files from one conversation grouped together for
sorting. Also
present as the manifest root property eventcollectionid. |
Used when a single conversation is split across more than one RSMF file. |
X-RSMF-EventCount
|
RSMF Message Count (key Rsmf/MessageCount) |
Number of message events in the file (whole number). | |
X-RSMF-Generator
|
RSMF Generator | Identifies the tool that authored the RSMF file. | Most relevant for externally built RSMF files; may be empty for some Relativity converters. |
X-RSMF-HasPlaceholders
|
(discovered as Rsmf/HasPlaceholders)
|
Present with the value true when the file contains placeholder events
created for unsupported event types. Each placeholder event also carries a custom
is_placeholder = "true" value.
|
Produced by the Microsoft Teams converter only. See Known issues and limitations. Not produced by Slack, Cellebrite/UFDR, or Google Chat. |
X-RSMF-MissingAttachmentCount
|
(discovered as Rsmf/MissingAttachmentCount)
|
Count of attachments that events reference but that are not present in
rsmf.zip.
|
Written by the Slack,Cellebrite/UFDR, and Google Chat converters. |
X-RSMF-Participants
|
RSMF Participants (key Rsmf/Participants) |
The participants in the conversation. Stored as a single comma-separated string in the manifest. | Discovered as Multiple Choice, so it displays semicolon-delimited rather than with the manifest's commas. This is expected, not data loss. Map as Long Text for best performance. |
X-RSMF-Version(required)
|
RSMF Version | The RSMF specification version the file conforms to (for example, 2.0.0). |
Always present; required for a valid RSMF file. |
Custom X-RSMF-<Name> |
(discovered as Rsmf/<Name>) → Other Metadata |
Any custom header added in the X-RSMF-* namespace (for example,
X-RSMF-Chat-ID, X-RSMF-Room-ID,
X-RSMF-Conversation-Type).
|
Captured as extracted metadata. If you do not map it to a field, its value appears in the
Other Metadata field. A custom header not in the
X-RSMF-* namespace is retained only inside the raw
Email/MessageHeader
field. See Known issues and limitations.
|
All RSMF fields are discovered from headers, and not predefined in the Field Catalog. The named fields above (RSMF Version, RSMF Application, and so on) are the fields documented on the Mapping processing
fields page. Other X-RSMF-* headers are discovered as Rsmf/<Name> and
surface
through the Other Metadata field if you do not map them.
Source coverage
Different converters populate different optional fields. Use this matrix to compare what to expect in RSMF output across data sources.
| Field | Microsoft Teams | Slack | Cellebrite / UFDR | Google Chat |
|---|---|---|---|---|
X-RSMF-Application
|
✓
( Teams)
|
✓
( Slack)
|
✓
( Cellebrite - <platform>)
|
✓
( Google Chat)
|
X-RSMF-BeginDate / EndDate |
✓
|
✓
|
✓
|
✓
|
X-RSMF-Custodian
|
— | — | — | — |
X-RSMF-DuplicatedEventCount, X-RSMF-Chat-ID |
— | — |
✓
|
— |
X-RSMF-EventCollectionID
|
✓
|
✓
|
✓
|
✓
|
X-RSMF-HasPlaceholders
|
✓
|
— | — | — |
X-RSMF-MissingAttachmentCount
|
— |
✓
|
✓
|
✓
|
X-RSMF-Participants
|
✓
|
✓
|
✓
|
✓
|
X-RSMF-Room-ID, X-RSMF-Conversation-Type |
— | — | — |
✓
|
Legend: ✓ = populated by this source's converter, — = not populated
- Cellebrite/UFDR carries many mobile platforms—WhatsApp, SMS/MMS, Telegram, and
others. The platform name appears in
X-RSMF-ApplicationasCellebrite - <platform>; SMS and MMS are grouped asSMS/MMS, and unrecognized platforms asUnknown. This is the primary way Cellebrite/UFDR output distinguishes, for example, WhatsApp from SMS. X-RSMF-Custodianand participantaccount_idare part of the RSMF specification and may be present in externally built RSMF files, but none of the current Relativity converters write them.
Identifying the original data source
RSMF does not include a dedicated field that identifies the original source type of a converted
document, for example, distinguishing WhatsApp from SMS, or a chat export from a plain text file.
X-RSMF-Application is the closest indicator, but it reflects the converting application rather than
a guaranteed, normalized source-type value.
If source-type identification matters for your matter, use one or more of these approaches:
- Processing profile—each profile is configured for a specific data source, so the source type is inferable from which profile produced a given RSMF document.
- Custodian and folder structure—if data from different sources is separated into distinct processing sets, the workspace folder location or custodian assignment can serve as a source indicator.
- File-naming conventions—some collection tools include source identifiers in the extraction filenames, which carry through to RSMF output.
If source-type identification is a requirement, document the source-to-profile mapping before processing begins. It is difficult to reconstruct reliably afterward.
Known issues and limitations
The following known issues affect RSMF field mapping:
- Participants field appear with semicolons after loading into Relativity.
In the RSMF manifest,X-RSMF-Participantsis a single comma-separated string. Relativity discovers the field as Multiple Choice (a multi-value field) and renders it using its multi-value delimiter (a semicolon). The delimiter you see therefore differs from the manifest's comma. This is expected field-type behavior, not a conversion error, and the participant values themselves are unchanged. The field is RSMF Participants (extracted keyRsmf/Participants). There is no separateM-EDS-Participantsfield. To maximize performance, map RSMF Participants as Long Text. - Custom
X-RSMF-*header values appear in Other Metadata when they are not mapped.
Any custom header in theX-RSMF-*namespace is extracted asRsmf/<Name>. If you have not mapped that field, its value is surfaced through the Other Metadata field, where names and values are delimited by semicolons. To capture a custom header in its own dedicated field, add it to your field mapping before processing. A custom header that is not in theX-RSMF-*namespace is retained only inside the rawEmail/MessageHeaderfield and does not become its own extracted field. - Begin Date and End Date cannot be used to filter by date range in
inventory.
X-RSMF-BeginDateandX-RSMF-EndDatepopulate the RSMF Begin Date and RSMF End Date fields and act as fallback Sent Date / Last Modified values, but they are not available as an inventory date-range filter. To narrow an RSMF population by date, filter after publish using the mapped date fields. - Placeholders are created for unsupported Microsoft Teams event types.
When the Teams converter encounters an event type that has no direct RSMF equivalent, it writes the event with theunknownRSMF type and marks it as a placeholder, so the item is not silently dropped. Known unsupported Microsoft Teams event types includeMedia_CallRecording,Media_Card,Media_CallTranscript,RoleUpdate,TopicUpdate, andSpaceTopicUpdated. Any other unrecognized event type is handled the same way. When a file contains at least one placeholder, the converter setsX-RSMF-HasPlaceholders = true, and each placeholder event carries a customis_placeholder = "true"value. This mechanism applies to the Microsoft Teams converter only. Slack, Cellebrite/UFDR, and Google Chat do not create placeholders. - The Short Message Viewer displays only what is present in the manifest.
The viewer cannot infer data that a converter or external builder did not include. If reactions, edits, or read receipts are missing from the manifest, they do not appear in the viewer and cannot be populated retroactively after ingestion. Similarly, attachment rendering depends on exact, case-sensitive filename matching between the manifest andrsmf.zip.
Resources
The following pages provide related information: