# アクセスレベルを付与する

> トランザクション情報を提供せずにエンドユーザーにアクセスレベルを付与します。紹介報酬やその他のプロダクト関連イベントに便利です。このメソッドで付与されたアクセスレベルはアナリティクスには反映されません。Webhook インテグレーションにのみ送信され、その場合のみイベントフィードに表示されます。

## OpenAPI

```yaml
/api-specs/adapty-api.yaml post /api/v2/server-side-api/purchase/profile/grant/access-level/
openapi: 3.1.0
info:
  title: Adapty サーバーサイド API
  version: 1.0.0
servers:
  - url: https://api.adapty.io
    description: 本番サーバー
paths:
  /api/v2/server-side-api/purchase/profile/grant/access-level/:
    post:
      summary: アクセスレベルを付与する
      description: トランザクション情報を提供せずにエンドユーザーにアクセスレベルを付与します。紹介報酬やその他のプロダクト関連イベントに便利です。このメソッドで付与されたアクセスレベルはアナリティクスには反映されません。Webhook インテグレーションにのみ送信され、その場合のみイベントフィードに表示されます。
      operationId: grantAccessLevel
      tags:
        - Purchase
      security:
        - apikeyAuth: []
      parameters:
        - name: adapty-customer-user-id
          in: header
          required: false
          schema:
            type: string
          description: お客様のシステムにおける顧客の一意の ID です。`adapty-customer-user-id` または `adapty-profile-id` のいずれかが必須です。
        - name: adapty-profile-id
          in: header
          required: false
          schema:
            type: string
          description: お客様のシステムにおけるプロファイルの一意の ID です。匿名プロファイルを扱う場合に最適です。`adapty-customer-user-id` または `adapty-profile-id` のいずれかが必須です。
      responses:
        "200":
          description: アクセスレベルが正常に付与されました
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProfileResponse"
        "400":
          description: リクエストが不正です
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "401":
          description: 認証エラー
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "404":
          description: プロファイルが見つかりません
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
        "500":
          description: 内部サーバーエラー
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GrantAccessRequest"
            examples:
              immediate_grant:
                summary: 即座にアクセスを付与する
                value:
                  access_level_id: premium
              scheduled_grant:
                summary: 開始日時と終了日時を指定してアクセスを付与する
                value:
                  access_level_id: premium
                  starts_at: "2024-01-01T00:00:00Z"
                  expires_at: "2024-12-31T23:59:59Z"
              lifetime_grant:
                summary: 永続アクセスを付与する
                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: エラーの発生源
              errors:
                type: array
                items:
                  type: string
                description: エラーメッセージの配列
        error_code:
          type: string
          description: エラーの短縮名
        status_code:
          type: integer
          description: HTTP ステータスコード
      required:
        - errors
        - error_code
        - status_code
    GrantAccessRequest:
      type: object
      properties:
        access_level_id:
          type: string
          description: アクセスレベルページで設定された有料アクセスレベル ID
        starts_at:
          type: string
          format: date-time
          nullable: true
          description: アクセスレベルが有効になる日時。将来の日時も指定できます。デフォルト値は null です。
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: アクセスレベルが失効する日時。過去の日時も指定でき、永続アクセスの場合は null を指定できます。デフォルト値は null です。
      required:
        - access_level_id
    Profile:
      type: object
      properties:
        app_id:
          type: string
          format: uuid
          description: アプリの内部 ID
        profile_id:
          type: string
          format: uuid
          description: Adapty プロファイル ID
        customer_user_id:
          type: string
          nullable: true
          description: お客様のシステムにおけるユーザーの ID
        total_revenue_usd:
          type: number
          format: float
          description: プロファイルで獲得した USD 換算の総収益を表す浮動小数点値
        segment_hash:
          type: string
          description: 内部パラメータ
        timestamp:
          type: integer
          format: int64
          description: レスポンス時刻（ミリ秒）。競合状態の解決に使用します
        custom_attributes:
          type: array
          items:
            $ref: "#/components/schemas/CustomAttribute"
          description: プロファイルに設定できるカスタム属性は最大 30 個です
        access_levels:
          type: array
          items:
            $ref: "#/components/schemas/AccessLevel"
          description: アクセスレベルオブジェクトの配列。顧客がアクセスレベルを持たない場合は空配列
        subscriptions:
          type: array
          items:
            $ref: "#/components/schemas/Subscription"
          description: サブスクリプションオブジェクトの配列。顧客がサブスクリプションを持たない場合は空配列
        non_subscriptions:
          type: array
          items:
            $ref: "#/components/schemas/NonSubscription"
          description: 非サブスクリプションオブジェクトの配列。顧客が購入履歴を持たない場合は空配列
      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: キーは 30 文字以下の文字列である必要があります。英字、数字、ダッシュ、ピリオド、アンダースコアのみ使用できます
        value:
          oneOf:
            - type: string
            - type: number
          description: 属性値は 50 文字以下である必要があります。文字列と浮動小数点数のみ使用できます
      required:
        - key
        - value
    AccessLevel:
      type: object
      properties:
        access_level_id:
          type: string
          description: アクセスレベルの識別子
        store:
          type: string
          description: アクセスレベルが購入されたストア
        store_product_id:
          type: string
          description: ストアにおけるプロダクト ID
        store_base_plan_id:
          type: string
          nullable: true
          description: ストアにおけるベースプラン ID
        store_transaction_id:
          type: string
          description: ストアにおけるトランザクション ID
        store_original_transaction_id:
          type: string
          description: ストアにおける元のトランザクション ID
        offer:
          allOf:
            - $ref: "#/components/schemas/OfferDTO"
          nullable: true
          description: プロモーションオファーまたは初回オファーが適用された場合のオファー詳細
        starts_at:
          type: string
          format: date-time
          nullable: true
          description: アクセスレベルの開始日時
        purchased_at:
          type: string
          format: date-time
          description: アクセスレベルが購入された日時
        originally_purchased_at:
          type: string
          format: date-time
          description: アクセスレベルが最初に購入された日時
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: アクセスレベルの有効期限
        renewal_cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: 更新がキャンセルされた日時
        billing_issue_detected_at:
          type: string
          format: date-time
          nullable: true
          description: 請求問題が検出された日時
        is_in_grace_period:
          type: boolean
          description: アクセスレベルがグレース期間中かどうか
        cancellation_reason:
          type: string
          nullable: true
          description: キャンセルの理由
    Subscription:
      type: object
      properties:
        store:
          type: string
          description: サブスクリプションが購入されたストア
        store_product_id:
          type: string
          description: ストアにおけるプロダクト ID
        store_base_plan_id:
          type: string
          nullable: true
          description: ストアにおけるベースプラン ID
        store_transaction_id:
          type: string
          description: ストアにおけるトランザクション ID
        store_original_transaction_id:
          type: string
          description: ストアにおける元のトランザクション ID
        offer:
          allOf:
            - $ref: "#/components/schemas/OfferDTO"
          nullable: true
          description: プロモーションオファーまたは初回オファーが適用された場合のオファー詳細
        environment:
          type: string
          description: 環境（サンドボックス、本番）
        purchased_at:
          type: string
          format: date-time
          description: サブスクリプションが購入された日時
        originally_purchased_at:
          type: string
          format: date-time
          description: サブスクリプションが最初に購入された日時
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: サブスクリプションの有効期限
        renewal_cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: 更新がキャンセルされた日時
        billing_issue_detected_at:
          type: string
          format: date-time
          nullable: true
          description: 請求問題が検出された日時
        is_in_grace_period:
          type: boolean
          description: サブスクリプションがグレース期間中かどうか
        cancellation_reason:
          type: string
          nullable: true
          description: キャンセルの理由
    NonSubscription:
      type: object
      properties:
        purchase_id:
          type: string
          format: uuid
          description: 購入の一意の識別子
        store:
          type: string
          description: 購入が行われたストア
        store_product_id:
          type: string
          description: ストアにおけるプロダクト ID
        store_base_plan_id:
          type: string
          nullable: true
          description: ストアにおけるベースプラン ID
        store_transaction_id:
          type: string
          description: ストアにおけるトランザクション ID
        store_original_transaction_id:
          type: string
          description: ストアにおける元のトランザクション ID
        purchased_at:
          type: string
          format: date-time
          description: 購入が行われた日時
        environment:
          type: string
          description: 環境（サンドボックス、本番）
        is_refund:
          type: boolean
          description: 返金かどうか
        is_consumable:
          type: boolean
          description: 消耗型アイテムの購入かどうか
    OfferDTO:
      type: object
      properties:
        category:
          type: string
          enum:
            - introductory
            - promotional
            - offer_code
            - win_back
          description: オファーのカテゴリ
        type:
          type: string
          enum:
            - free_trial
            - pay_as_you_go
            - pay_up_front
          description: オファーの種別
        id:
          type: string
          nullable: true
          description: オファー ID
      required:
        - category
        - type
  securitySchemes:
    apikeyAuth:
      type: apiKey
      name: Authorization
      in: header
      default: Api-Key {Your secret API key}
      description: |
        API リクエストは、**Authorization** ヘッダーにシークレット API キーを `Api-Key {your_secret_api_key}` の形式（例: `Api-Key secret_live_...`）で指定して認証する必要があります。このキーは Adapty ダッシュボード → **App Settings** → **General** タブ → **API keys** セクションで確認できます。
```
