Free trial
Get your trial tenant & API key
Verify your email and we'll provision a dedicated trial environment.
Reference
What's inside your trial tenant
Everything below is wired up automatically the moment your trial finishes provisioning. It stays on this page so you can read it before you start and refer back to it any time — and it maps one-to-one onto the API. For full runnable recipes see the workflows; for cross-cutting rules see the API conventions.
Once provisioned, your tenant has
A sample Microsoft 365 environment
Exchange mailboxes and a OneDrive drive set pre-populated with a sample dataset based on the public Enron corpus. You can browse, search and collect it immediately — no Microsoft 365 of your own required to evaluate the engine.
Live Exchange shared-mailboxes (read-only)
Point the Exchange source at your own organization to browse and collect live shared mailboxes in read-only mode. Discovery and collection only ever read from Microsoft 365 — nothing in your mailboxes is modified.
A blob collection destination
A Backup location (type BLOB) targeting your tenant's own Azure Blob storage account. It carries no Microsoft credentials; its container is created on the first collection write.
Exchange & OneDrive source locations
Pre-wired Exchange Source and OneDrive Source locations, authenticated against the trial's Microsoft 365 organization (directory) id.
Two collection jobs — disabled
System-provisioned Exchange Backup (Exchange → Blob) and OneDrive Backup (OneDrive → Blob) jobs. They are created disabled so the tenant is wired end-to-end but never runs until you enable it.
A tenant-scoped API key
Sent as the X-API-KEY header on every call. It can act only on your own tenant; other tenants are masked as 404. Shown once on this page — save it.
Default sample org — explore immediately. If you leave the Microsoft 365 Organization ID blank, the seeded Exchange and OneDrive sources point at the shared trial org (the Enron sample data). Consent is already handled, so you can browse and run the seeded collection jobs right away.
Your own organization — connect with consent. If you supply your own Microsoft 365 organization (directory) id, the trial seeds the Exchange and OneDrive source locations and the two collection jobs pointed at your live environment instead of the sample org. Because those sources read real Microsoft 365 data, a Global Administrator must first approve access: after you verify your email we hand you a consent URL pinned to your org — open it (or forward it to your admin) and choose Accept to install the DataTapStream app in your tenant. The seeded jobs stay disabled until both consent is granted and you enable them, so nothing is read until you explicitly opt in. All access is read-only.
How your collections are stored
Collections land in your tenant's Azure Blob storage. One container is created per BLOB location (named with that location's id), and items are organized under content-type prefix folders. Exchange content is grouped into fragments — 24-hour windows of a single owner's items — while OneDrive files are stored one blob per file.
# A collection writes to one Azure Blob container per BLOB location — the container is named
# with the location's id. Inside, items are grouped under content-type prefix "folders":
<collection-location-id>/ # one container per BLOB ("Backup") location
├── files/<itemId> # OneDrive — one blob per file (not fragmented)
├── email/<owner>_<startUnix>-<endUnix> # Exchange mail — one blob per 24h fragment
├── calendars/<owner>_<startUnix>-<endUnix> # Exchange calendar fragments
├── tasks/<owner>_<startUnix>-<endUnix> # Exchange tasks fragments
└── notes/<owner>_<startUnix>-<endUnix> # Exchange notes fragments
# A "fragment" is a 24-hour window of one owner's items, stored as a single blob holding a
# serialized array of those items plus per-item component metadata (content hash + version).
# That is why retrieving one email needs both its ItemId and the FragmentId it lives in.Browsing locations, users & collection data
The Discovery API lets you walk the hierarchy: locations → users / shared mailboxes → items → a single downloadable message. Listing email items requires a date range, and each item comes back with the FragmentId you need to download it. Discovery pages with PageSize + Marker (capped at 100) and responses are PascalCase.
# 0 · Your key goes in the X-API-KEY header on every call. Set a couple of shell vars first:
API_KEY="<your-tenant-api-key>"
TENANT_ID="<your-tenant-id>"
BASE="https://datatap-dev-api.azurewebsites.net"
# 1 · List the locations seeded for your tenant (Exchange Source, OneDrive Source, Backup).
# Use a source location's id below as LOCATION_ID.
curl -H "X-API-KEY: $API_KEY" "$BASE/api/$TENANT_ID/locations"
# 2 · Browse users *and* shared mailboxes in that source location. Drop filter.type to list
# regular user mailboxes only. Pick a mailbox/user id from the response to use as SOURCE_ID.
curl -H "X-API-KEY: $API_KEY" \
"$BASE/api/$TENANT_ID/discovery/$LOCATION_ID/users?filter.type=USERS_AND_SHAREDMAILBOXES&PageSize=50"# 3 · List collected items under a node of that mailbox/drive (SOURCE_ID). For email you must
# pass a date range; "-" is the root node. Each MessageItem carries an ItemId *and* a FragmentId.
curl -H "X-API-KEY: $API_KEY" \
"$BASE/api/$TENANT_ID/discovery/$LOCATION_ID/source/$SOURCE_ID/items/-?types=MessageItem&fromDate=2024-01-01T00:00:00Z&toDate=2024-03-31T23:59:59Z&PageSize=50"
# 4 · Download a single message as .eml — emails need both the ItemId and its FragmentId.
curl -H "X-API-KEY: $API_KEY" -o message.eml \
"$BASE/api/$TENANT_ID/discovery/$LOCATION_ID/source/$SOURCE_ID/items/$ITEM_ID/download?dataType=email&fragmentId=$FRAGMENT_ID&format=eml"Creating an Exchange or OneDrive collection job
Your trial ships with the two collection jobs above already wired (and disabled). Enable one, or create your own by pairing a source location with the Backup destination. The full lifecycle — schedules, monitoring and restore — is covered in the workflows guide.
# The trial already seeds two BACKUP jobs (Exchange→Blob, OneDrive→Blob), created *disabled*.
# Enable a seeded job, or create your own. SOURCE_ID = the Exchange or OneDrive source location;
# DEST_ID = the "Backup" (BLOB) location — read both ids from GET /api/$TENANT_ID/locations.
curl -X POST -H "X-API-KEY: $API_KEY" -H "Content-Type: application/json" \
"$BASE/api/$TENANT_ID/jobs" -d '{
"name": "Exchange Backup",
"type": "BACKUP",
"priority": "Medium",
"schedule": { "type": "NOW" },
"sourceId": "$SOURCE_ID",
"destinationId": "$DEST_ID",
"indexFiles": false
}'
# For a OneDrive collection, send the same body with the OneDrive source location as sourceId.
# Start it and track the async task (STARTING -> RUNNING -> READY | FAILED):
curl -X POST -H "X-API-KEY: $API_KEY" "$BASE/api/$TENANT_ID/jobs/$JOB_ID/start"
curl -H "X-API-KEY: $API_KEY" "$BASE/api/$TENANT_ID/jobs/$JOB_ID/status/$TASK_ID"Indexing & full-text search are available as a paid trial. The free trial provisions collection-only resources: collection, browse, download and restore all work, but full-text indexing and the search API are not included.
Indexing requires the CollectionAndIndexing provisioning mode (Azure AI Search), which is why collection jobs run with indexFiles: false on the free trial. Upgrade to a paid trial to enable indexing and unlock the premium search API.