# Accorder un niveau d'accès

> Fournit un niveau d'accès à votre utilisateur final sans fournir d'informations sur la transaction. Cela est utile si vous avez des bonus pour les parrainages ou d'autres événements liés à vos produits. Le niveau d'accès fourni par cette méthode ne sera pas reflété dans vos analyses. Il sera envoyé uniquement à l'intégration webhook, et n'apparaîtra dans le fil d'événements que dans ce cas.

## OpenAPI

```yaml
/api-specs/adapty-api.yaml post /api/v2/server-side-api/purchase/profile/grant/access-level/
openapi: 3.1.0
info:
  title: API côté serveur Adapty
  version: 1.0.0
servers:
  - url: https://api.adapty.io
    description: Serveur de production
paths:
  /api/v2/server-side-api/purchase/profile/grant/access-level/:
    post:
      summary: Accorder un niveau d'accès
      description: Fournit un niveau d'accès à votre utilisateur final sans fournir d'informations sur la transaction. Cela est utile si vous avez des bonus pour les parrainages ou d'autres événements liés à vos produits. Le niveau d'accès fourni par cette méthode ne sera pas reflété dans vos analyses. Il sera envoyé uniquement à l'intégration webhook, et n'apparaîtra dans le fil d'événements que dans ce cas.
      operationId: grantAccessLevel
      tags:
        - Purchase
      security:
        - apikeyAuth: []
      parameters:
        - name: adapty-customer-user-id
          in: header
          required: false
          schema:
            type: string
          description: L'identifiant unique du client dans votre système. `adapty-customer-user-id` ou `adapty-profile-id` est requis.
        - name: adapty-profile-id
          in: header
          required: false
          schema:
            type: string
          description: L'identifiant unique du profil dans votre système. Meilleure option si vous travaillez avec des profils anonymes. `adapty-customer-user-id` ou `adapty-profile-id` est requis.
      responses:
        "200":
          description: Niveau d'accès accordé avec succès
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProfileResponse"
        "400":
          description: Requête incorrecte
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: Non autorisé
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: Profil introuvable
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "500":
          description: Erreur interne du serveur
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GrantAccessRequest"
            examples:
              immediate_grant:
                summary: Accorder l'accès immédiatement
                value:
                  access_level_id: premium
              scheduled_grant:
                summary: Accorder l'accès avec des dates de début et de fin
                value:
                  access_level_id: premium
                  starts_at: "2024-01-01T00:00:00Z"
                  expires_at: "2024-12-31T23:59:59Z"
              lifetime_grant:
                summary: Accorder un accès à vie
                value:
                  access_level_id: premium
                  starts_at: "2024-01-01T00:00:00Z"
components:
  schemas:
    ProfileResponse:
      type: object
      properties:
        data:
          $ref: "#/components/schemas/Profile"
      required:
        - data
    ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              source:
                type: string
                nullable: true
                description: Source de l'erreur
              errors:
                type: array
                items:
                  type: string
                description: Tableau de messages d'erreur
        error_code:
          type: string
          description: Nom court de l'erreur
        status_code:
          type: integer
          description: Code de statut HTTP
      required:
        - errors
        - error_code
        - status_code
    GrantAccessRequest:
      type: object
      properties:
        access_level_id:
          type: string
          description: Identifiant du niveau d'accès payant configuré dans la page des niveaux d'accès
        starts_at:
          type: string
          format: date-time
          nullable: true
          description: La date et l'heure à laquelle le niveau d'accès sera actif. Peut être dans le futur. La valeur par défaut est null.
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: La date et l'heure à laquelle le niveau d'accès expirera. Peut être dans le passé et peut être null pour un accès à vie. La valeur par défaut est null.
      required:
        - access_level_id
    Profile:
      type: object
      properties:
        app_id:
          type: string
          format: uuid
          description: L'identifiant interne de votre application
        profile_id:
          type: string
          format: uuid
          description: Identifiant de profil Adapty
        customer_user_id:
          type: string
          nullable: true
          description: L'identifiant de votre utilisateur dans votre système
        total_revenue_usd:
          type: number
          format: float
          description: Valeur décimale représentant le chiffre d'affaires total en USD généré par le profil
        segment_hash:
          type: string
          description: Paramètre interne
        timestamp:
          type: integer
          format: int64
          description: Temps de réponse en millisecondes, nécessaire pour résoudre une condition de concurrence
        custom_attributes:
          type: array
          items:
            $ref: "#/components/schemas/CustomAttribute"
          description: Maximum de 30 attributs personnalisés autorisés pour le profil
        access_levels:
          type: array
          items:
            $ref: "#/components/schemas/AccessLevel"
          description: Tableau d'objets de niveau d'accès. Tableau vide si le client n'a aucun niveau d'accès
        subscriptions:
          type: array
          items:
            $ref: "#/components/schemas/Subscription"
          description: Tableau d'objets d'abonnement. Tableau vide si le client n'a aucun abonnement
        non_subscriptions:
          type: array
          items:
            $ref: "#/components/schemas/NonSubscription"
          description: Tableau d'objets hors abonnement. Tableau vide si le client n'a aucun achat
      required:
        - app_id
        - profile_id
        - customer_user_id
        - total_revenue_usd
        - segment_hash
        - timestamp
        - custom_attributes
        - access_levels
        - subscriptions
        - non_subscriptions
    CustomAttribute:
      type: object
      properties:
        key:
          type: string
          maxLength: 30
          description: La clé doit être une chaîne de caractères d'au plus 30 caractères. Seuls les lettres, chiffres, tirets, points et underscores sont autorisés
        value:
          oneOf:
            - type: string
            - type: number
          description: La valeur de l'attribut doit comporter au plus 50 caractères. Seules les chaînes de caractères et les décimaux sont autorisés comme valeurs
      required:
        - key
        - value
    AccessLevel:
      type: object
      properties:
        access_level_id:
          type: string
          description: Identifiant du niveau d'accès
        store:
          type: string
          description: Store où le niveau d'accès a été acheté
        store_product_id:
          type: string
          description: Identifiant du produit dans le store
        store_base_plan_id:
          type: string
          nullable: true
          description: Identifiant du plan de base dans le store
        store_transaction_id:
          type: string
          description: Identifiant de transaction dans le store
        store_original_transaction_id:
          type: string
          description: Identifiant de transaction originale dans le store
        offer:
          allOf:
            - $ref: "#/components/schemas/OfferDTO"
          nullable: true
          description: Détails de l'offre, si une offre promotionnelle ou de lancement a été appliquée
        starts_at:
          type: string
          format: date-time
          nullable: true
          description: Quand le niveau d'accès commence
        purchased_at:
          type: string
          format: date-time
          description: Quand le niveau d'accès a été acheté
        originally_purchased_at:
          type: string
          format: date-time
          description: Quand le niveau d'accès a été acheté initialement
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: Quand le niveau d'accès expire
        renewal_cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: Quand le renouvellement a été annulé
        billing_issue_detected_at:
          type: string
          format: date-time
          nullable: true
          description: Quand un problème de facturation a été détecté
        is_in_grace_period:
          type: boolean
          description: Si le niveau d'accès est en délai de grâce
        cancellation_reason:
          type: string
          nullable: true
          description: Raison de l'annulation
    Subscription:
      type: object
      properties:
        store:
          type: string
          description: Store où l'abonnement a été acheté
        store_product_id:
          type: string
          description: Identifiant du produit dans le store
        store_base_plan_id:
          type: string
          nullable: true
          description: Identifiant du plan de base dans le store
        store_transaction_id:
          type: string
          description: Identifiant de transaction dans le store
        store_original_transaction_id:
          type: string
          description: Identifiant de transaction originale dans le store
        offer:
          allOf:
            - $ref: "#/components/schemas/OfferDTO"
          nullable: true
          description: Détails de l'offre, si une offre promotionnelle ou de lancement a été appliquée
        environment:
          type: string
          description: Environnement (Sandbox, Production)
        purchased_at:
          type: string
          format: date-time
          description: Quand l'abonnement a été acheté
        originally_purchased_at:
          type: string
          format: date-time
          description: Quand l'abonnement a été acheté initialement
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: Quand l'abonnement expire
        renewal_cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: Quand le renouvellement a été annulé
        billing_issue_detected_at:
          type: string
          format: date-time
          nullable: true
          description: Quand un problème de facturation a été détecté
        is_in_grace_period:
          type: boolean
          description: Si l'abonnement est en délai de grâce
        cancellation_reason:
          type: string
          nullable: true
          description: Raison de l'annulation
    NonSubscription:
      type: object
      properties:
        purchase_id:
          type: string
          format: uuid
          description: Identifiant unique de l'achat
        store:
          type: string
          description: Store où l'achat a été effectué
        store_product_id:
          type: string
          description: Identifiant du produit dans le store
        store_base_plan_id:
          type: string
          nullable: true
          description: Identifiant du plan de base dans le store
        store_transaction_id:
          type: string
          description: Identifiant de transaction dans le store
        store_original_transaction_id:
          type: string
          description: Identifiant de transaction originale dans le store
        purchased_at:
          type: string
          format: date-time
          description: Quand l'achat a été effectué
        environment:
          type: string
          description: Environnement (Sandbox, Production)
        is_refund:
          type: boolean
          description: Si cet achat est un remboursement
        is_consumable:
          type: boolean
          description: Si cet achat est un consommable
    OfferDTO:
      type: object
      properties:
        category:
          type: string
          enum:
            - introductory
            - promotional
            - offer_code
            - win_back
          description: Catégorie de l'offre
        type:
          type: string
          enum:
            - free_trial
            - pay_as_you_go
            - pay_up_front
          description: Type d'offre
        id:
          type: string
          nullable: true
          description: Identifiant de l'offre
      required:
        - category
        - type
  securitySchemes:
    apikeyAuth:
      type: apiKey
      name: Authorization
      in: header
      default: Api-Key {Your secret API key}
      description: |
        Les requêtes API doivent être authentifiées par votre clé API secrète via l'en-tête **Authorization** 
        avec la valeur `Api-Key {your_secret_api_key}`, par exemple, 
        `Api-Key secret_live_...`. Retrouvez cette clé dans l'Adapty Dashboard -> 
        **App Settings** -> onglet **General** -> section **API keys**.
```
