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

# Upload a Pages reference image

> Uploads one reference image to the canonical board for a site in the API key's workspace. This REST-only endpoint has no MCP-tool equivalent. The request cannot select a tenant, workspace, or board.



## OpenAPI

````yaml /openapi.json post /api/pages/{siteId}/assets
openapi: 3.1.0
info:
  title: Goosy Bear API
  version: 1.0.0-beta
  summary: Manage workspace content, projects, Data tables, Pages, library and credits.
  description: >-
    BETA. This API is in beta: paths, request shapes and response envelopes may
    change, and every response carries an `x-goosy-api: beta` header for as long
    as that is true. Pin the OpenAPI document you generated against and
    re-generate when it changes.
servers:
  - url: https://app.goosybear.ai
    description: Production
security:
  - tenantApiKey: []
paths:
  /api/pages/{siteId}/assets:
    post:
      tags:
        - pages
      summary: Upload a Pages reference image
      description: >-
        Uploads one reference image to the canonical board for a site in the API
        key's workspace. This REST-only endpoint has no MCP-tool equivalent. The
        request cannot select a tenant, workspace, or board.
      operationId: uploadPageAsset
      parameters:
        - name: siteId
          in: path
          required: true
          description: The UUID of a site in the API key's workspace.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              additionalProperties: false
              properties:
                file:
                  type: string
                  format: binary
                  description: The single image file to attach to the site board.
              required:
                - file
      responses:
        '200':
          description: The image was stored and attached to the site's board.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            Cache-Control:
              description: Always `no-store`; upload results are never cacheable.
              schema:
                type: string
                const: no-store
            Referrer-Policy:
              description: Always `no-referrer`.
              schema:
                type: string
                const: no-referrer
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    const: true
                  data:
                    type: object
                    properties:
                      boardItemId:
                        type: string
                        format: uuid
                      storageObjectId:
                        type: string
                        format: uuid
                      displayName:
                        type: string
                    required:
                      - boardItemId
                      - storageObjectId
                      - displayName
                    additionalProperties: false
                required:
                  - ok
                  - data
                additionalProperties: false
        '400':
          description: >-
            The site id or multipart request was invalid, or the file failed the
            image upload limits.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            Cache-Control:
              description: Always `no-store`; upload results are never cacheable.
              schema:
                type: string
                const: no-store
            Referrer-Policy:
              description: Always `no-referrer`.
              schema:
                type: string
                const: no-referrer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageAssetError'
        '401':
          description: No bearer credential, or one that did not resolve.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            Cache-Control:
              description: Always `no-store`; upload results are never cacheable.
              schema:
                type: string
                const: no-store
            Referrer-Policy:
              description: Always `no-referrer`.
              schema:
                type: string
                const: no-referrer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageAssetError'
        '403':
          description: >-
            The key is not workspace-restricted, programmatic access is
            unavailable, or its operator holder lacks `pages.manage`.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            Cache-Control:
              description: Always `no-store`; upload results are never cacheable.
              schema:
                type: string
                const: no-store
            Referrer-Policy:
              description: Always `no-referrer`.
              schema:
                type: string
                const: no-referrer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageAssetError'
        '404':
          description: The site or its canonical board is not in the API key's workspace.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            Cache-Control:
              description: Always `no-store`; upload results are never cacheable.
              schema:
                type: string
                const: no-store
            Referrer-Policy:
              description: Always `no-referrer`.
              schema:
                type: string
                const: no-referrer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageAssetError'
        '429':
          description: >-
            The API key is over its rate limit. Wait for `Retry-After` before
            retrying.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            Cache-Control:
              description: Always `no-store`; upload results are never cacheable.
              schema:
                type: string
                const: no-store
            Referrer-Policy:
              description: Always `no-referrer`.
              schema:
                type: string
                const: no-referrer
            Retry-After:
              description: Whole seconds to wait before retrying.
              schema:
                type: integer
                minimum: 1
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageAssetError'
        '500':
          description: >-
            An unexpected server or storage error occurred while handling the
            upload.
          headers:
            x-goosy-api:
              description: Present while this API is in beta; the value is `beta`.
              schema:
                type: string
                const: beta
            Cache-Control:
              description: Always `no-store`; upload results are never cacheable.
              schema:
                type: string
                const: no-store
            Referrer-Policy:
              description: Always `no-referrer`.
              schema:
                type: string
                const: no-referrer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageAssetError'
components:
  schemas:
    PageAssetError:
      type: object
      properties:
        ok:
          type: boolean
          const: false
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
            retry_after_seconds:
              type: integer
              minimum: 1
          required:
            - code
            - message
          additionalProperties: false
      required:
        - ok
        - error
      additionalProperties: false
      description: A Pages asset upload that did not succeed.
  securitySchemes:
    tenantApiKey:
      type: http
      scheme: bearer
      description: >-
        An API key minted at Settings › API & MCP. Send it as `Authorization:
        Bearer <key>`. A key carries its holder's own permissions, resolved on
        every call — revoking a membership closes the key's reach immediately.
        Keep it in an environment variable (`GOOSY_API_KEY`), never in a
        committed file.

````