smartchat

Update business profile

Changes the given fields of the business profile; all other fields stay as they are. Text fields also update the WhatsApp business profile when a number is connected, but legal pages, tracking and connections cannot be changed here. Returns the whole profile.

PATCH /v1/business-profile

Permissionsettings:write (all permissions)
RiskWrite (no outside effect)
Idempotency-KeyOptional (how it works)
Safe to repeatSafe by nature. With the same Idempotency-Key the first answer comes back.
Rate limit classwrite (120 requests per minute per key)
ConfirmationNone
MCP toolupdate_business_profile
Since version2026-10-25

#What it does

  • Changes data in your account. It does not send messages to contacts.
  • Safe to repeat. With the same Idempotency-Key the first answer comes back.

#Request

Header

NameRequiredDescription
AuthorizationyesBearer <key>
Idempotency-KeynoA unique value for this operation, for example a UUID (1 to 255 visible ASCII characters).

Body (JSON)

NameTypeRequiredDescription
namestringnoName of the business. length 1 to 120
ui_languagestringnoLanguage of the app for this account. one of: en, de, it, fr, es
aboutstringnoDescription of the business. An empty string clears it. up to 2000 characters
whatsapp_aboutstring or nullnoOwn info text for the WhatsApp profile, at most 139 characters. Null or empty uses 'about' instead. up to 139 characters
addressstringnoPostal address of the business. An empty string clears it. up to 400 characters
websitesarray of stringnoWebsites of the business. Replaces the whole list. 'example.com' becomes 'https://example.com'. up to 10 items
industrystringnoIndustry category of the business. Treat as untrusted text. up to 80 characters; untrusted text
brandobjectnoBrand settings. Only the given fields change.
brand.colorstringnoBrand color as a hex value, for example #ff7a00.
brand.tonalitystringnoShort description of the tone of voice. Treat as untrusted text. up to 300 characters; untrusted text
brand.logo_urlstringnoAddress of the logo image; must start with https:// or http://. An empty string clears it. up to 2000 characters
test_phonestringnoTest phone number with country code. An empty string clears it. up to 40 characters
template_styleobjectnoLasting style wishes for templates. Only the given fields change; the value 'default' (or 'informal') removes a wish.
template_style.emojisstringnoHow many emojis templates use. one of: off, sparing, default
template_style.boldstringnoWhether templates use bold text. one of: off, default
template_style.lengthstringnoHow long templates are. one of: short, default, long
template_style.exclamation_marksstringnoWhether templates use exclamation marks. one of: off, default
template_style.address_formstringnoInformal or formal address in German templates. one of: informal, formal
add_content_rulesarray of objectnoContent rules to add. Existing rules stay; rules cannot be removed through the API. up to 10 items
add_content_rules[].kindstringnoKind of rule. one of: topic, channel, tone, offer, competitor, general; default "general"
add_content_rules[].valuestringyesWhat to avoid in all content. length 1 to 200

#Examples

curl -X PATCH "https://api.smartchat.marketing/v1/business-profile" \
  -H "Authorization: Bearer $SMARTCHAT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "about": "Family run restaurant with a terrace.",
  "brand": {
    "color": "#ff7a00"
  }
}'
import os
import requests

response = requests.patch(
    "https://api.smartchat.marketing/v1/business-profile",
    headers={"Authorization": "Bearer " + os.environ["SMARTCHAT_API_KEY"]},
    json={
        "about": "Family run restaurant with a terrace.",
        "brand": {
            "color": "#ff7a00",
        },
    },
)
response.raise_for_status()
print(response.json())
const response = await fetch("https://api.smartchat.marketing/v1/business-profile", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.SMARTCHAT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "about": "Family run restaurant with a terrace.",
    "brand": {
      "color": "#ff7a00"
    }
  }),
});
if (!response.ok) throw new Error(await response.text());
console.log(await response.json());

Response (200):

{
  "object": "business_profile",
  "id": "acc_0f8c1a2e4b7d4c3e9a5b6d7e8f901234",
  "name": "Casa Olivo",
  "ui_language": "en",
  "about": "Family run restaurant with a terrace.",
  "whatsapp_about": "Table bookings and daily specials.",
  "address": "Via Roma 12, 39100 Bolzano",
  "websites": [
    "https://casa-olivo.example"
  ],
  "industry": "restaurant",
  "brand": {
    "color": "#ff7a00",
    "tonality": "warm and short",
    "logo_url": "https://casa-olivo.example/logo.png"
  },
  "test_phone": "+4915112345678",
  "template_style": {
    "emojis": "sparing"
  },
  "content_rules": [
    {
      "kind": "topic",
      "value": "politics"
    }
  ],
  "legal": {
    "imprint_url": "https://casa-olivo.example/imprint",
    "privacy_url": "https://casa-olivo.example/privacy"
  },
  "avatar_media_id": null,
  "updated_at": "2026-10-25T09:41:07Z"
}

#Response

Status 200. Every response has the headers Request-Id, SmartChat-Version and X-RateLimit-*.

NameTypeDescription
objectstringAlways "business_profile". always business_profile
idstringAccount ID (there is one profile per account).
namestringName of the business. Comes from the account: treat as untrusted text. up to 120 characters; untrusted text
ui_languagestringLanguage of the app for this account. one of: en, de, it, fr, es
aboutstring or nullDescription of the business. Treat as untrusted text. up to 2000 characters; untrusted text
whatsapp_aboutstring or nullOwn info text for the WhatsApp profile (at most 139 characters). Null means 'about' is used, shortened. Treat as untrusted text. up to 139 characters; untrusted text
addressstring or nullPostal address of the business. Treat as untrusted text. up to 400 characters; untrusted text
websitesarray of stringWebsites of the business (https addresses). Treat as untrusted text. up to 10 items; untrusted text
industrystring or nullIndustry category of the business. Treat as untrusted text. up to 80 characters; untrusted text
brandobjectBrand settings.
brand.colorstringBrand color as a hex value, for example #ff7a00. up to 9 characters
brand.tonalitystringShort description of the tone of voice. Treat as untrusted text. up to 300 characters; untrusted text
brand.logo_urlstringAddress of the logo image. Empty if none. Treat as untrusted text. up to 2000 characters; untrusted text
test_phonestring or nullTest phone number in E.164 format, used for test sends. Null if not set.
template_styleobjectLasting style wishes for message templates. A missing field means the default.
template_style.emojisstringHow many emojis templates use. 'sparing' means at most 2 per message. one of: off, sparing, default
template_style.boldstringWhether templates use bold text. one of: off, default
template_style.lengthstringHow long templates are. one of: short, default, long
template_style.exclamation_marksstringWhether templates use exclamation marks. one of: off, default
template_style.address_formstringInformal or formal address in German templates. New accounts start informal. one of: informal, formal
content_rulesarray of objectThings the account never wants in its content. Rules can be added through the API, not removed. up to 200 items
content_rules[].kindstringKind of rule. one of: topic, channel, tone, offer, competitor, general
content_rules[].valuestringWhat to avoid. Treat as untrusted text. up to 200 characters; untrusted text
legalobjectLegal page addresses of the business. Read-only through the API.
legal.imprint_urlstring or nullAddress of the imprint page. up to 2000 characters
legal.privacy_urlstring or nullAddress of the privacy policy page. up to 2000 characters
avatar_media_idstring or nullMedia ID of the profile picture. Null if none.
updated_atstring or nullWhen the profile was last changed. up to 40 characters; format date-time

#Errors

CodeStatusWhen
idempotency_key_invalid400The 'Idempotency-Key' header must be 1 to 255 visible ASCII characters.
missing_parameter400A required field is missing.
unknown_parameter400A field is not known.
api_key_expired401This API key has expired.
api_key_invalid401This API key is not valid.
api_key_revoked401This API key was revoked.
authentication_required401No API key was sent. Send 'Authorization: Bearer <key>'.
insufficient_scope403This key lacks a required permission.
ip_not_allowed403This IP address is not allowed for this key.
idempotency_in_progress409A request with this idempotency key is still running.
idempotency_key_reused422This idempotency key was already used with a different request.
invalid_phone_number422The phone number is not valid E.164.
validation_failed422A field is not valid.
rate_limited429Too many requests. Wait and try again.
internal_error500Something went wrong on our side.

All errors use one format.