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

# Get the Apple Ads connection status

> Whether this project's Apple Ads connection is authorized, what it
allows, and the next step (`next_action`). Status only: this endpoint
never returns a private key, client secret, access or refresh token,
authorization code, or OAuth state, and it does not start or complete
authorization — use `dashboard_url` to connect or reconnect in the
dashboard.

**Two independent readiness values.** `reporting` and
`campaign_management` are reported separately: a connection can allow
reporting without allowing campaign changes. `connected` does not
imply campaign-management access — check
`campaign_management.can_write`.

**Multiple Apple Ads organizations.** `campaign_management.state` is
`ready` when at least one organization allows campaign changes;
`orgs[]` shows each organization. Each change is authorized against
the organization of that campaign.

**`legacy_credentials`** is a working connection with an API key;
migrating to Apple authorization is recommended.

**`verifying`** means the connection is awaiting confirmation from
Apple.

**`campaign_management.state: unknown`** means campaign-management
permissions are not confirmed yet (`reason_code`
`permissions_not_checked_yet` or `permission_data_stale`); check again
later.

**Availability**: available to accounts with Apple Ads enabled; other
accounts receive `404`. Contact support to enable Apple Ads.



## OpenAPI

````yaml /api-reference/rest-api-v4.yaml get /integrations/apple-ads/connection
openapi: 3.0.3
info:
  title: Qonversion REST API v4
  version: '4.0'
  description: >-
    Qonversion REST API v4 follows REST standards. It has predictable
    resource-oriented URLs, accepts JSON-encoded request bodies, returns
    JSON-encoded responses, and uses standard HTTP response codes,
    authentication, and verbs.
servers:
  - url: https://api.qonversion.io/v4
    description: Production
security:
  - secretAuth: []
tags:
  - name: Users
    description: Retrieve Qonversion users
  - name: User Properties
    description: Manage user-level attributes
  - name: Identities
    description: Link Qonversion users to your own auth IDs
  - name: Entitlements
    description: Entitlement definitions and user grants
  - name: Purchases
    description: A user's purchase history
  - name: Products
    description: Products configured in the Qonversion dashboard
  - name: Remote Configurations
    description: Server-driven configuration payloads and targeting delivered to the SDK
  - name: Customers
    description: Aggregated customer records, properties, permissions, and metrics
  - name: Segments
    description: Dynamic and system segments of users
  - name: Experiments
    description: Paywall and offering A/B experiments
  - name: Screens
    description: No-code paywall screens — CRUD, publish, analytics
  - name: Analytics
    description: Charts, cards, cohorts, LTV, and insights
  - name: Apple Ads
    description: Apple Ads reports, daily series, and connection status
  - name: Exports
    description: Asynchronous data exports
  - name: Events
    description: Event catalog
  - name: Scheduled Reports
    description: Recurring reports delivered to external destinations
  - name: Integrations
    description: Third-party integrations configuration
  - name: Automations
    description: Event-driven automations
  - name: Project Settings
    description: Project-level configuration, secret, and store credentials
paths:
  /integrations/apple-ads/connection:
    get:
      tags:
        - Apple Ads
      summary: Get the Apple Ads connection status
      description: |-
        Whether this project's Apple Ads connection is authorized, what it
        allows, and the next step (`next_action`). Status only: this endpoint
        never returns a private key, client secret, access or refresh token,
        authorization code, or OAuth state, and it does not start or complete
        authorization — use `dashboard_url` to connect or reconnect in the
        dashboard.

        **Two independent readiness values.** `reporting` and
        `campaign_management` are reported separately: a connection can allow
        reporting without allowing campaign changes. `connected` does not
        imply campaign-management access — check
        `campaign_management.can_write`.

        **Multiple Apple Ads organizations.** `campaign_management.state` is
        `ready` when at least one organization allows campaign changes;
        `orgs[]` shows each organization. Each change is authorized against
        the organization of that campaign.

        **`legacy_credentials`** is a working connection with an API key;
        migrating to Apple authorization is recommended.

        **`verifying`** means the connection is awaiting confirmation from
        Apple.

        **`campaign_management.state: unknown`** means campaign-management
        permissions are not confirmed yet (`reason_code`
        `permissions_not_checked_yet` or `permission_data_stale`); check again
        later.

        **Availability**: available to accounts with Apple Ads enabled; other
        accounts receive `404`. Contact support to enable Apple Ads.
      operationId: v4GetAppleAdsConnection
      responses:
        '200':
          description: Connection status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V4AppleAdsConnection'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V4Error'
        '403':
          description: Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V4Error'
        '404':
          description: Not found. Also returned to accounts without Apple Ads enabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V4Error'
        '429':
          description: Rate limited
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V4Error'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V4Error'
        '502':
          description: Bad gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V4Error'
        '504':
          description: Gateway timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V4Error'
      security:
        - secretAuth: []
components:
  schemas:
    V4AppleAdsConnection:
      type: object
      required:
        - object
        - url
        - state
        - reporting
        - campaign_management
        - orgs
        - dashboard_url
      properties:
        object:
          type: string
          example: apple_ads_connection
        url:
          type: string
          example: /v4/integrations/apple-ads/connection
        state:
          type: string
          enum:
            - not_connected
            - legacy_credentials
            - verifying
            - connected
            - needs_reauthorization
          description: >-
            State of the Apple Ads authorization: `not_connected`;
            `legacy_credentials` — a working connection with an API key;
            `verifying` — awaiting confirmation from Apple; `connected`;
            `needs_reauthorization` — reconnect Apple Ads in the dashboard. This
            field does not indicate campaign-management access; see
            `campaign_management`.
        connection_method:
          type: string
          nullable: true
          enum:
            - customer_key
            - service_provider_oauth
            - null
          description: How the authorization is held. null when there is none.
        granted_at:
          type: string
          format: date-time
          nullable: true
          description: When the authorization was granted (RFC 3339, UTC).
        last_verified_at:
          type: string
          format: date-time
          nullable: true
          description: When Apple last confirmed it (RFC 3339, UTC).
        reporting:
          $ref: '#/components/schemas/V4AppleAdsConnectionReadiness'
        campaign_management:
          $ref: '#/components/schemas/V4AppleAdsConnectionReadiness'
        orgs:
          type: array
          items:
            $ref: '#/components/schemas/V4AppleAdsConnectionOrg'
          description: >-
            Apple Ads organizations the connection can access. An empty list
            while campaign-management permissions are not confirmed yet
            (`campaign_management.state` is `unknown`) does not mean the account
            has no organizations.
        next_action:
          type: string
          nullable: true
          enum:
            - connect_apple_ads
            - reconnect_apple_ads
            - wait_for_verification
            - migrate_to_apple_authorization
            - grant_campaign_role_in_apple_ads
            - null
          description: >-
            The next step, or `null` when nothing is pending.
            `grant_campaign_role_in_apple_ads` is done in Apple Ads, not in
            Qonversion.
        dashboard_url:
          type: string
          description: >-
            Dashboard page where a user connects, reconnects, or migrates the
            Apple Ads connection. Always present.
    V4Error:
      type: object
      required:
        - error
      properties:
        error:
          type: object
          required:
            - type
            - code
            - message
          properties:
            type:
              type: string
              enum:
                - request
                - resource
                - logical
                - internal
            code:
              type: string
              description: |
                Machine-readable snake_case error code. Examples include
                `invalid_data`, `invalid_request`, `invalid_product_id`,
                `not_found`, `already_exists`, `offering_already_exists`,
                `product_not_in_project`, `cannot_set_main_directly`,
                `cannot_demote_main`, `cannot_patch_experiment_variant`,
                `cannot_delete_experiment_variant`, and
                `cannot_setmain_experiment_variant`. Resource-specific codes
                are documented on the corresponding reference page.
            message:
              type: string
              description: Human-readable description. May change; do not parse.
            details:
              type: array
              nullable: true
              description: Per-field validation errors, present on 400 validation failures.
              items:
                type: object
                properties:
                  field:
                    type: string
                  message:
                    type: string
    V4AppleAdsConnectionReadiness:
      type: object
      description: Readiness of one capability of the integration.
      required:
        - state
        - reason_code
      properties:
        state:
          type: string
          enum:
            - ready
            - read_only
            - verifying
            - unknown
            - not_ready
          description: >-
            `ready` — available. `read_only` (campaign management only) — the
            Apple Ads role allows reporting but not campaign changes.
            `verifying` — awaiting confirmation from Apple. `unknown` —
            campaign-management permissions are not confirmed yet; check again
            later. `not_ready` — not connected, or the authorization was
            revoked.
        reason_code:
          type: string
          nullable: true
          enum:
            - legacy_credentials
            - acl_not_confirmed
            - authorization_revoked
            - not_connected
            - no_writable_org
            - permissions_not_checked_yet
            - permission_data_stale
            - null
          description: >-
            Machine-readable reason, or `null` when there is nothing to note.
            `legacy_credentials` — connected with an API key; migrating to Apple
            authorization is recommended. `acl_not_confirmed` — awaiting
            confirmation from Apple. `authorization_revoked` — reconnect Apple
            Ads in the dashboard. `not_connected` — no Apple Ads connection.
            `no_writable_org` — no organization's Apple Ads role allows campaign
            changes. `permissions_not_checked_yet` and `permission_data_stale` —
            campaign-management permissions are not confirmed yet; check again
            later.
        can_write:
          type: boolean
          nullable: true
          description: >-
            Campaign management only: true when at least one org allows it, null
            while unknown.
        checked_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Campaign management only: when the Apple Ads roles were last
            confirmed (RFC 3339, UTC).
        is_stale:
          type: boolean
          nullable: true
          description: >-
            Campaign management only: `true` when campaign-management
            permissions need to be confirmed again before a campaign change
            (check again later); `null` when they have not been confirmed yet.
    V4AppleAdsConnectionOrg:
      type: object
      description: One Apple Ads organization this project's authorization reaches.
      required:
        - org_id
        - can_write
        - role_names
      properties:
        org_id:
          type: string
          description: Apple Ads organization ID, as a string.
        org_name:
          type: string
          nullable: true
        currency:
          type: string
          nullable: true
          description: The org's own currency — bids and budgets are denominated in it.
        can_write:
          type: boolean
          nullable: true
          description: >-
            Whether the Apple Ads role allows campaign changes in this
            organization; `null` when campaign-management permissions are not
            confirmed yet.
        role_names:
          type: array
          items:
            type: string
          description: >-
            The Apple Ads role names, exactly as Apple reports them (for
            example, `API Account Read Only`).
  securitySchemes:
    secretAuth:
      type: http
      scheme: bearer
      bearerFormat: sk_…
      description: >-
        Bearer authentication using the project **Secret Key** (prefixed with
        `sk_`), used exactly as shown in the dashboard. Endpoints that support
        sandbox data take an explicit `environment` field or parameter. All v4
        public endpoints require the Secret Key — see
        [Authentication](/reference/v4/authentication). Never expose the Secret
        Key in client-side code.

````