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

# Upload content

> Uploads a media file as multipart/form-data. A thumbnail is generated automatically. Pass `collectionId` to file the media into a collection at upload time.



## OpenAPI

````yaml /api-reference/openapi.json post /content/upload
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:
  /content/upload:
    post:
      tags:
        - Content
      summary: Upload content
      description: >-
        Uploads a media file as multipart/form-data. A thumbnail is generated
        automatically. Pass `collectionId` to file the media into a collection
        at upload time.
      operationId: postContentUpload
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
                  description: Image or video file to upload.
                title:
                  type: string
                  maxLength: 200
                  description: Optional display title for the media.
                type:
                  type: string
                  enum:
                    - image
                    - video
                    - carousel
                    - reel
                    - story
                  description: >-
                    Optional content type. Defaults to video when the file MIME
                    type starts with video/, otherwise image.
                folder:
                  type: string
                  maxLength: 50
                  description: Optional legacy folder name. Defaults to "images".
                collectionId:
                  type: string
                  format: uuid
                  description: >-
                    Optional collection ID. When provided, the uploaded media is
                    immediately filed into that collection.
      responses:
        '201':
          description: Content uploaded
          content:
            application/json:
              schema:
                type: object
                properties:
                  content:
                    type: object
                    properties:
                      id:
                        type: string
                        description: UUID (v7).
                      userId:
                        type: string
                        description: UUID (v7).
                      type:
                        type: string
                        enum:
                          - image
                          - video
                          - carousel
                          - reel
                          - story
                      name:
                        type: string
                        description: Original uploaded file name.
                      title:
                        description: Optional display title.
                        type: string
                      description:
                        type: string
                      fileUrl:
                        type: string
                        description: CDN URL of the media file.
                      thumbnailUrl:
                        type: string
                      fileSize:
                        type: number
                        description: Bytes.
                      dimensions:
                        type: string
                      duration:
                        description: Seconds, for video.
                        type: number
                      tags:
                        type: array
                        items:
                          type: string
                        description: Always present, possibly empty.
                      folder:
                        type: string
                        description: Legacy folder name. Defaults to "images".
                      collectionId:
                        description: >-
                          Owning content collection, when the item belongs to
                          one.
                        type: string
                      starred:
                        type: boolean
                      accountId:
                        type: string
                        description: UUID (v7).
                      status:
                        type: string
                        enum:
                          - draft
                          - scheduled
                          - posted
                          - failed
                        description: >-
                          `scheduled` means a pending run has reserved this
                          item; `posted` means it has been used.
                      reviewStatus:
                        description: >-
                          Persona review gate, set only on media imported
                          through a binding in `review` mode. Absent means
                          schedulable.
                        type: string
                        enum:
                          - pending
                          - approved
                          - rejected
                      usageCount:
                        type: number
                        description: >-
                          Times this item was posted. Content is meant to be
                          posted once.
                      lastPostedAt:
                        type: string
                        description: ISO 8601 date-time, e.g. 2025-06-01T12:00:00.000Z
                      postedAccountIds:
                        type: array
                        items:
                          type: string
                          description: UUID (v7).
                        description: >-
                          Denormalized mirror of `usageHistory`. Always present,
                          possibly empty.
                      usageHistory:
                        type: array
                        items:
                          type: object
                          properties:
                            executionId:
                              type: string
                              description: UUID (v7).
                            deviceId:
                              type: string
                              description: UUID (v7).
                            accountId:
                              type: string
                              description: UUID (v7).
                            workflowId:
                              type: string
                              description: UUID (v7).
                            postedAt:
                              type: string
                              description: >-
                                ISO 8601 date-time, e.g.
                                2025-06-01T12:00:00.000Z
                          required:
                            - postedAt
                        description: >-
                          One append-only entry per successful post. Always
                          present, possibly empty.
                      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
                      - userId
                      - type
                      - name
                      - fileUrl
                      - fileSize
                      - tags
                      - folder
                      - starred
                      - status
                      - usageCount
                      - postedAccountIds
                      - usageHistory
                      - createdAt
                      - updatedAt
                required:
                  - content
        '400':
          description: >-
            No file provided, or the form fields failed validation. Field
            failures return `{ error: "Invalid form data", details }` where
            `details` is a flattened Zod error.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  details:
                    type: object
                    propertyNames:
                      type: string
                    additionalProperties: {}
                required:
                  - 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: Collection not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable error message.
                required:
                  - error
        '413':
          description: >-
            `STORAGE_LIMIT_EXCEEDED` — the upload would exceed the
            organization’s storage allowance.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  code:
                    type: string
                    description: Machine-readable error code.
                required:
                  - error
                  - code
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Developer API key from Dashboard → Settings → Developer API

````