API Reference

I-integrate ang enuchat sa inyong mga sistema gamit ang Tenant API. Pamahalaan ang mga usapan, magpadala ng mga mensahe, at mag-access ng billing data nang programmatically.

Authentication

Ang lahat ng mga kahilingan sa API ay na-authenticate gamit ang isang API key na ipinadala sa X-Api-Key header.

Pagkuha ng inyong API key

  1. Pumunta sa Settings → API Keys sa inyong dashboard
  2. I-click ang Create API Key at bigyan ito ng pangalan
  3. Kopyahin ang key kaagad — ipinapakita lang ito minsan
  4. Iimbak ito nang ligtas (environment variable, secrets manager)

Paggawa ng mga request

Isama ang key sa bawat request:

curl -H "X-Api-Key: tak_your_key_here" \
     https://api.enuchat.com/api/v1/tenant-api/widgets

Ang lahat ng mga tugon ay JSON. Ang mga matagumpay na tugon ay may data field. Ang mga error ay may error field na may code at message.

Seguridad: Ang mga API key ay naka-hash (SHA-256) sa aming database. Hindi namin kailanman nag-iimbak ng raw key. Tratuhin ang inyong key tulad ng password — huwag i-commit sa code o ibahagi sa publiko.

Base URL

https://api.enuchat.com/api/v1/tenant-api

Ang lahat ng mga endpoint sa ibaba ay relative sa base URL na ito.

Mga Endpoint

GET /widgets

Ilista ang lahat ng mga widget para sa inyong account.

Response

{'{'}
  "data": [
{'{'}
      "id": "019d19c6-7e0b-...",
      "name": "Main Website Chat",
      "isActive": true,
      "aiEnabled": true,
      "translationEnabled": true,
      "primaryColor": "#2563eb",
      "position": "bottom-right"
    }
  ]
}

GET /conversations

Ilista ang mga usapan, iniutos ayon sa pinakabagong mensahe.

Query Parameters

ParameterTypePaglalarawan
statusstringI-filter ayon sa status: open, pending, closed
widgetIdstringI-filter ayon sa widget UUID
limitintegerMax na resulta (default 20, max 100)
offsetintegerLaktawan ang N na resulta

Halimbawa

curl -H "X-Api-Key: tak_..." \
     "https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"

Response

{'{'}
  "data": [
{'{'}
      "id": "019d6724-000e-...",
      "widgetId": "019d19c6-7e0b-...",
      "visitorId": "v-abc123",
      "visitorName": "John",
      "visitorEmail": "john{'@'}example.com",
      "visitorLanguage": "en",
      "status": "open",
      "assignedTo": null,
      "lastMessageAt": "2026-04-11T14:30:00+00:00",
      "startedAt": "2026-04-11T14:25:00+00:00"
    }
  ]
}

GET /conversations/{'{'}id}

Kumuha ng usapan na may lahat ng mga mensahe.

Query Parameters

ParameterTypePaglalarawan
limitintegerMax na mensahe (default 50, max 200)

Response

{'{'}
  "data": {'{'}
    "id": "019d6724-000e-...",
    "visitorLanguage": "en",
    "status": "open",
    "messages": [
{'{'}
        "id": "019d6724-1234-...",
        "role": "visitor",
        "content": "Hello, how much does it cost?",
        "contentLanguage": "en",
        "translatedContent": "Cześć, ile to kosztuje?",
        "translatedLanguage": "pl",
        "isAutoReply": false,
        "createdAt": "2026-04-11T14:25:30+00:00"
      },
{'{'}
        "id": "019d6724-5678-...",
        "role": "ai",
        "content": "Our plans start at €19/month...",
        "isAutoReply": true,
        "createdAt": "2026-04-11T14:25:32+00:00"
      }
    ]
  }
}

POST /conversations/{'{'}id}/messages

Magpadala ng mensahe sa isang usapan. Ang mensahe ay ihahatid sa bisita sa real-time sa pamamagitan ng chat widget.

Request Body

{'{'}
  "content": "Thanks for reaching out! We'll process your request.",
  "role": "system"
}
FieldTypePaglalarawan
contentstringKinakailangan. Ang mensahe text.
rolestringsystem (default) o operator

Response (201 Created)

{'{'}
  "data": {'{'}
    "id": "019d6725-abcd-...",
    "role": "system",
    "content": "Thanks for reaching out!",
    "createdAt": "2026-04-11T14:35:00+00:00"
  }
}

PATCH /conversations/{'{'}id}

I-update ang status o assignment ng isang usapan.

Request Body

{'{'}
  "status": "closed"
}
FieldTypePaglalarawan
statusstringopen, pending, o closed
assignedTostring|nullOperator UUID upang mag-assign, o null upang i-unassign

GET /billing/balance

Kumuha ng inyong kasalukuyang plano at credit balance.

Response

{'{'}
  "data": {'{'}
    "plan": "pro",
    "creditBalance": 4500000,
    "totalCreditsAdded": 10000000
  }
}

Paghawak ng Error

Ang mga error ay nagbabalik ng isang non-2xx status code na may JSON body:

{'{'}
  "error": {'{'}
    "code": "NOT_FOUND",
    "message": "Conversation not found."
  }
}
HTTP StatusKahulugan
401Invalid, expired, o nawawalang API key
400Invalid na request body o mga parameter
404Hindi natagpuan ang resource (o nabibilang sa ibang tenant)
500Server error

Mga Karaniwang Paggamit

CRM Integration

Mag-poll para sa mga bagong usapan at i-sync ang visitor data (pangalan, email, wika) sa inyong CRM. Gamitin ang conversation ID bilang external reference.

Automated Follow-ups

Pagkatapos na sarado ang usapan, magpadala ng follow-up message sa pamamagitan ng API: "Salamat sa pakikipag-chat! Mayroon pa ba kayong kailangan?"

Webhook Alternative

Hanggang sa available ang mga outgoing webhook, mag-poll sa conversations endpoint nang pana-panahon upang matukoy ang mga bagong mensahe o pagbabago ng status.

Bulk Operations

Isara ang lahat ng mga usapan na mas luma sa 7 araw, mag-assign ng mga usapan sa mga operator batay sa panlabas na lohika, o mag-export ng kasaysayan ng usapan para sa analytics.

Rate Limits

Ang API ay nagpapahintulot ng hanggang 60 requests bawat minuto bawat API key. Kung lumagpas kayo sa limitasyong ito, makakatanggap kayo ng 429 Too Many Requests response. Maghintay at muling subukan na may exponential backoff.

Handa na bang mag-integrate?

Gumawa ng inyong libreng account at bumuo ng API key sa ilang minuto.

Magsimula nang Libre