> ## Documentation Index
> Fetch the complete documentation index at: https://docs.so-me.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Connecter les comptes de vos clients

> Créez des utilisateurs finaux isolés et connectez leurs comptes sociaux via un flux OAuth hébergé

Chaque client de votre application correspond à un utilisateur final isolé de Social media studio. Les
connexions sociales et les publications sont rattachées à cet utilisateur final, tandis que votre clé partenaire
est rattachée à l'ensemble du projet développeur.

## Créer ou mettre à jour un utilisateur final

Utilisez comme `externalId` un identifiant immuable issu de votre propre base de données. Appeler
`upsert` à nouveau avec la même valeur met à jour le client et le réactive s'il
avait été désactivé.

```ts theme={null}
const endUser = await soMe.endUsers.upsert({
  externalId: "customer_123",
  displayName: "Acme Ltd",
  metadata: {
    plan: "pro",
    region: "eu",
  },
});
```

Stockez `endUser.id` avec la fiche de votre client. Les méthodes du SDK utilisent cet identifiant Social media studio,
et non `externalId`.

```ts theme={null}
const customers = await soMe.endUsers.list();
const customer = await soMe.endUsers.get(endUser.id);
```

Pour empêcher un client d'utiliser la plateforme intégrée :

```ts theme={null}
await soMe.endUsers.disable(endUser.id);
```

La désactivation désactive l'espace de travail isolé du client. Un `upsert` ultérieur avec
le même `externalId` le réactive.

## Créer une session de connexion

```ts theme={null}
const session = await soMe.connectSessions.create({
  endUserId: endUser.id,
  platform: "THREADS",
  returnUrl: "https://app.example.com/settings/social",
});
```

Les sessions de connexion expirent au bout de 10 minutes et ne peuvent être utilisées que pour l'utilisateur
final indiqué. Redirigez le client vers le `connectUrl` renvoyé :

```ts theme={null}
return Response.redirect(session.connectUrl!);
```

> [!WARNING]
>
> L'origine de `returnUrl` doit correspondre exactement à une origine enregistrée sur votre projet
> partenaire, y compris le schéma, le nom d'hôte et le port. Les chemins et les paramètres de requête peuvent
> varier. Les URL de retour contenant des identifiants intégrés sont rejetées.

## Gérer la fin du flux

Lorsque le flux hébergé atteint un état terminal, le client voit un bouton de retour.
La destination reçoit ces paramètres de requête :

| Paramètre | Valeur |
| - | - |
| `social_connect` | `success` ou `failed` |
| `end_user_id` | L'identifiant de l'utilisateur final Social media studio |
| `connection_id` | L'identifiant de la nouvelle connexion en cas de succès |

Considérez les paramètres du navigateur comme une notification, pas comme une preuve de réussite. Confirmez le
résultat depuis votre backend à l'aide de l'identifiant de la session de connexion que vous avez créée :

```ts theme={null}
const result = await soMe.connectSessions.get(session.id);

if (result.status === "completed" && result.connectionId) {
  // Persist result.connectionId for this customer.
}
```

La page hébergée envoie également un `postMessage` à la fenêtre qui l'a ouverte lorsqu'elle est utilisée dans une popup :

```ts theme={null}
window.addEventListener("message", (event) => {
  if (event.origin !== "https://api.so-me.studio") return;
  if (event.data?.type !== "some.social_connect.completed") return;

  // Ask your backend to verify the connect session.
});
```

## Lister et déconnecter des comptes

```ts theme={null}
const connections = await soMe.connections.list(endUser.id);

await soMe.connections.disconnect(endUser.id, connections[0].id);
```

Transmettez toujours l'identifiant de l'utilisateur final propriétaire de la connexion. Social media studio rejette les tentatives de
lecture ou de déconnexion d'une connexion appartenant à un autre client.

## États de session

| Statut | Signification |
| - | - |
| `created` | Prête à être ouverte par le client |
| `started` | Le flux OAuth hébergé a commencé |
| `completed` | Compte connecté ; `connectionId` est disponible |
| `failed` | L'autorisation a été refusée ou n'a pas pu aboutir |
| `expired` | La fenêtre de 10 minutes de la session s'est écoulée |

Créez une nouvelle session après `failed` ou `expired` ; une session terminée ne peut pas être
relancée.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.