Create a Copilot Config
Stores the workspace JSON and returns as soon as it is stored. Building the flows, publishing them and deploying the Endpoint carry on in the background, so the returned config reads as saved but usually not yet published.
curl --request POST \
--url https://api-trial.cognigy.ai/new/v2.0/copilotConfigs \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"space": {
"columns": 123,
"rows": 123,
"gap": 123
},
"widgets": [
{
"name": "<string>",
"description": "<string>",
"runsFor": "allContacts",
"placement": {
"pinned": true,
"column": 123,
"row": 123,
"width": 123,
"height": 123
}
}
],
"projectId": "<string>",
"description": "<string>"
}
'import requests
url = "https://api-trial.cognigy.ai/new/v2.0/copilotConfigs"
payload = {
"name": "<string>",
"space": {
"columns": 123,
"rows": 123,
"gap": 123
},
"widgets": [
{
"name": "<string>",
"description": "<string>",
"runsFor": "allContacts",
"placement": {
"pinned": True,
"column": 123,
"row": 123,
"width": 123,
"height": 123
}
}
],
"projectId": "<string>",
"description": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
space: {columns: 123, rows: 123, gap: 123},
widgets: [
{
name: '<string>',
description: '<string>',
runsFor: 'allContacts',
placement: {pinned: true, column: 123, row: 123, width: 123, height: 123}
}
],
projectId: '<string>',
description: '<string>'
})
};
fetch('https://api-trial.cognigy.ai/new/v2.0/copilotConfigs', 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-trial.cognigy.ai/new/v2.0/copilotConfigs",
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' => '<string>',
'space' => [
'columns' => 123,
'rows' => 123,
'gap' => 123
],
'widgets' => [
[
'name' => '<string>',
'description' => '<string>',
'runsFor' => 'allContacts',
'placement' => [
'pinned' => true,
'column' => 123,
'row' => 123,
'width' => 123,
'height' => 123
]
]
],
'projectId' => '<string>',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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-trial.cognigy.ai/new/v2.0/copilotConfigs"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"space\": {\n \"columns\": 123,\n \"rows\": 123,\n \"gap\": 123\n },\n \"widgets\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"runsFor\": \"allContacts\",\n \"placement\": {\n \"pinned\": true,\n \"column\": 123,\n \"row\": 123,\n \"width\": 123,\n \"height\": 123\n }\n }\n ],\n \"projectId\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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-trial.cognigy.ai/new/v2.0/copilotConfigs")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"space\": {\n \"columns\": 123,\n \"rows\": 123,\n \"gap\": 123\n },\n \"widgets\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"runsFor\": \"allContacts\",\n \"placement\": {\n \"pinned\": true,\n \"column\": 123,\n \"row\": 123,\n \"width\": 123,\n \"height\": 123\n }\n }\n ],\n \"projectId\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-trial.cognigy.ai/new/v2.0/copilotConfigs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"space\": {\n \"columns\": 123,\n \"rows\": 123,\n \"gap\": 123\n },\n \"widgets\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"runsFor\": \"allContacts\",\n \"placement\": {\n \"pinned\": true,\n \"column\": 123,\n \"row\": 123,\n \"width\": 123,\n \"height\": 123\n }\n }\n ],\n \"projectId\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"_id": "<string>",
"name": "<string>",
"description": "<string>",
"referenceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"projectReference": "<string>",
"organisationReference": "<string>",
"createdAt": 123,
"lastChanged": 123,
"createdBy": "<string>",
"lastChangedBy": "<string>",
"layoutMode": "grid",
"space": {
"columns": 123,
"rows": 123,
"gap": 123
},
"widgets": [
{
"key": "customer-sentiment",
"name": "<string>",
"description": "<string>",
"runsWhen": "everyTurn",
"runsFor": "allContacts",
"placement": {
"pinned": true,
"column": 123,
"row": 123,
"width": 123,
"height": 123,
"unpinnedBehavior": "newTile"
}
}
],
"hasEverSaved": true,
"published": true,
"publication": {
"publishedAt": 123,
"flowCount": 123,
"orchestrationFlowName": "<string>",
"orchestrationFlowLink": "<string>",
"endpointName": "<string>",
"endpointLink": "<string>"
}
}{
"type": "Bad Request",
"title": "Bad Request Error",
"status": 400,
"detail": "Validation failed. Missing payload.",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Unauthorized",
"title": "Unauthorized Error",
"status": 401,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 401,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Payment Required",
"title": "Payment Required Error",
"status": 402,
"detail": "Validation failed. Missing payload.",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 402,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Forbidden",
"title": "Forbidden Error",
"status": 403,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Not Found",
"title": "Not Found Error",
"status": 404,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {},
"logLevel": "error"
}{
"type": "Method Not Allowed",
"title": "Method Not Allowed Error",
"status": 405,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Conflict",
"title": "Conflict Error",
"status": 409,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1004,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Payload Too Large",
"title": "Payload Too Large Error",
"status": 413,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Internal Server Error",
"title": "Internal Server Error",
"status": 500,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Not Implemented",
"title": "Not Implemented Error",
"status": 501,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1009,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Bad Gateway",
"title": "Bad Gateway Error",
"status": 502,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Service Unavailable",
"title": "Service Unavailable Error",
"status": 503,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 503,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Gateway Timeout",
"title": "Gateway Timeout Error",
"status": 504,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}Authorizations
Supply the API Key in the HTTP-Header
Headers
The Accept header specifies the media type that the client expects in the response. Available options: application/json, application/hal+json, application/xml, text/xml, text/csv. The default value is application/json.
application/json, application/hal+json, application/xml, text/xml, text/csv Body
The workspace JSON. Create and re-save take the same body - the only difference is whether an id is supplied - so a rule added to one cannot drift from the other. Ownership (organisation, createdBy, lastChangedBy) is established from the session, never from here.
Required, and required after trimming - a name of spaces is not a name.
single is readable but cannot be saved.
grid, hybrid How much room the Copilot has in the agent's workspace.
Show child attributes
Show child attributes
At least one widget - the other half of the save gate, alongside a name.
Show child attributes
Show child attributes
24^[a-z0-9]{24}$Response
Returns the stored Copilot config object.
The object id of the Copilot config
The name of the Copilot config
The description of the Copilot config
The referenceId of the Copilot config
The id of the project the Copilot config belongs to
The id of the organisation the Copilot config belongs to
Unix timestamp (seconds) of when the Copilot config was created
Unix timestamp (seconds) of when the Copilot config was last changed
The id of the user who created the Copilot config
The id of the user who last changed the Copilot config
The layout mode of the Copilot config
grid, hybrid, single How much room the Copilot has in the agent's workspace.
Show child attributes
Show child attributes
Always an array, never null, even when empty.
Show child attributes
Show child attributes
True once a save has succeeded at least once. Not the same as published — publishing is asynchronous, so a config is routinely saved while still unpublished.
Whether the Copilot config is published
The last completed deploy, or null if none has finished.
Show child attributes
Show child attributes
curl --request POST \
--url https://api-trial.cognigy.ai/new/v2.0/copilotConfigs \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"name": "<string>",
"space": {
"columns": 123,
"rows": 123,
"gap": 123
},
"widgets": [
{
"name": "<string>",
"description": "<string>",
"runsFor": "allContacts",
"placement": {
"pinned": true,
"column": 123,
"row": 123,
"width": 123,
"height": 123
}
}
],
"projectId": "<string>",
"description": "<string>"
}
'import requests
url = "https://api-trial.cognigy.ai/new/v2.0/copilotConfigs"
payload = {
"name": "<string>",
"space": {
"columns": 123,
"rows": 123,
"gap": 123
},
"widgets": [
{
"name": "<string>",
"description": "<string>",
"runsFor": "allContacts",
"placement": {
"pinned": True,
"column": 123,
"row": 123,
"width": 123,
"height": 123
}
}
],
"projectId": "<string>",
"description": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
space: {columns: 123, rows: 123, gap: 123},
widgets: [
{
name: '<string>',
description: '<string>',
runsFor: 'allContacts',
placement: {pinned: true, column: 123, row: 123, width: 123, height: 123}
}
],
projectId: '<string>',
description: '<string>'
})
};
fetch('https://api-trial.cognigy.ai/new/v2.0/copilotConfigs', 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-trial.cognigy.ai/new/v2.0/copilotConfigs",
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' => '<string>',
'space' => [
'columns' => 123,
'rows' => 123,
'gap' => 123
],
'widgets' => [
[
'name' => '<string>',
'description' => '<string>',
'runsFor' => 'allContacts',
'placement' => [
'pinned' => true,
'column' => 123,
'row' => 123,
'width' => 123,
'height' => 123
]
]
],
'projectId' => '<string>',
'description' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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-trial.cognigy.ai/new/v2.0/copilotConfigs"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"space\": {\n \"columns\": 123,\n \"rows\": 123,\n \"gap\": 123\n },\n \"widgets\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"runsFor\": \"allContacts\",\n \"placement\": {\n \"pinned\": true,\n \"column\": 123,\n \"row\": 123,\n \"width\": 123,\n \"height\": 123\n }\n }\n ],\n \"projectId\": \"<string>\",\n \"description\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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-trial.cognigy.ai/new/v2.0/copilotConfigs")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"space\": {\n \"columns\": 123,\n \"rows\": 123,\n \"gap\": 123\n },\n \"widgets\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"runsFor\": \"allContacts\",\n \"placement\": {\n \"pinned\": true,\n \"column\": 123,\n \"row\": 123,\n \"width\": 123,\n \"height\": 123\n }\n }\n ],\n \"projectId\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-trial.cognigy.ai/new/v2.0/copilotConfigs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"space\": {\n \"columns\": 123,\n \"rows\": 123,\n \"gap\": 123\n },\n \"widgets\": [\n {\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"runsFor\": \"allContacts\",\n \"placement\": {\n \"pinned\": true,\n \"column\": 123,\n \"row\": 123,\n \"width\": 123,\n \"height\": 123\n }\n }\n ],\n \"projectId\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"_id": "<string>",
"name": "<string>",
"description": "<string>",
"referenceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"projectReference": "<string>",
"organisationReference": "<string>",
"createdAt": 123,
"lastChanged": 123,
"createdBy": "<string>",
"lastChangedBy": "<string>",
"layoutMode": "grid",
"space": {
"columns": 123,
"rows": 123,
"gap": 123
},
"widgets": [
{
"key": "customer-sentiment",
"name": "<string>",
"description": "<string>",
"runsWhen": "everyTurn",
"runsFor": "allContacts",
"placement": {
"pinned": true,
"column": 123,
"row": 123,
"width": 123,
"height": 123,
"unpinnedBehavior": "newTile"
}
}
],
"hasEverSaved": true,
"published": true,
"publication": {
"publishedAt": 123,
"flowCount": 123,
"orchestrationFlowName": "<string>",
"orchestrationFlowLink": "<string>",
"endpointName": "<string>",
"endpointLink": "<string>"
}
}{
"type": "Bad Request",
"title": "Bad Request Error",
"status": 400,
"detail": "Validation failed. Missing payload.",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Unauthorized",
"title": "Unauthorized Error",
"status": 401,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 401,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Payment Required",
"title": "Payment Required Error",
"status": 402,
"detail": "Validation failed. Missing payload.",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 402,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Forbidden",
"title": "Forbidden Error",
"status": 403,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Not Found",
"title": "Not Found Error",
"status": 404,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {},
"logLevel": "error"
}{
"type": "Method Not Allowed",
"title": "Method Not Allowed Error",
"status": 405,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Conflict",
"title": "Conflict Error",
"status": 409,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1004,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Payload Too Large",
"title": "Payload Too Large Error",
"status": 413,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Internal Server Error",
"title": "Internal Server Error",
"status": 500,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Not Implemented",
"title": "Not Implemented Error",
"status": 501,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1009,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Bad Gateway",
"title": "Bad Gateway Error",
"status": 502,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Service Unavailable",
"title": "Service Unavailable Error",
"status": 503,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 503,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}{
"type": "Gateway Timeout",
"title": "Gateway Timeout Error",
"status": 504,
"detail": "<string>",
"instance": "/v2.0/flows/5ce7c2d833ea1e04d7e6c432",
"code": 1000,
"traceId": "api--f84324f4-98eb-4f02-abdd-375a2e6c3c1f",
"details": {}
}