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

> ## Agent Instructions
> Flowy is a node-based AI creative platform: you generate images, video, audio, 3D and vector on an infinite Canvas, refine on the Studio timeline, and export or publish from the same project.
> Prefer the Flowy MCP server (https://mcp.tryflowy.ai/mcp) or the REST API at https://apis.tryflowy.ai/v1 for programmatic work. Install with `flowy mcp install` from the @flowy/cli package.
> Credits are workspace-scoped. Generations reserve credits on start and only deduct on success, so failed runs refund automatically.

# Get a run

> Poll a run's status and, once complete, its output media URLs.

Output media URLs are signed and expire. Download or copy the asset to your own storage soon after the run completes.

There's no separate `outputs` array. The result surface is `nodeResults`, the run's full per-node record (executed nodes only, in no guaranteed order): each entry carries `nodeId`, `status` (`completed` | `failed`), and, when it produced content, `kind` plus `url` or `text`. The entries with `isOutput: true` are the ones the flow publishes by `name`. Filter on that flag to get what [Run a flow](/api/running-apps) calls the run's outputs. A node missing from `nodeResults` was never executed. When the run was started with `params`, they're echoed back on the record as `params` (typed, as sent); `inputs` stays the content values, as strings.


## OpenAPI

````yaml api-reference/openapi.json GET /v1/runs/{runId}
openapi: 3.0.3
info:
  title: Flowy App API
  version: 1.3.1
  description: >-
    Run Flowy apps and direct generations programmatically.


    Authenticate with a workspace API key in the `Authorization: Bearer` header.
    A **secret** key (`flowy_…`) is for servers; a **publishable** key
    (`flowy_pk_…`) is browser-safe and only works from its allowlisted domains.
    Every run or generation bills the API key's own workspace credits
    (caller-pays), so a leaked key can never spend another workspace's balance.


    Keys carry **scopes**: `apps:read` (list/inspect apps), `runs:read` (poll
    runs), `runs:write` (start runs), `generations:read` (poll direct
    generations), `generations:write` (start direct generations), `assets:read`
    (list/read workspace assets), and `credits:read` (read the credit balance).
    A request that needs a scope the key doesn't hold returns `403`.


    A published (public) app is runnable by any key; a private app is runnable
    only by a key of its own workspace.
servers:
  - url: https://apis.tryflowy.ai/genstudio-svc-v2/api
    description: Flowy API
  - url: https://fi.development.flamapis.com/genstudio-svc-v2/api
    description: Development
  - url: http://localhost:8000/genstudio-svc-v2/api
    description: Local
security:
  - ApiKeyAuth: []
tags:
  - name: Apps
    description: Discover apps and inspect their input/output schema.
  - name: Runs
    description: Start runs and poll for their results.
  - name: Generations
    description: Start direct image/video generations and poll for their results.
  - name: Assets
    description: Browse the workspace's asset library (uploads + generated media).
  - name: Credits
    description: Read the workspace's credit balance.
  - name: Spec
    description: The machine-readable OpenAPI document.
paths:
  /v1/runs/{runId}:
    get:
      tags:
        - Runs
      summary: Get a run
      description: >-
        Returns a run's status and, once complete, its outputs (signed,
        downloadable media URLs). Only runs started by your own workspace are
        visible. **Requires the `runs:read` scope.**
      operationId: getRun
      parameters:
        - name: runId
          in: path
          required: true
          schema:
            type: string
          example: 64c3f2a1e8b9c0d1f2e3a4b5
      responses:
        '200':
          description: Run status and outputs.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RunView'
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: >-
            Run belongs to another workspace, or the key lacks the runs:read
            scope
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  headers:
    X-RateLimit-Limit:
      description: Maximum requests allowed in the current window (per minute).
      schema:
        type: integer
        example: 60
    X-RateLimit-Remaining:
      description: Requests remaining in the current window.
      schema:
        type: integer
        example: 59
    X-RateLimit-Reset:
      description: Unix epoch second at which the current window resets.
      schema:
        type: integer
        example: 1893456000
  schemas:
    RunView:
      type: object
      properties:
        data:
          type: object
          properties:
            runId:
              type: string
              example: 64c3f2a1e8b9c0d1f2e3a4b5
            appId:
              type: string
              example: 507f1f77bcf86cd799439011
            appTitle:
              type: string
              example: Headshot generator
            status:
              type: string
              enum:
                - queued
                - running
                - completed
                - failed
              example: completed
            outputs:
              type: array
              items:
                type: object
                properties:
                  nodeId:
                    type: string
                    example: node_9
                  kind:
                    type: string
                    enum:
                      - image
                      - video
                      - audio
                      - text
                      - flam
                    example: image
                  url:
                    type: string
                    description: >-
                      Signed, downloadable media URL — present for media
                      outputs; expires.
                    example: https://cdn.tryflowy.ai/runs/headshot.png
                  text:
                    type: string
                    description: Text result — present for text outputs.
            error:
              type: string
              description: >-
                Human-readable failure reason. Present only when status is
                failed.
            createdAt:
              type: string
              format: date-time
              example: '2026-01-01T00:00:00Z'
            updatedAt:
              type: string
              format: date-time
              example: '2026-01-01T00:00:05Z'
    Error:
      type: object
      properties:
        error:
          type: string
          example: this API key lacks the runs:write scope
      required:
        - error
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      bearerFormat: flowy_*
      description: >-
        A workspace API key. Secret keys (`flowy_…`) are server-side — keep them
        private. Publishable keys (`flowy_pk_…`) are browser-safe but only work
        from their allowlisted domains.

````