Get Chat History
curl --request GET \
--url https://api.jelou.ai/v1/external/messages/history/{botId} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.jelou.ai/v1/external/messages/history/{botId}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.jelou.ai/v1/external/messages/history/{botId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.jelou.ai/v1/external/messages/history/{botId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.jelou.ai/v1/external/messages/history/{botId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.jelou.ai/v1/external/messages/history/{botId}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jelou.ai/v1/external/messages/history/{botId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"pagination": {
"limit": 123,
"page": 123,
"total": 123,
"offset": 123,
"totalPages": 123
},
"_metadata": {},
"results": [
{
"recipient": {
"id": "<string>",
"names": "<string>"
},
"sender": {
"id": "<string>",
"name": "<string>",
"type": "<string>"
},
"messageId": "<string>",
"status": "<string>",
"bubble": {
"type": "<string>",
"text": "<string>",
"mediaUrl": "<string>"
},
"createdAt": "2023-11-07T05:31:56Z"
}
]
}{
"message": "<string>",
"statusMessage": "<string>",
"status": 123,
"error": {
"code": "<string>",
"key": "<string>",
"description": "<string>",
"developerMessages": {},
"clientMessages": {}
},
"validationError": {}
}{
"message": "<string>",
"statusMessage": "<string>",
"status": 123,
"error": {
"code": "<string>",
"key": "<string>",
"description": "<string>",
"developerMessages": {},
"clientMessages": {}
},
"validationError": {}
}{
"message": "<string>",
"statusMessage": "<string>",
"status": 123,
"error": {
"code": "<string>",
"key": "<string>",
"description": "<string>",
"developerMessages": {},
"clientMessages": {}
},
"validationError": {}
}Conversations
Chat history
Query the message history of a bot
GET
/
v1
/
external
/
messages
/
history
/
{botId}
Get Chat History
curl --request GET \
--url https://api.jelou.ai/v1/external/messages/history/{botId} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.jelou.ai/v1/external/messages/history/{botId}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.jelou.ai/v1/external/messages/history/{botId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.jelou.ai/v1/external/messages/history/{botId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.jelou.ai/v1/external/messages/history/{botId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.jelou.ai/v1/external/messages/history/{botId}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.jelou.ai/v1/external/messages/history/{botId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"pagination": {
"limit": 123,
"page": 123,
"total": 123,
"offset": 123,
"totalPages": 123
},
"_metadata": {},
"results": [
{
"recipient": {
"id": "<string>",
"names": "<string>"
},
"sender": {
"id": "<string>",
"name": "<string>",
"type": "<string>"
},
"messageId": "<string>",
"status": "<string>",
"bubble": {
"type": "<string>",
"text": "<string>",
"mediaUrl": "<string>"
},
"createdAt": "2023-11-07T05:31:56Z"
}
]
}{
"message": "<string>",
"statusMessage": "<string>",
"status": 123,
"error": {
"code": "<string>",
"key": "<string>",
"description": "<string>",
"developerMessages": {},
"clientMessages": {}
},
"validationError": {}
}{
"message": "<string>",
"statusMessage": "<string>",
"status": 123,
"error": {
"code": "<string>",
"key": "<string>",
"description": "<string>",
"developerMessages": {},
"clientMessages": {}
},
"validationError": {}
}{
"message": "<string>",
"statusMessage": "<string>",
"status": 123,
"error": {
"code": "<string>",
"key": "<string>",
"description": "<string>",
"developerMessages": {},
"clientMessages": {}
},
"validationError": {}
}Retrieve the conversation history of a bot to audit interactions, analyze metrics, or debug flows. This endpoint returns sent and received messages with support for pagination and time filters.
Endpoint
GET https://api.jelou.ai/v1/external/messages/history/{botId}
Path Parameters
| Field | Location | Type | Required | Description |
|---|---|---|---|---|
| botId | Path | string | Yes | Unique identifier of the bot whose history you want to query. |
Query Parameters
| Field | Location | Type | Required | Default value | Description |
|---|---|---|---|---|---|
| limit | Query | integer | No | 10 | Number of messages to request. Maximum: 50. |
| page | Query | integer | No | 1 | Page number. |
| startAt | Query | date | No | - | Start date of the range to query. ISO 8601 format. |
| endAt | Query | date | No | - | End date of the range to query. ISO 8601 format. |
| clientId | Query | string | No | - | Filters the history by a specific clientId associated with your integrations. |
| messageId | Query | string | No | - | Returns the conversation that contains the message with this identifier. |
If you omit optional fields, the API will apply default values to deliver the first page with the most recent messages.
Request Examples
Basic query
curl --request GET \
--url 'https://api.jelou.ai/v1/external/messages/history/BOT_ID?limit=10&page=1' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}'
With date filter
curl --request GET \
--url 'https://api.jelou.ai/v1/external/messages/history/BOT_ID?limit=20&page=1&startAt=2025-01-01T00:00:00.000Z&endAt=2025-01-31T23:59:59.000Z' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}'
With client filter
curl --request GET \
--url 'https://api.jelou.ai/v1/external/messages/history/BOT_ID?limit=10&page=1&clientId=CLIENT_ID' \
--header 'Authorization: Basic {{Base64EncodedUsername:Password}}'
Responses
200 - Successful response
200 - Successful response
{
"pagination": {
"limit": 10,
"page": 1,
"total": 1,
"offset": 0,
"totalPages": 1
},
"_metadata": {},
"results": [
{
"recipient": {
"id": "RECIPIENT_ID",
"names": "Example Customer"
},
"sender": {
"id": "BOT_ID",
"name": "My Bot",
"type": "WhatsApp"
},
"by": "bot",
"messageId": "msg-12345-67890-4a38-abcde-fghij",
"status": "DELIVERED_USER",
"bubble": {
"type": "TEXT",
"text": "Hello, welcome to Jelou"
},
"createdAt": "2025-01-15T10:30:00.000Z"
}
]
}
401 - Unauthorized
401 - Unauthorized
{
"message": "Authentication failed"
}
404 - Not Found
404 - Not Found
{
"message": ["The Bot could not be found at the moment."],
"statusMessage": "failed",
"status": 0,
"error": {
"code": "E1019",
"key": "BOT_NOT_FOUND",
"description": "Error to be thrown when trying to get a Bot.",
"developerMessages": {
"es": "El botId no se encuentra en la base de datos o ha sido eliminado.",
"en": "The botId is not found in the database or has been deleted."
},
"clientMessages": {
"es": "El Bot no se pudo encontrar por el momento.",
"en": "The Bot could not be found at the moment."
}
}
}
422 - Unprocessable Entity
422 - Unprocessable Entity
{
"message": ["The values entered are not correct."],
"statusMessage": "failed",
"status": 0,
"error": {
"code": "E0422",
"key": "VALIDATOR_ERROR",
"description": "Error to be thrown when cannot process request because of incoming values",
"developerMessages": {
"es": "Los valores del request no son correctos para ser procesados.",
"en": "The request values are not correct for processing."
},
"clientMessages": {
"es": "Los valores ingresados no son correctos.",
"en": "The values entered are not correct."
}
},
"validationError": {
"startAt": [
{
"es": "el campo startAt debe ser una fecha",
"en": "the startAt field must be a Date"
}
]
}
}
500 - Internal Server Error
500 - Internal Server Error
{
"message": ["We are having trouble processing your request. Please try again later."],
"statusMessage": "failed",
"status": 0,
"error": {
"code": "E0000",
"key": "UNKNOWN_ERROR",
"description": "Error to be thrown when it couldn't be determined the reason of failure",
"developerMessages": {
"es": "Error inesperado ocurrido, revisar logs.",
"en": "Unexpected error occurred, check logs."
},
"clientMessages": {
"es": "Estamos teniendo problemas procesando la solicitud. Por favor intenta más tarde.",
"en": "We are having trouble processing your request. Please try again later."
}
}
}
Response Detail
pagination object
| Field | Type | Description |
|---|---|---|
| limit | integer | Number of records per page. |
| page | integer | Current page. |
| total | integer | Total records. |
| offset | integer | Offset from the beginning. |
| totalPages | integer | Total available pages. |
results object
| Field | Type | Description |
|---|---|---|
| recipient | object | Recipient information (id, names). |
| sender | object | Sender information (id, name, type). |
| by | string | Indicates who sent the message: bot or user. |
| messageId | string | Unique message identifier. |
| status | string | Message status: DELIVERED_USER, DELIVERED_CHANNEL, READ, etc. |
| bubble | object | Message content (type, text, mediaUrl, etc.). |
| createdAt | date | Message creation date in ISO 8601 format. |
Limits and restrictions
Important limits:
- limit: Maximum allowed value is
50 - page: Must be a positive integer
- startAt/endAt: Must be in ISO 8601 format (e.g.:
2025-01-15T10:30:00.000Z)
Authorizations
Basic authentication using Base64 encoded clientId:clientSecret
Path Parameters
Query Parameters
Required range:
x <= 50Was this page helpful?
⌘I