curl --request PUT \
--url https://api.erdo.ai/v1/org/business-profile \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"city": "<string>",
"country": "<string>",
"entity_type": "<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 = {
"city": "<string>",
"country": "<string>",
"entity_type": "<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({
city: '<string>',
country: '<string>',
entity_type: '<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([
'city' => '<string>',
'country' => '<string>',
'entity_type' => '<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 \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<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 \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<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 \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<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{
"entity_types": [
"<string>"
],
"exists": true,
"industries": [
"<string>"
],
"job_positions": [
"<string>"
],
"legal_structures": [
"<string>"
],
"missing_fields": [
"<string>"
],
"profile": {
"city": "<string>",
"country": "<string>",
"entity_type": "<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 '
{
"city": "<string>",
"country": "<string>",
"entity_type": "<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 = {
"city": "<string>",
"country": "<string>",
"entity_type": "<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({
city: '<string>',
country: '<string>',
entity_type: '<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([
'city' => '<string>',
'country' => '<string>',
'entity_type' => '<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 \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<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 \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<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 \"city\": \"<string>\",\n \"country\": \"<string>\",\n \"entity_type\": \"<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{
"entity_types": [
"<string>"
],
"exists": true,
"industries": [
"<string>"
],
"job_positions": [
"<string>"
],
"legal_structures": [
"<string>"
],
"missing_fields": [
"<string>"
],
"profile": {
"city": "<string>",
"country": "<string>",
"entity_type": "<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
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.
form shows them. Empty means the profile is ready to submit.
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

