POST/api/v4/social/brands

Create 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.

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.profileNamestringrequiredDisplay name of the brand. Shown wherever the brand is listed and used as the default author name in the composer.
input.timezoneobjectrequiredThe 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.businessIntentstringoptionalOne or two sentences describing what the business does, used to tailor content suggestions. Defaults to `general` when omitted.
input.categoriesarray of stringsoptionalBusiness categories for the brand, e.g. `["Furniture Store"]`. Defaults to an empty list.
input.siteUrlstringoptionalThe brand's website. Used to enrich content suggestions; setting it also queues a one-off read of the site.
input.logostringoptionalPublic https URL of the brand logo.
input.countryIsostringoptionalTwo-letter ISO country code for the brand, e.g. `US`.
input.biostringoptionalShort brand bio.
input.brandHashtagsarray of stringsoptionalHashtags that belong to the brand, offered as suggestions in the composer.
input.competitorHashtagsarray of stringsoptionalCompetitor hashtags to track alongside the brand's own.
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": {    "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.
Response
{  "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`.
Response
{  "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 input object. 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 missing profileName or an unknown timezone.tzCode — comes back as HTTP 200 with success: false and the reason in error. Only treat the call as successful when success is true.
  • Only profileName and timezone are required. businessIntent and categories default to general and an empty list, so an integration that has no equivalent of those fields can leave them out entirely.
  • timezone.tzCode is not decoration. A post scheduled with scheduleDate + scheduleTime is 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 brandId path token and as the socialProfileId body field: brandId is 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/limits to 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.

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