/api/v4/social/brands/{brandId}/connections/linkObtenir un lien de connexion
Renvoie une URL hébergée de courte durée qui guide un utilisateur final dans la connexion d’une plateforme sociale à une marque.
Paramètres
Chemin
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
| brandId | string | obligatoire | Brand UUID the connection will be attached to. |
Corps
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
| channel | string | obligatoire | Platform to connect: `FACEBOOK`, `INSTAGRAM`, `TWITTER` (X), `LINKEDIN` or `PINTEREST`. |
| redirectUrl | string | obligatoire | Absolute https URL in your application the user is returned to when the flow finishes. Must be a URL you control. |
| errorUrl | string | facultatif | Absolute https URL the user is returned to if they cancel or the platform rejects the authorization. Defaults to `redirectUrl` when omitted. |
| state | string | facultatif | Opaque string echoed back on the return URL unchanged. Use it to correlate the return with the session that started the flow; it is not validated or interpreted. |
Exemple de requête
Corps prêt à coller. Remplacez les identifiants et valeurs d’exemple par les vôtres.
{ "channel": "INSTAGRAM", "redirectUrl": "https://app.example.com/social/connected", "errorUrl": "https://app.example.com/social/connect-failed", "state": "sess_9f2c1e64"}Réponses
200Link generated. Redirect the end user to `url`; `expiresIn` is how many seconds it stays valid.
{ "data": { "connectSocialAccount": { "status": "success", "url": "https://social.listingsapi.com/connect/start?token=bfac8e06-8d72-4810-9c50-ae7ee12a7b52", "title": null, "token": null, "expiresIn": 900 } }}200The link could not be issued. `status` is `failed` and `title` carries the reason: most often the account is at its connection cap (`SY95042`, counted on billable connections, so recent disconnects have not freed room) or the platform is not enabled for the account (`SY95044`).
{ "data": { "connectSocialAccount": { "status": "failed", "url": null, "title": "SY95042: Connection limit reached for this account", "token": null, "expiresIn": null } }}401Unauthenticated, missing or invalid API key.
404No brand with that ID on this account (`SY95043`).
Génère une URL de courte durée qui connecte une plateforme sociale à une marque. Vous ne manipulez jamais les identifiants OAuth de la plateforme : redirigez votre utilisateur final vers url, qui vous est renvoyé ; il remplit l’écran de consentement de la plateforme et choisit la Page, le tableau ou l’organisation sur lesquels publier, puis il est redirigé vers votre redirectUrl.
C’est la seule opération d’écriture de l’API Social dont le corps est à plat. Toutes les autres opérations d’écriture de l’API Social sont encapsulées dans un objet input ; celle-ci ne l’est pas. Envoyez channel, redirectUrl et, éventuellement, errorUrl et state au niveau racine.
Cas d’utilisation : connexion d’un canal en libre-service dans votre produit. Présentez les cinq plateformes à l’utilisateur et, lorsqu’il en choisit une, appelez cet endpoint avec le channel correspondant et un state qui identifie sa session. Redirigez-le vers url. Lorsqu’il revient sur votre redirectUrl avec status=success, interrogez périodiquement GET /social/brands/{brandId}/connections jusqu’à ce que le nouveau canal apparaisse, puis laissez-le rédiger sa première publication avec POST /social/posts.
Destination de retour de l’utilisateur
À la fin du parcours, l’utilisateur est redirigé vers votre redirectUrl (ou errorUrl), auquel sont ajoutés des paramètres de requête :
https://app.example.com/social/connected ?status=success &brandId=6f2c9a41-7b0e-4d55-9a2f-3c8e1d47b902 &platform=INSTAGRAM &state=sess_9f2c1e64 &connectedAccountId=b81d5b3c-4a90-4f6a-9c11-71e0dd2fa4a7Remarques.
- Le lien expire.
expiresInindique sa durée de validité en secondes. Il est à usage unique : générez-le au moment où l’utilisateur clique sur « connecter », jamais à l’avance, et ne le stockez jamais. Si l’utilisateur abandonne le parcours, appelez à nouveau cet endpoint pour obtenir une nouvelle URL. - La connexion est créée de manière asynchrone. L’utilisateur revient sur votre
redirectUrlun instant avant que l’enregistrement de la connexion existe ; une lecture de la liste des connexions effectuée immédiatement à son retour peut donc tout à fait ne pas la contenir. Interrogez périodiquement la liste des connexions pendant quelques secondes plutôt que de considérer la première lecture vide comme un échec. - Instagram nécessite un compte Business ou Creator lié à une Page Facebook. Un compte Instagram personnel ne peut pas être connecté, et l’écran de consentement de la plateforme n’en proposera pas. Si vos utilisateurs rencontrent ce problème, demandez-leur de convertir leur compte dans l’application Instagram et de le lier à la Page qu’ils gèrent, puis générez à nouveau le lien.
TWITTERdésigne X. La valeur d’énumération est restéeTWITTERpour assurer la rétrocompatibilité ; le produit est X. Les valeurs des plateformes sont des noms d’énumération en majuscules — l’envoi de"instagram"est rejeté.redirectUrleterrorUrldoivent être des URLhttpsabsolues. Une URL relative ouhttpest rejetée avecSY95049.- Les connexions sont la ressource comptabilisée. Chaque lien puise dans un quota commun à l’ensemble du compte — 20 connexions avec Social Launch, 125 avec Social Growth, plus cinq pour chaque pack de connexions à 25 $/mois, jusqu’à un plafond de 250 en libre-service. Le nombre de marques est illimité ; c’est donc toujours cet appel, jamais la création d’une marque, qui épuise la capacité disponible. Lorsque le quota est entièrement utilisé, la demande de lien renvoie
status: "failed"avecSY95042. Consultez Forfaits et options supplémentaires et obtenez votre capacité restante à partir deGET /social/limits. - Il s’agit de l’équivalent, dans l’API Social, du lien de connexion Facebook au niveau d’un établissement, mais ce sont deux produits distincts et les connexions établies dans l’un ne sont pas visibles dans l’autre.
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/<brandId>/connections/link' \ -H "Authorization: API $LISTINGSAPI_KEY" \ -H 'Content-Type: application/json' \ -d '{ "channel": "INSTAGRAM", "redirectUrl": "https://app.example.com/social/connected", "errorUrl": "https://app.example.com/social/connect-failed", "state": "sess_9f2c1e64" }'