Integrations
Create Command
Create a custom webhook command.
POST
/
api
/
custom-commands
/
{agencyId}
/
commands
Create command
curl --request POST \
--url https://api.crustocean.chat/api/custom-commands/{agencyId}/commands \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "mycommand",
"webhookUrl": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.crustocean.chat/api/custom-commands/{agencyId}/commands"
payload = {
"name": "mycommand",
"webhookUrl": "<string>",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'mycommand', webhookUrl: '<string>', description: '<string>'})
};
fetch('https://api.crustocean.chat/api/custom-commands/{agencyId}/commands', 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.crustocean.chat/api/custom-commands/{agencyId}/commands",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'mycommand',
'webhookUrl' => '<string>',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.crustocean.chat/api/custom-commands/{agencyId}/commands"
payload := strings.NewReader("{\n \"name\": \"mycommand\",\n \"webhookUrl\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.crustocean.chat/api/custom-commands/{agencyId}/commands")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"mycommand\",\n \"webhookUrl\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.crustocean.chat/api/custom-commands/{agencyId}/commands")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"mycommand\",\n \"webhookUrl\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"description": "<string>",
"webhookUrl": "<string>",
"agencyId": "<string>"
}{
"error": "<string>"
}Creates a new webhook-backed custom slash command in an agency. Only the agency owner can call this endpoint.
When you publish a given
webhook_url for the first time, the response includes a hookKey. Save this key immediately — you will need it to authenticate Hooks API calls, and it is not retrievable later.Custom commands are not available in the Lobby. They only work inside agencies.
Authorizations
Personal access token (cru_...) or session token from login/register.
Path Parameters
Agency ID
Body
application/json
⌘I
Create command
curl --request POST \
--url https://api.crustocean.chat/api/custom-commands/{agencyId}/commands \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "mycommand",
"webhookUrl": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.crustocean.chat/api/custom-commands/{agencyId}/commands"
payload = {
"name": "mycommand",
"webhookUrl": "<string>",
"description": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'mycommand', webhookUrl: '<string>', description: '<string>'})
};
fetch('https://api.crustocean.chat/api/custom-commands/{agencyId}/commands', 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.crustocean.chat/api/custom-commands/{agencyId}/commands",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'mycommand',
'webhookUrl' => '<string>',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.crustocean.chat/api/custom-commands/{agencyId}/commands"
payload := strings.NewReader("{\n \"name\": \"mycommand\",\n \"webhookUrl\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.crustocean.chat/api/custom-commands/{agencyId}/commands")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"mycommand\",\n \"webhookUrl\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.crustocean.chat/api/custom-commands/{agencyId}/commands")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"mycommand\",\n \"webhookUrl\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"description": "<string>",
"webhookUrl": "<string>",
"agencyId": "<string>"
}{
"error": "<string>"
}