/api/v4/social/brandsCreate a brand
Creates a social brand, the container that owns connected social accounts and the posts published from them. Brands are unlimited on API plans.
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.profileName | string | required | Display name of the brand. Shown wherever the brand is listed and used as the default author name in the composer. |
| input.timezone | object | required | The brand's timezone as `{ label, tzCode, name, utc }`, all strings. `tzCode` is the one that matters: it is the IANA identifier the API validates and uses to interpret every `scheduleDate` / `scheduleTime` on this brand's posts. The other three are display labels. |
| input.businessIntent | string | optional | One or two sentences describing what the business does, used to tailor content suggestions. Defaults to `general` when omitted. |
| input.categories | array of strings | optional | Business categories for the brand, e.g. `["Furniture Store"]`. Defaults to an empty list. |
| input.siteUrl | string | optional | The brand's website. Used to enrich content suggestions; setting it also queues a one-off read of the site. |
| input.logo | string | optional | Public https URL of the brand logo. |
| input.countryIso | string | optional | Two-letter ISO country code for the brand, e.g. `US`. |
| input.bio | string | optional | Short brand bio. |
| input.brandHashtags | array of strings | optional | Hashtags that belong to the brand, offered as suggestions in the composer. |
| input.competitorHashtags | array of strings | optional | Competitor hashtags to track alongside the brand's own. |
| 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": { "profileName": "Jenny Home", "timezone": { "label": "(GMT-05:00) Eastern Time", "tzCode": "America/New_York", "name": "Eastern Standard Time", "utc": "-05:00" }, "businessIntent": "A family-run home furnishings store selling handmade furniture and textiles.", "categories": ["Furniture Store", "Home Goods"], "siteUrl": "https://jennyhome.example", "countryIso": "US", "bio": "Handmade furniture for real homes.", "brandHashtags": ["jennyhome", "handmadefurniture"] }}Responses
200Brand created. `socialProfile.id` is the `brandId` every other Social endpoint takes.
{ "data": { "createSocialProfile": { "success": true, "error": null, "socialProfile": { "id": "6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902", "profileName": "Jenny Home", "archived": false, "logo": null, "profileLogo": null, "siteUrl": "https://jennyhome.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"], "competitorHashtags": [], "connectedChannelCount": 0, "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": { "createSocialProfile": { "success": false, "error": { "message": "SY90003: timezone.tzCode is not a valid IANA identifier", "code": "SY90003", "contextInfo": null }, "socialProfile": null } }}401Unauthenticated, missing or invalid API key.
Creates a brand: the top-level object in the Social API. A brand owns the social accounts you connect to it and every post published from them. Nothing else in the Social API can be called until at least one brand exists, so this is the first request in any Social integration.
Use case: onboarding a client into social publishing. When a customer signs
up in your product, create one brand per business they want to publish for.
Store the returned socialProfile.id against your own record of that business:
it is the brandId path token in
POST /social/brands/{brandId}/connections/link
and GET /social/brands/{brandId}/posts, and the
socialProfileId body field on every post you create. Then send the user
through the hosted connection link for each
platform they want to publish to.
Notes.
- The request body must be wrapped in an
inputobject. Every write in the Social API is wrapped this way, with one exception: the connection link takes a flat body. - Check
success, not the HTTP status. A validation failure — a missingprofileNameor an unknowntimezone.tzCode— comes back asHTTP 200withsuccess: falseand the reason inerror. Only treat the call as successful whensuccessistrue. - Only
profileNameandtimezoneare required.businessIntentandcategoriesdefault togeneraland an empty list, so an integration that has no equivalent of those fields can leave them out entirely. timezone.tzCodeis not decoration. A post scheduled withscheduleDate+scheduleTimeis interpreted in the brand's zone, not the caller's and not UTC. Changing it later does not re-time posts already scheduled.- The brand always belongs to the account behind the API key. There is no way to create a brand in another account: any account identifier in the body is ignored.
- Brand IDs are plain UUIDs. They are not the Base64 relay IDs used by
Locations and location Posts, so do not encode or decode them. The same ID
appears as the
brandIdpath token and as thesocialProfileIdbody field:brandIdis only ever a URL token, never a body field. - There is no brand limit on an API plan. Brands are unlimited and
unmetered, so this call is never refused for a cap and you do not need to
check headroom before creating one. What is metered is connections — one
social account linked to one brand on one network. See
Plans and add-ons for the connection tiers and the
price of a connection pack, and
GET /social/limitsto read your connection headroom before you send a user through a connection link.
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' \ -H "Authorization: API $LISTINGSAPI_KEY" \ -H 'Content-Type: application/json' \ -d '{ "input": { "profileName": "Jenny Home", "timezone": { "label": "(GMT-05:00) Eastern Time", "tzCode": "America/New_York", "name": "Eastern Standard Time", "utc": "-05:00" }, "businessIntent": "A family-run home furnishings store selling handmade furniture and textiles.", "categories": [ "Furniture Store", "Home Goods" ], "siteUrl": "https://jennyhome.example", "countryIso": "US", "bio": "Handmade furniture for real homes.", "brandHashtags": [ "jennyhome", "handmadefurniture" ] } }'