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

# Get image

> Read one Media Library image, or poll an asynchronous image generation by image_id

Returns one Media Library image: its public URL, alt text, AI-written title / caption / description, tags, dimensions, the prompt that produced it, the E-E-A-T disclaimer, the content item it is attached to, and every social variant cut (preset, size, URL).

This is also the poll endpoint after [Generate image](/api-reference/images/generate). The first five fields — `image_id`, `generation_id`, `status`, `image_url`, `error` — are the poll contract: `status` is `generating` until the worker finishes, then `complete` (with `image_url`) or `error` (with `error`). Prefer the `image.generation.completed` / `image.generation.failed` [webhooks](/webhooks) over polling.

Assets that belong to a different site return `404`.

**Scope required:** `images:read` (keys holding only `images:write` may still poll)

## Path parameters

<ParamField path="imageId" type="string" required>The Media Library asset UUID (the `image_id` returned by Generate image or List images).</ParamField>

## Response fields

| Field                             | Notes                                                                                                    |
| --------------------------------- | -------------------------------------------------------------------------------------------------------- |
| `alt_text`                        | Accessibility text. AI images receive an AI-written value shortly after generation.                      |
| `title`, `caption`, `description` | AI-written once the alt-text pass completes; before that they echo the prompt.                           |
| `generation.prompt`               | The creative prompt the caller supplied.                                                                 |
| `generation.generation_prompt`    | The expanded prompt Hrizn sent to the model.                                                             |
| `generation.disclaimer`           | Representative-image disclaimer to show alongside the render.                                            |
| `article_id`                      | Content item the image is attached to, if any.                                                           |
| `parent_image_id`                 | Set when this asset is itself a social variant of another image.                                         |
| `variants[]`                      | Social cuts of this image: `preset_key`, `preset_label`, `width`, `height`, `aspect_ratio`, `image_url`. |

<ResponseExample>
  ```json 200 (complete) theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "data": {
      "image_id": "2c9c5b1e-6d0d-4c74-9c8f-3b1e0a5d8f21",
      "generation_id": "7a3f2e10-1b2c-4d5e-8f90-abcdef123456",
      "status": "complete",
      "image_url": "https://assets.app.hrizn.io/public/media-library/8f1c.../7a3f2e10.jpg",
      "error": null,
      "source": "ai",
      "alt_text": "Red Toyota RAV4 Hybrid parked outside a dealership at sunset",
      "title": "Red RAV4 Hybrid at Sunset",
      "caption": "A red RAV4 Hybrid in front of a modern dealership at golden hour.",
      "description": "Representative render of a red RAV4 Hybrid for a landing page hero.",
      "tags": ["ai", "rav4"],
      "width": 1376,
      "height": 768,
      "aspect_ratio": "16:9",
      "created_at": "2026-09-06T14:28:00.000Z",
      "updated_at": "2026-09-06T14:28:31.000Z",
      "generated_at": "2026-09-06T14:28:27.609Z",
      "generation": {
        "prompt": "A red Toyota RAV4 hybrid parked in front of a modern dealership at golden hour",
        "generation_prompt": "Photorealistic red Toyota RAV4 Hybrid, three-quarter front view, ...",
        "disclaimer": "Representative image. Actual vehicle may vary."
      },
      "article_id": "9d2e1f30-4b5c-4d6e-8f70-1234567890ab",
      "parent_image_id": null,
      "variants": [
        {
          "image_id": "5e6f7a80-9b0c-4d1e-8f20-abcdef654321",
          "preset_key": "igFeedSquare",
          "preset_label": "Instagram / Facebook square (1:1)",
          "width": 1080,
          "height": 1080,
          "aspect_ratio": "1:1",
          "image_url": "https://assets.app.hrizn.io/public/media-library/8f1c.../5e6f7a80.jpg",
          "status": "complete"
        }
      ]
    }
  }
  ```

  ```json 200 (generating) theme={"theme":{"light":"github-light","dark":"github-dark"}}
  {
    "data": {
      "image_id": "2c9c5b1e-6d0d-4c74-9c8f-3b1e0a5d8f21",
      "generation_id": "7a3f2e10-1b2c-4d5e-8f90-abcdef123456",
      "status": "generating",
      "image_url": null,
      "error": null,
      "source": "ai",
      "alt_text": null,
      "title": null,
      "caption": null,
      "description": null,
      "tags": [],
      "width": null,
      "height": null,
      "aspect_ratio": "16:9",
      "created_at": "2026-09-06T14:28:00.000Z",
      "updated_at": null,
      "generated_at": null,
      "generation": { "prompt": "A red Toyota RAV4 hybrid ...", "generation_prompt": null, "disclaimer": null },
      "article_id": null,
      "parent_image_id": null,
      "variants": []
    }
  }
  ```
</ResponseExample>


## OpenAPI

````yaml GET /images/{imageId}
openapi: 3.1.0
info:
  title: Hrizn Public API
  version: 1.2.0
  description: >
    The Hrizn Public API allows partners to programmatically create content,
    manage inventory descriptions, and integrate with the Hrizn platform.


    All endpoints are prefixed with `/public` and require an API key passed via
    the `X-API-Key` header (except the health check).
  contact:
    email: support@hrizn.io
servers:
  - url: https://api.app.hrizn.io/v1/public
    description: Production
security:
  - apiKeyAuth: []
tags:
  - name: Analytics
    description: >-
      Warehoused Google Search Console and GA4 reads (Teams+ API access,
      analytics:read). URL Inspection is live only on pages/performance.
  - name: IdeaClouds
    description: Create and manage AI-powered keyword research
  - name: Content Intelligence
    description: AI-powered content gap analysis and recommendations
  - name: Content
    description: Generate content from IdeaClouds
  - name: Compliance
    description: Run OEM compliance checks on content
  - name: Content Tools
    description: Generate SEO metadata, schemas, and social snippets
  - name: Inventory
    description: Access vehicle data and AI descriptions
  - name: Images
    description: >-
      Media Library images. Read the library (images:read): list and fetch
      images with alt text, AI-written title/caption/description, the generating
      prompt, dimensions, article links, and social variant cuts. Generate
      (images:write): async AI image generation returning an image_id;
      completion is delivered via image.generation.completed /
      image.generation.failed webhooks.
  - name: Market
    description: >-
      Live local market listings, days supply, competitive set, and pricing
      insights (Unlimited plan + market_data:read)
  - name: Site
    description: View dealership details and configuration
  - name: Webhooks
    description: Manage webhook subscriptions for real-time events
  - name: Reference
    description: Look up available types, scopes, and events
  - name: Social
    description: >-
      Social Hub posting and reviews across all connected platforms (X,
      Facebook, Instagram, LinkedIn, Google Business Profile)
  - name: Health
    description: Health check (no authentication)
paths:
  /images/{imageId}:
    get:
      tags:
        - Images
      summary: Get image
      description: >-
        Read one Media Library image: image_url, alt text, AI-written
        title/caption/description, tags, dimensions, the prompt and expanded
        generation prompt that produced it, the E-E-A-T disclaimer, the attached
        article, its parent when it is a social variant, and every social
        variant cut with preset, size, and url. Also the poll endpoint after
        POST /images/generate — status is generating until the worker finishes,
        then complete (with image_url) or error (with error). Assets belonging
        to other sites return 404. Requires images:read (keys with only
        images:write may still poll).
      operationId: getImage
      parameters:
        - name: imageId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Image
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Image'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    Image:
      type: object
      description: >-
        A Media Library image. The first five fields form the async-generation
        poll contract and are always present; the rest describe the finished
        asset.
      properties:
        image_id:
          type: string
          format: uuid
        generation_id:
          type: string
          format: uuid
          nullable: true
        status:
          type: string
          enum:
            - generating
            - complete
            - error
        image_url:
          type: string
          nullable: true
          description: Public asset URL once status is complete.
        error:
          type: string
          nullable: true
        source:
          type: string
          nullable: true
          enum:
            - ai
            - upload
            - oem
            - reference
            - social_variant
        alt_text:
          type: string
          nullable: true
          description: >-
            Accessibility text. AI images receive an AI-written value after
            generation.
        title:
          type: string
          nullable: true
        caption:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        tags:
          type: array
          items:
            type: string
        width:
          type: integer
          nullable: true
        height:
          type: integer
          nullable: true
        aspect_ratio:
          type: string
          nullable: true
          example: '16:9'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
          nullable: true
        generated_at:
          type: string
          format: date-time
          nullable: true
          description: When the AI render finished (AI images only).
        generation:
          type: object
          nullable: true
          description: Present for AI-generated images.
          properties:
            prompt:
              type: string
              nullable: true
              description: The creative prompt supplied by the caller.
            generation_prompt:
              type: string
              nullable: true
              description: The expanded prompt Hrizn sent to the model.
            disclaimer:
              type: string
              nullable: true
              description: E-E-A-T disclaimer to display alongside the image.
        article_id:
          type: string
          format: uuid
          nullable: true
          description: Content item this image is attached to, if any.
        parent_image_id:
          type: string
          format: uuid
          nullable: true
          description: Set when this image is itself a social variant of another image.
        variants:
          type: array
          description: Social variant cuts of this image. Empty on list rows.
          items:
            $ref: '#/components/schemas/ImageVariant'
    ImageVariant:
      type: object
      description: A social-platform cut generated from a parent image.
      properties:
        image_id:
          type: string
          format: uuid
          description: The variant's own Media Library asset id.
        preset_key:
          type: string
          description: >-
            Social preset key (igFeedSquare, igFeedPortrait, story, xLandscape,
            linkedinWide).
        preset_label:
          type: string
          nullable: true
        width:
          type: integer
          nullable: true
        height:
          type: integer
          nullable: true
        aspect_ratio:
          type: string
          nullable: true
          example: '1:1'
        image_url:
          type: string
          nullable: true
        status:
          type: string
          enum:
            - generating
            - complete
            - error
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: validation_error
            message:
              type: string
              example: 'keyword: Required'
            details:
              type: object
            request_id:
              type: string
  responses:
    BadRequest:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: API key lacks required scope
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your Hrizn API key (prefix hzk_)

````