> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gpt-de-babi.perfproai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Créer un token utilisateur

> À appeler exclusivement depuis votre backend. external_user_id doit provenir de votre session utilisateur authentifiée et ne doit pas contenir de PII.



## OpenAPI

````yaml /openapi.yaml post /api/partners/v1/tokens
openapi: 3.1.0
info:
  title: GPT de Babi Partner API
  version: 1.0.0
  description: >-
    Intégrez GPT de Babi dans votre produit. Les identifiants application
    restent sur votre backend et sont échangés contre des tokens utilisateur à
    courte durée de vie.
  contact:
    name: GPT de Babi Developers
    url: https://www.gpt-de-babi.perfproai.com/developers/
servers:
  - url: https://gpt-de-babi.perfproai.com
    description: API publique (l'environnement est déterminé par l'application partenaire)
security: []
tags:
  - name: Authentication
  - name: Conversations
  - name: Messages
  - name: Privacy
  - name: Capabilities
paths:
  /api/partners/v1/tokens:
    post:
      tags:
        - Authentication
      summary: Créer un token utilisateur
      description: >-
        À appeler exclusivement depuis votre backend. external_user_id doit
        provenir de votre session utilisateur authentifiée et ne doit pas
        contenir de PII.
      operationId: createPartnerUserToken
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenRequest'
            example:
              external_user_id: usr_8f32a9
              locale: fr-CI
              timezone: Africa/Abidjan
      responses:
        '201':
          description: Token utilisateur créé
          headers:
            Cache-Control:
              schema:
                type: string
              example: no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '413':
          $ref: '#/components/responses/RequestTooLarge'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/Unavailable'
      security:
        - BasicAuth: []
components:
  schemas:
    TokenRequest:
      type: object
      additionalProperties: false
      required:
        - external_user_id
      properties:
        external_user_id:
          type: string
          minLength: 1
          maxLength: 255
          description: Identifiant stable et opaque dérivé par votre backend.
        locale:
          type: string
          example: fr-CI
        timezone:
          type: string
          example: Africa/Abidjan
    TokenResponse:
      type: object
      required:
        - access_token
        - token_type
        - expires_in
        - expires_at
        - scopes
        - user
      properties:
        access_token:
          type: string
          example: gdbu_REMPLACEZ_MOI
        token_type:
          type: string
          const: Bearer
        expires_in:
          type: integer
          example: 3600
        expires_at:
          type: string
          format: date-time
        scopes:
          type: array
          items:
            type: string
          example:
            - chat:read
            - chat:write
            - feedback:write
        user:
          type: object
          required:
            - id
          properties:
            id:
              type: string
              format: uuid
    ErrorEnvelope:
      type: object
      required:
        - error
      properties:
        error:
          $ref: '#/components/schemas/APIError'
    APIError:
      type: object
      required:
        - code
        - message
        - retryable
        - request_id
      properties:
        code:
          type: string
        message:
          type: string
        retryable:
          type: boolean
        request_id:
          type: string
          format: uuid
  responses:
    BadRequest:
      description: Corps JSON invalide
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Unauthorized:
      description: Identifiants absents, invalides, expirés ou révoqués
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    RequestTooLarge:
      description: Corps supérieur à la taille autorisée
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    RateLimited:
      description: Limite de débit dépassée
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
    Unavailable:
      description: Protection ou traitement temporairement indisponible
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorEnvelope'
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: client_id et client_secret de l'application, serveur uniquement.

````