W Wiretalk API
REST API v1 120 req/min

Build on Wiretalk’s live chat & help desk API

Programmatic access to conversations, visitors, and tickets. Pair with outgoing webhooks for real-time automations.

base-url.sh
$ export BASE_URL="https://www.wiretalk.tech/api/v1"
$ export API_KEY="wt_live_..."
$ curl -s "$BASE_URL/me" \
-H "Authorization: Bearer $API_KEY"
→ 200 OK
Get started

Quick start

Create an API key from the agent dashboard, then call the API with Bearer authentication.

01

Create a key

Dashboard → Team & Organization → API keys. Copy the key immediately — it is shown once.

02

Authenticate

Send Authorization: Bearer wt_live_… or X-Wiretalk-Key on every request.

03

Call an endpoint

Start with GET /me to verify your key, then list conversations or visitors.

Security

Authentication

All requests require an organization API key.

Authorization header (recommended)

Authorization: Bearer wt_live_xxxxxxxx

X-Wiretalk-Key header

X-Wiretalk-Key: wt_live_xxxxxxxx
  • Create API keys from Team & Organization → API keys in the agent dashboard.
  • Keys are shown only once when created. Store them securely.
  • Each key has scoped permissions (abilities). Requests without the required ability return 403.
  • Optional Idempotency-Key header (max 128 chars) on POST/PATCH/PUT prevents duplicate writes for 24 hours.
  • Every response includes X-Request-Id for support and debugging.
  • Rate limit headers: X-RateLimit-Limit and X-RateLimit-Remaining (per API key, per minute).
Scopes

API key permissions

Assign only the abilities your integration needs. Missing scopes return 403.

conversations:read

Read conversations and messages

conversations:write

Send messages and close conversations

visitors:read

Read visitors

tickets:read

Read tickets

tickets:write

Create and update tickets

agents:read

Read team agents

sites:read

Read websites / widget sites

Lists

Pagination

List endpoints return paginated JSON with data, current_page, per_page, and navigation links.

?page=2&per_page=50

Maximum per_page is 100.

Reference

Errors

401

Missing or invalid API key

403

API key lacks required ability or plan feature

404

Resource not found or not in your organization

422

Validation error or missing agent_user_id for write actions

429

Rate limit exceeded

REST

Endpoints

All paths are relative to https://www.wiretalk.tech/api/v1

Account

GET /me

Get organization and API key context

Request
curl -X GET "https://www.wiretalk.tech/api/v1/me" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "organization": {
        "id": 1,
        "name": "Acme Inc",
        "plan": "pro"
    },
    "api_key": {
        "id": 3,
        "name": "CRM integration",
        "key_prefix": "wt_live_abcd1234",
        "abilities": [
            "conversations:read",
            "visitors:read"
        ],
        "last_used_at": "2026-07-07T10:00:00+00:00"
    },
    "api": {
        "version": "v1",
        "base_url": "https://app.example.com/api/v1",
        "docs_url": "https://app.example.com/docs/api",
        "openapi_url": "https://app.example.com/docs/api/openapi.json",
        "postman_url": "https://app.example.com/docs/api/postman.json",
        "rate_limit_per_minute": 120,
        "supports_idempotency": true
    }
}

Conversations

GET /conversations conversations:read

List visitor conversations for your organization

Query parameters

status string

Filter by status: waiting, active, closed, missed

site_id integer

Filter by website ID

page integer

Page number (default 1)

per_page integer

Results per page (max 100, default 50)

Request
curl -X GET "https://www.wiretalk.tech/api/v1/conversations" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": [
        {
            "id": 42,
            "site_id": 1,
            "visitor_id": 9,
            "status": "active",
            "type": "visitor",
            "locale": "en",
            "assigned_agent_id": 2,
            "started_at": "2026-07-07T09:00:00+00:00",
            "visitor": {
                "id": 9,
                "name": "Jane",
                "email": "jane@example.com"
            }
        }
    ],
    "current_page": 1,
    "per_page": 50
}
GET /conversations/{conversation} conversations:read

Get a conversation with all messages

Request
curl -X GET "https://www.wiretalk.tech/api/v1/conversations/{conversation}" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": {
        "id": 42,
        "messages": [
            {
                "id": 101,
                "body": "Hello, I need help",
                "type": "text",
                "sender_type": "visitor",
                "created_at": "2026-07-07T09:01:00+00:00",
                "attachments": []
            }
        ],
        "status": "active"
    }
}
GET /conversations/{conversation}/messages conversations:read

List messages in a conversation (paginated, newest first)

Query parameters

page integer

Page number

per_page integer

Results per page (max 100)

Request
curl -X GET "https://www.wiretalk.tech/api/v1/conversations/{conversation}/messages" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": [
        {
            "id": 101,
            "body": "Hello",
            "sender_type": "visitor"
        }
    ]
}
POST /conversations/{conversation}/messages conversations:write

Send an agent reply to a visitor conversation

Request body

body string required

Message text (max 5000 chars)

agent_user_id integer

Agent user ID in your organization. Defaults to the user who created the API key.

Request
curl -X POST "https://www.wiretalk.tech/api/v1/conversations/{conversation}/messages" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 201
{
    "status": true,
    "message": "Success",
    "code": "201",
    "datetime": "2026-09-08T12:00:00+00:00",
    "id": 102,
    "body": "Thanks for reaching out — we can help with that.",
    "type": "text",
    "sender_type": "agent",
    "sender_id": 2,
    "created_at": "2026-07-07T09:05:00+00:00",
    "attachments": []
}
POST /conversations/{conversation}/close conversations:write

Close a visitor conversation

Request body

agent_user_id integer

Agent user ID performing the close action

Request
curl -X POST "https://www.wiretalk.tech/api/v1/conversations/{conversation}/close" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": {
        "id": 42,
        "closed_at": "2026-07-07T09:10:00+00:00",
        "status": "closed"
    }
}

Visitors

GET /visitors visitors:read

List visitors across your websites

Query parameters

search string

Search name, email, or visitor UID

site_id integer

Filter by website ID

page integer

Page number

per_page integer

Results per page (max 100)

Request
curl -X GET "https://www.wiretalk.tech/api/v1/visitors" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": [
        {
            "id": 9,
            "visitor_uid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
            "site_id": 1,
            "name": "Jane Doe",
            "email": "jane@example.com",
            "country": "IN",
            "language": "en",
            "last_seen_at": "2026-07-07T09:00:00+00:00"
        }
    ]
}
GET /visitors/{visitor} visitors:read

Get visitor profile and activity counts

Request
curl -X GET "https://www.wiretalk.tech/api/v1/visitors/{visitor}" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "id": 9,
    "name": "Jane Doe",
    "email": "jane@example.com",
    "conversations_count": 3,
    "tickets_count": 1
}

Tickets

GET /tickets tickets:read

List support tickets

Query parameters

status string

open, pending, in_progress, resolved, closed

priority string

low, normal, high, urgent

page integer

Page number

per_page integer

Results per page (max 100)

Request
curl -X GET "https://www.wiretalk.tech/api/v1/tickets" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": [
        {
            "id": 7,
            "ticket_number": "TKT-2026-00007",
            "subject": "Billing question",
            "status": "open",
            "priority": "normal",
            "source": "widget"
        }
    ]
}
GET /tickets/{ticket} tickets:read

Get ticket details with comments

Request
curl -X GET "https://www.wiretalk.tech/api/v1/tickets/{ticket}" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": {
        "id": 7,
        "ticket_number": "TKT-2026-00007",
        "subject": "Billing question",
        "comments": [
            {
                "id": 1,
                "body": "I was charged twice.",
                "is_internal": false,
                "created_at": "2026-07-07T08:00:00+00:00"
            }
        ],
        "status": "open"
    }
}
POST /tickets tickets:write

Create a new ticket (requires ticketing on your plan)

Request body

subject string required

Ticket subject

description string required

Initial ticket message

priority string

low, normal, high, urgent (default normal)

site_id integer

Website ID (defaults to first site)

visitor_id integer

Link to an existing visitor

customer_name string

Customer name if no visitor

customer_email string

Customer email if no visitor

Request
curl -X POST "https://www.wiretalk.tech/api/v1/tickets" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 201
{
    "status": true,
    "message": "Success",
    "code": "201",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": {
        "id": 8,
        "ticket_number": "TKT-2026-00008",
        "subject": "API integration",
        "priority": "normal",
        "source": "api",
        "status": "open"
    }
}
PATCH /tickets/{ticket}/status tickets:write

Update ticket status

Request body

status string required

open, pending, in_progress, resolved, closed

agent_user_id integer

Agent performing the update

Request
curl -X PATCH "https://www.wiretalk.tech/api/v1/tickets/{ticket}/status" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": {
        "id": 7,
        "status": "resolved"
    }
}

Agents

GET /agents agents:read

List team agents in your organization

Query parameters

role string

Filter by role: owner, admin, agent

page integer

Page number

per_page integer

Results per page (max 100)

Request
curl -X GET "https://www.wiretalk.tech/api/v1/agents" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": [
        {
            "id": 2,
            "name": "Alex Agent",
            "email": "alex@example.com",
            "role": "agent",
            "status": "online"
        }
    ]
}
GET /agents/{agent} agents:read

Get a single agent profile

Request
curl -X GET "https://www.wiretalk.tech/api/v1/agents/{agent}" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": {
        "id": 2,
        "name": "Alex Agent",
        "email": "alex@example.com",
        "role": "agent",
        "last_seen_at": "2026-07-07T09:30:00+00:00",
        "status": "online"
    }
}

Sites

GET /sites sites:read

List websites (widget sites) in your organization

Query parameters

is_active boolean

Filter by active status

page integer

Page number

per_page integer

Results per page (max 100)

Request
curl -X GET "https://www.wiretalk.tech/api/v1/sites" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": [
        {
            "id": 1,
            "name": "Marketing site",
            "domain": "example.com",
            "is_active": true
        }
    ]
}
GET /sites/{site} sites:read

Get a single website

Request
curl -X GET "https://www.wiretalk.tech/api/v1/sites/{site}" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "id": 1,
    "name": "Marketing site",
    "domain": "example.com",
    "is_active": true,
    "timezone": "Asia/Kolkata",
    "content_import": {
        "status": "completed",
        "progress": 100,
        "progress_label": "Import complete",
        "summary": {
            "pages": 24,
            "kb_articles": 18,
            "bot_replies": 12
        }
    }
}
Integrations

Visitor trusted login (server)

Server-to-server auto login for the chat widget visitor session: your backend calls this with the visitor email after the widget has initialized (you already have widget_key and visitor_uid). Skips OTP and in-widget prompts. Requires visitor account login and data lookup configured on the site. Authenticate with Per-organization secret — header X-Wiretalk-Visitor-Login-Secret: wt_vlogin_… (or Authorization: Bearer). Generate in agent settings (owner/admin). Never embed in the widget or mobile app.. Base URL: https://www.wiretalk.tech/api

Trusted login

POST /visitor-account-login/trusted

Log in a visitor by email using the organization trusted secret

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID from widget init

email string required

Email matched against parent resolver lookup columns

Request
curl -X POST "https://www.wiretalk.tech/api/visitor-account-login/trusted" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","email":"jane@example.com"}'
Response 200
{
    "status": true,
    "message": "You are logged in successfully.",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "success": true,
    "reply_body": "Welcome back.",
    "visitor_profile": {
        "email": "jane@example.com",
        "account_login": {
            "logged_in": true,
            "identifier": "jane@example.com",
            "verified_at": "2026-09-06T08:00:00+00:00"
        }
    }
}

Agent — manage secret

GET /visitor-trusted-login

Trusted login status (enabled, prefix, endpoint URL)

Request
curl -X GET "https://www.wiretalk.tech/api/agent/visitor-trusted-login" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "trusted_login": {
        "enabled": true,
        "secret_configured": true,
        "secret_prefix": "wt_vlogin_ab",
        "header": "X-Wiretalk-Visitor-Login-Secret",
        "endpoint": "https://www.wiretalk.tech/api/visitor-account-login/trusted"
    }
}
POST /visitor-trusted-login/secret

Generate or rotate trusted login secret (shown once)

Request
curl -X POST "https://www.wiretalk.tech/api/agent/visitor-trusted-login/secret" -H "Accept: application/json"
Response 201
{
    "status": true,
    "message": "Copy this secret now. It will not be shown again.",
    "code": "201",
    "datetime": "2026-09-08T12:00:00+00:00",
    "plain_text_secret": "wt_vlogin_abcdefghijklmnopqrstuvwxyz0123456789",
    "trusted_login": {
        "enabled": true,
        "secret_configured": true
    }
}
PATCH /visitor-trusted-login

Enable or disable trusted login (secret must exist to enable)

Request body

enabled boolean required

Turn trusted API login on or off

Request
curl -X PATCH "https://www.wiretalk.tech/api/agent/visitor-trusted-login" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"enabled":"…"}'
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "trusted_login": {
        "enabled": false,
        "secret_configured": true
    }
}

Setup guide: Appointment booking docs

Chat widget

Widget session & profile

Bootstraps the embed and optionally pre-fills visitor identity for the pre-chat form. Pass name, email, and phone on init when your site already knows who is browsing (logged-in portal users, CRM context, etc.). Authenticate with Widget key + visitor UID from session bootstrap (no public API key). Base URL: https://www.wiretalk.tech/api/widget

Session bootstrap

POST /init

Initialize widget session and load config

Request body

widget_key string required

Site widget key

visitor_uid string

Existing visitor UUID to resume a session

locale string

Widget language code (e.g. en, hi)

url string

Current page URL for domain checks and tracking

page_title string

Current page title

visitor_name string

Known visitor name — pre-fills pre-chat and visitor profile

visitor_email string

Known visitor email

visitor_phone string

Known visitor phone or mobile number

visitor_mobile string

Alias for visitor_phone

mobile string

Alias for visitor_phone

platform string

Mobile platform: android, ios, react-native, flutter, capacitor, cordova

app_id string

Mobile app bundle ID — must match app:… in Allowed Domains when platform is set

app_version string

App version string for visitor analytics

app_build string

App build number for visitor analytics

Request
curl -X POST "https://www.wiretalk.tech/api/widget/init" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","locale":"…","url":"https://example.com/support","page_title":"…","visitor_name":"Jane Doe","visitor_email":"jane@example.com","visitor_phone":"9876543210","visitor_mobile":"…","mobile":"…","platform":"…","app_id":"…","app_version":"…","app_build":"…"}'
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "visitor_uid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "visitor_id": 9,
    "session_token": "sess_abc123",
    "conversation_id": 42,
    "widget_config": {
        "pre_chat_form": {
            "enabled": true,
            "delay_minutes": 10,
            "fields": [
                {
                    "key": "name",
                    "type": "text",
                    "label": "Name",
                    "required": true,
                    "builtin": true
                }
            ]
        },
        "visitor_account_login": {
            "enabled": true,
            "menu_label": "Account login",
            "logout_label": "Log out"
        },
        "filter_record": {
            "enabled": true,
            "button_label": "Search your data",
            "filters": [
                {
                    "key": "txn",
                    "label": "Transaction ID",
                    "type": "text"
                },
                {
                    "key": "date",
                    "label": "Date range",
                    "type": "date_range"
                }
            ],
            "empty_reply": "No records found.",
            "login_required_reply": "Please log in to search your data."
        }
    },
    "visitor_profile": {
        "name": "Jane Doe",
        "email": "jane@example.com",
        "phone": "9876543210",
        "profile_complete": true,
        "pre_chat_submitted": false,
        "account_login": {
            "logged_in": false,
            "identifier": null,
            "verified_at": null
        }
    }
}
POST /profile

Submit pre-chat form fields for the current visitor

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID from init response

name string

Built-in pre-chat field when enabled

email string

Built-in pre-chat field when enabled

phone string

Built-in pre-chat field when enabled

custom_fields object

Custom pre-chat field values keyed by field key

Request
curl -X POST "https://www.wiretalk.tech/api/widget/profile" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","name":"Jane Doe","email":"jane@example.com","phone":"9876543210","custom_fields":"…"}'
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "visitor_profile": {
        "name": "Jane Doe",
        "email": "jane@example.com",
        "phone": "9876543210",
        "profile_complete": true,
        "pre_chat_submitted": true
    }
}

Setup guide: Appointment booking docs

Chat widget

Widget data lookup & account login

Authenticate visitors against your parent account table and let them search scoped records (transactions, status, dates) from configured tables. Requires Data lookup enabled in Widget Settings. Authenticate with Widget key + visitor UID from session bootstrap (no public API key). Base URL: https://www.wiretalk.tech/api/widget

Account login

POST /account-login

Log in a visitor with email or mobile identifier

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID from init response

identifier string required

Email or mobile matched against parent resolver lookup columns

Request
curl -X POST "https://www.wiretalk.tech/api/widget/account-login" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","identifier":"…"}'
Response 200
{
    "status": true,
    "message": "You are logged in successfully.",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "success": true,
    "otp_required": false,
    "reply_body": "Welcome back, Jane.",
    "follow_up_replies": [
        {
            "type": "button",
            "label": "Export This Month",
            "emoji": "📊"
        },
        {
            "type": "filter_record",
            "label": "Search your data",
            "emoji": "🔍"
        }
    ],
    "visitor_profile": {
        "name": "Jane Doe",
        "email": "jane@example.com",
        "account_login": {
            "logged_in": true,
            "identifier": "jane@example.com",
            "verified_at": "2026-09-06T08:00:00+00:00"
        }
    }
}
POST /account-login/verify-otp

Verify email OTP when login requires OTP confirmation

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID

otp string required

One-time code sent to visitor email

Request
curl -X POST "https://www.wiretalk.tech/api/widget/account-login/verify-otp" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","otp":"…"}'
Response 200
{
    "status": true,
    "message": "Login verified.",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "success": true,
    "reply_body": "You are logged in successfully.",
    "follow_up_replies": [],
    "visitor_profile": {
        "account_login": {
            "logged_in": true,
            "identifier": "jane@example.com",
            "verified_at": "2026-09-06T08:01:00+00:00"
        }
    }
}
POST /account-logout

End the visitor account login session

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID

Request
curl -X POST "https://www.wiretalk.tech/api/widget/account-logout" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}'
Response 200
{
    "status": true,
    "message": "Logged out.",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "success": true,
    "visitor_profile": {
        "account_login": {
            "logged_in": false,
            "identifier": null,
            "verified_at": null
        }
    }
}

Filter record search

POST /filter-records/search

Search logged-in visitor records across configured tables

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID — must be logged in via account login

filters object

Filter values keyed by preset: txn, utr, status, mobile, date_from, date_to

Request
curl -X POST "https://www.wiretalk.tech/api/widget/filter-records/search" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","filters":"…"}'
Response 200
{
    "status": true,
    "message": "Results",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "success": true,
    "body": "<div class=\"wt-filter-record-section\"><h4 class=\"wt-filter-record-section-title\">Transactions</h4>{{WTDL_TABLE}}…{{/WTDL_TABLE}}</div>"
}

Lookup tables in chat

POST /data-lookup/paginate

Paginate rows from a lookup rule reply in the widget

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID

conversation_id integer required

Open conversation ID

rule_id string required

Lookup rule ID from the reply metadata

page integer required

Page number (1-based)

trigger_message integer

Originating message ID for audit

Request
curl -X POST "https://www.wiretalk.tech/api/widget/data-lookup/paginate" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","conversation_id":42,"rule_id":"…","page":"…","trigger_message":"…"}'
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "reply_body": "{{WTDL_TABLE}}<table class=\"wt-dl-table\">…</table>{{/WTDL_TABLE}}",
    "page": 2,
    "has_more": false
}
POST /data-lookup/row-action

Run a configured row action (e.g. open detail view)

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID

conversation_id integer required

Conversation ID

rule_id string required

Lookup rule ID

action_id string required

Row action ID from rule config

row object required

Selected row values from the table

Request
curl -X POST "https://www.wiretalk.tech/api/widget/data-lookup/row-action" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","conversation_id":42,"rule_id":"…","action_id":"…","row":"…"}'
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "reply_body": "Invoice #INV-1042 — status: paid"
}

Setup guide: Appointment booking docs

Chat widget

Widget appointments

Powers the in-chat appointment picker: list slots for a date and confirm bookings. Slots include availability status so booked times can be shown as disabled in the UI. Authenticate with Widget key + visitor UID from session bootstrap (no public API key). Base URL: https://www.wiretalk.tech/api/widget

Availability & booking

POST /appointments/availability

List bookable slots for a calendar date

Request body

widget_key string required

Site widget key

date string required

Date in YYYY-MM-DD (site timezone)

Request
curl -X POST "https://www.wiretalk.tech/api/widget/appointments/availability" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","date":"2026-08-27"}'
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "date": "2026-08-27",
    "timezone": "Asia/Kolkata",
    "slots": [
        {
            "starts_at": "2026-08-27T09:00:00+05:30",
            "ends_at": "2026-08-27T09:30:00+05:30",
            "label": "9:00 AM",
            "available": true,
            "status": "available"
        },
        {
            "starts_at": "2026-08-27T09:30:00+05:30",
            "ends_at": "2026-08-27T10:00:00+05:30",
            "label": "9:30 AM",
            "available": false,
            "status": "booked"
        }
    ]
}
POST /appointments/book

Book an appointment slot for the current visitor

Request body

widget_key string required

Site widget key

visitor_uid string required

Visitor UUID from widget session

scheduled_at string required

ISO 8601 start time of the selected slot

conversation_id integer

Link booking to an open conversation

visitor_name string

Required if visitor email is omitted

visitor_email string

Required if visitor name is omitted

visitor_phone string

Optional phone number

button_label string

Source button label for analytics

bot_template_id integer

Originating bot template ID

Request
curl -X POST "https://www.wiretalk.tech/api/widget/appointments/book" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"widget_key":"YOUR_WIDGET_KEY","visitor_uid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","scheduled_at":"2026-08-27T09:00:00+05:30","conversation_id":42,"visitor_name":"Jane Doe","visitor_email":"jane@example.com","visitor_phone":"9876543210","button_label":"…","bot_template_id":"…"}'
Response 201
{
    "status": true,
    "message": "Success",
    "code": "201",
    "datetime": "2026-09-08T12:00:00+00:00",
    "appointment": {
        "id": 12,
        "status": "confirmed",
        "scheduled_at": "2026-08-27T09:00:00+05:30",
        "ends_at": "2026-08-27T09:30:00+05:30",
        "timezone": "Asia/Kolkata",
        "formatted": "Thursday, Aug 27, 2026 at 9:00 AM",
        "visitor_name": "Jane Doe",
        "visitor_email": "jane@example.com"
    }
}

Setup guide: Appointment booking docs

Agent dashboard

Agent appointments

Manage appointment settings, list upcoming bookings, and update status from the agent workspace or custom integrations. Authenticate with Sanctum bearer token or agent session cookie. Base URL: https://www.wiretalk.tech/api/agent

Settings & records

GET /appointment-settings

Get appointment slot rules for the organization site

Request
curl -X GET "https://www.wiretalk.tech/api/agent/appointment-settings" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "settings": {
        "enabled": true,
        "duration_minutes": 30,
        "buffer_minutes": 0,
        "slot_interval_minutes": 30,
        "advance_days": 14,
        "min_notice_hours": 2
    },
    "timezone": "Asia/Kolkata"
}
PATCH /appointment-settings

Update appointment slot rules

Request body

enabled boolean

Enable or disable widget booking

duration_minutes integer

Slot length (5–240)

buffer_minutes integer

Gap between bookings (0–120)

slot_interval_minutes integer

Grid step (5–120)

advance_days integer

How far ahead visitors can book (1–90)

min_notice_hours integer

Minimum lead time (0–168)

Request
curl -X PATCH "https://www.wiretalk.tech/api/agent/appointment-settings" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"enabled":"…","duration_minutes":"…","buffer_minutes":"…","slot_interval_minutes":"…","advance_days":"…","min_notice_hours":"…"}'
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "settings": {
        "enabled": true,
        "duration_minutes": 30,
        "advance_days": 14
    },
    "timezone": "Asia/Kolkata"
}
GET /appointments

List appointments for your organization

Query parameters

status string

pending, confirmed, cancelled, completed

from string

Filter from date (YYYY-MM-DD)

to string

Filter to date (YYYY-MM-DD)

Request
curl -X GET "https://www.wiretalk.tech/api/agent/appointments" -H "Accept: application/json"
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": [
        {
            "id": 12,
            "status": "confirmed",
            "scheduled_at": "2026-08-27T09:00:00+05:30",
            "formatted": "Thursday, Aug 27, 2026 9:00 AM",
            "visitor_name": "Jane Doe",
            "visitor_email": "jane@example.com",
            "conversation_id": 42
        }
    ]
}
PATCH /appointments/{appointment}

Update appointment status or internal notes

Request body

status string required

pending, confirmed, cancelled, completed

notes string

Internal agent notes (max 2000 chars)

Request
curl -X PATCH "https://www.wiretalk.tech/api/agent/appointments/{appointment}" -H "Accept: application/json" -H "Content-Type: application/json" -d '{"status":"confirmed","notes":"…"}'
Response 200
{
    "status": true,
    "message": "Success",
    "code": "200",
    "datetime": "2026-09-08T12:00:00+00:00",
    "data": {
        "id": 12,
        "notes": "Visitor rescheduled by email",
        "status": "cancelled"
    }
}

Setup guide: Appointment booking docs

Beyond REST v1

Platform API overview

Wiretalk exposes several API surfaces. The public REST API below is for integrations with scoped API keys. Widget, agent, and join APIs use separate auth models.

Public REST API

Server-to-server integrations for conversations, visitors, and tickets. Scoped abilities per key. Documented endpoints below.

Base path
/api/v1
Authentication
Organization API key — Authorization: Bearer wt_live_… or X-Wiretalk-Key

Example routes

  • GET /api/v1/me
  • GET /api/v1/conversations
  • POST /api/v1/conversations/{id}/messages
  • GET /api/v1/tickets

Widget API

Powers the embedded chat widget: session init, messages, tickets, KB articles, media calls, visitor account login, filter record search, data lookup pagination, pre-chat profile, in-chat Book a demo appointments, and appointment booking.

Base path
/api/widget
Authentication
Widget key (site) + visitor session token from embed bootstrap

Example routes

  • POST /api/widget/init
  • POST /api/widget/profile
  • POST /api/widget/account-login
  • POST /api/widget/account-login/verify-otp
  • POST /api/visitor-account-login/trusted
  • POST /api/widget/filter-records/search
  • POST /api/widget/data-lookup/paginate
  • GET/POST /api/widget/conversations/{id}/messages
  • POST /api/widget/appointments/availability
  • POST /api/widget/appointments/book
  • GET /api/widget/kb/articles
  • POST /api/widget/tickets

Agent API

Full agent workspace: inbox, settings, omnichannel, group meetings, appointments, remote desktop, website content import, billing, and organization admin. Not exposed via public API keys.

Base path
/api/agent
Authentication
Sanctum bearer token or session cookie from agent login

Example routes

  • GET /api/agent/conversations
  • GET/POST/PATCH/DELETE /api/agent/canned-responses
  • GET /api/agent/appointments
  • PATCH /api/agent/appointment-settings
  • GET/POST /api/agent/channel-connections
  • GET/POST /api/agent/group-meetings
  • POST /api/agent/socket-token
  • GET /api/agent/sites
  • POST /api/agent/sites/{site}/import-content
  • POST /api/agent/conversations/{id}/remote-desktop/sessions
  • POST /api/remote-desktop/pair
  • GET /api/agent/visitor-trusted-login
  • POST /api/agent/visitor-trusted-login/secret

Group meeting join API

Guest join without Wiretalk accounts. Used by /m/{code} and /meet/{code} join pages.

Base path
/api/group-meetings/{meeting}
Authentication
Public join flow — signed participant tokens after host approval

Example routes

  • GET /api/group-meetings/{id}
  • POST /api/group-meetings/{id}/join-request
  • GET /api/group-meetings/{id}/participants/{id}/status
  • POST /api/group-meetings/{id}/participants/{id}/session

Omnichannel inbound webhooks

Inbound message delivery from WhatsApp, SMS, email, and Meta channels. Configure callback URLs in each provider console.

Base path
/webhooks/omnichannel
Authentication
Provider signatures (Meta, Twilio) — HMAC or platform verify token

Example routes

  • GET/POST /webhooks/omnichannel/meta/{channelConnection}
  • POST /webhooks/omnichannel/sms/{channelConnection}
  • POST /webhooks/omnichannel/email/{channelConnection}

Subscription & errors

Paid features return 403 when not on your plan. Expired subscriptions may return 402 on widget routes after the grace period. See Billing & plans.

Enterprise

Enterprise & health APIs

Audit logs, GDPR, SSO, security, billing, AI governance, queue health, and public status checks. Every JSON API response includes top-level status, message, code, and datetime (ISO 8601). checked_at mirrors datetime on health endpoints.

Enterprise agent APIs

Audit logs, GDPR privacy, SSO, security policy, billing profile, and AI governance. All JSON API responses include top-level status (boolean), message, code (HTTP status string such as 200 or 401), and datetime (ISO 8601). Errors may also include error_code for machine-readable slugs.

Base path
/api/agent
Authentication
Sanctum bearer token — organization owner or admin (varies by endpoint)

Response envelope

{ "status": true, "message": "Success", "code": "200", "datetime": "2026-09-06T14:30:00+00:00" }

Example routes

  • GET /api/agent/audit-logs
  • GET /api/agent/privacy/requests
  • GET /api/agent/privacy/retention-settings
  • GET /api/agent/sso
  • GET /api/agent/security
  • GET /api/agent/billing/profile
  • GET /api/agent/billing/usage
  • GET /api/agent/ai-governance

Enterprise super-admin APIs

Platform-wide enterprise overview, audit logs, and queue health. Health endpoints return operational status values.

Base path
/api/super-admin
Authentication
Sanctum bearer token — platform super admin

Response envelope

{ "status": "operational", "status_label": "Operational", "datetime": "2026-09-06T14:30:00+00:00", "checked_at": "2026-09-06T14:30:00+00:00" }

Example routes

  • GET /api/super-admin/enterprise
  • GET /api/super-admin/audit-logs
  • GET /api/super-admin/queue-health
  • POST /api/super-admin/queue-health/retry-failed

Platform health & status APIs

Liveness, readiness, public status page JSON, and Socket.IO health checks. All include status and datetime.

Base path
/health, /status.json, socket /health
Authentication
Public (ready probe may require HEALTH_TOKEN bearer or ?token=)

Response envelope

{ "status": true, "message": "Success", "code": "200", "datetime": "2026-09-06T14:30:00+00:00" }

Example routes

  • GET /health/live
  • GET /health/ready
  • GET /status.json
  • GET {socket_url}/health
Events

Outgoing webhooks

Outgoing webhooks push real-time events to your HTTPS endpoints. Configure from Team & Organization → Outgoing webhooks.

Delivery

  • HTTP POST with application/json
  • X-Wiretalk-Event — Event name (e.g. message.received)
  • X-Wiretalk-Delivery — Unique delivery UUID
  • X-Wiretalk-Signature — HMAC SHA-256 of raw body when a signing secret is set

Verify signature

signature = HMAC_SHA256(raw_json_body, signing_secret)
conversation.started conversation.started
message.received message.received
message.sent message.sent
chat.missed chat.missed
ticket.created ticket.created
ticket.assigned ticket.assigned
ticket.status_changed ticket.status_changed
ticket.priority_changed ticket.priority_changed
ticket.comment_added ticket.comment_added
chat.closed chat.closed
review.submitted review.submitted
Webhook payload
{
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "event": "message.received",
    "created_at": "2026-07-07T09:01:00+00:00",
    "data": {
        "conversation_id": 42,
        "site_id": 1,
        "organization_id": 1,
        "message": {
            "id": 101,
            "body": "Hello",
            "type": "text"
        }
    }
}