# Revocar nivel de acceso

> Elimina un nivel de acceso de un usuario final de tu app en Adapty.

## OpenAPI

```yaml
/api-specs/adapty-api.yaml post /api/v2/server-side-api/purchase/profile/revoke/access-level/
openapi: 3.1.0
info:
  title: API de servidor de Adapty
  version: 1.0.0
servers:
  - url: https://api.adapty.io
    description: Servidor de producción
paths:
  /api/v2/server-side-api/purchase/profile/revoke/access-level/:
    post:
      summary: Revocar nivel de acceso
      description: Elimina un nivel de acceso de un usuario final de tu app en Adapty.
      operationId: revokeAccessLevel
      tags:
        - Purchase
      security:
        - apikeyAuth: []
      parameters:
        - name: adapty-customer-user-id
          in: header
          required: false
          schema:
            type: string
          description: El ID único del cliente en tu sistema. Se requiere `adapty-customer-user-id` o `adapty-profile-id`.
        - name: adapty-profile-id
          in: header
          required: false
          schema:
            type: string
          description: El ID único del perfil en tu sistema. La mejor opción si trabajas con perfiles anónimos. Se requiere `adapty-customer-user-id` o `adapty-profile-id`.
      responses:
        "200":
          description: Nivel de acceso revocado correctamente
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProfileResponse"
        "400":
          description: Solicitud incorrecta
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: No autorizado
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: Perfil no encontrado
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "500":
          description: Error interno del servidor
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RevokeAccessRequest"
            examples:
              immediate_revoke:
                summary: Revocar acceso inmediatamente
                value:
                  access_level_id: premium
              scheduled_revoke:
                summary: Programar la revocación del acceso
                value:
                  access_level_id: premium
                  revoke_at: "2024-12-31T23:59:59Z"
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: Origen del error
              errors:
                type: array
                items:
                  type: string
                description: Array de mensajes de error
        error_code:
          type: string
          description: Nombre corto del error
        status_code:
          type: integer
          description: Código de estado HTTP
      required:
        - errors
        - error_code
        - status_code
    RevokeAccessRequest:
      type: object
      properties:
        access_level_id:
          type: string
          description: ID del nivel de acceso de pago configurado en la página de Niveles de acceso
        revoke_at:
          type: string
          format: date-time
          nullable: true
          description: Especifica cuándo expirará el nivel de acceso. Para revocar el acceso inmediatamente, omite este campo o establécelo en null. El valor predeterminado es null.
      required:
        - access_level_id
    Profile:
      type: object
      properties:
        app_id:
          type: string
          format: uuid
          description: El ID interno de tu app
        profile_id:
          type: string
          format: uuid
          description: ID de perfil de Adapty
        customer_user_id:
          type: string
          nullable: true
          description: El ID de tu usuario en tu sistema
        total_revenue_usd:
          type: number
          format: float
          description: Un valor decimal que representa los ingresos totales en USD generados por el perfil
        segment_hash:
          type: string
          description: Parámetro interno
        timestamp:
          type: integer
          format: int64
          description: Hora de la respuesta en milisegundos; necesario para resolver una condición de carrera
        custom_attributes:
          type: array
          items:
            $ref: "#/components/schemas/CustomAttribute"
          description: Se permite un máximo de 30 atributos personalizados por perfil
        access_levels:
          type: array
          items:
            $ref: "#/components/schemas/AccessLevel"
          description: Array de objetos de nivel de acceso. Array vacío si el cliente no tiene niveles de acceso
        subscriptions:
          type: array
          items:
            $ref: "#/components/schemas/Subscription"
          description: Array de objetos de suscripción. Array vacío si el cliente no tiene suscripciones
        non_subscriptions:
          type: array
          items:
            $ref: "#/components/schemas/NonSubscription"
          description: Array de objetos de compras no suscritas. Array vacío si el cliente no tiene compras
      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 clave debe ser una cadena de texto de no más de 30 caracteres. Solo se permiten letras, números, guiones, puntos y guiones bajos
        value:
          oneOf:
            - type: string
            - type: number
          description: El valor del atributo no debe superar los 50 caracteres. Solo se permiten cadenas de texto y números decimales como valores
      required:
        - key
        - value
    AccessLevel:
      type: object
      properties:
        access_level_id:
          type: string
          description: Identificador del nivel de acceso
        store:
          type: string
          description: Store donde se adquirió el nivel de acceso
        store_product_id:
          type: string
          description: ID del producto en el store
        store_base_plan_id:
          type: string
          nullable: true
          description: ID del plan base en el store
        store_transaction_id:
          type: string
          description: ID de la transacción en el store
        store_original_transaction_id:
          type: string
          description: ID de la transacción original en el store
        offer:
          allOf:
            - $ref: "#/components/schemas/OfferDTO"
          nullable: true
          description: Detalles de la oferta, si se aplicó una oferta promocional o introductoria
        starts_at:
          type: string
          format: date-time
          nullable: true
          description: Cuándo comienza el nivel de acceso
        purchased_at:
          type: string
          format: date-time
          description: Cuándo se adquirió el nivel de acceso
        originally_purchased_at:
          type: string
          format: date-time
          description: Cuándo se adquirió originalmente el nivel de acceso
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: Cuándo expira el nivel de acceso
        renewal_cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: Cuándo se canceló la renovación
        billing_issue_detected_at:
          type: string
          format: date-time
          nullable: true
          description: Cuándo se detectó el problema de facturación
        is_in_grace_period:
          type: boolean
          description: Si el nivel de acceso está en período de gracia
        cancellation_reason:
          type: string
          nullable: true
          description: Motivo de la cancelación
    Subscription:
      type: object
      properties:
        store:
          type: string
          description: Store donde se adquirió la suscripción
        store_product_id:
          type: string
          description: ID del producto en el store
        store_base_plan_id:
          type: string
          nullable: true
          description: ID del plan base en el store
        store_transaction_id:
          type: string
          description: ID de la transacción en el store
        store_original_transaction_id:
          type: string
          description: ID de la transacción original en el store
        offer:
          allOf:
            - $ref: "#/components/schemas/OfferDTO"
          nullable: true
          description: Detalles de la oferta, si se aplicó una oferta promocional o introductoria
        environment:
          type: string
          description: Entorno (Sandbox, Production)
        purchased_at:
          type: string
          format: date-time
          description: Cuándo se adquirió la suscripción
        originally_purchased_at:
          type: string
          format: date-time
          description: Cuándo se adquirió originalmente la suscripción
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: Cuándo expira la suscripción
        renewal_cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: Cuándo se canceló la renovación
        billing_issue_detected_at:
          type: string
          format: date-time
          nullable: true
          description: Cuándo se detectó el problema de facturación
        is_in_grace_period:
          type: boolean
          description: Si la suscripción está en período de gracia
        cancellation_reason:
          type: string
          nullable: true
          description: Motivo de la cancelación
    NonSubscription:
      type: object
      properties:
        purchase_id:
          type: string
          format: uuid
          description: Identificador único de la compra
        store:
          type: string
          description: Store donde se realizó la compra
        store_product_id:
          type: string
          description: ID del producto en el store
        store_base_plan_id:
          type: string
          nullable: true
          description: ID del plan base en el store
        store_transaction_id:
          type: string
          description: ID de la transacción en el store
        store_original_transaction_id:
          type: string
          description: ID de la transacción original en el store
        purchased_at:
          type: string
          format: date-time
          description: Cuándo se realizó la compra
        environment:
          type: string
          description: Entorno (Sandbox, Production)
        is_refund:
          type: boolean
          description: Si se trata de un reembolso
        is_consumable:
          type: boolean
          description: Si se trata de una compra consumible
    OfferDTO:
      type: object
      properties:
        category:
          type: string
          enum:
            - introductory
            - promotional
            - offer_code
            - win_back
          description: Categoría de la oferta
        type:
          type: string
          enum:
            - free_trial
            - pay_as_you_go
            - pay_up_front
          description: Tipo de oferta
        id:
          type: string
          nullable: true
          description: ID de la oferta
      required:
        - category
        - type
  securitySchemes:
    apikeyAuth:
      type: apiKey
      name: Authorization
      in: header
      default: Api-Key {Your secret API key}
      description: |
        Las solicitudes a la API deben autenticarse con tu clave API secreta en la cabecera **Authorization**
        con el valor `Api-Key {your_secret_api_key}`, por ejemplo,
        `Api-Key secret_live_...`. Puedes encontrar esta clave en el Adapty Dashboard ->
        **App Settings** -> pestaña **General** -> sección **API keys**.
```
