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

# Get account setup

> Audit what the account has and hasn't set up: the onboarding steps with their statuses,
plus a summary of what is actually live right now (display types, flow triggers, connected integrations).

The fastest answer to "is this account configured, and what is it using" —
the summary names the kinds of display, trigger, and integration in use
without paging `/v1/displays` and `/v1/flows`. Kinds only: no titles, no
ids, no performance. Use those endpoints to name the individual records
and `/v1/reports/summary` for results.

No scope is required — any valid bearer token can call this endpoint.




## OpenAPI

````yaml openapi/privy-api.yaml GET /account/setup
openapi: 3.1.0
info:
  title: Privy API
  version: '1.0'
  description: >
    The Privy API lets you programmatically manage your contact list and read
    what you have set up in Privy.

    Create, update, unsubscribe, and remove contacts; report orders;

    and read your campaigns, flows, segments, orders, store products, coupon
    pools,

    performance reports, and account setup.
servers:
  - url: https://api.privy.com/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Account
    description: Retrieve information about the authenticated Privy account.
  - name: Contacts
    description: Manage your contact list.
  - name: Imports
    description: >-
      Read your contact import history — CSV uploads, connected-provider syncs,
      and SMS consent imports.
  - name: Campaigns
    description: >-
      Read your message campaigns — email and SMS newsletters, plus the messages
      your flows send.
  - name: Displays
    description: >-
      Read your on-site displays (popups, flyouts, banners, embedded forms,
      landing pages).
  - name: Coupons
    description: Read your coupon pools, their code inventory, and individual codes.
  - name: Reports
    description: >-
      Read performance reporting — signups, views, conversion rates, and
      attributed revenue — for your business, displays, and flows.
  - name: Flows
    description: Read your automation flows and their configuration.
  - name: Segments
    description: Read your customer segments and their membership.
  - name: Orders
    description: Report orders placed in your store and read your order history.
  - name: Products
    description: Read the product catalog and collections of your connected store.
  - name: Events
    description: Ingest custom events to trigger Flows and other automations.
paths:
  /account/setup:
    get:
      tags:
        - Account
      summary: Get account setup
      description: >
        Audit what the account has and hasn't set up: the onboarding steps with
        their statuses,

        plus a summary of what is actually live right now (display types, flow
        triggers, connected integrations).


        The fastest answer to "is this account configured, and what is it using"
        —

        the summary names the kinds of display, trigger, and integration in use

        without paging `/v1/displays` and `/v1/flows`. Kinds only: no titles, no

        ids, no performance. Use those endpoints to name the individual records

        and `/v1/reports/summary` for results.


        No scope is required — any valid bearer token can call this endpoint.
      operationId: getAccountSetup
      parameters:
        - $ref: '#/components/parameters/AccountIdParam'
      responses:
        '200':
          description: The account's setup steps and live-configuration summary.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/AccountSetup'
              example:
                data:
                  steps:
                    - key: account_created
                      status: completed
                      required: false
                    - key: connect_store
                      status: completed
                      required: false
                    - key: verify_contact_email
                      status: not_started
                      required: true
                    - key: authenticate_sending_domain
                      status: pending
                      required: true
                    - key: verify_physical_address
                      status: not_started
                      required: true
                  started_at: '2026-05-01T09:00:00Z'
                  completed_at: null
                  summary:
                    live_display_types:
                      - flyout
                      - popup
                    flow_triggers_in_use:
                      - order_placed
                      - customer_subscribed_to_marketing
                    connected_integrations:
                      - shopify
                      - klaviyo
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
      security:
        - bearerAuth: []
components:
  parameters:
    AccountIdParam:
      name: Privy-Account-Id
      in: header
      required: false
      description: >
        Target a subaccount instead of the main connected account.

        Pass a subaccount `id` from get_account's `subaccounts` list. Only
        direct subaccounts

        of the connected account are reachable — omit this for the main account
        itself.
      schema:
        type: string
      example: S1U2B3A4C5C6T7
  schemas:
    AccountSetup:
      type: object
      properties:
        steps:
          type: array
          description: >
            The account's onboarding steps and their statuses. Steps are
            plan-dependent —

            only steps the account qualifies for are returned. Accounts created
            before guided onboarding return an empty list.
          items:
            $ref: '#/components/schemas/SetupStep'
        started_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            When the account first viewed the setup guide. `null` if never
            viewed.
          example: '2026-05-01T09:00:00Z'
        completed_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            When every required step was completed. `null` while setup is in
            progress.
          example: null
        summary:
          type: object
          description: >-
            What the account actually has live right now, derived from current
            configuration.
          properties:
            live_display_types:
              type: array
              description: >-
                Display types of campaigns currently live on the merchant's
                site.
              items:
                type: string
              example:
                - flyout
                - popup
            flow_triggers_in_use:
              type: array
              description: Normalized trigger names of currently active flows.
              items:
                type: string
              example:
                - order_placed
                - customer_subscribed_to_marketing
            connected_integrations:
              type: array
              description: Providers of the account's connected integrations.
              items:
                type: string
              example:
                - shopify
                - bigcommerce
    SetupStep:
      type: object
      properties:
        key:
          type: string
          description: Stable identifier of the onboarding step.
          example: connect_store
        status:
          type: string
          enum:
            - not_started
            - in_progress
            - pending
            - completed
            - skipped
          example: completed
        required:
          type: boolean
          description: Whether the step is required for setup to be considered complete.
          example: false
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - invalid_client
                - invalid_scope
                - unauthorized
                - insufficient_scope
                - paid_plan_required
                - api_access_required
                - not_found
                - no_connected_store
                - conflict
                - contacts_not_ready
                - validation_failed
                - rate_limited
                - store_unavailable
              example: validation_failed
            message:
              type: string
              example: One or more fields are invalid
            details:
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                    example: email
                  message:
                    type: string
                    example: is required
  responses:
    Unauthorized:
      description: Missing or invalid bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: unauthorized
              message: Bearer token is missing or invalid
    RateLimited:
      description: Rate limit exceeded. Retry after the specified time.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
          example: 42
        X-RateLimit-Limit-Minute:
          description: Maximum requests allowed per minute.
          schema:
            type: integer
          example: 60
        X-RateLimit-Remaining-Minute:
          description: Requests remaining in the current minute window.
          schema:
            type: integer
          example: 0
        X-RateLimit-Reset-Minute:
          description: Unix timestamp when the minute window resets.
          schema:
            type: integer
          example: 1711929600
        X-RateLimit-Limit-Day:
          description: Maximum requests allowed per day.
          schema:
            type: integer
          example: 10000
        X-RateLimit-Remaining-Day:
          description: Requests remaining in the current day window.
          schema:
            type: integer
          example: 9500
        X-RateLimit-Reset-Day:
          description: Unix timestamp when the day window resets.
          schema:
            type: integer
          example: 1712016000
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: rate_limited
              message: Rate limit exceeded
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API token or OAuth access token
      description: >
        Send either an API token or an OAuth access token as

        `Authorization: Bearer <token>`. See the Authentication page for
        details.

````