Source: https://help.enterice.com/ice/documentation/chat-api/, /email-api/, /introduction-2/ Compiled: June 2026
Coverage note: Every endpoint name/URL below is captured directly from the live site navigation — this is the complete, 100% catalog of all three API products. Endpoints marked [VERIFIED] were fetched in full and their exact request/response JSON is reproduced (paraphrased field descriptions, not copy-pasted prose). All other endpoints follow one of the verified patterns below with extremely high confidence, based on this site's rigorously consistent naming/structure convention — but exact field names for those specific endpoints have not been individually confirmed. Tell me any specific endpoint and I'll fetch it to confirm exact fields if you need that level of precision before integrating.
POST with a JSON body. A few are GET with query-string-style parameters embedded in the documented JSON example (confirmed on GetChatTranscript).Token field (JWT-like string returned by Login) — this is the API equivalent of a Bearer token, just sent in the body rather than a header.OrganizationID (note: spelled OrganisationID only on Login, OrganizationID everywhere else — inconsistent casing/spelling in the source product, worth normalizing in client code).{"Message": "Success", ...extra fields...} on success, and {"Message": "The request is invalid."} (or sometimes {"message": "Failed"}, lowercase m — another real inconsistency) on failure.Create<Resource> — insert new recordGet<Resource>List — list/searchGet<Resource>Details — single record by IDUpdate<Resource> — full updateDelete<Resource> — removeEnableDisable<Resource> — soft toggle active/inactiveMove<Resource>In/Out/Up/Down — reordering operations for hierarchical/tree items (canned response menus, etc.)Import<Resource> / Export<Resource> — bulk operationsAdd<Resource> — used interchangeably with Create for sub-objects (e.g. AddSurveyQuestion adds a question to an existing survey)Doc root: /ice/documentation/chat-api/
Organized as: Authorization → Admin → {User API, CannedResponses API, Customer API, Survey API, Campaign API, Skill API}
POST https://www.enterice.com/ICEAPI/api/Authenticate/Login
Allowed for: Admin
Request:
{
"OrganisationID": 59,
"UserName": "user@example.com",
"Password": "Password"
}
Request fields: OrganisationID (int), UserName (string), Password (string)
Success response:
{
"Message": "Success",
"Token": "<JWT>",
"OrganisationID": 59,
"OrganisationName": "FutureView Technologies",
"UserID": 738,
"UserName": "user@example.com",
"UserFirstName": "Alistair",
"UserFullName": "Alistair Samuels",
"Permission": 1,
"Offset": -360
}
Fail: {"Message": "The request is invalid."}
Note: Offset is a timezone offset in minutes (-360 = UTC-6), useful for client-side time display.
POST https://www.enterice.com/ICEAPI/api/Authenticate/Logout
Request: {"UserId": 738, "Token": "<JWT>"}
Success: [{"Message": "Success"}] (note: wrapped in an array, unlike most other endpoints)
Fail: {"Message": "The request is invalid."}
Base path: https://www.enterice.com/ICEAPI/api/ChatAdmin/<Method>
| Endpoint | Verified? | Purpose |
|---|---|---|
| CreateUser | [VERIFIED] | Create agent/supervisor/admin account |
| GetUserList | [VERIFIED] | List all users in org |
| GetUserDetails | pattern | Single user by ID |
| UpdateUser | pattern | Update user fields |
| ResetPassword | pattern | Admin-triggered password reset |
| DeleteUser | pattern | Remove user |
| ImportUsers | pattern | Bulk user import |
| AddLogoutReason / GetLogoutReasonList / GetLogoutReasonDetails / UpdateLogoutReason / DeleteLogoutReason | pattern | CRUD for the logout-reason dropdown shown to agents |
| AddIPWhiteList / GetIPWhiteList / GetWhiteListIPDetails / UpdateWhiteListIP / DeleteWhiteListIP | pattern | CRUD for IP whitelist (admin login restriction) |
CreateUser — full verified detail:
POST .../ChatAdmin/CreateUser
{
"Token": "<JWT>",
"OrganizationID": 59,
"Username": "asmith@enterice.com",
"Password": "Password",
"Organization": "ICE",
"Forename": "Andrew",
"Surname": "Smith",
"RealForename": "Andrew",
"RealSurname": "Smith",
"RoleId": 1,
"Gender": "Male",
"ChatLimit": 10,
"SkillIds": "12,56,79",
"Volume": 1.0,
"IsMultiSession": false,
"RingType": "Sound 1"
}
RoleId: 1=Admin, 2=Agent, 3=Supervisor. SkillIds is comma-separated. ChatLimit caps concurrent chats per agent.
Success: {"Message": "Success", "UserId": "654"}
GetUserList — full verified detail:
POST .../ChatAdmin/GetUserList
Request: {"Token": "<JWT>", "OrganizationID": 59}
Success:
{
"Message": "Success",
"UserList": [
{"UserId": 321, "IsEnable": 1, "UserName": "admin@admin.com", "ForeName": "admin", "SurName": "admin", "RoleId": 1, "ChatLimit": 5, "CurrentState": 0},
{"UserId": 352, "IsEnable": 1, "UserName": "Tiffany", "ForeName": "Tiffany", "SurName": "Pardue", "RoleId": 2, "ChatLimit": 3, "CurrentState": 0}
]
}
CurrentState is almost certainly the agent's live presence/availability status code.
Manages the canned-response tree (Menus = folders, Phrases = the actual reusable text snippets agents send).
| Group | Endpoints |
|---|---|
| Responses (top-level) | CreateCannedResponses, GetCannedResponsesList, GetCannedResponsesDetails, EnableDisableCannedResponses, UpdateCannedResponses, DeleteCannedResponses |
| Menu (folder) management | AddCannedMenu, GetCannedMenuDetails, UpdateCannedMenu, DeleteCannedMenu, EnableDisableCannedMenu, MoveCannedMenuIn/Out/Up/Down |
| Phrase (leaf) management | AddCannedPhrase, InsertCannedPhraseDetails, GetCannedPhraseDetails, UpdateCannedPhrase, DeleteCannedPhrase, EnableDisableCannedPhrase, MoveCannedPhraseIn/Out/Up/Down |
| Bulk | ImportCannedResponses, ExportCannedResponses |
This mirrors a typical nested-folder UI: Menus can be nested in Menus, Phrases live inside Menus, and the MoveXIn/Out/Up/Down set reorders/re-parents tree nodes — same idea as drag-and-drop reordering in the Admin → Settings → Chat → Canned Responses screen.
Base path: .../ChatAdmin/<Method>
| Endpoint | Verified? | Purpose |
|---|---|---|
| AddIPtoBlock / GetIPtoBlockList / GetIPtoBlockDetails / UpdateIPtoBlock / DeleteIPtoBlock | pattern | CRUD for blocked visitor IPs |
| GetChatHistory | pattern | List of past chats for a customer/criteria |
| GetChatInformation | pattern | Metadata for a specific chat |
| GetChatTranscript | [VERIFIED] | Download chat transcript |
| GetChatSurveyInformation | pattern | Post-chat survey answers for a chat |
| GetChatNavigationInformation | pattern | Visitor's page-navigation history during the chat |
GetChatTranscript — full verified detail (note: this one is GET, not POST):
GET https://www.enterice.com/ICEAPI/api/ChatAdmin/GetChatTranscript?Token=(Token)&ChatId=(ChatId)
Request params: Token (string), ChatId (int)
Success: {"Message": "Success", "FileName": "transcript.xls"} — the doc notes "pass actual file as output," implying the real response is a file stream/download, with this JSON being the conceptual shape.
Fail: {"message": "Failed"}
This is the one confirmed exception to the "everything is POST" rule — worth checking each Customer API retrieval endpoint individually if you're building a client, since Get* endpoints in this category may lean GET more often than the Admin CRUD endpoints do.
CreateSurvey, GetSurveyList, GetSurveyDetails, UpdateSurvey, DeleteSurvey, ActiveInactiveSurvey, AddSurveyQuestion, GetSurveyQuestionDetails, UpdateSurveyQuestion, DeleteSurveyQuestion, PublishSurvey
Two-level structure: a Survey is a container; Questions are added/managed as sub-objects (mirrors Pre-Chat/In-Chat/Exit/Offline Survey builders in Admin UI). PublishSurvey suggests a draft→published lifecycle distinct from ActiveInactiveSurvey (which is presumably a runtime on/off toggle for an already-published survey).
CreateCampaign, GetCampaignList, GetCampaignDetails, UpdateCampaign, DeleteCampaign — straightforward CRUD, no enable/disable or reordering variant. Maps to Admin → Settings → Common → Campaign.
CreateSkill, GetSkillList, GetSkillDetails, UpdateSkill, DeleteSkill, AddMembersInSkill, AddPushURL, GetPushURLList, GetPushURLDetails, UpdatePushURL, DeletePushURL
A Skill is a queue/routing group (agents are assigned to skills; chats route to skills). AddMembersInSkill attaches users to a skill. The Push URL sub-resource is the "push a URL into the visitor's browser" feature seen in the chat toolbar — scoped per-skill here, suggesting default push URLs can be configured per queue.
Doc root: /ice/documentation/email-api/
Larger surface than Chat API — adds an entire Supervisor and Agent category not present in Chat API (because email is a stateful ticket system, not a live session).
Login, Logout — same shape as Chat API (separate URL namespace: /authorization-2/ vs /authorization/, but functionally identical pattern).
CreateUser, Get User List, Get User Details, Update User, Reset Password, Delete User — smaller than Chat API's User API (17 endpoints) because Email API's User module doesn't include ImportUsers, LogoutReason CRUD, or IPWhitelist CRUD as part of this module (those concepts are likely shared/global rather than duplicated per-channel — worth confirming if you need email-side IP whitelisting, since it may live under Chat API instead).
Direct structural mirror of Chat API's CannedResponses API, renamed for email ("Letters" instead of "Responses"): Create/Get/Update/Delete/EnableDisable Canned Letters Set; Add/Get/Update/Delete/EnableDisable/Move(In/Out/Up/Down) Canned Menu; Add/Insert/Get/Update/Delete/EnableDisable/Move(In/Out/Up/Down) Canned Phrase; Import/Export.
Create/Get/Update/Delete/ActiveInactive Email Web Form, Get Control List, Add/Get/Update/Delete Email Form Control, Get Email Form Control List, Get Email Form Control Details, Publish Email Form.
Two-level structure again: a Web Form is a container, Controls are the individual fields on that form (text box, dropdown, etc.) — maps to Admin → Settings → Email → Email Web Form.
Create, Get List, Update, Get Details, Delete Email Filter — straightforward CRUD, maps to Admin → Settings → Email → Email Filtering (rules for routing/categorizing incoming email).
Get Template List, Create/Get/Update/Delete Response Template, Get Response Template List — maps to Admin → Settings → Email → Response Templates (pre-built email reply templates, distinct from Canned Letters which are shorter snippets).
Create/Get/Update/Delete/Enable-Disable Email Server, Get Email Server List — manages the actual SMTP/IMAP mail server connections ICE polls/sends through. This is the most "infrastructure-level" module in the whole API surface — relevant if you're automating server provisioning.
Create/Get/Update/Delete/Enable-Disable Service Level, Get Service Level List, Add/Get/Update/Delete SLA Hours, Get SLA Hours List — SLA policies with associated business-hours definitions. Maps to Admin → Settings → Email → Service Level.
Same shape as Chat API's equivalents, scoped to email. Skill API here is smaller (6 vs Chat's 11) — no Push URL sub-resource, since push-URL is a live-chat-specific browser interaction that doesn't apply to async email.
This is the largest single category and represents the actual day-to-day ticket-working operations (vs. Admin's configuration operations). It has no Chat API parallel because chat is live/ephemeral while email is a persistent ticket queue. Grouped by function:
Ticket assignment/routing: Assign Tickets at Login, Get Supervisor List by Org ID, Unassign Tickets at Logout, Get Ticket Count (+ Sup variant), Load Ticket Per Skill (+ Supervisor variant), Load Ticket by Status (+ Sup variant), Pick Tickets, Escalate to Operator / to Supervisor (×2 listed — likely duplicate/legacy) / to Skill
Folder/ticket lifecycle: Update for Move to Folder, Update for Spam to Folder, Delete Tickets, Update Ticket Status without Send, Download Unassigned Tickets, Empty Spam
Compose/send: Blind Mailbox, Compose Email, Compose Save as Draft, Compose Drafted Email, Send Response, Response Save as Draft, Send Drafted Response, Forward Email
Read/retrieve: Get Email Conversation, Get Email History List, Get Email Information, Get Ticket Note List, Get Contact Information
Notes/contacts/comments: Load All Ticket Comments by User ID, Load All tbl_Contacts by Org ID, Contact Insert, Contact Update, Note Insert
Canned content (agent-side): Load Reboot Node tbl_Category_Canned_Letters_Responses_Agent Console, Load Node by ParentID_Canned_Responses_Agent Console
Monitoring triggers: Load All tbl_EmailLive Monitoring Trigger, Load All tbl_Sup Email Live Monitoring Trigger
Note on naming: several of these endpoint names directly expose internal SQL table names (tbl_EmailLive, tbl_Contacts, tbl_Category_Canned_Letters_Responses_Agent) — a sign this API evolved organically alongside the database schema rather than being designed as a clean public contract. Useful context if you're reverse-engineering behavior: the endpoint name often tells you the literal backing table.
Doc root: /ice/documentation/introduction-2/
Smallest and most focused of the three — this is the reporting/analytics API, i.e. the programmatic backend for everything under Admin → Reports in the User Manual. Structure: Authenticate → Chat Data APIs (18) → Email Data APIs (7).
Single endpoint, same Token-based pattern as the other two products' Login.
Get Login Logout Details by SkillID, Get Canned Answers, Get Chat Averages, Get Chat Transcript Data, Get Call Center Data, Get Agent Performance Data, Get Prechat Survey Data, Get Operator Survey Data, Get Offline Survey Data, Get Exit Survey Data, Get In-Chat Survey Data, Get Chat Volume Summary by Account, Get Chat Volume Summary by Date, Get Campaign, Get Sub-Campaign, Get Survey Type, Get Users, External Chat Data API – Metadata
Every one of these maps directly to a report listed in User Manual → ICE Admin → Reports → Chat Reports (Canned Answers, Chat Averages, Call Center, Operator Performance, Volume Summary, Survey, etc.) — this API is how you'd build a custom BI dashboard instead of using ICE's built-in report screens.
Get Email Canned Answers, Get Email Survey, Get Ticket Volume Summary Data, Get Ticket Resolution Data, Get Ticket Resolution by Agent, Get Ticket History Data, Get Email Interval Data
Same relationship to User Manual → ICE Admin → Reports → Email Reports.
Message vs message, OrganisationID only on Login vs OrganizationID everywhere else) means defensive parsing (case-insensitive key lookup) will save you debugging time.GetChatTranscript is GET while GetUserList/CreateUser are POST. Don't assume every Get* is GET; check each one you actually integrate against, or treat POST as the safe default and only use GET where explicitly documented./authorization/, /authorization-2/, /authenticate/ paths). If your integration touches both chat and email, expect to manage two separate sessions.If you tell me which specific area you're integrating against, I'll do a full verified pass on just that slice — e.g.:
That keeps each follow-up crawl to a manageable, complete, fully-verified chunk instead of trying to boil the ocean again.