W Wiretalk API
REST API v1 120 req/min

Build on Wiretalk

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

base-url.sh
$ export BASE_URL="https://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.
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

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://wiretalk.tech/api/v1

Account

GET /me

Get organization and API key context

Request
curl -X GET "https://wiretalk.tech/api/v1/me" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "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"
    }
}

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://wiretalk.tech/api/v1/conversations" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "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://wiretalk.tech/api/v1/conversations/{conversation}" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "id": 42,
    "status": "active",
    "messages": [
        {
            "id": 101,
            "body": "Hello, I need help",
            "type": "text",
            "sender_type": "visitor",
            "created_at": "2026-07-07T09:01:00+00:00",
            "attachments": []
        }
    ]
}
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://wiretalk.tech/api/v1/conversations/{conversation}/messages" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "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://wiretalk.tech/api/v1/conversations/{conversation}/messages" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 201
{
    "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://wiretalk.tech/api/v1/conversations/{conversation}/close" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "id": 42,
    "status": "closed",
    "closed_at": "2026-07-07T09:10:00+00:00"
}

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://wiretalk.tech/api/v1/visitors" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "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://wiretalk.tech/api/v1/visitors/{visitor}" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "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://wiretalk.tech/api/v1/tickets" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "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://wiretalk.tech/api/v1/tickets/{ticket}" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "id": 7,
    "ticket_number": "TKT-2026-00007",
    "subject": "Billing question",
    "status": "open",
    "comments": [
        {
            "id": 1,
            "body": "I was charged twice.",
            "is_internal": false,
            "created_at": "2026-07-07T08:00:00+00:00"
        }
    ]
}
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://wiretalk.tech/api/v1/tickets" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 201
{
    "id": 8,
    "ticket_number": "TKT-2026-00008",
    "subject": "API integration",
    "status": "open",
    "priority": "normal",
    "source": "api"
}
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://wiretalk.tech/api/v1/tickets/{ticket}/status" -H "Authorization: Bearer wt_live_YOUR_KEY" -H "Accept: application/json"
Response 200
{
    "id": 7,
    "status": "resolved"
}
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"
        }
    }
}