Documentation

    Documentation

    Documentation

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. /
    2. /Email AI-CRM API

    Updated Jun 10, 20263 min listen

    1. /
    2. /Email AI-CRM API

    Updated Jun 10, 20263 min listen

    1. /
    2. /Email AI-CRM API

    Updated Jun 10, 20263 min listen

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Architecture
    Data Model
    Real Time
    Discovery Mutation Sync
    Security
    Backend Services
    k8s-postgres-fcm Mode
    Firebase Integration
    Features
    Authentication
    Email AI-CRM
    Entities
    Opportunities
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Tunnel Protocol
    Wallet & Credit System
    Multi-Vendor Store
    Referral Codes (Refcodes)
    Affiliate & Referral Enablement
    Payments Overview
    PaymentConductor
    SubscriptionConductor
    VideoConductor
    News Module - Digital Newspaper Experience
    Member Blogs
    Public Profile Pages
    Username Reservation System
    Scientific Editor
    Locale System
    Security & Compliance
    NFT Marketplace
    Token Staking System
    Performance Optimization Patterns
    Mobile Experience
    Wallet
    Wallet Security Tips
    API
    Authentication
    Email AI-CRM API
    Entities
    Opportunities
    Messaging API
    Notifications API
    Wallet API
    Store API
    Admin API
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Branding
    Themes
    Web3
    Token launch jurisdictions
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Development
    Local Setup
    Code Structure
    Documentation components
    Community tooling
    Ring MCP Server
    Generative Images (ImageConductor)
    Autonomous Newsroom (Grok)
    OSS vs enterprise
    Whitelabel Navigation
    Best Practices
    Workflow
    Code Style
    Performance
    Testing
    Deployment
    Debugging
    Contributing
    MCP
    ring-image-create
    ring-video-create
    Examples
    Quick Start
    White Label
    Real World
    Integrations
    Ethereum wallets (Wagmi v3)

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    Docs
    API
    Docs
    API
    Docs
    API

    Email AI-CRM API

    Admin access

    All /api/admin/email/* routes require an authenticated platform admin session (admin or superadmin role).

    Cron / webhook

    /api/cron/* and /api/webhooks/email/inbound use CRON_SECRET or WEBHOOK_EMAIL_SECRET — not user sessions.

    Admin — threads

    GET /api/admin/email/threads

    List conversation threads.

    QueryTypeDescription
    statusstringFilter: new, ongoing, waiting, resolved, or omit for all

    Response: { threads: EmailThreadRecord[] }

    PATCH /api/admin/email/threads

    Update thread status.

    Body: { "id": "<threadId>", "status": "resolved" }

    GET /api/admin/email/threads/[id]

    Thread detail with messages, drafts, and open tasks.

    Response: { thread, messages, drafts, tasks }


    Admin — drafts

    GET /api/admin/email/drafts

    Pending drafts (status: pending), newest first.

    POST /api/admin/email/drafts/[id]/approve

    Approve draft for sending. Uses session user id as reviewer.

    POST /api/admin/email/drafts/[id]/reject

    Body: { "reason": "optional string" }

    POST /api/admin/email/drafts/[id]/send

    Send approved draft via SMTP.

    Body (optional): { "toEmail": "...", "subject": "..." } — defaults from thread.

    Response: { "success": true, "messageId": "<smtp-message-id>" }

    Persists outbound row in email_messages and updates thread status to waiting.


    Admin — contacts

    GET /api/admin/email/contacts

    QueryDescription
    email, name, company, typeSearch filters

    POST /api/admin/email/contacts

    Body: { "email": "required", "name?", "company?", "type?" }


    Admin — tasks

    GET /api/admin/email/tasks

    QueryDescription
    statusopen, in_progress, overdue, completed, etc.

    POST /api/admin/email/tasks

    Body: { "threadId", "title", "taskType", ... } — see TaskCreateInput in task-service.ts.

    POST /api/admin/email/tasks/[id]/complete

    Body: { "completionNotes?": "string" }


    Admin — analytics

    GET /api/admin/email/analytics

    QueryValues
    range7d (default), 30d, 90d

    Response: intent/sentiment distributions, costStats from email_api_usage, dailyStats, draft/task summaries.


    Cron — email processor

    POST or GET /api/cron/email-processor

    Auth: Authorization: Bearer $CRON_SECRET

    Body or query action:

    ActionBehavior
    poll (default)pollInboundBatch() — fetch UNSEEN, process, disconnect
    statusProcessor + IMAP stats
    stopStop IDLE listener
    startStart IDLE (requires EMAIL_PROCESSOR_ALLOW_HTTP_START=true)
    mark-overdue-tasksRun EmailTaskService.processOverdueTasks()

    Example:

    GET /api/cron/email-analytics

    Returns 7-day dashboard snapshot (same shape as admin analytics). Cron-auth only.


    Webhook — inbound email

    POST /api/webhooks/email/inbound

    Auth: Authorization: Bearer $WEBHOOK_EMAIL_SECRET or HMAC-SHA256 hex in X-Email-Webhook-Signature over raw body.

    Body (JSON):

    Calls EmailProcessor.ingestEvent() with uid: 0 (no IMAP mark-seen).


    Related

    • Email AI-CRM feature
    • Admin API
    • Developer guide

    Email AI-CRM API

    Admin access

    All /api/admin/email/* routes require an authenticated platform admin session (admin or superadmin role).

    Cron / webhook

    /api/cron/* and /api/webhooks/email/inbound use CRON_SECRET or WEBHOOK_EMAIL_SECRET — not user sessions.

    Admin — threads

    GET /api/admin/email/threads

    List conversation threads.

    QueryTypeDescription
    statusstringFilter: new, ongoing, waiting, resolved, or omit for all

    Response: { threads: EmailThreadRecord[] }

    PATCH /api/admin/email/threads

    Update thread status.

    Body: { "id": "<threadId>", "status": "resolved" }

    GET /api/admin/email/threads/[id]

    Thread detail with messages, drafts, and open tasks.

    Response: { thread, messages, drafts, tasks }


    Admin — drafts

    GET /api/admin/email/drafts

    Pending drafts (status: pending), newest first.

    POST /api/admin/email/drafts/[id]/approve

    Approve draft for sending. Uses session user id as reviewer.

    POST /api/admin/email/drafts/[id]/reject

    Body: { "reason": "optional string" }

    POST /api/admin/email/drafts/[id]/send

    Send approved draft via SMTP.

    Body (optional): { "toEmail": "...", "subject": "..." } — defaults from thread.

    Response: { "success": true, "messageId": "<smtp-message-id>" }

    Persists outbound row in email_messages and updates thread status to waiting.


    Admin — contacts

    GET /api/admin/email/contacts

    QueryDescription
    email, name, company, typeSearch filters

    POST /api/admin/email/contacts

    Body: { "email": "required", "name?", "company?", "type?" }


    Admin — tasks

    GET /api/admin/email/tasks

    QueryDescription
    statusopen, in_progress, overdue, completed, etc.

    POST /api/admin/email/tasks

    Body: { "threadId", "title", "taskType", ... } — see TaskCreateInput in task-service.ts.

    POST /api/admin/email/tasks/[id]/complete

    Body: { "completionNotes?": "string" }


    Admin — analytics

    GET /api/admin/email/analytics

    QueryValues
    range7d (default), 30d, 90d

    Response: intent/sentiment distributions, costStats from email_api_usage, dailyStats, draft/task summaries.


    Cron — email processor

    POST or GET /api/cron/email-processor

    Auth: Authorization: Bearer $CRON_SECRET

    Body or query action:

    ActionBehavior
    poll (default)pollInboundBatch() — fetch UNSEEN, process, disconnect
    statusProcessor + IMAP stats
    stopStop IDLE listener
    startStart IDLE (requires EMAIL_PROCESSOR_ALLOW_HTTP_START=true)
    mark-overdue-tasksRun EmailTaskService.processOverdueTasks()

    Example:

    GET /api/cron/email-analytics

    Returns 7-day dashboard snapshot (same shape as admin analytics). Cron-auth only.


    Webhook — inbound email

    POST /api/webhooks/email/inbound

    Auth: Authorization: Bearer $WEBHOOK_EMAIL_SECRET or HMAC-SHA256 hex in X-Email-Webhook-Signature over raw body.

    Body (JSON):

    Calls EmailProcessor.ingestEvent() with uid: 0 (no IMAP mark-seen).


    Related

    • Email AI-CRM feature
    • Admin API
    • Developer guide

    Email AI-CRM API

    Admin access

    All /api/admin/email/* routes require an authenticated platform admin session (admin or superadmin role).

    Cron / webhook

    /api/cron/* and /api/webhooks/email/inbound use CRON_SECRET or WEBHOOK_EMAIL_SECRET — not user sessions.

    Admin — threads

    GET /api/admin/email/threads

    List conversation threads.

    QueryTypeDescription
    statusstringFilter: new, ongoing, waiting, resolved, or omit for all

    Response: { threads: EmailThreadRecord[] }

    PATCH /api/admin/email/threads

    Update thread status.

    Body: { "id": "<threadId>", "status": "resolved" }

    GET /api/admin/email/threads/[id]

    Thread detail with messages, drafts, and open tasks.

    Response: { thread, messages, drafts, tasks }


    Admin — drafts

    GET /api/admin/email/drafts

    Pending drafts (status: pending), newest first.

    POST /api/admin/email/drafts/[id]/approve

    Approve draft for sending. Uses session user id as reviewer.

    POST /api/admin/email/drafts/[id]/reject

    Body: { "reason": "optional string" }

    POST /api/admin/email/drafts/[id]/send

    Send approved draft via SMTP.

    Body (optional): { "toEmail": "...", "subject": "..." } — defaults from thread.

    Response: { "success": true, "messageId": "<smtp-message-id>" }

    Persists outbound row in email_messages and updates thread status to waiting.


    Admin — contacts

    GET /api/admin/email/contacts

    QueryDescription
    email, name, company, typeSearch filters

    POST /api/admin/email/contacts

    Body: { "email": "required", "name?", "company?", "type?" }


    Admin — tasks

    GET /api/admin/email/tasks

    QueryDescription
    statusopen, in_progress, overdue, completed, etc.

    POST /api/admin/email/tasks

    Body: { "threadId", "title", "taskType", ... } — see TaskCreateInput in task-service.ts.

    POST /api/admin/email/tasks/[id]/complete

    Body: { "completionNotes?": "string" }


    Admin — analytics

    GET /api/admin/email/analytics

    QueryValues
    range7d (default), 30d, 90d

    Response: intent/sentiment distributions, costStats from email_api_usage, dailyStats, draft/task summaries.


    Cron — email processor

    POST or GET /api/cron/email-processor

    Auth: Authorization: Bearer $CRON_SECRET

    Body or query action:

    ActionBehavior
    poll (default)pollInboundBatch() — fetch UNSEEN, process, disconnect
    statusProcessor + IMAP stats
    stopStop IDLE listener
    startStart IDLE (requires EMAIL_PROCESSOR_ALLOW_HTTP_START=true)
    mark-overdue-tasksRun EmailTaskService.processOverdueTasks()

    Example:

    GET /api/cron/email-analytics

    Returns 7-day dashboard snapshot (same shape as admin analytics). Cron-auth only.


    Webhook — inbound email

    POST /api/webhooks/email/inbound

    Auth: Authorization: Bearer $WEBHOOK_EMAIL_SECRET or HMAC-SHA256 hex in X-Email-Webhook-Signature over raw body.

    Body (JSON):

    Calls EmailProcessor.ingestEvent() with uid: 0 (no IMAP mark-seen).


    Related

    • Email AI-CRM feature
    • Admin API
    • Developer guide
    bash
    
    curl -X POST "$BASE_URL/api/cron/email-processor" \
      -H "Authorization: Bearer $CRON_SECRET" \
      -H "Content-Type: application/json" \
      -d '{"action":"poll"}'
    json
    
    {
      "messageId": "<rfc5322-message-id>",
      "from": "sender@example.com",
      "fromName": "Optional Name",
      "to": "info@example.com",
      "subject": "Subject line",
      "bodyText": "Plain text body",
      "bodyHtml": "<div>optional</div>",
      "date": "2026-06-10T12:00:00.000Z",
      "inReplyTo": "<parent-message-id>",
      "references": ["<ref1>", "<ref2>"]
    }
    bash
    
    curl -X POST "$BASE_URL/api/cron/email-processor" \
      -H "Authorization: Bearer $CRON_SECRET" \
      -H "Content-Type: application/json" \
      -d '{"action":"poll"}'
    json
    
    {
      "messageId": "<rfc5322-message-id>",
      "from": "sender@example.com",
      "fromName": "Optional Name",
      "to": "info@example.com",
      "subject": "Subject line",
      "bodyText": "Plain text body",
      "bodyHtml": "<div>optional</div>",
      "date": "2026-06-10T12:00:00.000Z",
      "inReplyTo": "<parent-message-id>",
      "references": ["<ref1>", "<ref2>"]
    }
    bash
    
    curl -X POST "$BASE_URL/api/cron/email-processor" \
      -H "Authorization: Bearer $CRON_SECRET" \
      -H "Content-Type: application/json" \
      -d '{"action":"poll"}'
    json
    
    {
      "messageId": "<rfc5322-message-id>",
      "from": "sender@example.com",
      "fromName": "Optional Name",
      "to": "info@example.com",
      "subject": "Subject line",
      "bodyText": "Plain text body",
      "bodyHtml": "<div>optional</div>",
      "date": "2026-06-10T12:00:00.000Z",
      "inReplyTo": "<parent-message-id>",
      "references": ["<ref1>", "<ref2>"]
    }