POST/api/v4/social/brands/update

Update a brand

Updates a social brand's name, timezone, website, categories, hashtags or bio.

Requires an API key. See Authentication for header format and key rotation.

Parameters

Body

NameTypeRequiredDescription
inputobjectrequiredWrapper object. Every field below is a property of `input`, the entire body must be nested under it.
input.profileIdstringrequiredUUID of the brand to update. This is the same value used as the `brandId` path token elsewhere.
input.profileNamestringoptionalNew display name.
input.timezoneobjectoptionalNew timezone as `{ label, tzCode, name, utc }`. `tzCode` is the IANA identifier that schedules are resolved against.
input.businessIntentstringoptionalOne or two sentences describing what the business does.
input.categoriesarray of stringsoptionalBusiness categories. Replaces the stored list rather than merging into it.
input.siteUrlstringoptionalThe brand's website. Changing it queues a fresh read of the site.
input.logostringoptionalPublic https URL of the brand logo.
input.countryIsostringoptionalTwo-letter ISO country code.
input.biostringoptionalShort brand bio.
input.brandHashtagsarray of stringsoptionalReplaces the brand's hashtag list.
input.competitorHashtagsarray of stringsoptionalReplaces the competitor hashtag list.
input.contentPreferredLanguagestringoptionalPreferred language for generated content, e.g. `en`.

Sample request

Ready-to-paste body. Replace placeholder IDs and values with yours.

Request body
{  "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.
Response
{  "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`.
Response
{  "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 input object.
  • Check success, not the HTTP status. A rejected update returns HTTP 200 with success: false and the reason in error.
  • Only profileId is 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 is profileId, not brandIdbrandId is only ever a URL path token.
  • categories, brandHashtags and competitorHashtags are replaced, not merged, when you send them. Sending [] clears the list.
  • Changing timezone affects how future scheduleDate / scheduleTime values are interpreted. Posts already scheduled keep the instant they were resolved to; they are not re-timed. Read the brand back with GET /social/brands/{brandId} to confirm.

Write operation: not executed against the live account. The request and response shown are built from the API schema.

Request
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"      ]    }  }'