/api/v4/social/brandsCréer une marque
Crée une marque sociale regroupant les comptes sociaux connectés et leurs publications. Marques illimitées avec les forfaits API.
Paramètres
Corps
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
| input | object | obligatoire | Wrapper object. Every field below is a property of `input`, the entire body must be nested under it. |
| input.profileName | string | obligatoire | Display name of the brand. Shown wherever the brand is listed and used as the default author name in the composer. |
| input.timezone | object | obligatoire | 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 | facultatif | One or two sentences describing what the business does, used to tailor content suggestions. Defaults to `general` when omitted. |
| input.categories | array of strings | facultatif | Business categories for the brand, e.g. `["Furniture Store"]`. Defaults to an empty list. |
| input.siteUrl | string | facultatif | The brand's website. Used to enrich content suggestions; setting it also queues a one-off read of the site. |
| input.logo | string | facultatif | Public https URL of the brand logo. |
| input.countryIso | string | facultatif | Two-letter ISO country code for the brand, e.g. `US`. |
| input.bio | string | facultatif | Short brand bio. |
| input.brandHashtags | array of strings | facultatif | Hashtags that belong to the brand, offered as suggestions in the composer. |
| input.competitorHashtags | array of strings | facultatif | Competitor hashtags to track alongside the brand's own. |
| input.contentPreferredLanguage | string | facultatif | Preferred language for generated content, e.g. `en`. |
Exemple de requête
Corps prêt à coller. Remplacez les identifiants et valeurs d’exemple par les vôtres.
{ "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"] }}Réponses
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.
Crée une marque : l’objet de premier niveau de l’API Social. Une marque possède les comptes sociaux que vous y connectez et toutes les publications publiées depuis ces comptes. Aucun autre appel à l’API Social n’est possible tant qu’il n’existe pas au moins une marque ; il s’agit donc de la première requête de toute intégration Social.
Cas d’utilisation : intégrer un client à la publication sur les réseaux sociaux. Lorsqu’un client s’inscrit à votre produit, créez une marque pour chaque entreprise pour laquelle il souhaite publier. Enregistrez la valeur socialProfile.id renvoyée dans votre propre enregistrement de cette entreprise : elle correspond au paramètre de chemin brandId dans POST /social/brands/{brandId}/connections/link et GET /social/brands/{brandId}/posts, ainsi qu’au champ socialProfileId du corps de chaque publication que vous créez. Dirigez ensuite l’utilisateur vers le lien de connexion hébergé pour chaque plateforme sur laquelle il souhaite publier.
Remarques.
- Le corps de la requête doit être encapsulé dans un objet
input. Toutes les opérations d’écriture de l’API Social utilisent cette encapsulation, à une exception près : le lien de connexion accepte un corps sans encapsulation. - Vérifiez
success, pas le statut HTTP. Un échec de validation — une valeurprofileNamemanquante ou une valeurtimezone.tzCodeinconnue — renvoieHTTP 200avecsuccess: falseet le motif danserror. Ne considérez l’appel comme réussi que lorsquesuccessvauttrue. - Seuls
profileNameettimezonesont obligatoires. Les valeurs par défaut debusinessIntentet decategoriessont respectivementgeneralet une liste vide ; une intégration qui ne possède aucun équivalent de ces champs peut donc les omettre entièrement. timezone.tzCoden’est pas un simple élément décoratif. Une publication programmée avecscheduleDate+scheduleTimeest interprétée dans le fuseau horaire de la marque, et non dans celui de l’appelant ni en UTC. Une modification ultérieure de ce fuseau horaire ne change pas l’heure des publications déjà programmées.- La marque appartient toujours au compte associé à la clé API. Il n’est pas possible de créer une marque dans un autre compte : tout identifiant de compte présent dans le corps est ignoré.
- Les identifiants de marque sont de simples UUID. Ce ne sont pas les identifiants Relay en Base64 utilisés par Locations et les Posts d’établissement ; ne les encodez et ne les décodez donc pas. Le même identifiant apparaît comme paramètre de chemin
brandIdet comme champsocialProfileIddu corps :brandIdest toujours un paramètre d’URL, jamais un champ du corps. - Les forfaits API n’imposent aucune limite au nombre de marques. Les marques sont illimitées et ne sont pas décomptées ; cet appel n’est donc jamais refusé en raison d’un plafond, et vous n’avez pas besoin de vérifier la capacité restante avant d’en créer une. Ce sont les connexions qui sont décomptées — un compte social lié à une marque sur un réseau. Consultez Forfaits et options supplémentaires pour connaître les paliers de connexions et le prix d’un pack de connexions, et
GET /social/limitspour vérifier votre capacité de connexion restante avant de diriger un utilisateur vers un lien de connexion.
Opération d’écriture : non exécutée sur le compte réel. La requête et la réponse présentées sont construites à partir du schéma de l’API.
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" ] } }'