Skip to content

The Complete Guide to Migrating from Tidio to Enchant

Migrating from Tidio to Enchant? Learn the exact API sequence to map contacts, move ticket history, and handle attachments while preserving historical context

Tejas Mondeeri Tejas Mondeeri · · 6 min read
The Complete Guide to Migrating from Tidio to Enchant
TALK TO AN ENGINEER

Planning a migration?

Get a free 30-min call with our engineers. We'll review your setup and map out a custom migration plan — no obligation.

Schedule a free call
  • 1,500+ migrations completed
  • Zero downtime guaranteed
  • Transparent, fixed pricing
  • Project success responsibility
  • Post-migration support included

This guide covers the technical process of migrating data from Tidio to Enchant using both platforms' APIs. It includes entity mapping, migration sequencing, workarounds for feature gaps, and edge cases to watch for.

Pre-Migration Checklist

Before writing any migration code, confirm the following:

  • You have API access to both Tidio and Enchant
  • You've installed the API app from Enchant's help desk settings (Apps tab) and generated a bearer access token
  • You have a valid Tidio API key
  • Your Enchant users (agents) are manually created — these cannot be migrated via API
  • Your Enchant inboxes are set up to match your Tidio departments (e.g., General, Sales, Billing)
  • You've exported or queried your Tidio data to understand volume (contact count, ticket count, message count) so you can estimate migration time against the 100 credits/minute rate limit
  • You have a plan for contacts that lack an email address (Enchant customers require an email — Tidio contacts identified only by name or phone will need manual review or exclusion)

Entity & Field Mapping

The table below maps Tidio objects and fields to their Enchant equivalents. Where there's no direct match, the workaround is noted.

Tidio Entity / Field Enchant Entity / Field Notes
Contact Customer Tidio contacts identified via name, email, or phone become Enchant customers. Email is required in Enchant.
Contact custom properties (URLs, numbers, text, etc.) Customer summary field Concatenate all custom properties into the single summary field. No structured custom fields exist in Enchant.
Contact page history (last 30 days) Private note on first ticket Enchant has no dedicated page history field. Create a private note to preserve this context.
Department Inbox Must be created manually in Enchant before migration.
Operator User Must be created manually in Enchant before migration.
Conversation (chat, email, internal) Ticket (email type) All Tidio conversation types become email-type tickets in Enchant. Each ticket belongs to one inbox and one customer.
Message (reply) Message (reply) Outbound and inbound communications.
Message (internal note) Message (note) Internal team context.
Attachment Attachment Must be uploaded to Enchant first (with filename and base64-encoded data) to receive an attachment ID before linking to a message.
Labels / Tags Labels Label IDs can be set during ticket creation. Verify organization post-migration.
Automated workflows / Rules Workflows / Rules No API migration path — must be rebuilt manually in Enchant.
Merged conversations No direct equivalent. Review merged tickets in Tidio before migration and decide how to represent them (e.g., as separate tickets or combined into one).
Deleted contacts Decide whether to skip or include. Deleted contacts may lack required fields for Enchant customer creation.

Migration Sequence

The migration must follow a strict dependency order. Each step depends on the previous one, because Enchant requires parent object IDs when creating child objects.

Step 1: Migrate Contacts → Customers

Tidio contacts become Enchant customers. For each contact, map the email, name, and phone fields. Concatenate any custom properties (URLs, numbers, free text) into the Enchant summary field.

curl -X POST https://YOUR_SUBDOMAIN.enchant.com/api/v1/customers \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "customer@example.com",
    "name": "Jane Doe",
    "phone": "+15551234567",
    "summary": "plan: enterprise | signup_url: https://example.com/signup | lifetime_value: 4500"
  }'

Store the returned Enchant customer ID mapped to the original Tidio contact ID. You'll need this for ticket creation.

Warning

Tidio contacts without an email address cannot be created as Enchant customers. Flag these during your pre-migration audit and decide whether to skip them or manually assign placeholder emails.

Step 2: Upload Attachments

Enchant requires attachments to be uploaded before the messages they belong to. Each upload requires the filename and base64-encoded file data, and returns an attachment ID.

curl -X POST https://YOUR_SUBDOMAIN.enchant.com/api/v1/attachments \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "filename": "screenshot.png",
    "data": "iVBORw0KGgoAAAANSUhEUg..."
  }'

Store the returned attachment ID mapped to the original Tidio attachment reference. You'll use these IDs when creating messages in Step 4.

Step 3: Create Tickets

For each Tidio conversation, create a ticket in Enchant. Every ticket must reference a customer ID (from Step 1) and an inbox ID (from your manual setup). Regardless of the original conversation type in Tidio (chat, email, or internal), these become email-type tickets in Enchant.

You can set label IDs during ticket creation if you've mapped your Tidio tags to Enchant labels.

Warning

If a Tidio conversation references a department that wasn't mapped to an Enchant inbox, the ticket creation will fail. Verify all department-to-inbox mappings before starting this step.

Step 4: Create Messages

Populate each ticket with its messages in chronological order. This includes both replies (customer and agent communications) and notes (internal context). Reference attachment IDs from Step 2 where applicable.

For the first ticket belonging to each customer, create an additional private note containing the customer's Tidio page history (last 30 days of viewed pages). This preserves browsing context that would otherwise be lost.

Rate Limits and Batch Behavior

Enchant enforces a rate limit of 100 credits per minute across your entire account. When you exceed this limit, the API returns an HTTP 429 (Too Many Requests) response. Your migration script must handle this by pausing and waiting for the rate limit window to reset before resuming.

A rough estimate: if each API call costs 1 credit, you can create approximately 100 objects per minute. For a dataset of 10,000 contacts, 5,000 tickets, and 30,000 messages, the API calls alone would take several hours — plan accordingly and run migrations during off-peak hours.

On the Tidio side, if you use batch endpoints to export contacts, be aware that Tidio uses all-or-nothing batch validation. If a single contact in the batch is invalid, the entire batch fails. Validate your data before submitting batches, or fall back to single-record requests for problematic records.

Edge Cases and Failure Modes

  • Contacts without email: Enchant requires an email for customer creation. Tidio contacts identified only by name or phone must be handled manually or skipped.
  • Deleted or merged Tidio conversations: Decide on a strategy before migration. Merged conversations may need to be split or combined depending on how you want the history represented.
  • Conversations referencing deleted departments: If a Tidio conversation belongs to a department you didn't map to an Enchant inbox, the ticket creation will fail. Assign a fallback inbox for orphaned conversations.
  • Large attachments: Test your largest attachments early. Base64 encoding increases file size by ~33%, and large payloads may time out or be rejected.
  • Missing operator mapping: Messages attributed to a Tidio operator who doesn't have a corresponding Enchant user will need a fallback author assignment.

Post-Migration Validation Checklist

After migration completes, verify data integrity before going live:

  • Count comparison: Total customers in Enchant matches expected Tidio contact count (minus any skipped contacts without email)
  • Ticket count: Total tickets in Enchant matches total Tidio conversations migrated
  • Message count: Spot-check 10–20 tickets to verify all messages (replies and notes) are present and in correct chronological order
  • Attachments: Open several tickets with known attachments and confirm files are accessible and not corrupted
  • Customer summaries: Spot-check that custom properties were concatenated correctly into the summary field
  • Page history notes: Verify that private notes with browsing history appear on the first ticket for customers who had page history
  • Labels: Confirm labels are correctly applied to tickets
  • Inbox assignment: Verify tickets landed in the correct inboxes
  • Workflows and rules: Rebuild and test automated workflows manually in Enchant — these cannot be migrated
  • Agent permissions: Confirm all team members have correct access levels

Summary

Migrating from Tidio to Enchant follows a strict dependency chain: customers first, then attachments, then tickets, then messages. The main complications are Enchant's lack of structured custom fields (use the summary field), the absence of a page history feature (use private notes), and the 100 credits/minute rate limit (build in HTTP 429 handling and pauses).

Contacts without email addresses, conversations tied to unmapped departments, and Tidio's all-or-nothing batch validation are the most common failure points. Address them before you start the migration, not during.

Further Reading:

More from our Blog

Pylon to Missive Migration: The Technical Guide
Migration Guide/Pylon/Missive

Pylon to Missive Migration: The Technical Guide

A technical guide to migrating from Pylon to Missive covering data model mapping, API rate limits, migration approaches, edge cases, and step-by-step implementation.

Nachi Nachi · · 25 min read