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

# Exchange a device code

> Polling step to check whether the user has authorized the device.

## Usage

Exchanges an approved device code for an access token. This operation is public.

No API key is required.

## Example

```bash theme={null}
curl -X POST -H "Content-Type: application/json" \
  -d '{"device_code":"DEVICE_CODE","grant_type":"urn:ietf:params:oauth:grant-type:device_code"}' \
  "https://dejavu.plus/api/v1/auth/device/token"
```

## Parameters and response

The request body and responses are defined by the OpenAPI specification displayed on this page.

## Errors

See **Responses** for the operation-specific error codes and formats.

## Notes

The flow uses `grant_type=urn:ietf:params:oauth:grant-type:device_code`.


## OpenAPI

````yaml POST /auth/device/token
openapi: 3.1.0
info:
  title: dejaVu API V1
  description: >-
    API publique dejaVu V1 pour intégrer la collection, l’historique, les
    favoris, les notes, la watchlist, le scrobble, les listes, les chaînes, les
    connecteurs et les fonctions d’intégration.
  version: 1.0.0
servers:
  - url: https://dejavu.plus/api/v1
    description: Production
security:
  - ApiKeyHeader: []
  - BearerAuth: []
tags:
  - name: Collection
    description: Gérez votre collection personnelle de films et séries vus ou possédés.
  - name: History
    description: Consultez et gérez votre historique de visionnage.
  - name: Favorites
    description: Ajoutez et retirez des films et séries de vos favoris.
  - name: Ratings
    description: Notez et rédigez des avis sur vos films, séries, saisons et épisodes.
  - name: Watchlist
    description: Gérez votre liste de contenus à regarder.
  - name: Scrobble
    description: Suivez la progression de lecture en temps réel.
  - name: Up Next
    description: Obtenez les prochains épisodes à regarder pour les séries que vous suivez.
  - name: Lists
    description: Créez et gérez des listes personnalisées de films et séries.
  - name: Dashboard
    description: Expose la configuration du tableau de bord et le contenu des widgets.
  - name: User
    description: Informations de compte et statistiques.
  - name: Auth
    description: Authentification des appareils et gestion des jetons.
  - name: Channels
    description: Chaînes et univers accessibles à l’utilisateur.
  - name: Connectors
    description: Connecteurs utilisés par l’extension navigateur.
  - name: Kodi
    description: Import de bibliothèques Kodi.
  - name: Media
    description: Résolution et statut de médias.
paths:
  /auth/device/token:
    post:
      tags:
        - Auth
      summary: Échanger le code d'appareil contre un jeton
      description: Étape de 'polling' pour vérifier si l'utilisateur a autorisé l'appareil.
      operationId: exchangeDeviceToken
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeviceTokenRequest'
            example:
              device_code: DEVICE_CODE_FROM_PREVIOUS_STEP
              grant_type: urn:ietf:params:oauth:grant-type:device_code
      responses:
        '200':
          description: Jeton d’accès délivré
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeviceTokenResponse'
        '400':
          description: Requête invalide, autorisation en attente, expirée ou invalide.
        '403':
          description: Demande refusée par l’utilisateur.
        '429':
          description: Trop de polling pour ce device_code.
        '500':
          description: Erreur serveur
      security: []
components:
  schemas:
    DeviceTokenRequest:
      type: object
      required:
        - device_code
        - grant_type
      properties:
        device_code:
          type: string
        grant_type:
          type: string
          enum:
            - urn:ietf:params:oauth:grant-type:device_code
    DeviceTokenResponse:
      type: object
      required:
        - access_token
        - token_type
        - expires_in
      properties:
        access_token:
          type: string
        token_type:
          type: string
          example: Bearer
        expires_in:
          type: integer
          example: 7776000
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: Clé API dejaVu. pk_* = lecture seule ; sk_* = lecture et écriture.
    BearerAuth:
      type: http
      scheme: bearer
      description: 'Clé API dejaVu envoyée dans Authorization: Bearer <key>.'

````