Bloom Briefs API

Get brand guidance and selected assets for a specific task.

Operations 2

POST /briefs Request a Brief #
GET /briefs/{id} Get a Brief #

Specifications

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/trybloom:trybloom-briefs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

trybloom-briefs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Rainbrand Briefs API
  version: 1.0.0
  description: Get brand guidance and selected assets for a specific task.
servers:
- url: https://www.rainbrand.com/api/v1
security:
- apiKey: []
- bearer: []
- oauth: []
tags:
- name: Briefs
  description: Get brand guidance and selected assets for a specific task.
paths:
  /briefs:
    post:
      operationId: briefs.create
      summary: Request a Brief
      description: Prepare brand guidance and selected assets for a specific task. Retrieve the result with Get a Brief.
      tags:
      - Briefs
      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 prepare the brief from.
                task:
                  type: string
                  minLength: 1
                  maxLength: 4000
                  description: What you are about to make, in plain language. Include any context or instructions that would help select the right brand guidance and files.
              required:
              - brandSessionId
              - task
              additionalProperties: false
              examples:
              - brandSessionId: e6220a5e-4a68-4d39-8bb9-5105e9a3a164
                task: A landscape launch image for Acme Inc. Atlas Pro. Center the product and include the headline "Meet Atlas Pro" and the call to action "Explore Atlas Pro".
      responses:
        '202':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: Brief ID.
                      status:
                        enum:
                        - pending
                        - processing
                        - completed
                        - failed
                        type: string
                    required:
                    - id
                    - status
                required:
                - data
              example:
                data:
                  id: 657bcf79-1f2f-47fa-90f8-9245142980ed
                  status: pending
        '401':
          description: '401'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsCreate401ErrorResponse'
        '402':
          description: '402'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsCreate402ErrorResponse'
        '403':
          description: '403'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsCreate403ErrorResponse'
        '404':
          description: '404'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsCreate404ErrorResponse'
        '409':
          description: '409'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsCreate409ErrorResponse'
        '429':
          description: '429'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsCreate429ErrorResponse'
          headers:
            Retry-After:
              description: Seconds until the applicable request or operation limit resets. Present when the limiter can calculate the delay.
              schema:
                type: integer
                minimum: 0
        '500':
          description: '500'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsCreate500ErrorResponse'
      x-mint:
        href: /api-reference/briefs/request-a-brief
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl --request POST \\\n  --url 'https://www.rainbrand.com/api/v1/briefs' \\\n  --header \"x-api-key: $RAINBRAND_API_KEY\" \\\n  --header \"Content-Type: application/json\" \\\n  --data '{\n  \"brandSessionId\": \"e6220a5e-4a68-4d39-8bb9-5105e9a3a164\",\n  \"task\": \"A landscape launch image for Acme Inc. Atlas Pro. Center the product and include the headline \\\"Meet Atlas Pro\\\" and the call to action \\\"Explore Atlas Pro\\\".\"\n}'"
  /briefs/{id}:
    get:
      operationId: briefs.get
      summary: Get a Brief
      description: Get a Brief's current status and, when complete, its Markdown guidance and selected assets.
      tags:
      - Briefs
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          description: Brief ID.
          example: 657bcf79-1f2f-47fa-90f8-9245142980ed
        example: 657bcf79-1f2f-47fa-90f8-9245142980ed
      - name: wait
        in: query
        schema:
          anyOf:
          - type: boolean
          - enum:
            - '0'
            - '1'
            - 'true'
            - 'false'
            type: string
          default: false
          description: Hold the connection until the resource reaches a terminal status
        allowEmptyValue: true
        allowReserved: true
      - name: timeout
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 295
          default: 120
          description: Max seconds to wait (default 120, max 295)
        allowEmptyValue: true
        allowReserved: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: Brief ID.
                      status:
                        enum:
                        - pending
                        - processing
                        - completed
                        - failed
                        type: string
                        description: Current status of the brief.
                      skillId:
                        anyOf:
                        - type: string
                          format: uuid
                        - type: 'null'
                        description: Brand Skill version used to prepare the brief, or null if that version was deleted.
                      createdAt:
                        type: string
                        format: date-time
                        description: When the brief was requested.
                      completedAt:
                        type: string
                        format: date-time
                        description: When the brief completed.
                      guidance:
                        type: string
                        description: Brand guidance for the task, in Markdown. Available when completed.
                      assets:
                        type: array
                        items:
                          type: object
                          properties:
                            kind:
                              enum:
                              - logo
                              - image
                              - font
                              - font_render
                              type: string
                              description: Asset type. A font render is an image preview of a font.
                            mediaType:
                              enum:
                              - image/avif
                              - image/gif
                              - image/jpeg
                              - image/png
                              - image/svg+xml
                              - image/webp
                              - image/x-icon
                              - font/otf
                              - font/ttf
                              - font/woff
                              - font/woff2
                              type: string
                              description: MIME type of the image or font file.
                            url:
                              type: string
                              format: uri
                              description: Stable Rainbrand asset URL with no scheduled expiry. Redirects to fresh storage access while the completed brief, brand, saved Brand Skill version, and asset remain available. Anyone with this link can access the asset without signing in.
                            mediaId:
                              type: string
                              format: uuid
                              description: Media ID when the asset is a Library file. Absent for files that live inside the Brand Skill, such as fonts.
                          required:
                          - kind
                          - mediaType
                          - url
                          additionalProperties: false
                        description: Files selected for the task. Available when completed.
                      error:
                        type: object
                        properties:
                          code:
                            type: string
                            description: Error code identifying the failure.
                          message:
                            type: string
                            description: Human-readable explanation of the failure.
                          retryable:
                            type: boolean
                            description: Whether you can retry by creating a new brief with a new idempotency key.
                        required:
                        - code
                        - message
                        - retryable
                        description: Failure details. Available when the brief failed.
                      failedAt:
                        type: string
                        format: date-time
                        description: When the brief failed.
                    required:
                    - id
                    - status
                    - skillId
                    - createdAt
                required:
                - data
              example:
                data:
                  id: 657bcf79-1f2f-47fa-90f8-9245142980ed
                  status: completed
                  skillId: 6590fb89-c177-45b3-85d4-74ab6b92dc2a
                  createdAt: '2026-10-24T09:00:00.000Z'
                  completedAt: '2026-10-24T09:00:30.000Z'
                  guidance: '# Atlas Pro launch image


                    Use Acme Inc. yellow #FFD600. Center Atlas Pro with room for the headline "Meet Atlas Pro" and call to action "Explore Atlas Pro".'
                  assets:
                  - kind: image
                    mediaType: image/png
                    url: https://assets.acme.com/atlas-pro/product.png
        '401':
          description: '401'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsGet401ErrorResponse'
        '403':
          description: '403'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsGet403ErrorResponse'
        '404':
          description: '404'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsGet404ErrorResponse'
        '429':
          description: '429'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefsGet429ErrorResponse'
          headers:
            Retry-After:
              description: Seconds until the applicable request or operation limit resets. Present when the limiter can calculate the delay.
              schema:
                type: integer
                minimum: 0
      x-codeSamples:
      - lang: bash
        label: cURL
        source: "curl --request GET \\\n  --url 'https://www.rainbrand.com/api/v1/briefs/657bcf79-1f2f-47fa-90f8-9245142980ed' \\\n  --header \"x-api-key: $RAINBRAND_API_KEY\""
components:
  schemas:
    BriefsGet429ErrorResponse:
      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:
                  type: string
                status:
                  type: integer
                message:
                  type: string
                data: {}
              required:
              - code
              - status
              - message
      required:
      - error
    BriefsGet403ErrorResponse:
      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: FEATURE_NOT_AVAILABLE
                status:
                  const: 403
                message:
                  type: string
                  default: This operation isn't available for this integration.
                data: {}
              required:
              - code
              - status
              - message
            - type: object
              properties:
                code:
                  type: string
                status:
                  type: integer
                message:
                  type: string
                data: {}
              required:
              - code
              - status
              - message
      required:
      - error
    BriefsCreate402ErrorResponse:
      type: object
      properties:
        error:
          allOf:
          - $ref: '#/components/schemas/ApiError'
          - anyOf:
            - type: object
              properties:
                code:
                  const: INSUFFICIENT_CREDITS
                status:
                  const: 402
                message:
                  type: string
                  default: Not enough credits to create a brief
                data:
                  type: object
                  properties:
                    action_url:
                      type: string
                      format: uri
                      description: Deep link to /pricing for the caller to top up credits
                    credits_required:
                      type: number
                      description: Credits the refused request needed
                    balance:
                      type: number
                      description: The workspace's credit balance when the request was refused
                    pricing_version:
                      type: integer
                      minimum: -9007199254740991
                      maximum: 9007199254740991
                      description: The workspace's pricing version. Credit amounts are comparable only within one version.
                  required:
                  - action_url
              required:
              - code
              - status
              - message
              - data
            - type: object
              properties:
                code:
                  const: PAYMENT_REQUIRED
                status:
                  const: 402
                message:
                  type: string
                  default: Subscription paused — complete payment to resume
                data:
                  type: object
                  properties:
                    action_url:
                      type: string
                      format: uri
                      description: Deep link to /pricing to complete the pending payment
                  required:
                  - action_url
              required:
              - code
              - status
              - message
              - data
            - 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
    BriefsCreate409ErrorResponse:
      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 briefs yet
                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
    BriefsCreate403ErrorResponse:
      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: FEATURE_NOT_AVAILABLE
                status:
                  const: 403
                message:
                  type: string
                  default: This operation isn't available for this integration.
                data: {}
              required:
              - code
              - status
              - message
            - type: object
              properties:
                code:
                  type: string
                status:
                  type: integer
                message:
                  type: string
                data: {}
              required:
              - code
              - status
              - message
      required:
      - error
    BriefsGet401ErrorResponse:
      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
    BriefsCreate500ErrorResponse:
      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 brief
                data: {}
              required:
              - code
              - status
              - message
            - type: object
              properties:
                code:
                  type: string
                status:
                  type: integer
                message:
                  type: string
                data: {}
              required:
              - code
              - status
              - message
      required:
      - error
    BriefsCreate401ErrorResponse:
      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
    BriefsGet404ErrorResponse:
      type: object
      properties:
        error:
          allOf:
          - $ref: '#/components/schemas/ApiError'
          - anyOf:
            - type: object
              properties:
                code:
                  const: BRIEF_NOT_FOUND
                status:
                  const: 404
                message:
                  type: string
                  default: Brief not found
                data: {}
              required:
              - code
              - status
              - message
            - 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:
                  type: string
                status:
                  type: integer
                message:
                  type: string
                data: {}
              required:
              - code
              - status
              - message
      required:
      - error
    BriefsCreate429ErrorResponse:
      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_BRIEF_LIMIT_REACHED
                status:
                  const: 429
                message:
                  type: string
                  default: Too many briefs 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
    BriefsCreate404ErrorResponse:
      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:
                  type: string
                status:
                  type: integer
                message:
                  type: string
                data: {}
              required:
              - code
              - status
              - message
      required:
      - error
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: 'Rainbrand API key, for example `x-api-key: bloom_sk_...`.'
    bearer:
      type: http
      scheme: bearer
      description: Rainbrand API key (`Bearer bloom_sk_...`) or Rainbrand OAuth access token.
    oauth:
      type: oauth2
      description: Authorization Code with PKCE S256. See [Authentication](https://docs.rainbrand.com/api/authentication).
      flows:
        authorizationCode:
          authorizationUrl: https://www.rainbrand.com/api/auth/oauth2/authorize
          tokenUrl: https://www.rainbrand.com/api/auth/oauth2/token
          scopes:
            openid: Authenticate the user's identity with OpenID Connect.
            offline_access: Request a refresh token for access when the user is offline.