curl --request PATCH \
--url https://api.withallo.com/v2/api/crm/companies/attributes/{key} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"label": "Segment",
"is_visible": false
}
'import requests
url = "https://api.withallo.com/v2/api/crm/companies/attributes/{key}"
payload = {
"label": "Segment",
"is_visible": False
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({label: 'Segment', is_visible: false})
};
fetch('https://api.withallo.com/v2/api/crm/companies/attributes/{key}', 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.withallo.com/v2/api/crm/companies/attributes/{key}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'label' => 'Segment',
'is_visible' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.withallo.com/v2/api/crm/companies/attributes/{key}"
payload := strings.NewReader("{\n \"label\": \"Segment\",\n \"is_visible\": false\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<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.patch("https://api.withallo.com/v2/api/crm/companies/attributes/{key}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"Segment\",\n \"is_visible\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withallo.com/v2/api/crm/companies/attributes/{key}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"label\": \"Segment\",\n \"is_visible\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"key": "industry_segment",
"label": "Industry segment",
"type": "DROPDOWN",
"options": [
{
"key": "smb",
"label": "SMB"
},
{
"key": "enterprise",
"label": "Enterprise"
}
],
"is_visible": true,
"prompt": "Pick the segment that matches the company size mentioned on the call.",
"should_prompt_override": false,
"source": "allo",
"created_at": "2026-10-07T14:21:08",
"updated_at": "2026-10-07T14:21:08"
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}Mettre à jour un attribut d'entreprise
Partially updates an attribute: only the fields you send change. key and type cannot be changed. Attributes synced from a CRM integration only accept prompt, should_prompt_override and is_visible.
curl --request PATCH \
--url https://api.withallo.com/v2/api/crm/companies/attributes/{key} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"label": "Segment",
"is_visible": false
}
'import requests
url = "https://api.withallo.com/v2/api/crm/companies/attributes/{key}"
payload = {
"label": "Segment",
"is_visible": False
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({label: 'Segment', is_visible: false})
};
fetch('https://api.withallo.com/v2/api/crm/companies/attributes/{key}', 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.withallo.com/v2/api/crm/companies/attributes/{key}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'label' => 'Segment',
'is_visible' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.withallo.com/v2/api/crm/companies/attributes/{key}"
payload := strings.NewReader("{\n \"label\": \"Segment\",\n \"is_visible\": false\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<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.patch("https://api.withallo.com/v2/api/crm/companies/attributes/{key}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"label\": \"Segment\",\n \"is_visible\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withallo.com/v2/api/crm/companies/attributes/{key}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"label\": \"Segment\",\n \"is_visible\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"key": "industry_segment",
"label": "Industry segment",
"type": "DROPDOWN",
"options": [
{
"key": "smb",
"label": "SMB"
},
{
"key": "enterprise",
"label": "Enterprise"
}
],
"is_visible": true,
"prompt": "Pick the segment that matches the company size mentioned on the call.",
"should_prompt_override": false,
"source": "allo",
"created_at": "2026-10-07T14:21:08",
"updated_at": "2026-10-07T14:21:08"
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}CRM_WRITEkey et type ne peuvent pas être modifiés.
Champs du body
| Champ | Type | Description |
|---|---|---|
label | string | Nouveau nom affiché |
options | array | Remplace toute la liste d’options avec des objets { label, key? }. Attributs DROPDOWN uniquement |
prompt | string | Consigne pour l’AI CRM Manager. Une valeur vide l’efface |
should_prompt_override | boolean | Indique si l’IA peut écraser une valeur déjà renseignée |
is_visible | boolean | Affiche ou masque l’attribut dans les apps Allo |
Renommer des options
Les clés d’options restent stables. Pour renommer une option, envoyez sakey actuelle avec le nouveau label. Une option envoyée sans key correspondante est considérée comme nouvelle et reçoit une clé dérivée de son label. Les options absentes de la liste sont supprimées.
Attributs synchronisés depuis un CRM
Un attribut dont lasource n’est pas allo est géré par votre intégration CRM. Seuls prompt, should_prompt_override et is_visible peuvent être modifiés. Envoyer label ou options renvoie 409 ATTRIBUTE_MANAGED_BY_INTEGRATION.
Réponse
Renvoie200 avec l’attribut mis à jour, dans le même format que Lister les attributs d’entreprise.
Erreurs
| Statut | Code | Quand |
|---|---|---|
400 | ATTRIBUTE_LABEL_INVALID | label est vide, dépasse 255 caractères ou ne contient ni lettre ni chiffre |
400 | ATTRIBUTE_OPTION_INVALID | options est vide, ou un label d’option est vide, dépasse 255 caractères ou est en doublon |
400 | ATTRIBUTE_OPTIONS_NOT_SUPPORTED | options envoyé pour un attribut qui n’est pas DROPDOWN |
403 | API_KEY_INSUFFICIENT_SCOPE | La clé n’a pas le scope CRM_WRITE |
404 | TEAM_NOT_FOUND | Le workspace n’utilise pas le nouveau modèle de contacts |
404 | ATTRIBUTE_NOT_FOUND | Aucun attribut avec cette clé |
409 | ATTRIBUTE_MANAGED_BY_INTEGRATION | label ou options envoyés pour un attribut géré par une intégration CRM |
409 | ATTRIBUTE_CONCURRENT_MODIFICATION | Les attributs ont été modifiés en même temps. Relancez la requête |
Autorisations
Paramètres de chemin
Attribute key, as returned by the list endpoint
"industry_segment"
Corps
All fields are optional
New display name
Replaces the full option list. DROPDOWN attributes only. Send an option's current key to keep it when renaming its label.
Show child attributes
Show child attributes
Instruction the AI CRM Manager follows to fill this attribute from calls. A blank value clears it.
"Pick the segment that matches the company size mentioned on the call."
Whether the AI may overwrite a value that is already set
Show or hide the attribute in the Allo apps
Réponse
The updated attribute
A custom attribute on companies
Show child attributes
Show child attributes
Cette page vous a-t-elle été utile ?