List custom company attributes
curl --request GET \
--url https://api.withallo.com/v2/api/crm/companies/attributes \
--header 'Authorization: <api-key>'import requests
url = "https://api.withallo.com/v2/api/crm/companies/attributes"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.withallo.com/v2/api/crm/companies/attributes', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <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"
"net/http"
"io"
)
func main() {
url := "https://api.withallo.com/v2/api/crm/companies/attributes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.withallo.com/v2/api/crm/companies/attributes")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withallo.com/v2/api/crm/companies/attributes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
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"
}
],
"pagination": {
"page": 1,
"size": 20,
"total_count": 1,
"total_pages": 1,
"has_more": false
}
}{
"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
}
}Entreprises
Lister les attributs d'entreprise
Returns the custom attributes defined on your team’s companies, paginated, including the ones synced from your CRM integrations. Archived attributes are not listed. Only available to teams on the new contact model.
GET
/
v2
/
api
/
crm
/
companies
/
attributes
List custom company attributes
curl --request GET \
--url https://api.withallo.com/v2/api/crm/companies/attributes \
--header 'Authorization: <api-key>'import requests
url = "https://api.withallo.com/v2/api/crm/companies/attributes"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://api.withallo.com/v2/api/crm/companies/attributes', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <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"
"net/http"
"io"
)
func main() {
url := "https://api.withallo.com/v2/api/crm/companies/attributes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.withallo.com/v2/api/crm/companies/attributes")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withallo.com/v2/api/crm/companies/attributes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
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"
}
],
"pagination": {
"page": 1,
"size": 20,
"total_count": 1,
"total_pages": 1,
"has_more": false
}
}{
"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
}
}Scope requis :
CRM_READParamètres de requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
page | integer | 1 | Numéro de page, à partir de 1 |
size | integer | 20 | Éléments par page, de 1 à 100 |
Champs de la réponse
| Champ | Type | Description |
|---|---|---|
key | string | Clé unique de l’attribut |
label | string ou null | Nom affiché |
type | string ou null | TEXT, NUMBER, DATE, BOOLEAN ou DROPDOWN |
options | array ou null | Objets { key, label }. Uniquement pour DROPDOWN |
is_visible | boolean | Indique si l’attribut est affiché dans les apps Allo |
prompt | string ou null | Consigne utilisée par l’AI CRM Manager pour remplir l’attribut à partir des appels |
should_prompt_override | boolean ou null | Indique si l’IA peut écraser une valeur existante |
source | string | allo, ou l’intégration qui gère l’attribut, comme hubspot |
created_at | string | Date-heure ISO 8601 |
updated_at | string | Date-heure ISO 8601 |
{
"data": [
{
"key": "employees",
"label": "Employees",
"type": "NUMBER",
"options": null,
"is_visible": true,
"prompt": null,
"should_prompt_override": null,
"source": "hubspot",
"created_at": "2026-10-07T14:21:08",
"updated_at": "2026-10-07T14:21:08"
}
],
"pagination": {
"page": 1,
"size": 20,
"total_count": 1,
"total_pages": 1,
"has_more": false
}
}
Erreurs
| Statut | Code | Quand |
|---|---|---|
400 | INVALID_PAGE_SIZE | page est inférieur à 1, ou size n’est pas compris entre 1 et 100 |
403 | API_KEY_INSUFFICIENT_SCOPE | La clé n’a pas le scope CRM_READ |
404 | TEAM_NOT_FOUND | Le workspace n’utilise pas le nouveau modèle de contacts |
Autorisations
Paramètres de requête
Page number (1-indexed)
Plage requise:
x >= 1Results per page
Plage requise:
1 <= x <= 100Cette page vous a-t-elle été utile ?