Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.g-tateth.com/llms.txt

Use this file to discover all available pages before exploring further.

The Zoho CRM integration allows you to connect your Zoho CRM account and import your existing data (contacts, deals, tickets, notes, and activities) into G-Tateth CRM.
All API endpoints are documented in the API Reference tab. This guide focuses on concepts, workflows, and integration examples.

Overview

With the Zoho CRM integration, you can:
  • Connect Zoho Accounts - Securely connect multiple Zoho CRM accounts via OAuth 2.0
  • Import Historical Data - Import contacts, deals, tickets, notes, and activities
  • Data Mapping - Automatic mapping of Zoho fields to G-Tateth CRM entities
  • Incremental Imports - Import data for specific date ranges
  • Progress Tracking - Monitor import progress in real-time

How It Works

Data Flow

Zoho CRM → OAuth Connection → G-Tateth API → Import Job → Your CRM
  1. Connect: Authorize G-Tateth to access your Zoho CRM account
  2. Configure: Choose what data to import (contacts, deals, tickets, etc.)
  3. Import: Data is imported asynchronously in the background
  4. Monitor: Track progress and review results

Data Mapping

Zoho Contacts → G-Tateth Customers
  • Email, name, phone, company information
  • Custom fields preserved in customFields.zoho_*
Zoho Deals → G-Tateth Conversations
  • Deal name becomes conversation subject
  • Deal stage mapped to conversation status
  • Deal amount stored in metadata
  • Notes imported as messages
Zoho Tickets → G-Tateth Conversations
  • Ticket subject becomes conversation subject
  • Ticket status and priority mapped
  • Description and notes imported as messages

Complete Integration Flow

Here’s the complete flow for integrating Zoho CRM via API:
  1. Get OAuth URLGET /api/zoho/connect
  2. Redirect user → User authorizes in Zoho
  3. OAuth callback → Integration is created automatically
  4. Get Integration IDGET /api/zoho/integrations to retrieve the _id
  5. Use Integration ID → Use _id in all subsequent API calls

Quick Start

1. Connect Your Zoho Account

You can connect Zoho CRM through: Dashboard UI:
  1. Go to Apps → Integrations
  2. Click Connect Zoho CRM
  3. Authorize access in Zoho
  4. Integration is connected automatically
API:
# Step 1: Get OAuth URL
curl -X GET https://api.g-tateth.com/api/zoho/connect \
  -H "Authorization: Bearer sk_live_your_api_key"

# Response:
# {
#   "success": true,
#   "authUrl": "https://accounts.zoho.com/oauth/v2/auth?...",
#   "state": "eyJ0ZW5hbnRJZCI6..."
# }

# Step 2: Redirect user to authUrl
# User authorizes in Zoho, then Zoho redirects to your callback URL
# The integration is automatically created

# Step 3: Get Integration ID
# After OAuth callback completes, list integrations to get the ID
curl -X GET https://api.g-tateth.com/api/zoho/integrations \
  -H "Authorization: Bearer sk_live_your_api_key"

# Response:
# {
#   "success": true,
#   "data": [
#     {
#       "_id": "507f1f77bcf86cd799439011",  // This is your integration_id
#       "accountName": "My Zoho Account",
#       "accountEmail": "account@example.com",
#       "isActive": true,
#       ...
#     }
#   ]
# }
Getting the Integration ID: After the OAuth callback completes, call GET /api/zoho/integrations to retrieve the newly created integration. Use the _id field as the integration_id in subsequent API calls.

2. Get Integration ID

After connecting, you need the integration_id to perform operations. Get it by listing all integrations:
curl -X GET https://api.g-tateth.com/api/zoho/integrations \
  -H "Authorization: Bearer sk_live_your_api_key"
Response:
{
  "success": true,
  "data": [
    {
      "_id": "507f1f77bcf86cd799439011",  // Use this as integration_id
      "accountName": "My Zoho Account",
      "accountEmail": "account@example.com",
      "isActive": true,
      "lastSyncAt": "2024-01-01T12:00:00Z",
      "syncStatus": "idle"
    }
  ]
}
Multiple Integrations: If you have multiple Zoho accounts connected, you’ll see multiple items in the array. Use the _id of the integration you want to work with.

3. Start Importing Data

Once you have the integration_id, you can import your Zoho data: Via Dashboard:
  1. Go to Settings → Integrations → Zoho
  2. Click Start Import
  3. Select what to import (contacts, deals, tickets, etc.)
  4. Optionally set a date range
  5. Click Start Import
Via API:
curl -X POST https://api.g-tateth.com/api/zoho/integrations/{integration_id}/import \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "importContacts": true,
    "importDeals": true,
    "importTickets": true,
    "importNotes": true,
    "dateRange": {
      "startDate": "2024-01-01",
      "endDate": "2025-01-01"
    }
  }'

4. Monitor Import Progress

Imports run asynchronously. Check status:
curl -X GET https://api.g-tateth.com/api/zoho/integrations/{integration_id}/import/status \
  -H "Authorization: Bearer sk_live_your_api_key"
Response includes:
  • Current status (idle, in_progress, completed, failed)
  • Progress metrics (total, processed, successful, failed)
  • Results (customers created, conversations created, messages created)
  • Any errors encountered

Import Options

What Can Be Imported

  • Contacts → Customers in G-Tateth
  • Deals → Conversations (sales pipeline)
  • Tickets → Conversations (support cases)
  • Notes → Messages in conversations
  • Activities → Call logs and tasks (optional)

Date Range Filtering

Import only data from a specific time period:
{
  "dateRange": {
    "startDate": "2024-01-01",
    "endDate": "2024-12-31"
  }
}
Use Cases:
  • Incremental Imports: Import only recent data
  • Historical Import: Import all historical data (omit dateRange)
  • Testing: Import small date range to test before full import

Selective Import

Choose what to import:
{
  "importContacts": true,    // Import contacts as customers
  "importDeals": true,       // Import deals as conversations
  "importTickets": true,     // Import tickets as conversations
  "importNotes": true,       // Import notes as messages
  "importActivities": false  // Import call logs (optional)
}

Data Mapping Details

Contacts → Customers

Zoho Fieldg-tateth FieldNotes
Emailprofile.emailPrimary identifier
First_Nameprofile.firstName
Last_Nameprofile.lastName
Phone / Mobileprofile.phone
Companyprofile.company
Titleprofile.jobTitle
Custom fieldscustomFields.zoho_*Preserved with prefix

Deals → Conversations

Zoho Fieldg-tateth FieldNotes
Deal_NamesubjectConversation title
StagestatusMapped to open/closed/pending
Amountmetadata.dealAmountStored in metadata
DescriptionInitial messageFirst message in conversation
Closing_Datemetadata.closingDate
NotesAdditional messagesEach note becomes a message

Tickets → Conversations

Zoho Fieldg-tateth FieldNotes
SubjectsubjectConversation title
StatusstatusMapped to open/closed/pending
PrioritypriorityMapped to low/medium/high/urgent
DescriptionInitial messageFirst message in conversation
NotesAdditional messagesEach note becomes a message

Workflows

Complete Integration Flow (API)

Here’s a complete example showing how to connect and use Zoho integration via API:
// Step 1: Initiate OAuth
const connectResponse = await fetch('https://api.g-tateth.com/api/zoho/connect', {
  headers: {
    'Authorization': `Bearer ${apiKey}`
  }
});

const { authUrl, state } = await connectResponse.json();

// Step 2: Redirect user to authUrl (in browser)
// window.location.href = authUrl;
// Or in server-side flow, return authUrl to client

// Step 3: After OAuth callback, get the integration ID
// Poll or wait a moment, then fetch integrations
const integrationsResponse = await fetch('https://api.g-tateth.com/api/zoho/integrations', {
  headers: {
    'Authorization': `Bearer ${apiKey}`
  }
});

const { data: integrations } = await integrationsResponse.json();

// Get the most recent integration (or filter by accountName/accountEmail)
const integration = integrations[0]; // Most recent
const integrationId = integration._id;

// Step 4: Now you can use integrationId for operations
console.log(`Integration ID: ${integrationId}`);

// Step 5: Start import
await fetch(`https://api.g-tateth.com/api/zoho/integrations/${integrationId}/import`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    importContacts: true,
    importDeals: true
  })
});
Server-Side Flow: If you’re building a server-side integration, you’ll need to:
  1. Store the state parameter when initiating OAuth
  2. Set up a webhook or polling mechanism to detect when OAuth completes
  3. Call GET /api/zoho/integrations to retrieve the new integration ID

Full Historical Import

Import all data from Zoho:
# 1. Connect Zoho (via UI or API)
# 2. Start full import (no date range)
curl -X POST https://api.g-tateth.com/api/zoho/integrations/{id}/import \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "importContacts": true,
    "importDeals": true,
    "importTickets": true,
    "importNotes": true
  }'

# 3. Poll status until complete
while true; do
  STATUS=$(curl -s -X GET https://api.g-tateth.com/api/zoho/integrations/{id}/import/status \
    -H "Authorization: Bearer sk_live_your_api_key" | jq -r '.data.status')
  
  if [ "$STATUS" = "completed" ]; then
    echo "Import completed!"
    break
  elif [ "$STATUS" = "failed" ]; then
    echo "Import failed!"
    break
  fi
  
  sleep 5
done

Incremental Import

Import only recent data:
# Import last 30 days
curl -X POST https://api.g-tateth.com/api/zoho/integrations/{id}/import \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "importContacts": true,
    "importDeals": true,
    "dateRange": {
      "startDate": "2024-12-01",
      "endDate": "2024-12-31"
    }
  }'

Testing Import

Test with a small dataset first:
# Import only last week's data
curl -X POST https://api.g-tateth.com/api/zoho/integrations/{id}/import \
  -H "Authorization: Bearer sk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "importContacts": true,
    "importDeals": false,
    "importTickets": false,
    "dateRange": {
      "startDate": "2024-12-25",
      "endDate": "2024-12-31"
    }
  }'

Managing Integrations

List All Integrations

curl -X GET https://api.g-tateth.com/api/zoho/integrations \
  -H "Authorization: Bearer sk_live_your_api_key"

Get Integration Details

curl -X GET https://api.g-tateth.com/api/zoho/integrations/{id} \
  -H "Authorization: Bearer sk_live_your_api_key"

Disconnect Integration

curl -X DELETE https://api.g-tateth.com/api/zoho/integrations/{id} \
  -H "Authorization: Bearer sk_live_your_api_key"

Best Practices

1. Test Before Full Import

Always test with a small date range first:
{
  "dateRange": {
    "startDate": "2024-12-25",
    "endDate": "2024-12-31"
  }
}

2. Monitor Progress

Poll the status endpoint every 3-5 seconds during import:
async function monitorImport(integrationId, apiKey) {
  while (true) {
    const response = await fetch(
      `https://api.g-tateth.com/api/zoho/integrations/${integrationId}/import/status`,
      {
        headers: { 'Authorization': `Bearer ${apiKey}` }
      }
    );
    
    const { data } = await response.json();
    
    console.log(`Progress: ${data.progress.processed}/${data.progress.total}`);
    
    if (data.status === 'completed' || data.status === 'failed') {
      break;
    }
    
    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

3. Handle Errors

Review the errors array in the status response:
if (data.results.errors && data.results.errors.length > 0) {
  console.error('Import errors:', data.results.errors);
  // Log or handle errors appropriately
}

4. Use Date Ranges for Large Imports

For accounts with thousands of records, use date ranges to import in batches:
// Import in monthly batches
const months = [
  { start: '2024-01-01', end: '2024-01-31' },
  { start: '2024-02-01', end: '2024-02-29' },
  // ...
];

for (const month of months) {
  await startImport(integrationId, {
    dateRange: month
  });
  
  // Wait for completion before next batch
  await waitForCompletion(integrationId);
}

5. Preserve Data Integrity

  • Don’t re-import: Re-importing the same data creates duplicates
  • Check before import: Review what will be imported
  • Backup first: Ensure you have backups before large imports

Troubleshooting

Import Stuck or Slow

  • Large datasets: Use date ranges to import in smaller batches
  • Rate limits: Zoho API has rate limits; imports may take time
  • Check status: Use the status endpoint to see current progress

Missing Data

  • Check date range: Ensure date range includes the data you want
  • Verify Zoho access: Ensure integration has proper permissions
  • Review errors: Check the errors array in status response

OAuth Issues

  • Reconnect: Disconnect and reconnect the integration
  • Check permissions: Ensure Zoho app has required scopes
  • Verify redirect URI: Ensure redirect URI matches Zoho app settings

API Reference

For complete API endpoint documentation, see the API Reference tab. Key endpoints:
  • GET /api/zoho/connect - Initiate OAuth flow
  • GET /api/zoho/integrations - List integrations
  • POST /api/zoho/integrations/:id/import - Start import
  • GET /api/zoho/integrations/:id/import/status - Get import status
  • GET /api/zoho/integrations/:id/import/history - Get import history

Support

Questions about Zoho integration?
  • Email: api-support@g-tateth.com
  • Documentation: https://docs.g-tateth.com
  • API Reference: See the API Reference tab for endpoint details