WotNot Help Center
Create a ticketBook a demoProduct
  • 👋Welcome!
  • 🏁Getting Started
    • Building a chatbot
    • Testing a chatbot
    • Publishing your bot
      • Web
        • Embed chatbots on website
      • WhatsApp
        • Meta
        • 360Dialog
        • Twilio
        • GupShup
        • TechAlpha
      • Instagram
      • Facebook Messenger
      • SMS
      • Mobile app
      • API
    • Utility Tools
    • Contacts
      • Scheduling a Contact Report
      • Exporting a Contact List
      • Blocking contacts
    • Chatbot Appearance
      • Custom CSS
      • Image dimensions
      • Pop-up messages
  • ⚒️Bot builder
    • Action blocks
      • Trigger
      • Send message
      • Collect input
      • Buttons
      • Reply buttons
      • Carousel
      • Agent
      • Answer AI
      • Set AI
      • Send an email
      • List
      • Condition
      • Talk to human
      • Dynamic data
      • Javascript
      • Collect file
      • Form
      • Webhook
      • Flow
      • Jump
      • Options
      • Calendar
      • Delay
      • Codeblock
      • Slider
      • Image gallery
      • Send WhatsApp
      • Send SMS
      • Send Email
      • Send Status
      • WhatsApp flow
      • Catalogue
    • Outbound bots
      • Building One Off Campaign
      • Building Ongoing Campaign
    • Variables
    • Cloning bots
    • Requesting edit access
    • Connecting action blocks
    • Creating a loop
  • ✨AI Studio
    • Building a GPT chatbot
    • Knowledge base
    • Custom Answers
    • Functions
    • Prompts
    • AI credits
    • Refresh frequency
  • 💬Live Chat
    • Overview
    • Building a bot with live chat
    • Creating views
    • Adding labels
    • Saved replies
    • Settings
  • 🔗Integrations
    • Overview
    • HTTP request
    • Ready integrations
      • Google Calendar
      • Google Sheets
      • Google Analytics
        • Using Javascript
      • Salesforce
      • HubSpot
      • Calendly
      • Slack
      • Airtable
      • Zendesk
      • Freshdesk
      • DialogFlow
      • Zoho CRM
    • Events
    • Zapier
    • Public APIs
  • 💬WhatsApp Business API
    • Getting a WhatsApp API
      • Getting WhatsApp API (Old approach)
      • Sandbox WhatsApp API
    • Facebook Business Manager (FBM) Verification
    • Creating a WhatsApp Template
    • Cost
    • Messaging Limits, Quality Rating
    • Official Business Account (Green tick verification)
  • 📊Reporting
    • Overview
    • Chatbot Report
    • Agent Report
    • Outbound Report
    • Link analytics
    • Weekly email report
  • 🛠️Troubleshooting
    • Getting notification for leads
    • JS functions to trigger chat widget
    • Opt-out management
    • Setting up link tracking
    • How do I hard refresh my browser?
    • Cookies
    • Notifications
    • Tracking Facebook Pixel
    • Setting up SSO login
    • Inviting teammates
    • Teams
  • 🧑‍💻Support
    • Creating a ticket
    • Book a demo
    • Purchasing a subscription
    • Cancelling a subscription
    • Refund policy
    • Reset password
    • Deleting account
Powered by GitBook
On this page
  • Authorization
  • Adding a data source to a knowledge base
  • Get training status of a data source
  • Creating a conversation
  • Send agent response to a conversation
  • Closing a conversation
  • Changing assignee in a conversation
  • Update variable of a conversation
  • Set webhook URL for Events feature
  • Fetch Bots List

Was this helpful?

  1. 🔗Integrations

Public APIs

PreviousZapierNextGetting a WhatsApp API

Last updated 19 days ago

Was this helpful?

Authorization

All of WotNot's APIs use a Bearer token based authentication.

Your account token can be found at Settings > Account Settings.

Adding a data source to a knowledge base

POST /api/v1/ai/knowledge-base/<knowledge_base_id>/upload/sources

Using this API, you can add a data source to an existing knowledge base.

Headers

Name
Value

Content-Type

multipart/form-data

Authorization

Bearer <token>

Body

The API accepts files and text as multipart form data for upload. Each form field should be a unique key and contain either a file or text content.

Response

{
  "q1": [
    {
      "id": 330783,
      "type": "text",
      "name": "sample.txt",
      "status": "in-progress",
      "errors": null
    },
    {
      "id": 330784,
      "type": "text",
      "name": "sample2.txt",
      "status": "in-progress",
      "errors": null
    },
    {
      "id": 330785,
      "type": "file",
      "name": "File.pdf",
      "status": "in-progress",
      "errors": null
    }
  ],
  "d2": [
    {
      "id": 330786,
      "type": "file",
      "name": "File2.pdf",
      "status": "in-progress",
      "errors": null
    }
  ],
  "knowledge_base_id": 876,
  "ok": true
}
{
  "ok": false,
  "error": "KNOWLEDGE_BASE_NOT_FOUND",
  "message": "KnowledgeBase Not Found in DB!",
  "code": "KNOWLEDGE_BASE_NOT_FOUND",
  "status": 404
}
{
  "ok": false,
  "error": "JWT_SIGNATURE_EXCEPTION",
  "message": "Invalid JWT token",
  "status": 401
}
{
  "ok": false,
  "error": "UNAUTHORIZED_FEATURE",
  "code": "UNAUTHORIZED_FEATURE",
  "status": 401,
  "message": "Please reach out to support to use this feature"
}
{
  "ok": false,
  "error": "ACCOUNT_DETAILS_NOT_FOUND",
  "code": "ACCOUNT_DETAILS_NOT_FOUND",
  "status": 404,
  "message": "Account Details are Not Found!"
}
{
  "ok": false,
  "error": "BAD_REQUEST",
  "code": "BAD_REQUEST",
  "status": 400,
  "message": "Knowledge base does not belong to the account(876)"
}

Get training status of a data source

GET /api/v1/ai/status/sources

Using this API, you can fetch the status of one or more data sources in a knowledge base to know it its training is - in progress / completed / failed.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body

Name
Type
Description

source_ids

query params

Comma-separated list of data source IDs to be passed as query params.

Response

{
    "sources": [
        {
            "id": 330778,
            "name": "sample.txt",
            "status": "in-progress",
            "knowledge_base_id": 876
        }
    ],
    "ok": true
}
{
  "ok": false,
  "error": "JWT_SIGNATURE_EXCEPTION",
  "message": "Invalid JWT token",
  "status": 401
}
{
  "ok": false,
  "error": "UNAUTHORIZED_FEATURE",
  "code": "UNAUTHORIZED_FEATURE",
  "status": 401,
  "message": "Please reach out to support to use this feature"
}
{
  "ok": false,
  "error": "ACCOUNT_DETAILS_NOT_FOUND",
  "code": "ACCOUNT_DETAILS_NOT_FOUND",
  "status": 404,
  "message": "Account Details are Not Found!"
}

Creating a conversation

POST /v1/conversations

Using this endpoint, you can start/create a new conversation.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body

Contains the message payload. Payload differs based on channel.

{
   "channel": "WHATSAPP",
   "from": "1123123123",
   "to": {
       "phone": "11231231230",
       "name": "John Doe",
       "email": "example@domain.com"
   },
   "message": {
       "type": "template",
       "data": {
           "template": "test_template",
           "parameters": {
               "header": [
                   "John"
               ],
               "body": [
                   "Doe",
                   "Doe2"
               ],
               "buttons": {
                   "copy_code": "123456",
                   "otp": "123456",
                   "url": "any"
               }
           },
           "variables":{
               "name": "John Doe"
           }
       }
   },
   "assignee": "agent_email@domain.com"
}

{
   "channel": "SMS",
   "from": "1-123-1231230",
   "to": {
       "phone": "1-1321231320",
       "name": "John Doe",
       "email": "abc@acme.com"
   },
   "message": {
       "type": "text",
       "text": "Hii"
   },
   "assignee": "agent_email@domain.com"
}

Response

{
  "ok": true,
  "conversation": {
    "id": "12wfegrgt4t",
    "message_id": "sdvgret4353b",
    "created_at": "",
    "assignee": {
      "id": 123,
      "to": "agent_email@domain.com"
    }
  },
  "contact": {
    "id": "11111111",
    "name": "John Doe",
    "phone": "1234567890",
    "email": "example@domain.com"
  }
}
{
  "ok": false,
  "error": "CHANNEL_TOKEN_EXPIRED",
  "code": "CHANNEL_TOKEN_EXPIRED",
  "message": "Token used to configure the channel is expired. Please reconfigure the channel.",
  "status": 400
}

{
  "ok": false,
  "error": "CONVERSATION_CREATION_EXCEPTION",
  "code": "CONVERSATION_CREATION_EXCEPTION",
  "message": "Conversation is not created. Please try again after some time.",
  "status": 400
}

{
  "ok": false,
  "error": "CHANNEL_NOT_ENABLED",
  "code": "CHANNEL_NOT_ENABLED",
  "message": "This channel is not enabled in the account.",
  "status": 400
}

{
  "ok": false,
  "error": "CONTACT_IS_BLOCKED",
  "code": "CONTACT_IS_BLOCKED",
  "message": "Conversation cannot be created for blocked contact.",
  "status": 400
}

{
  "ok": false,
  "error": "CONTACT_IS_BLOCKED",
  "code": "CONTACT_IS_BLOCKED",
  "message": "Conversation cannot be created for blocked contact.",
  "status": 400
}

{
  "ok": false,
  "error": "CONTACT_IS_BLOCKED",
  "code": "CONTACT_IS_BLOCKED",
  "message": "Conversation cannot be created for blocked contact.",
  "status": 400
}

{
  "ok": false,
  "error": "CONVERSATION_NOT_CREATED",
  "code": "CONVERSATION_NOT_CREATED",
  "message": "Conversation is not created due to user limit validation",
  "status": 400
}
{
   "error": "JWT_SIGNATURE_EXCEPTION",
   "message": "Invalid JWT token",
   "ok": false,
   "status": 401
}

{
  "ok": false,
  "error": "PHONE_NUMBER_IS_NOT_CONFIGURED",
  "code": "PHONE_NUMBER_IS_NOT_CONFIGURED",
  "message": "’From’ phone number is not configured in the account.",
  "status": 404
}

{
  "ok": false,
  "error": "WHATSAPP_TEMPLATE_NOT_FOUND",
  "code": "WHATSAPP_TEMPLATE_NOT_FOUND",
  "message": "WhatsApp template is not available in the account.",
  "status": 404
}

{
  "ok": false,
  "error": "TEMPLATE_NOT_APPROVED",
  "code": "TEMPLATE_NOT_APPROVED",
  "message": "Oops, template is not approved",
  "status": 404
}

Send agent response to a conversation

POST /api/v1/conversation/<conversation_id>/messages

For every response sent by the agent on the third-party system, this API is to be invoked so it can relay this response to the user.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body

{
  "message": {
    "data": {
      "body": "Hi"
    },
    "type": "text"
  },
  "user": {
    "by": "agent_email@domain.com"
  }
}

{
  "message": {
    "file": {
      "path": "https://framerusercontent.com/images/L2xfXiiCkddPZOjvWCGTusENwb4.png",
      "size": 1,
      "type": "image/png",
      "name": "L2xfXiiCkddPZOjvWCGTusENwb4.png"
    },
    "type": "file"
  },
  "user": {
    "by": "agent_email@domain.com"
  }
}

{
  "message": {
    "file": {
      "path": "https://file-examples.com/storage/fe32d8b189680228b9ad370/2017/11/file_example_WAV_1MG.wav",
      "size": 1,
      "type": "audio/wav",
      "name": "file_example_WAV_1MG.wav"
    },
    "type": "voice"
  },
  "user": {
    "by": "agent_email@domain.com"
  }
}

{
  "message": {
    "data": {
      "template": "template_1"
    },
    "type": "template"
  },
  "user": {
    "by": "agent_email@domain.com"
  }
}

Response

{
  "ok": true,
  "message_id": "6HRBshHEcV8P103039226478taGDJQxC"
}
{
  "ok": false,
  "error": "INVALID_DATA",
  "code": "INVALID_DATA",
  "message": "Error message",
  "status": 400
}

{
  "ok": false,
  "error": "CONVERSATION_CLOSED",
  "code": "CONVERSATION_CLOSED",
  "message": "Assignee cannot be changed on closed conversation.",
  "status": 400
}

{
  "ok": false,
  "error": "CONVERSATION_ASSIGNED_TO_BOT",
  "code": "CONVERSATION_ASSIGNED_TO_BOT",
  "message": "Agent message cannot be sent on bot assigned conversation.",
  "status": 400
}

{
  "ok": false,
  "error": "CONTACT_IS_BLOCKED",
  "code": "CONTACT_IS_BLOCKED",
  "message": "Conversation cannot be created for blocked contact.",
  "status": 400
}

{
  "ok": false,
  "error": "MESSAGE_NOT_SENT",
  "code": "MESSAGE_NOT_SENT",
  "message": "Message is not sent due to user limit validation.",
  "status": 400
}
{
  "ok": false,
  "error": "JWT_SIGNATURE_EXCEPTION",
  "code": "JWT_SIGNATURE_EXCEPTION",
  "message": "Invalid JWT token",
  "status": 401
}

{
  "ok": false,
  "error": "CONVERSATION_NOT_FOUND",
  "code": "CONVERSATION_NOT_FOUND",
  "message": "Conversation is not available.",
  "status": 404
}

Closing a conversation

POST /api/v1/conversation/{conversation_id}/events

Use this endpoint to close an open conversation.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body

{
  "event": "status",
  "status": "CLOSE",
  "user": {
    "by": "agent_email@domain.com"
  }
}

Response

{
  "ok": true
}
{
  "ok": false,
  "error": "CONVERSATION_NOT_CLOSED",
  "code": "CONVERSATION_NOT_CLOSED",
  "message": "Conversation is not closed due to user limit validation.",
  "status": 400
}
{
  "ok": false,
  "error": "JWT_SIGNATURE_EXCEPTION",
  "code": "JWT_SIGNATURE_EXCEPTION",
  "message": "Invalid JWT token",
  "status": 401
}

{
  "ok": false,
  "error": "CONVERSATION_NOT_FOUND",
  "code": "CONVERSATION_NOT_FOUND",
  "message": "Conversation is not available.",
  "status": 404
}

Changing assignee in a conversation

POST /api/v1/conversation/{conversation_id}/events

Use this endpoint to change the assignee in an open conversation.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body

// Change from assignee to assignee
{
  "event": "assignee",
  "user": {
    "by": "agent_email@domain.com",
    "to": "assignee@domain.com"
  }
}

// Change from assignee to team
{
  "event": "assignee",
  "team": {
    "by": "agent_email@domain.com",
    "to": "Sales"
  }
}

Response

{
  "ok": true
}
{
  "ok": false,
  "error": "TEAM_NOT_FOUND",
  "code": "TEAM_NOT_FOUND",
  "message": "Team does not exist.",
  "status": 400
}


{
  "ok": false,
  "error": "CONVERSATION_CLOSED",
  "code": "CONVERSATION_CLOSED",
  "message": "Assignee cannot be changed on closed conversation.",
  "status": 400
}


{
  "ok": false,
  "error": "ASSIGNEE_CHANGE_EXCEPTION",
  "code": "ASSIGNEE_CHANGE_EXCEPTION",
  "message": "By and To user are same. Can not assign conversation to same user.",
  "status": 400
}


{
  "ok": false,
  "error": "ASSIGNEE_NOT_CHANGED",
  "code": "ASSIGNEE_NOT_CHANGED",
  "message": "Assignee is not changed due to user limit validationt.",
  "status": 400
}
{
  "ok": false,
  "error": "JWT_SIGNATURE_EXCEPTION",
  "code": "JWT_SIGNATURE_EXCEPTION",
  "message": "Invalid JWT token",
  "status": 401
}

{
  "ok": false,
  "error": "CONVERSATION_NOT_FOUND",
  "code": "CONVERSATION_NOT_FOUND",
  "message": "Conversation is not available.",
  "status": 404
}

Update variable of a conversation

POST /v1/accounts/{account_id}/conversations/{conversation_id}/variables

Use this endpoint to update the variables in the conversation.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body

{
  "variables": [
    {
      "name": "name",
      "type": "conversation",
      "value": "John Doe"
    },
    {
      "name": "phone",
      "type": "contact",
      "value": "9999999999"
    },
    {
      "name": "company",
      "type": "conversation",
      "value": "Example"
    },
    {
      "name": "email",
      "type": "contact",
      "value": "john.doe@gmail.com"
    }
  ]
}

Response

{
  "ok": true
}
{
    "ok": false,
    "message": {
        "variables": [
            "Shorter than minimum length 1."
        ]
    },
    "status": 400,
    "error": "BAD_REQUEST"
}
{
    "error": "UNAUTHORIZED",
    "ok": false,
    "status": 401,
    "message": "Invalid token. Provide the valid account token."
}
{
    "message": "Conversation is not found",
    "ok": false,
    "error": "CONVERSATION_NOT_FOUND",
    "code": "CONVERSATION_NOT_FOUND",
    "status": 404
}

Set webhook URL for Events feature

POST /v1/accounts/{account_id}/webhook

Use this endpoint to set webhook for receiving conversation related events from the account.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Body

{
  "webhook_url": "",
  "subscribed_events": [
    {
      "key": "conversation_create",
      "is_subscribed": true
    },
    {
      "key": "message",
      "is_subscribed": true
    },
    {
      "key": "status",
      "is_subscribed": true
    },
    {
      "key": "assignee_change",
      "is_subscribed": true
    },
    {
      "key": "sla_breached",
      "is_subscribed": true
    },
    {
      "key": "variables",
      "is_subscribed": true
    },
    {
      "key": "conversation_labels",
      "is_subscribed": true
    },
    {
      "key": "note",
      "is_subscribed": true
    }
  ],
  "is_enabled": true,
  "token": "Test"
}

Response

{
  "ok": true
}
{
    "error": "UNAUTHORIZED",
    "ok": false,
    "status": 401,
    "message": "Invalid token. Provide the valid account token."
}

Fetch Bots List

GET /v1/accounts/{account_id}/bots

Use this endpoint to fetch list of bots available in the account.

Headers

Name
Value

Content-Type

application/json

Authorization

Bearer <token>

Response

{
  "ok": true,
  "bots": [
    {
      "bot_title": "Appointment Booking",
      "channels": [
        {
          "name": "WEB"
        }
      ],
      "is_active": false,
      "bot_key": "7SgQLb4qUbp61059137828254t5QVE0H",
      "last_deployed_at": "2025-01-22 13:26:40.554000",
      "is_inactive_by_system": false,
      "priority": 1,
      "preferred_bot_language": {
        "label": "English",
        "code": "EN"
      },
      "type": "inbound",
      "outbound_type": null,
      "bot_owner": {
        "id": 14764,
        "name": "John Doe"
        "email": "john.doe@gmail.com"
      }
      "created_at": "2024-02-09 10:59:13.783000",
      "preview_key": "6H7PD4WwTmsU105913782825Zk3KCj3t",
      "bot_id": 9633
    }
  ]
}
{
    "error": "UNAUTHORIZED",
    "ok": false,
    "status": 401,
    "message": "Invalid token. Provide the valid account token."
}