API Reference - ChatbotsPlace API
Table of Contents
- API Authorization
- POST /api/public/chat (Send chat request)
- GET /api/public/chat (Retrieve chat response)
- POST /api/public/art (Generate AI image)
- POST /api/public/tts/standard (Text-to-speech with standard voice)
- POST /api/public/tts/neural (Text-to-speech with natural voice)
- POST /api/public/speech-recognition (Speech-to-text transcription)
- Chatbot versions and pricings
API Authorization
In order to use ChatbotsPlace API, you must first create an API key. Do NOT share you API key with people.
Once you have obtained an API key, you can authenticate to the APIs below using the Authorization
request header as followed:
Authorization: Bearer {API_key}
POST
/api/public/chat
(Send chat request)
Send a chat message to our chatbot. This operation is can be synchronous or asynchronous. By default, this operation is asynchronous, and you can retrieve the chatbot response using the messageId
in the response. If you set wait: true
, then this operation will be synchronous, and it will wait until the chatbot response is ready before returning.
Please note that there are different versions of our chatbot. Each has a different price and context length. Refers to the version pricing table below for more details. The cost of the API will be returned in the response as well.
Passing in the same conversationId
will allow users to continue the previous conversation. However, if the conversation length exceeds the max context length available for the selected chatbot version, the older messages in the conversation will be dropped. If you do not pass in a conversationId
, a random one will be generated for you.
Messages in a conversation will be retained on ChatbotsPlace for 90 days. Afterward, they will be automatically removed.
POST Body
name type data type description message required string The user message to send to chatbot. version required string chatbot version. Accepted values are "v3.5", "v3.5_16K", "v4.0_sm", and "v4.0" wait optional boolean If true, wait for the chat response to finish before returning. Otherwise, this will return a messageId that can be used to retrieve the chat response later using the GET /api/public/chat API. conversationId optional string The conversation ID. Leave blank to generate a random one. systemMessage optional string System message helps set the behavior of the assistant. For example, you can modify the personality of the assistant or provide specific instructions about how it should behave throughout the conversation. temperature optional number What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.
Responses
http code content-type response 200
application/json
{"messageId": "abcd-1234", "cost": 1, "conversationId": "efgh-6789"}
400
text/plain
The request is invalid. Please make sure that the POST body is correct. 401
text/plain
Invalid API key 403
text/plain
Insufficient gems
Example cURL
curl -X POST -H "Content-Type: application/json" --data @post.json https://chatbotsplace.com/api/public/chat
Example Javascript
async function run() {
const { data } = await axios.post(
`https://chatbotsplace.com/api/public/chat`,
{
version: 'v3.5',
message: 'Tell me a joke',
wait: true
},
{
headers: {
authorization: `Bearer ${apiKey}`
}
}
);
console.log(data);
}
Example Python
import requests
import json
apiKey = '<your-api-key>' # Define your apiKey
headers = {
'content-type': 'application/json',
'authorization': f'Bearer {apiKey}'
}
data_post = {
'version': 'v3.5',
'message': 'Tell me a joke',
'wait': True
}
response = requests.post('https://chatbotsplace.com/api/public/chat', headers=headers, json=data_post)
data = response.json()
print(data)
GET
/api/public/chat
(Retrieve chat response)
Retrieve the chat response. This operation is free to call.
The chatbot response may not be finished when this API returns. You may check the isFinished
boolean field in the response to figure out if the chatbot response is complete. Even if isFinished
is false, the message
field may be partially filled in, allowing you to show a partial response to the user. However, we recommend that you wait at least 1 second between each call to this API to avoid overloading our system.
If the chatbot failed to respond, isError
field will be set to true. If the failure is due to
the chatbot getting too many requests, then the tooManyRequests
field will be set to true. In most cases, ChatbotsPlace will catch the error and refund the gems spent at the beginning of the POST request. If so, isRefunded
field will be set to true.
isFinished
field will be set to true either when the chatbot's response is complete or when there is an error. Calling this API again after isFinished
is true will return the same result.
A messageId
may be used to retrieve chat response for up to 5 minutes. Afterward, this API may return an empty response.
Parameters
name type data type description messageId
required string messageId from the POST request in order to retrieve the chat repsonse.
Responses
http code content-type response 200
application/json
{ "message": "chatbot response", "isFinished": true, "isError": false, "tooManyRequests": false, "isRefunded": false }
Example cURL
curl -X GET -H "Content-Type: application/json" https://chatbotsplace.com/api/public/chat?messageId=abcd-1234
Example Javascript
async function run() {
const { data } = await axios.post(
`https://chatbotsplace.com/api/public/chat`,
{
version: 'v3.5',
message: 'Tell me a joke'
},
{
headers: {
authorization: `Bearer ${apiKey}`
}
}
);
while (true) {
const getRes = await fetch(
`https://chatbotsplace.com/api/public/chat?messageId=${data.messageId}`
);
const botMessage = await getRes.json();
if (botMessage.isFinished) {
console.log('Final message:', botMessage.message);
return;
}
console.log('Partial message:', botMessage.message);
await delay(2000);
}
}
Example Python
import requests
import json
import time
apiKey = '<your-api-key>' # Define your apiKey
headers = {
'content-type': 'application/json',
'authorization': f'Bearer {apiKey}'
}
def run():
session = requests.Session()
# Post request
url_post = 'https://chatbotsplace.com/api/public/chat'
data_post = {
'version': 'v3.5',
'message': 'Tell me a joke'
}
response = session.post(url_post, headers=headers, json=data_post)
data = response.json()
while True:
url_get = f'https://chatbotsplace.com/api/public/chat?messageId={data.get("messageId")}'
response_get = session.get(url_get, headers=headers)
bot_message = response_get.json()
# Check if it is finished
if bot_message.get('isFinished'):
print('Final message:', bot_message.get('message'))
return
print('Partial message:', bot_message.get('message'))
# Sleep for 2 seconds before next call
time.sleep(2)
run()
POST
/api/public/art
(Generate AI image)
Generate an image using AI. Each generated image costs 1 💎.
POST Body
name type data type description message required string The prompt for generating the image. version required string AI version to use. Accepted values are "sdxl" (for Stable Diffusion), "dalle" (for OpenAI's DALL·E) n optional number Number of images to generate. Default to 1. Each image costs 1 💎. width optional number The width of the image. For "sdxl", the supported dimensions are: 512x512, 768x512, 512x768, 640x512, 512x640, 896x512, 512x896. For "dalle", the supported dimensions are: 256x256, 512x512, 1024x1024. height optional number The height of the image. For "sdxl", the supported dimensions are: 512x512, 768x512, 512x768, 640x512, 512x640, 896x512, 512x896. For "dalle", the supported dimensions are: 256x256, 512x512, 1024x1024. stylePreset required string For "sdxl" only. Supported values are '3d-model', 'analog-film', 'anime', 'cinematic', 'comic-book', 'digital-art', 'enhance', 'fantasy-art', 'isometric', 'line-art', 'low-poly', 'modeling-compound', 'neon-punk', 'origami', 'photographic', 'pixel-art'.
Responses
http code content-type response 200
application/json
{ "cost": 1, "botImages": [{ "id": "v2-333c2a85-ca12-42d0-b234-8330dbc5ce34", "isNsfw": false, "prompt": "a lady", "thumbnailUrl": "https://images.chatbotsplace.com/thumbnail/v2-333c2a85-ca12-42d0-b234-8330dbc5ce34.png", "largeUrl": "https://images.chatbotsplace.com/full/v2-333c2a85-ca12-42d0-b234-8330dbc5ce34.png" }]
400
text/plain
The request is invalid. Please make sure that the POST body is correct. 401
text/plain
Invalid API key 403
text/plain
Insufficient gems
Example cURL
curl -X POST -H "Content-Type: application/json" --data @post.json https://chatbotsplace.com/api/public/art
Example Javascript
async function run() {
const { data } = await axios.post(
`https://chatbotsplace.com/api/public/art`,
{
version: 'sdxl',
message: 'a pretty girl'
},
{
headers: {
authorization: `Bearer ${apiKey}`
}
}
);
console.log(data);
}
Example Python
import requests
import json
apiKey = '<your-api-key>' # Define your apiKey
headers = {
'content-type': 'application/json',
'authorization': f'Bearer {apiKey}'
}
data_post = {
'version': 'sdxl',
'message': 'a pretty girl'
}
response = requests.post('https://chatbotsplace.com/api/public/art', headers=headers, json=data_post)
data = response.json()
print(data)
POST
/api/public/tts/standard
(Text-to-speech with standard voice)
Convert text into synthesized speech using standard voice. Standard TTS voices use concatenative synthesis. This method strings together the phonemes of recorded speech. This results in lower price at the expense of lower speech quality. For better speech quality, consider using /api/public/tts/neural API.
The cost for this API is 0.025 💎 for 100 characters (rounded up to the next 100 characters). 1 gem can produce up to 4000 characters. Currently, the maximum message length is 3000 characters. Please contact us if you need a higher limit.
Refers to the Standard TTS voices table table for a list of voices and languages available.
POST Body
name type data type description message required string The message to synthesize into speech. voiceId optional string The ID of the voice to use to synthesize this message (e.g., "aws-en-US-Joanna"). Either voiceId or the language must be specified. language optional string The language used to synthesize this message (e.g., "en-US"). Either voiceId or the language must be specified. gender optional string The gender of the voice to use for this message. Only used if language is specified.
Responses
http code content-type response 200
audio/mp3
Synthesized audio stream
400
text/plain
The request is invalid. Please make sure that the POST body is correct. 401
text/plain
Invalid API key 403
text/plain
Insufficient gems
Example cURL
curl -X POST -H "Content-Type: application/json" --data @post.json https://chatbotsplace.com/api/public/tts/standard
Example Javascript
async function run() {
const { data } = await axios.post(
`https://chatbotsplace.com/api/public/tts/standard`,
{
voiceId: 'aws-en-US-Joanna',
message: 'Hello, how can I help you today?'
},
{
responseType: 'arraybuffer',
headers: {
authorization: `Bearer ${apiKey}`
}
}
);
fs.writeFileSync(`./hello.mp3`, data, 'binary');
}
Example Python
import requests
import json
apiKey = '<your-api-key>' # Define your apiKey
headers = {
'content-type': 'application/json',
'authorization': f'Bearer {apiKey}'
}
payload = {
'voiceId': 'aws-en-US-Joanna',
'message': 'Hello, how can I help you today?'
}
url = 'https://chatbotsplace.com/api/public/tts/standard'
response = requests.post(url, headers=headers, data=json.dumps(payload))
with open('hello.mp3', 'wb') as f:
f.write(response.content)
POST
/api/public/tts/neural
(Text-to-speech with natural voice)
Convert text into synthesized speech using natural voice. Natural TTS voices produce more human-like sounding speech at the expense of higher price. It is also supported in more languages and have more voices available.
The cost for this API is 0.1 💎 for 100 characters (rounded up to the next 100 characters). 1 gem can produce up to 1000 characters. Currently, the maximum message length is 3000 characters. Please contact us if you need a higher limit.
Refers to the Natural TTS voices table table for a list of voices and languages available.
POST Body
name type data type description message required string The message to synthesize into speech. voiceId optional string The ID of the voice to use to synthesize this message (e.g., "aws-en-US-Joanna"). Either voiceId or the language must be specified. language optional string The language code used to synthesize this message (e.g., "en-US"). Either voiceId or the language must be specified. gender optional string The gender of the voice to use for this message. Only used if language is specified.
Responses
http code content-type response 200
audio/mp3
Synthesized audio stream
400
text/plain
The request is invalid. Please make sure that the POST body is correct. 401
text/plain
Invalid API key 403
text/plain
Insufficient gems
Example cURL
curl -X POST -H "Content-Type: application/json" --data @post.json https://chatbotsplace.com/api/public/tts/neural
Example Javascript
async function run() {
const { data } = await axios.post(
`https://chatbotsplace.com/api/public/tts/neural`,
{
voiceId: 'aws-en-US-Joanna',
message: 'Hello, how can I help you today?'
},
{
responseType: 'arraybuffer',
headers: {
authorization: `Bearer ${apiKey}`
}
}
);
fs.writeFileSync(`./hello.mp3`, data, 'binary');
}
Example Python
import requests
import json
apiKey = '<your-api-key>' # Define your apiKey
headers = {
'content-type': 'application/json',
'authorization': f'Bearer {apiKey}'
}
payload = {
'voiceId': 'aws-en-US-Joanna',
'message': 'Hello, how can I help you today?'
}
url = 'https://chatbotsplace.com/api/public/tts/neural'
response = requests.post(url, headers=headers, data=json.dumps(payload))
with open('hello.mp3', 'wb') as f:
f.write(response.content)
POST
/api/public/speech-recognition
(Speech-to-text transcription)
Transcribe an audio file into text. Audio file must be 25MB or less. Audio file can be one of these formats: mp3, mp4, mpeg, mpga, m4a, wav, or webm.
The cost for this API is 0.05 💎 per 10 seconds (rounded up to the nearest 10 seconds). For example, a 5-second audio file will cost 0.05 💎. A 1-minute audio file will cost 0.3 💎.
Note that unlike the other ChatbotsPlace API, the content-type
for this request must be multipart/form-data
.
POST Body
name type data type description file required string The audio file to transcribe. language optional string The language of the input audio. Supplying the input language in ISO-639-1 format will improve accuracy and latency.
Responses
http code content-type response 200
application/json
{"cost": number, "language": string, "duration": number, "text": string, "segments": array }
400
text/plain
The request is invalid. Please make sure that the POST body is correct. 401
text/plain
Invalid API key 403
text/plain
Insufficient gems
Example cURL
curl -X POST -H "Content-Type: multipart/form-data" --data @post.json https://chatbotsplace.com/api/public/speech-recognition
Example Javascript
async function run() {
const { data } = await axios.post(
`https://chatbotsplace.com/api/public/speech-recognition`,
{
file: fs.createReadStream('./hello.mp3')
},
{
headers: {
'content-type': 'multipart/form-data',
authorization: `Bearer ${apiKey}`
}
}
);
console.log(data);
}
Example Python
import requests
apiKey = '<your-api-key>' # Define your apiKey
headers = {
'authorization': f'Bearer {apiKey}'
}
with open('./hello.mp3', 'rb') as f:
files = {
'file': f,
}
response = requests.post('https://chatbotsplace.com/api/public/speech-recognition', headers=headers, files=files)
data = response.json()
print(data)
Chatbot versions and pricings
Version | Name | AI Model | Max input | Max output | Pricing (per conversation) |
---|---|---|---|---|---|
v3.5 | ChatGPT v3.5 | gpt-3.5-turbo-1106 | 3000 tokens | 1000 tokens | -0.1💎 |
v3.5_16K | ChatGPT v3.5 (16K) | gpt-3.5-turbo-1106 | 16000 tokens | 4000 tokens | -1💎 |
v4.0 | ChatGPT v4.0 | gpt-4-1106-preview | 16000 tokens | 4000 tokens | -15💎 |
claudeinstant | Anthropic Claude Instant | anthropic.claude-instant-v1 | 16000 tokens | 4000 tokens | -1💎 |
claude_v2 | Anthropic Claude V2 | anthropic.claude-v2 | 16000 tokens | 4000 tokens | -15💎 |
jurassic_2_ultra | AI21 Labs Jurassic-2 Ultra | ai21.j2-ultra-v1 | 8000 tokens | 4000 tokens | -15💎 |
bard_v1 | Google Bard | chat-bison-001 | 8000 tokens | 1000 tokens | -0.1💎 |