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

> ## Agent Instructions
> AutoGrowth runs social accounts on real phones. Everything a page describes happens on a physical device in the customer's own fleet, never through a social platform's API.
> The Companion is a macOS desktop app that runs on the customer's own Mac and manages the phones over USB — iPhones through WebDriverAgent, GrapheneOS phones through ADB and scrcpy. Nothing runs while the Companion is closed.
> The Companion builds, signs and installs WebDriverAgent on each iPhone itself. Never tell a customer to sign WebDriverAgent by hand in Xcode; Xcode is a prerequisite the Companion drives, not a step the customer performs.
> Autogrowth MAX is a one-time, invite-only lifetime license bought from the organization's credit balance, not a subscription tier. It is required to run any automation, workflow or Incubator program. Without a price set for that organization, the purchase is refused.
> An automation is one of AutoGrowth's built-in definitions; a script is a graph the customer builds in the Script Builder. The Script Builder is locked platform-wide, so never present building a script as something a customer can do today.
> An API key is a bare 64-character hex string with no prefix. It is shown once, at creation, is sent as `Authorization: Bearer <key>`, and can never be read back.
> An API key sees only the key owner's own accounts, content, collections, prompts, scripts and executions. Devices and tags are organization-scoped, and a non-owner sees only the devices assigned to them or carrying one of their tags. The automation catalog is global.
> There is no pagination. List endpoints return the whole set; the only limiting parameter anywhere is `limit` on `GET /v1/executions`, which defaults to 50 and has no offset to page with.
> Remote control and the live screen are dashboard-only, over WebSocket and MJPEG. Neither is part of the public API.
> The MCP server is hosted at https://mcp.autogrowth.farm and authenticates with OAuth. It is not an npm package and there is nothing to install locally. Its tools inherit exactly the scope of the API key behind them.
> Android support is partial and GrapheneOS-only: those phones appear in the fleet and can be watched and remote-controlled, but they cannot run scripts or automations.
> Never document Hi Katie or any persona feature. When a page and the code disagree, the code wins — check a claim against the source before repeating it.

# List devices

> Returns every device the API key can reach, newest first. Owners see all organization devices; other roles see only devices assigned to them or carrying one of their assigned tags. Ephemeral fields (`online`, `status`, `agentStatus`, `battery`, `stream`) are read from Redis and are null/`disconnected` when the device is offline.



## OpenAPI

````yaml /api-reference/openapi.json get /devices
openapi: 3.1.0
info:
  title: AutoGrowth API
  description: >-
    Public REST API for automating actions within the AutoGrowth platform.
    Authenticate with Authorization: Bearer <api-key>. Create API keys in
    Dashboard → Settings → Developer API.
  version: 1.0.0
servers:
  - url: https://api.autogrowth.farm/v1
    description: Production
security:
  - bearerAuth: []
paths:
  /devices:
    get:
      tags:
        - Devices
      summary: List devices
      description: >-
        Returns every device the API key can reach, newest first. Owners see all
        organization devices; other roles see only devices assigned to them or
        carrying one of their assigned tags. Ephemeral fields (`online`,
        `status`, `agentStatus`, `battery`, `stream`) are read from Redis and
        are null/`disconnected` when the device is offline.
      operationId: getDevices
      parameters:
        - name: tagId
          in: query
          required: false
          schema:
            type: string
            format: uuid
          description: >-
            Only devices carrying this tag. A malformed UUID matches nothing
            rather than erroring.
      responses:
        '200':
          description: List of devices
          content:
            application/json:
              schema:
                type: object
                properties:
                  devices:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: UUID (v7).
                        name:
                          type: string
                        deviceModel:
                          type: string
                          description: Marketing model name, e.g. "iPhone 15 Pro".
                        productType:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Apple product identifier, e.g. "iPhone16,1".
                        deviceColor:
                          anyOf:
                            - type: string
                            - type: 'null'
                        iosVersion:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: iOS release. Null on Android phones.
                        os:
                          type: string
                          enum:
                            - ios
                            - android
                            - graphene
                          description: >-
                            `graphene` is its own value, not a flag on
                            `android`.
                        osVersion:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: >-
                            OS release for any platform; falls back to
                            `iosVersion` on iOS.
                        screenWidth:
                          anyOf:
                            - type: number
                            - type: 'null'
                          description: >-
                            Cached logical screen width: points on iOS, pixels
                            on Android.
                        screenHeight:
                          anyOf:
                            - type: number
                            - type: 'null'
                        udid:
                          anyOf:
                            - type: string
                            - type: 'null'
                        serial:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Apple serial number.
                        currentAccountId:
                          type: string
                          description: UUID (v7).
                        currentTask:
                          anyOf:
                            - type: string
                            - type: 'null'
                        tasksCompleted:
                          type: number
                        lastActivity:
                          type: string
                          description: The device row’s updatedAt.
                        createdAt:
                          type: string
                          description: ISO 8601 date-time, e.g. 2025-06-01T12:00:00.000Z
                        slotState:
                          type: string
                          enum:
                            - active
                            - expired
                            - none
                          description: >-
                            Phone-slot entitlement for this device. `none` means
                            no slot is bound (a device without a UDID can never
                            hold one). Scheduling requires `active`.
                        online:
                          type: boolean
                          description: True while a presence key exists in Redis.
                        connectionType:
                          anyOf:
                            - type: string
                            - type: 'null'
                        connectedAt:
                          anyOf:
                            - type: string
                            - type: 'null'
                        status:
                          type: string
                          description: >-
                            Reported device status, or `disconnected` when no
                            Redis state exists. Typical values: ready, in_use,
                            error, disconnected.
                        agentStatus:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: >-
                            On-device agent state (WebDriverAgent on iOS), when
                            known.
                        battery:
                          anyOf:
                            - type: number
                            - type: 'null'
                          description: Battery level.
                        stream:
                          anyOf:
                            - type: object
                              properties:
                                mjpegServerUrl:
                                  type: string
                                startedAt:
                                  type: string
                                screenWidth:
                                  type: number
                                screenHeight:
                                  type: number
                            - type: 'null'
                        health:
                          type: string
                          enum:
                            - healthy
                            - error
                            - stale
                          description: >-
                            Derived from `status`: ready/in_use → healthy,
                            error/disconnected → error, anything else → stale.
                        tunnelStatus:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Always null on this endpoint; reserved.
                        isJailbroken:
                          type: boolean
                          description: >-
                            True when an active Doritos device matches this
                            phone’s serial.
                        isDoritosLinked:
                          type: boolean
                          description: Currently identical to `isJailbroken`.
                        isDoritosLiteLinked:
                          type: boolean
                          description: >-
                            True when an active DoritosLite device is linked.
                            DoritosLite is a capability, not a jailbreak: such a
                            phone stays `isJailbroken: false` and is still
                            labelled vanilla.
                        jailbreakStatus:
                          type: string
                          enum:
                            - vanilla
                            - jailbroken
                          description: >-
                            The manual override when set, otherwise derived
                            automatically.
                        jailbreakStatusSource:
                          type: string
                          enum:
                            - manual
                            - doritos
                            - detected
                            - auto
                          description: Where `jailbreakStatus` came from.
                        jailbreakDetected:
                          type: boolean
                        jailbreakDetectedAt:
                          anyOf:
                            - type: string
                              description: >-
                                ISO 8601 date-time, e.g.
                                2025-06-01T12:00:00.000Z
                            - type: 'null'
                        jailbreakDetectionSignals:
                          type: array
                          items:
                            type: string
                        jailbreakStatusOverride:
                          anyOf:
                            - type: string
                              enum:
                                - vanilla
                                - jailbroken
                            - type: 'null'
                        jailbreakStatusOverrideAt:
                          anyOf:
                            - type: string
                              description: >-
                                ISO 8601 date-time, e.g.
                                2025-06-01T12:00:00.000Z
                            - type: 'null'
                        doritosVersion:
                          anyOf:
                            - type: string
                            - type: 'null'
                          description: Linked Doritos device model, when Doritos-linked.
                        containerCount:
                          anyOf:
                            - type: number
                            - type: 'null'
                          description: >-
                            Non-deleted containers on the linked provider device
                            (Doritos first, then DoritosLite). Null when the
                            phone is linked to neither.
                        containerCapacity:
                          anyOf:
                            - type: number
                            - type: 'null'
                          description: >-
                            Finite container allowance from the provider
                            license. Null when the allowance is unlimited or the
                            phone is unlinked.
                        accounts:
                          type: array
                          items:
                            type: object
                            properties:
                              platform:
                                type: string
                                enum:
                                  - instagram
                                  - tiktok
                                  - x
                                  - threads
                              username:
                                type: string
                              status:
                                type: string
                                enum:
                                  - pending
                                  - active
                                  - paused
                                  - error
                                  - not_found
                            required:
                              - platform
                              - username
                              - status
                          description: >-
                            Social accounts on this phone — its home accounts
                            plus any additionally linked to it.
                        tags:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                type: string
                                description: UUID (v7).
                              name:
                                type: string
                              color:
                                type: string
                                description: 'Hex color, e.g. #3B82F6'
                            required:
                              - id
                              - name
                              - color
                          description: Sorted by name.
                        assignedUsers:
                          type: array
                          items:
                            type: object
                            properties:
                              id:
                                type: string
                                description: UUID (v7).
                              email:
                                type: string
                              name:
                                type: string
                            required:
                              - id
                              - email
                              - name
                          description: Sorted by name.
                      required:
                        - id
                        - name
                        - deviceModel
                        - productType
                        - deviceColor
                        - iosVersion
                        - os
                        - osVersion
                        - screenWidth
                        - screenHeight
                        - udid
                        - serial
                        - currentTask
                        - tasksCompleted
                        - lastActivity
                        - createdAt
                        - slotState
                        - online
                        - connectionType
                        - connectedAt
                        - status
                        - agentStatus
                        - battery
                        - stream
                        - health
                        - tunnelStatus
                        - isJailbroken
                        - isDoritosLinked
                        - isDoritosLiteLinked
                        - jailbreakStatus
                        - jailbreakStatusSource
                        - jailbreakDetected
                        - jailbreakDetectedAt
                        - jailbreakDetectionSignals
                        - jailbreakStatusOverride
                        - jailbreakStatusOverrideAt
                        - doritosVersion
                        - containerCount
                        - containerCapacity
                        - accounts
                        - tags
                        - assignedUsers
                required:
                  - devices
        '401':
          description: 'Missing or invalid API key. Send `Authorization: Bearer <api-key>`.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable error message.
                required:
                  - error
        '403':
          description: >-
            Insufficient permissions for this API key’s role, or the key owner
            is disabled / not in an organization.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable error message.
                required:
                  - error
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Developer API key from Dashboard → Settings → Developer API

````