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

# Create a review

> Review one asset against a brand's active Brand Skill for the requested checks. Linked files are downloaded and uploads are copied when the review is created. Each account can have 20 reviews pending or processing at once. Returns 202 with the review ID; then call `GET /reviews/{id}` with wait=true until the review completes or fails.

<Note>Reviews are in private beta for selected accounts. 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: Create a review
      description: >-
        Review one asset against a brand's active Brand Skill for the requested
        checks. Linked files are downloaded and uploads are copied when the
        review is created. Each account can have 20 reviews pending or
        processing at once. Returns 202 with the review ID; then call `GET
        /reviews/{id}` with wait=true until the review completes or fails.
      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:
                            const: file
                          url:
                            type: string
                            maxLength: 2048
                            format: uri
                            description: >-
                              Public HTTPS link to the file. Bloom downloads it
                              when the review is created.
                          uploadId:
                            type: string
                            format: uuid
                            description: Completed temporary upload from POST /uploads.
                          filename:
                            type: string
                            minLength: 1
                            maxLength: 240
                            description: >-
                              Original filename of a linked file. Defaults from
                              the link.
                        required:
                          - kind
                        additionalProperties: false
                        title: File
                        description: >-
                          A file: give url for a public link, or uploadId for an
                          upload.
                      - type: object
                        properties:
                          kind:
                            const: image
                          imageId:
                            type: string
                            format: uuid
                            description: >-
                              A Bloom Library or generated image in the brand's
                              workspace. Generated images must be completed.
                        required:
                          - kind
                          - imageId
                        additionalProperties: false
                        title: Bloom image
                    description: A file, by link or upload, or a Bloom image.
                  description: The asset to review. Exactly one.
                references:
                  type: array
                  maxItems: 10
                  items:
                    anyOf:
                      - type: object
                        properties:
                          kind:
                            const: file
                          url:
                            type: string
                            maxLength: 2048
                            format: uri
                            description: >-
                              Public HTTPS link to the file. Bloom downloads it
                              when the review is created.
                          uploadId:
                            type: string
                            format: uuid
                            description: Completed temporary upload from POST /uploads.
                          filename:
                            type: string
                            minLength: 1
                            maxLength: 240
                            description: >-
                              Original filename of a linked file. Defaults from
                              the link.
                        required:
                          - kind
                        additionalProperties: false
                        title: File
                        description: >-
                          A file: give url for a public link, or uploadId for an
                          upload.
                      - type: object
                        properties:
                          kind:
                            const: image
                          imageId:
                            type: string
                            format: uuid
                            description: >-
                              A Bloom Library or generated image in the brand's
                              workspace. Generated images must be completed.
                        required:
                          - kind
                          - imageId
                        additionalProperties: false
                        title: Bloom image
                    description: A file, by link or upload, or a Bloom image.
                  default: []
                  description: >-
                    Optional pictures to compare with, such as a logo or product
                    shot. At most 10.
                checks:
                  type: array
                  minItems: 1
                  items:
                    enum:
                      - color
                      - typography
                      - logo
                      - copy
                    type: string
                  description: 'Checks to run: any of color, typography, logo, and copy.'
                context:
                  type: string
                  minLength: 1
                  maxLength: 4000
                  description: Optional. What the asset is for, or what was asked for.
              required:
                - brandSessionId
                - assets
                - checks
              additionalProperties: false
      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 has no Brand Skill to review against 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.

````