curl --request POST \
--url https://app.flextell.ai/api/v1/customers/{id}/merge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Tenant: <x-tenant>' \
--data '
{
"source_customer_id": 2
}
'import requests
url = "https://app.flextell.ai/api/v1/customers/{id}/merge"
payload = { "source_customer_id": 2 }
headers = {
"X-Tenant": "<x-tenant>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Tenant': '<x-tenant>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({source_customer_id: 2})
};
fetch('https://app.flextell.ai/api/v1/customers/{id}/merge', 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://app.flextell.ai/api/v1/customers/{id}/merge",
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([
'source_customer_id' => 2
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Tenant: <x-tenant>"
],
]);
$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://app.flextell.ai/api/v1/customers/{id}/merge"
payload := strings.NewReader("{\n \"source_customer_id\": 2\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Tenant", "<x-tenant>")
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://app.flextell.ai/api/v1/customers/{id}/merge")
.header("X-Tenant", "<x-tenant>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source_customer_id\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.flextell.ai/api/v1/customers/{id}/merge")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Tenant"] = '<x-tenant>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source_customer_id\": 2\n}"
response = http.request(request)
puts response.read_body{
"success": "<string>",
"data": {
"customer": {
"id": 123,
"record_state": {
"is_read_only": true,
"reason_code": "<string>"
},
"first_name": "<string>",
"last_name": "<string>",
"phone_number": "<string>",
"email": "<string>",
"date_of_birth": "<string>",
"gender": "male",
"country_id": 123,
"country_name": "<string>",
"city_id": 123,
"city_name": "<string>",
"district_id": 123,
"district_name": "<string>",
"identity_number": "<string>",
"passport_number": "<string>",
"occupation_id": 123,
"occupation_name": "<string>",
"address": "<string>",
"default_channel_id": 123,
"default_channel_name": "<string>",
"latest_conversation_id": 123,
"avatar_url": "<string>",
"is_lead_stage": true,
"lead_id": 123,
"is_masked": true,
"related_user": {
"id": 123,
"name": "<string>",
"avatar_url": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"deleted_at": "2023-11-07T05:31:56Z",
"erased_at": "2023-11-07T05:31:56Z",
"tags": [
{
"id": 123,
"tenant_id": 123,
"name": "<string>",
"color": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"deleted_at": "2023-11-07T05:31:56Z"
}
],
"notification_channels": {
"default_channel_id": "<string>",
"source": "<string>",
"channels": [
"<unknown>"
]
},
"import_source": {
"id": 123,
"name": "<string>",
"company_logo": null
}
},
"merge": {
"id": "<string>",
"source_customer_id": "<string>",
"source_customer_name": "<string>",
"moved_counts": "<string>",
"total_moved_count": "<string>"
}
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"success": true,
"error_code": "RESOURCE_NOT_FOUND",
"message": "<string>",
"errors": null,
"data": null
}{
"success": false,
"error_code": "CUSTOMER_ERASED",
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}{
"success": false,
"error_code": "SETUP_REQUIRED",
"message": "Complete the required setup steps to continue.",
"data": {
"next_step": "clinic_info"
}
}Merge another customer into this one
Moves every record attached to the source customer — appointments, sales, tickets,
conversations, messages, transactions, forms, invoices, offers, leads, tags, identities,
notes and files — onto this customer, then permanently deletes the source. Field values
are taken from this customer unless field_selections says otherwise.
curl --request POST \
--url https://app.flextell.ai/api/v1/customers/{id}/merge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Tenant: <x-tenant>' \
--data '
{
"source_customer_id": 2
}
'import requests
url = "https://app.flextell.ai/api/v1/customers/{id}/merge"
payload = { "source_customer_id": 2 }
headers = {
"X-Tenant": "<x-tenant>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Tenant': '<x-tenant>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({source_customer_id: 2})
};
fetch('https://app.flextell.ai/api/v1/customers/{id}/merge', 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://app.flextell.ai/api/v1/customers/{id}/merge",
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([
'source_customer_id' => 2
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Tenant: <x-tenant>"
],
]);
$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://app.flextell.ai/api/v1/customers/{id}/merge"
payload := strings.NewReader("{\n \"source_customer_id\": 2\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Tenant", "<x-tenant>")
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://app.flextell.ai/api/v1/customers/{id}/merge")
.header("X-Tenant", "<x-tenant>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"source_customer_id\": 2\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.flextell.ai/api/v1/customers/{id}/merge")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Tenant"] = '<x-tenant>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"source_customer_id\": 2\n}"
response = http.request(request)
puts response.read_body{
"success": "<string>",
"data": {
"customer": {
"id": 123,
"record_state": {
"is_read_only": true,
"reason_code": "<string>"
},
"first_name": "<string>",
"last_name": "<string>",
"phone_number": "<string>",
"email": "<string>",
"date_of_birth": "<string>",
"gender": "male",
"country_id": 123,
"country_name": "<string>",
"city_id": 123,
"city_name": "<string>",
"district_id": 123,
"district_name": "<string>",
"identity_number": "<string>",
"passport_number": "<string>",
"occupation_id": 123,
"occupation_name": "<string>",
"address": "<string>",
"default_channel_id": 123,
"default_channel_name": "<string>",
"latest_conversation_id": 123,
"avatar_url": "<string>",
"is_lead_stage": true,
"lead_id": 123,
"is_masked": true,
"related_user": {
"id": 123,
"name": "<string>",
"avatar_url": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"deleted_at": "2023-11-07T05:31:56Z",
"erased_at": "2023-11-07T05:31:56Z",
"tags": [
{
"id": 123,
"tenant_id": 123,
"name": "<string>",
"color": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"deleted_at": "2023-11-07T05:31:56Z"
}
],
"notification_channels": {
"default_channel_id": "<string>",
"source": "<string>",
"channels": [
"<unknown>"
]
},
"import_source": {
"id": 123,
"name": "<string>",
"company_logo": null
}
},
"merge": {
"id": "<string>",
"source_customer_id": "<string>",
"source_customer_name": "<string>",
"moved_counts": "<string>",
"total_moved_count": "<string>"
}
}
}{
"message": "<string>"
}{
"message": "<string>"
}{
"success": true,
"error_code": "RESOURCE_NOT_FOUND",
"message": "<string>",
"errors": null,
"data": null
}{
"success": false,
"error_code": "CUSTOMER_ERASED",
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}{
"success": false,
"error_code": "SETUP_REQUIRED",
"message": "Complete the required setup steps to continue.",
"data": {
"next_step": "clinic_info"
}
}Yetkilendirmeler
The access token received from the authorization server in the OAuth 2.0 flow.
Başlıklar
Tenant identifier. Send the Tenant ID in the X-Tenant header to scope API requests to a specific tenant.
Yol Parametreleri
The customer identifier
Gövde
Identifier of the customer that is merged into this one and then permanently deleted.
x >= 1Per-field winner map. Keys are customer fields, values are either "target" (keep the surviving customer's value) or "source" (take the deleted customer's value). Fields left out keep the surviving customer's value.
Show child attributes
Show child attributes