curl --request PUT \
--url https://api.erdo.ai/v1/org/business-profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"caller_name": "<string>",
"city": "<string>",
"country": "<string>",
"entity_type": "<string>",
"example_landing_page_url": "<string>",
"industry": "<string>",
"legal_name": "<string>",
"postal_code": "<string>",
"privacy_policy_url": "<string>",
"region": "<string>",
"representative_email": "<string>",
"representative_first_name": "<string>",
"representative_job_position": "<string>",
"representative_last_name": "<string>",
"representative_phone": "<string>",
"representative_title": "<string>",
"stock_exchange": "<string>",
"stock_ticker": "<string>",
"street": "<string>",
"tax_id": "<string>",
"terms_and_conditions_url": "<string>",
"website_url": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/org/business-profile"
payload = {
"caller_name": "<string>",
"city": "<string>",
"country": "<string>",
"entity_type": "<string>",
"example_landing_page_url": "<string>",
"industry": "<string>",
"legal_name": "<string>",
"postal_code": "<string>",
"privacy_policy_url": "<string>",
"region": "<string>",
"representative_email": "<string>",
"representative_first_name": "<string>",
"representative_job_position": "<string>",
"representative_last_name": "<string>",
"representative_phone": "<string>",
"representative_title": "<string>",
"stock_exchange": "<string>",
"stock_ticker": "<string>",
"street": "<string>",
"tax_id": "<string>",
"terms_and_conditions_url": "<string>",
"website_url": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
caller_name: '<string>',
city: '<string>',
country: '<string>',
entity_type: '<string>',
example_landing_page_url: '<string>',
industry: '<string>',
legal_name: '<string>',
postal_code: '<string>',
privacy_policy_url: '<string>',
region: '<string>',
representative_email: '<string>',
representative_first_name: '<string>',
representative_job_position: '<string>',
representative_last_name: '<string>',
representative_phone: '<string>',
representative_title: '<string>',
stock_exchange: '<string>',
stock_ticker: '<string>',
street: '<string>',
tax_id: '<string>',
terms_and_conditions_url: '<string>',
website_url: '<string>'
})
};
fetch('https://api.erdo.ai/v1/org/business-profile', 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.erdo.ai/v1/org/business-profile",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'caller_name' => '<string>',
'city' => '<string>',
'country' => '<string>',
'entity_type' => '<string>',
'example_landing_page_url' => '<string>',
'industry' => '<string>',
'legal_name' => '<string>',
'postal_code' => '<string>',
'privacy_policy_url' => '<string>',
'region' => '<string>',
'representative_email' => '<string>',
'representative_first_name' => '<string>',
'representative_job_position' => '<string>',
'representative_last_name' => '<string>',
'representative_phone' => '<string>',
'representative_title' => '<string>',
'stock_exchange' => '<string>',
'stock_ticker' => '<string>',
'street' => '<string>',
'tax_id' => '<string>',
'terms_and_conditions_url' => '<string>',
'website_url' => '<string>'
]),
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://api.erdo.ai/v1/org/business-profile"
payload := strings.NewReader("{\n \"caller_name\": \"<string>\",\n \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<string>\",\n \"example_landing_page_url\": \"<string>\",\n \"industry\": \"<string>\",\n \"legal_name\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"region\": \"<string>\",\n \"representative_email\": \"<string>\",\n \"representative_first_name\": \"<string>\",\n \"representative_job_position\": \"<string>\",\n \"representative_last_name\": \"<string>\",\n \"representative_phone\": \"<string>\",\n \"representative_title\": \"<string>\",\n \"stock_exchange\": \"<string>\",\n \"stock_ticker\": \"<string>\",\n \"street\": \"<string>\",\n \"tax_id\": \"<string>\",\n \"terms_and_conditions_url\": \"<string>\",\n \"website_url\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.erdo.ai/v1/org/business-profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"caller_name\": \"<string>\",\n \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<string>\",\n \"example_landing_page_url\": \"<string>\",\n \"industry\": \"<string>\",\n \"legal_name\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"region\": \"<string>\",\n \"representative_email\": \"<string>\",\n \"representative_first_name\": \"<string>\",\n \"representative_job_position\": \"<string>\",\n \"representative_last_name\": \"<string>\",\n \"representative_phone\": \"<string>\",\n \"representative_title\": \"<string>\",\n \"stock_exchange\": \"<string>\",\n \"stock_ticker\": \"<string>\",\n \"street\": \"<string>\",\n \"tax_id\": \"<string>\",\n \"terms_and_conditions_url\": \"<string>\",\n \"website_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/org/business-profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"caller_name\": \"<string>\",\n \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<string>\",\n \"example_landing_page_url\": \"<string>\",\n \"industry\": \"<string>\",\n \"legal_name\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"region\": \"<string>\",\n \"representative_email\": \"<string>\",\n \"representative_first_name\": \"<string>\",\n \"representative_job_position\": \"<string>\",\n \"representative_last_name\": \"<string>\",\n \"representative_phone\": \"<string>\",\n \"representative_title\": \"<string>\",\n \"stock_exchange\": \"<string>\",\n \"stock_ticker\": \"<string>\",\n \"street\": \"<string>\",\n \"tax_id\": \"<string>\",\n \"terms_and_conditions_url\": \"<string>\",\n \"website_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"caller_name_missing_fields": [
"<string>"
],
"entity_types": [
"<string>"
],
"exists": true,
"industries": [
"<string>"
],
"job_positions": [
"<string>"
],
"legal_structures": [
"<string>"
],
"missing_fields": [
"<string>"
],
"profile": {
"caller_name": "<string>",
"city": "<string>",
"country": "<string>",
"entity_type": "<string>",
"example_landing_page_url": "<string>",
"industry": "<string>",
"legal_name": "<string>",
"legal_structure": "sole_proprietorship",
"postal_code": "<string>",
"privacy_policy_url": "<string>",
"region": "<string>",
"representative_email": "<string>",
"representative_first_name": "<string>",
"representative_job_position": "<string>",
"representative_last_name": "<string>",
"representative_phone": "<string>",
"representative_title": "<string>",
"stock_exchange": "<string>",
"stock_ticker": "<string>",
"street": "<string>",
"submitted_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tax_id_last4": "<string>",
"tax_id_stored": true,
"terms_and_conditions_url": "<string>",
"updated_at": "<string>",
"website_url": "<string>"
}
}{
"code": "not_found",
"details": {},
"message": "<string>"
}SetBusinessProfileAPI mirrors erdo_set_business_profile. PUT rather than
POST: there is exactly one profile per organization and a save replaces it.
A guest is refused outright rather than left to the org-admin check below it: the profile is the organization’s legal identity, and a shared-link visitor has no business writing one even in the impossible case that they hold a role.
curl --request PUT \
--url https://api.erdo.ai/v1/org/business-profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"caller_name": "<string>",
"city": "<string>",
"country": "<string>",
"entity_type": "<string>",
"example_landing_page_url": "<string>",
"industry": "<string>",
"legal_name": "<string>",
"postal_code": "<string>",
"privacy_policy_url": "<string>",
"region": "<string>",
"representative_email": "<string>",
"representative_first_name": "<string>",
"representative_job_position": "<string>",
"representative_last_name": "<string>",
"representative_phone": "<string>",
"representative_title": "<string>",
"stock_exchange": "<string>",
"stock_ticker": "<string>",
"street": "<string>",
"tax_id": "<string>",
"terms_and_conditions_url": "<string>",
"website_url": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/org/business-profile"
payload = {
"caller_name": "<string>",
"city": "<string>",
"country": "<string>",
"entity_type": "<string>",
"example_landing_page_url": "<string>",
"industry": "<string>",
"legal_name": "<string>",
"postal_code": "<string>",
"privacy_policy_url": "<string>",
"region": "<string>",
"representative_email": "<string>",
"representative_first_name": "<string>",
"representative_job_position": "<string>",
"representative_last_name": "<string>",
"representative_phone": "<string>",
"representative_title": "<string>",
"stock_exchange": "<string>",
"stock_ticker": "<string>",
"street": "<string>",
"tax_id": "<string>",
"terms_and_conditions_url": "<string>",
"website_url": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
caller_name: '<string>',
city: '<string>',
country: '<string>',
entity_type: '<string>',
example_landing_page_url: '<string>',
industry: '<string>',
legal_name: '<string>',
postal_code: '<string>',
privacy_policy_url: '<string>',
region: '<string>',
representative_email: '<string>',
representative_first_name: '<string>',
representative_job_position: '<string>',
representative_last_name: '<string>',
representative_phone: '<string>',
representative_title: '<string>',
stock_exchange: '<string>',
stock_ticker: '<string>',
street: '<string>',
tax_id: '<string>',
terms_and_conditions_url: '<string>',
website_url: '<string>'
})
};
fetch('https://api.erdo.ai/v1/org/business-profile', 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.erdo.ai/v1/org/business-profile",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'caller_name' => '<string>',
'city' => '<string>',
'country' => '<string>',
'entity_type' => '<string>',
'example_landing_page_url' => '<string>',
'industry' => '<string>',
'legal_name' => '<string>',
'postal_code' => '<string>',
'privacy_policy_url' => '<string>',
'region' => '<string>',
'representative_email' => '<string>',
'representative_first_name' => '<string>',
'representative_job_position' => '<string>',
'representative_last_name' => '<string>',
'representative_phone' => '<string>',
'representative_title' => '<string>',
'stock_exchange' => '<string>',
'stock_ticker' => '<string>',
'street' => '<string>',
'tax_id' => '<string>',
'terms_and_conditions_url' => '<string>',
'website_url' => '<string>'
]),
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://api.erdo.ai/v1/org/business-profile"
payload := strings.NewReader("{\n \"caller_name\": \"<string>\",\n \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<string>\",\n \"example_landing_page_url\": \"<string>\",\n \"industry\": \"<string>\",\n \"legal_name\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"region\": \"<string>\",\n \"representative_email\": \"<string>\",\n \"representative_first_name\": \"<string>\",\n \"representative_job_position\": \"<string>\",\n \"representative_last_name\": \"<string>\",\n \"representative_phone\": \"<string>\",\n \"representative_title\": \"<string>\",\n \"stock_exchange\": \"<string>\",\n \"stock_ticker\": \"<string>\",\n \"street\": \"<string>\",\n \"tax_id\": \"<string>\",\n \"terms_and_conditions_url\": \"<string>\",\n \"website_url\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.erdo.ai/v1/org/business-profile")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"caller_name\": \"<string>\",\n \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<string>\",\n \"example_landing_page_url\": \"<string>\",\n \"industry\": \"<string>\",\n \"legal_name\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"region\": \"<string>\",\n \"representative_email\": \"<string>\",\n \"representative_first_name\": \"<string>\",\n \"representative_job_position\": \"<string>\",\n \"representative_last_name\": \"<string>\",\n \"representative_phone\": \"<string>\",\n \"representative_title\": \"<string>\",\n \"stock_exchange\": \"<string>\",\n \"stock_ticker\": \"<string>\",\n \"street\": \"<string>\",\n \"tax_id\": \"<string>\",\n \"terms_and_conditions_url\": \"<string>\",\n \"website_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/org/business-profile")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"caller_name\": \"<string>\",\n \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<string>\",\n \"example_landing_page_url\": \"<string>\",\n \"industry\": \"<string>\",\n \"legal_name\": \"<string>\",\n \"postal_code\": \"<string>\",\n \"privacy_policy_url\": \"<string>\",\n \"region\": \"<string>\",\n \"representative_email\": \"<string>\",\n \"representative_first_name\": \"<string>\",\n \"representative_job_position\": \"<string>\",\n \"representative_last_name\": \"<string>\",\n \"representative_phone\": \"<string>\",\n \"representative_title\": \"<string>\",\n \"stock_exchange\": \"<string>\",\n \"stock_ticker\": \"<string>\",\n \"street\": \"<string>\",\n \"tax_id\": \"<string>\",\n \"terms_and_conditions_url\": \"<string>\",\n \"website_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"caller_name_missing_fields": [
"<string>"
],
"entity_types": [
"<string>"
],
"exists": true,
"industries": [
"<string>"
],
"job_positions": [
"<string>"
],
"legal_structures": [
"<string>"
],
"missing_fields": [
"<string>"
],
"profile": {
"caller_name": "<string>",
"city": "<string>",
"country": "<string>",
"entity_type": "<string>",
"example_landing_page_url": "<string>",
"industry": "<string>",
"legal_name": "<string>",
"legal_structure": "sole_proprietorship",
"postal_code": "<string>",
"privacy_policy_url": "<string>",
"region": "<string>",
"representative_email": "<string>",
"representative_first_name": "<string>",
"representative_job_position": "<string>",
"representative_last_name": "<string>",
"representative_phone": "<string>",
"representative_title": "<string>",
"stock_exchange": "<string>",
"stock_ticker": "<string>",
"street": "<string>",
"submitted_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tax_id_last4": "<string>",
"tax_id_stored": true,
"terms_and_conditions_url": "<string>",
"updated_at": "<string>",
"website_url": "<string>"
}
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Body
The entity's legal form, which the registry asks for alongside — not instead of — the public/private status in entity_type, and checks against the tax record. An LLC declared as a corporation is a rejection days later rather than an error at save time.
sole_proprietorship, partnership, limited_liability_corporation, co_operative, non_profit_corporation, corporation them is a campaign rejection after the vetting fee has been taken.
public_for_profit and refused otherwise, because the campaign registry asks a public brand for both and nobody else has them.
Response
Success response
organization's caller name: the business identity plus caller_name, and none of the campaign pages SMS needs. Two lists because the two products need different things, and a caller name gated on a privacy policy it never uses would be blocked for no reason.
returned with the profile so a form (or an agent explaining the form) never has to carry its own copy that drifts from the one validation uses.
the zero value rather than null, so a form binds to it without a nil check.
The accepted legal structures, returned with the profile so a form (or an agent explaining the form) never has to carry its own copy that drifts from the one validation uses.
a form shows them. Empty means the profile is ready to submit for SMS.
except the tax id, plus the last four digits of it. There is deliberately no field carrying the number itself — a struct that could hold it is a struct that will eventually be logged.
Show child attributes
Show child attributes

