Endpoints
Create Flow Config
Create or update a flow configuration for the authenticated client.
This endpoint allows partners to programmatically create flow configurations with custom branding. The logo is fetched from the provided URL, optimized for display (resized to max 400x400 pixels), and stored in S3.
If config_name already exists, updates the existing configuration.
Args: body: Flow configuration details including company name, logo URL, etc. client_id: Authenticated client ID from JWT token
Returns: Created or updated flow configuration with S3 logo URL and preview link
Raises: 400: Invalid request (bad config name, unreachable logo, unsupported image type) 500: S3 upload failure
POST
/
configs
Create Flow Config
curl --request POST \
--url https://link.emergedata.ai/configs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"config_name": "<string>",
"company_name": "<string>",
"logo_url": "<string>",
"privacy_policy_url": "<string>",
"webhook_url": "<string>",
"flow_version": "lm",
"is_default": false
}
'import requests
url = "https://link.emergedata.ai/configs"
payload = {
"config_name": "<string>",
"company_name": "<string>",
"logo_url": "<string>",
"privacy_policy_url": "<string>",
"webhook_url": "<string>",
"flow_version": "lm",
"is_default": False
}
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({
config_name: '<string>',
company_name: '<string>',
logo_url: '<string>',
privacy_policy_url: '<string>',
webhook_url: '<string>',
flow_version: 'lm',
is_default: false
})
};
fetch('https://link.emergedata.ai/configs', 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://link.emergedata.ai/configs",
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([
'config_name' => '<string>',
'company_name' => '<string>',
'logo_url' => '<string>',
'privacy_policy_url' => '<string>',
'webhook_url' => '<string>',
'flow_version' => 'lm',
'is_default' => false
]),
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://link.emergedata.ai/configs"
payload := strings.NewReader("{\n \"config_name\": \"<string>\",\n \"company_name\": \"<string>\",\n \"logo_url\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"flow_version\": \"lm\",\n \"is_default\": false\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://link.emergedata.ai/configs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"config_name\": \"<string>\",\n \"company_name\": \"<string>\",\n \"logo_url\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"flow_version\": \"lm\",\n \"is_default\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://link.emergedata.ai/configs")
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 \"config_name\": \"<string>\",\n \"company_name\": \"<string>\",\n \"logo_url\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"flow_version\": \"lm\",\n \"is_default\": false\n}"
response = http.request(request)
puts response.read_body{
"config_id": "cfg_30bfe2ca",
"config_name": "default",
"company_name": "Wonderful AI",
"logo_url": "https://assets.emergedata.ai/logo/wonderful-ai.png",
"privacy_policy_url": "https://wonderful.ai/privacy",
"webhook_url": "https://api.wonderful.ai/webhooks/emerge",
"flow_version": "emerge",
"is_default": true,
"preview_url": "https://link.emergedata.ai/preview/ck_live_123?flow_config=default"
}{
"detail": [
{
"loc": [
"query",
"uid"
],
"msg": "Field required",
"type": "missing"
}
]
}Authorizations
API token from the Control Room. Include as Authorization: Bearer <token>
Body
application/json
⌘I
Create Flow Config
curl --request POST \
--url https://link.emergedata.ai/configs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"config_name": "<string>",
"company_name": "<string>",
"logo_url": "<string>",
"privacy_policy_url": "<string>",
"webhook_url": "<string>",
"flow_version": "lm",
"is_default": false
}
'import requests
url = "https://link.emergedata.ai/configs"
payload = {
"config_name": "<string>",
"company_name": "<string>",
"logo_url": "<string>",
"privacy_policy_url": "<string>",
"webhook_url": "<string>",
"flow_version": "lm",
"is_default": False
}
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({
config_name: '<string>',
company_name: '<string>',
logo_url: '<string>',
privacy_policy_url: '<string>',
webhook_url: '<string>',
flow_version: 'lm',
is_default: false
})
};
fetch('https://link.emergedata.ai/configs', 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://link.emergedata.ai/configs",
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([
'config_name' => '<string>',
'company_name' => '<string>',
'logo_url' => '<string>',
'privacy_policy_url' => '<string>',
'webhook_url' => '<string>',
'flow_version' => 'lm',
'is_default' => false
]),
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://link.emergedata.ai/configs"
payload := strings.NewReader("{\n \"config_name\": \"<string>\",\n \"company_name\": \"<string>\",\n \"logo_url\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"flow_version\": \"lm\",\n \"is_default\": false\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://link.emergedata.ai/configs")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"config_name\": \"<string>\",\n \"company_name\": \"<string>\",\n \"logo_url\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"flow_version\": \"lm\",\n \"is_default\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://link.emergedata.ai/configs")
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 \"config_name\": \"<string>\",\n \"company_name\": \"<string>\",\n \"logo_url\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"webhook_url\": \"<string>\",\n \"flow_version\": \"lm\",\n \"is_default\": false\n}"
response = http.request(request)
puts response.read_body{
"config_id": "cfg_30bfe2ca",
"config_name": "default",
"company_name": "Wonderful AI",
"logo_url": "https://assets.emergedata.ai/logo/wonderful-ai.png",
"privacy_policy_url": "https://wonderful.ai/privacy",
"webhook_url": "https://api.wonderful.ai/webhooks/emerge",
"flow_version": "emerge",
"is_default": true,
"preview_url": "https://link.emergedata.ai/preview/ck_live_123?flow_config=default"
}{
"detail": [
{
"loc": [
"query",
"uid"
],
"msg": "Field required",
"type": "missing"
}
]
}