> ## 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.

# Create persona binding

> Assigns a Hi Katie persona to one account. The account must be visible to the API key, and an account can hold only one binding — the uniqueness check is the insert itself, so a concurrent create loses with 409 rather than producing a duplicate.



## OpenAPI

````yaml /api-reference/openapi.json post /bindings
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:
  /bindings:
    post:
      tags:
        - Bindings
      summary: Create persona binding
      description: >-
        Assigns a Hi Katie persona to one account. The account must be visible
        to the API key, and an account can hold only one binding — the
        uniqueness check is the insert itself, so a concurrent create loses with
        409 rather than producing a duplicate.
      operationId: postBindings
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                accountId:
                  type: string
                  description: >-
                    AutoGrowth account the persona will manage. Must be visible
                    to the API key.
                hiKatiePersonaId:
                  type: string
                  minLength: 1
                  maxLength: 100
                  description: Hi Katie persona UUID.
                captionPipelineId:
                  type: string
                  minLength: 1
                  maxLength: 100
                mediaPipelineIds:
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 100
                brief:
                  type: object
                  properties:
                    postsPerDay:
                      type: number
                      minimum: 0
                      maximum: 100
                    postTypes:
                      description: Formats to produce, e.g. reel, story, feed.
                      type: array
                      items:
                        type: string
                        minLength: 1
                    postingWindows:
                      description: Local time-of-day windows, "HH:mm-HH:mm".
                      type: array
                      items:
                        type: string
                        minLength: 1
                    timezone:
                      type: string
                      maxLength: 64
                    engagementLevel:
                      description: >-
                        Drives which warmup/engagement automations get
                        scheduled.
                      type: string
                      maxLength: 40
                    notes:
                      description: >-
                        Free text, passed to caption pipelines as a runtime
                        param.
                      type: string
                      maxLength: 2000
                mode:
                  description: Defaults to `review`.
                  type: string
                  enum:
                    - draft_only
                    - review
                    - autopilot
              required:
                - accountId
                - hiKatiePersonaId
      responses:
        '201':
          description: Binding created
          content:
            application/json:
              schema:
                type: object
                properties:
                  binding:
                    type: object
                    properties:
                      id:
                        type: string
                        description: UUID (v7).
                      organizationId:
                        type: string
                        description: UUID (v7).
                      accountId:
                        type: string
                        description: >-
                          The bound account. One binding per account; a persona
                          may hold many.
                      hiKatiePersonaId:
                        type: string
                        description: Persona UUID on the content side.
                      captionPipelineId:
                        description: >-
                          Hi Katie workflow (kind: caption) run when an
                          execution is materialized.
                        type: string
                      mediaPipelineIds:
                        type: array
                        items:
                          type: string
                        description: >-
                          Hi Katie workflows that produce media for the outbox.
                          Always present, possibly empty.
                      contentCollectionId:
                        description: >-
                          Per-persona draining queue. Owned by the sync job,
                          which creates and links it on its first pass — not
                          settable through this API.
                        type: string
                      brief:
                        type: object
                        properties:
                          postsPerDay:
                            type: number
                            minimum: 0
                            maximum: 100
                          postTypes:
                            description: Formats to produce, e.g. reel, story, feed.
                            type: array
                            items:
                              type: string
                              minLength: 1
                          postingWindows:
                            description: Local time-of-day windows, "HH:mm-HH:mm".
                            type: array
                            items:
                              type: string
                              minLength: 1
                          timezone:
                            type: string
                            maxLength: 64
                          engagementLevel:
                            description: >-
                              Drives which warmup/engagement automations get
                              scheduled.
                            type: string
                            maxLength: 40
                          notes:
                            description: >-
                              Free text, passed to caption pipelines as a
                              runtime param.
                            type: string
                            maxLength: 2000
                      mode:
                        type: string
                        enum:
                          - draft_only
                          - review
                          - autopilot
                        description: >-
                          Trust dial. `draft_only` = the persona generates and a
                          human schedules; `review` = auto-scheduled from
                          human-approved assets only; `autopilot` = pipeline
                          output posts unattended.
                      status:
                        type: string
                        enum:
                          - active
                          - paused
                          - error
                      lastSyncAt:
                        description: Written by the sync job after each poll of the outbox.
                        type: string
                      lastError:
                        description: Cleared when status is set back to active.
                        type: string
                      createdAt:
                        type: string
                        description: ISO 8601 date-time, e.g. 2025-06-01T12:00:00.000Z
                      updatedAt:
                        type: string
                        description: ISO 8601 date-time, e.g. 2025-06-01T12:00:00.000Z
                    required:
                      - id
                      - organizationId
                      - accountId
                      - hiKatiePersonaId
                      - mediaPipelineIds
                      - mode
                      - status
                      - createdAt
                      - updatedAt
                required:
                  - binding
        '400':
          description: >-
            Schema validation failure (raw Zod error), `{ error: "Invalid
            account ID" }` for a malformed account UUID, or `{ error: "No active
            organization" }`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    const: false
                  error:
                    type: object
                    properties:
                      name:
                        type: string
                        const: ZodError
                      issues:
                        type: array
                        items:
                          type: object
                          propertyNames:
                            type: string
                          additionalProperties: {}
                        description: Raw Zod issues (code, path, message, ...).
                    required:
                      - name
                      - issues
                required:
                  - success
                  - error
        '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
        '404':
          description: Account not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable error message.
                required:
                  - error
        '409':
          description: Account already has a persona binding
          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

````