/api/v4/social/brands/updateUpdate a brand
Updates a social brand's name, timezone, website, categories, hashtags or bio.
Parameters
Body
| Name | Type | Required | Description |
|---|---|---|---|
| input | object | required | Wrapper object. Every field below is a property of `input`, the entire body must be nested under it. |
| input.profileId | string | required | UUID of the brand to update. This is the same value used as the `brandId` path token elsewhere. |
| input.profileName | string | optional | New display name. |
| input.timezone | object | optional | New timezone as `{ label, tzCode, name, utc }`. `tzCode` is the IANA identifier that schedules are resolved against. |
| input.businessIntent | string | optional | One or two sentences describing what the business does. |
| input.categories | array of strings | optional | Business categories. Replaces the stored list rather than merging into it. |
| input.siteUrl | string | optional | The brand's website. Changing it queues a fresh read of the site. |
| input.logo | string | optional | Public https URL of the brand logo. |
| input.countryIso | string | optional | Two-letter ISO country code. |
| input.bio | string | optional | Short brand bio. |
| input.brandHashtags | array of strings | optional | Replaces the brand's hashtag list. |
| input.competitorHashtags | array of strings | optional | Replaces the competitor hashtag list. |
| input.contentPreferredLanguage | string | optional | Preferred language for generated content, e.g. `en`. |
Sample request
Ready-to-paste body. Replace placeholder IDs and values with yours.
{ "input": { "profileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "profileName": "Jenny Home & Co.", "siteUrl": "https://jennyhomeandco.example", "brandHashtags": ["jennyhome", "handmadefurniture", "shoplocal"] }}Responses
200Brand updated. The full brand is returned.
{ "data": { "updateSocialProfile": { "success": true, "error": null, "socialProfile": { "id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "profileName": "Jenny Home & Co.", "archived": false, "logo": null, "profileLogo": null, "siteUrl": "https://jennyhomeandco.example", "countryIso": "US", "bio": "Handmade furniture for real homes.", "businessIntent": "A family-run home furnishings store selling handmade furniture and textiles.", "categories": ["Furniture Store", "Home Goods"], "brandHashtags": ["jennyhome", "handmadefurniture", "shoplocal"], "competitorHashtags": [], "connectedChannelCount": 3, "timezone": { "label": "(GMT-05:00) Eastern Time", "tzCode": "America/New_York", "name": "Eastern Standard Time", "utc": "-05:00" }, "contentPreferredLanguage": "en" } } }}200Validation failed. The status is still 200: read `success`.
{ "data": { "updateSocialProfile": { "success": false, "error": { "message": "SY95046: Unknown timezone", "code": "SY95046", "contextInfo": null }, "socialProfile": null } }}401Unauthenticated, missing or invalid API key.
404No brand with that ID on this account (`SY95043`).
Edits an existing brand. The brand is addressed by input.profileId in the
body, not by a path parameter, which is why the route is a flat
POST /social/brands/update.
Use case: keeping the brand in step with your own CRM. When a customer
renames their business or moves their site, mirror the change here so the brand
header and the composer's suggestions stay accurate. Changing siteUrl also
queues a fresh read of the site, so suggestions pick up the new copy without any
further call.
Notes.
- The request body must be wrapped in an
inputobject. - Check
success, not the HTTP status. A rejected update returnsHTTP 200withsuccess: falseand the reason inerror. - Only
profileIdis required. Every other field is optional, so partial updates work: send just the fields you are changing and the rest are left alone. The identifying field here isprofileId, notbrandId—brandIdis only ever a URL path token. categories,brandHashtagsandcompetitorHashtagsare replaced, not merged, when you send them. Sending[]clears the list.- Changing
timezoneaffects how futurescheduleDate/scheduleTimevalues are interpreted. Posts already scheduled keep the instant they were resolved to; they are not re-timed. Read the brand back withGET /social/brands/{brandId}to confirm.
Write operation: not executed against the live account. The request and response shown are built from the API schema.
curl -X POST 'https://listingsapi.com/api/v4/social/brands/update' \ -H "Authorization: API $LISTINGSAPI_KEY" \ -H 'Content-Type: application/json' \ -d '{ "input": { "profileId": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "profileName": "Jenny Home & Co.", "siteUrl": "https://jennyhomeandco.example", "brandHashtags": [ "jennyhome", "handmadefurniture", "shoplocal" ] } }'