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

# Request a review

> Review one asset against a brand. Returns HTTP 202 with the review ID and status. Get the review by ID to retrieve its results.

<Note>Reviews are in private beta for selected accounts. Follow the [review guide](/guides/request-review) to submit an asset and retrieve results. To request access, contact [support@trybloom.ai](mailto:support@trybloom.ai).</Note>


## OpenAPI

````yaml https://www.trybloom.ai/api/v1/spec.json post /reviews
openapi: 3.1.1
info:
  title: Bloom API
  version: 1.0.0
servers:
  - url: https://www.trybloom.ai/api/v1
security:
  - apiKey: []
  - bearer: []
tags:
  - name: Account
    description: >-
      Inspect the authenticated account — profile, credit balance, and
      accessible workspaces.
  - name: Brands
    description: Manage brands and brand identity.
  - name: Images
    description: Generate, edit, and retrieve images.
  - name: Models
    description: Find available models and check their inputs.
  - name: Generations
    description: Generate images, video, audio, and SVG, then retrieve the results.
  - name: Reviews
    description: >-
      Check an asset against a brand's color, typography, logo, and copy
      guidance.
  - name: Uploads
    description: >-
      Stage private local files for Brand sources, Library images, and other
      supported operations.
paths:
  /reviews:
    post:
      tags:
        - Reviews
      summary: Request a review
      description: >-
        Review one asset against a brand. Returns HTTP 202 with the review ID
        and status. Get the review by ID to retrieve its results.
      operationId: reviews.create
      parameters:
        - name: idempotency-key
          in: header
          schema:
            type: string
            minLength: 1
            maxLength: 255
            description: >-
              Optional key for safely retrying this request. Reuse it only with
              the same body.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                brandSessionId:
                  type: string
                  format: uuid
                  description: Brand to review against.
                assets:
                  type: array
                  minItems: 1
                  maxItems: 1
                  items:
                    anyOf:
                      - type: object
                        properties:
                          kind:
                            enum:
                              - file
                            type: string
                            description: >-
                              Set to file for an image supplied by temporary
                              upload or public HTTPS URL.
                          url:
                            type: string
                            maxLength: 2048
                            format: uri
                            description: >-
                              Public HTTPS URL of the image. Provide exactly one
                              of url or uploadId, never both.
                          uploadId:
                            type: string
                            format: uuid
                            description: >-
                              UUID of a completed temporary image upload
                              reserved through POST /uploads. Provide exactly
                              one of uploadId or url, never both.
                          filename:
                            type: string
                            minLength: 1
                            maxLength: 240
                            description: >-
                              Optional filename for an image supplied by url.
                              Derived from the URL when omitted. Omit when using
                              uploadId.
                        required:
                          - kind
                        additionalProperties: false
                        description: >-
                          An image supplied by a completed temporary uploadId or
                          a public HTTPS url. Provide exactly one, never both.
                          Supported formats: PNG, JPEG, WebP, GIF, and SVG.
                        title: Upload or public URL
                        if:
                          required:
                            - url
                        then:
                          not:
                            required:
                              - uploadId
                        else:
                          required:
                            - uploadId
                          not:
                            required:
                              - filename
                      - type: object
                        properties:
                          kind:
                            enum:
                              - image
                            type: string
                            description: >-
                              Set to image to use an existing Bloom image by its
                              imageId.
                          imageId:
                            type: string
                            format: uuid
                            description: >-
                              UUID of a completed generated image or a Brand
                              Library image in the brand's workspace. Required
                              when kind is image.
                        required:
                          - kind
                          - imageId
                        additionalProperties: false
                        title: Bloom image ID
                  description: >-
                    Exactly one image to review: a completed temporary upload
                    (kind=file, uploadId), a public HTTPS image URL (kind=file,
                    url), or a Bloom image ID (kind=image, imageId). Supported
                    formats: PNG, JPEG, WebP, GIF, and SVG. Documents such as
                    PDFs are not supported.
                checks:
                  type: array
                  minItems: 1
                  items:
                    enum:
                      - color
                      - typography
                      - logo
                      - copy
                    type: string
                  description: >-
                    Choose which checks to run: color, typography, logo, or
                    copy, without duplicates. Completed outcomes are returned
                    under results.
                context:
                  type: object
                  properties:
                    notes:
                      type: string
                      minLength: 1
                      maxLength: 4000
                      description: >-
                        Optional reviewer guidance: what the image is for, exact
                        expected text, or other important constraints. For
                        example: Coffee launch banner. The headline should read
                        exactly ‘Meet your morning.’ Use 1 to 4,000 characters
                        after trimming whitespace.
                    images:
                      type: array
                      maxItems: 10
                      items:
                        anyOf:
                          - type: object
                            properties:
                              kind:
                                enum:
                                  - file
                                type: string
                                description: >-
                                  Set to file for an image supplied by temporary
                                  upload or public HTTPS URL.
                              url:
                                type: string
                                maxLength: 2048
                                format: uri
                                description: >-
                                  Public HTTPS URL of the image. Provide exactly
                                  one of url or uploadId, never both.
                              uploadId:
                                type: string
                                format: uuid
                                description: >-
                                  UUID of a completed temporary image upload
                                  reserved through POST /uploads. Provide
                                  exactly one of uploadId or url, never both.
                              filename:
                                type: string
                                minLength: 1
                                maxLength: 240
                                description: >-
                                  Optional filename for an image supplied by
                                  url. Derived from the URL when omitted. Omit
                                  when using uploadId.
                            required:
                              - kind
                            additionalProperties: false
                            description: >-
                              An image supplied by a completed temporary
                              uploadId or a public HTTPS url. Provide exactly
                              one, never both. Supported formats: PNG, JPEG,
                              WebP, GIF, and SVG.
                            title: Upload or public URL
                            if:
                              required:
                                - url
                            then:
                              not:
                                required:
                                  - uploadId
                            else:
                              required:
                                - uploadId
                              not:
                                required:
                                  - filename
                          - type: object
                            properties:
                              kind:
                                enum:
                                  - image
                                type: string
                                description: >-
                                  Set to image to use an existing Bloom image by
                                  its imageId.
                              imageId:
                                type: string
                                format: uuid
                                description: >-
                                  UUID of a completed generated image or a Brand
                                  Library image in the brand's workspace.
                                  Required when kind is image.
                            required:
                              - kind
                              - imageId
                            additionalProperties: false
                            title: Bloom image ID
                      description: >-
                        Up to 10 optional supporting images, such as a logo,
                        product photo, or example to compare against. Supply
                        each as a completed temporary upload (kind=file,
                        uploadId), a public HTTPS image URL (kind=file, url), or
                        a Bloom image ID (kind=image, imageId). Supported
                        formats: PNG, JPEG, WebP, GIF, and SVG.
                  additionalProperties: false
                  description: >-
                    Optional reviewer guidance and up to 10 supporting images.
                    If you include context, provide nonblank notes, at least one
                    image, or both. Empty context objects, blank notes, and the
                    old description key are rejected.
                  if:
                    not:
                      required:
                        - notes
                  then:
                    required:
                      - images
                    properties:
                      images:
                        minItems: 1
              required:
                - brandSessionId
                - assets
                - checks
              additionalProperties: false
              examples:
                - brandSessionId: e6220a5e-4a68-4d39-8bb9-5105e9a3a164
                  assets:
                    - kind: file
                      url: https://assets.example.com/campaign.png
                  checks:
                    - color
      responses:
        '202':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: Review ID.
                      status:
                        enum:
                          - pending
                          - processing
                          - completed
                          - failed
                        type: string
                    required:
                      - id
                      - status
                required:
                  - data
        '400':
          description: '400'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewsCreate400ErrorResponse'
        '401':
          description: '401'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewsCreate401ErrorResponse'
        '403':
          description: '403'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewsCreate403ErrorResponse'
        '404':
          description: '404'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewsCreate404ErrorResponse'
        '409':
          description: '409'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewsCreate409ErrorResponse'
        '429':
          description: '429'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewsCreate429ErrorResponse'
          headers:
            Retry-After:
              description: >-
                Seconds until the API-key request limit resets. Present only
                when the request-rate limiter can calculate the delay.
              schema:
                type: integer
                minimum: 0
        '500':
          description: '500'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReviewsCreate500ErrorResponse'
components:
  schemas:
    ReviewsCreate400ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: INVALID_INPUT
                    status:
                      const: 400
                    message:
                      type: string
                      default: Invalid review input
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    ReviewsCreate401ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: UNAUTHORIZED
                    status:
                      const: 401
                    message:
                      type: string
                      default: Invalid or missing API credentials
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    ReviewsCreate403ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: ACCOUNT_BANNED
                    status:
                      const: 403
                    message:
                      type: string
                      default: This account has been suspended.
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: FORBIDDEN
                    status:
                      const: 403
                    message:
                      type: string
                      default: Plan upgrade required
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: BETA_ACCESS_REQUIRED
                    status:
                      const: 403
                    message:
                      type: string
                      default: >-
                        Reviews are in private beta and aren't enabled for this
                        account. To request access, contact support@trybloom.ai.
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    ReviewsCreate404ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: BRAND_NOT_FOUND
                    status:
                      const: 404
                    message:
                      type: string
                      default: Brand not found.
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: IMAGE_NOT_FOUND
                    status:
                      const: 404
                    message:
                      type: string
                      default: Image not found in this brand's workspace
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: UPLOAD_NOT_FOUND
                    status:
                      const: 404
                    message:
                      type: string
                      default: Upload not found in this workspace
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    ReviewsCreate409ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: BRAND_SKILL_UNAVAILABLE
                    status:
                      const: 409
                    message:
                      type: string
                      default: This brand is not ready for reviews yet
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: IMAGE_NOT_READY
                    status:
                      const: 409
                    message:
                      type: string
                      default: The generated image is not complete
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: IDEMPOTENCY_CONFLICT
                    status:
                      const: 409
                    message:
                      type: string
                      default: >-
                        Idempotency-Key was already used with a different
                        request
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    ReviewsCreate429ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: TOO_MANY_REQUESTS
                    status:
                      const: 429
                    message:
                      type: string
                      default: Rate limit exceeded
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      const: ACTIVE_REVIEW_LIMIT_REACHED
                    status:
                      const: 429
                    message:
                      type: string
                      default: Too many reviews are already running
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    ReviewsCreate500ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: INTERNAL_ERROR
                    status:
                      const: 500
                    message:
                      type: string
                      default: Failed to create review
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    ApiError:
      type: object
      properties:
        code:
          type: string
        status:
          type: integer
        message:
          type: string
        data: {}
      required:
        - code
        - status
        - message
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: 'Bloom API key, for example `x-api-key: bloom_sk_...`.'
    bearer:
      type: http
      scheme: bearer
      description: Bloom API key (`Bearer bloom_sk_...`) or Bloom OAuth access token.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.