Bloom Feedback API
Report problems and observations about Rainbrand.
Report problems and observations about Rainbrand.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/trybloom:trybloom-feedback-api"
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.
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: 3.2.0
info:
title: Rainbrand Feedback API
version: 1.0.0
description: Report problems and observations about Rainbrand.
servers:
- url: https://www.rainbrand.com/api/v1
security:
- apiKey: []
- bearer: []
- oauth: []
tags:
- name: Feedback
description: Report problems and observations about Rainbrand.
paths:
/feedback:
post:
operationId: feedback.create
summary: Submit feedback
description: Report a problem or observation about Rainbrand for internal review. Continue the original task after submitting.
tags:
- Feedback
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
message:
type: string
minLength: 1
maxLength: 2000
description: What Rainbrand did, what you expected, and the effect on the task. Omit private task content.
category:
enum:
- bug
- docs_mismatch
- friction
- feature_gap
- quality_degradation
- other
type: string
default: other
description: Issue type. Defaults to other.
tool_name:
type: string
minLength: 1
maxLength: 100
description: Name of the Rainbrand tool involved, if known.
related_id:
type: string
minLength: 1
maxLength: 200
description: Rainbrand-generated ID of the affected resource or operation, if known.
required:
- message
additionalProperties: false
examples:
- message: Acme Inc.'s Brand Skill export is missing the font files listed in its typography guidance.
category: docs_mismatch
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
data:
type: object
properties:
status:
const: received
required:
- status
required:
- data
example:
data:
status: received
'400':
description: '400'
content:
application/json:
schema:
$ref: '#/components/schemas/FeedbackCreate400ErrorResponse'
'401':
description: '401'
content:
application/json:
schema:
$ref: '#/components/schemas/FeedbackCreate401ErrorResponse'
'403':
description: '403'
content:
application/json:
schema:
$ref: '#/components/schemas/FeedbackCreate403ErrorResponse'
'429':
description: '429'
content:
application/json:
schema:
$ref: '#/components/schemas/FeedbackCreate429ErrorResponse'
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/FeedbackCreate500ErrorResponse'
'503':
description: '503'
content:
application/json:
schema:
$ref: '#/components/schemas/FeedbackCreate503ErrorResponse'
headers:
Retry-After:
description: Seconds to wait before retrying, when supplied. Temporary billing unavailability includes this header.
schema:
type: integer
minimum: 1
x-codeSamples:
- lang: bash
label: cURL
source: "curl --request POST \\\n --url 'https://www.rainbrand.com/api/v1/feedback' \\\n --header \"x-api-key: $RAINBRAND_API_KEY\" \\\n --header \"Content-Type: application/json\" \\\n --data '{\n \"message\": \"Acme Inc.'\\''s Brand Skill export is missing the font files listed in its typography guidance.\",\n \"category\": \"docs_mismatch\"\n}'"
components:
schemas:
FeedbackCreate503ErrorResponse:
type: object
properties:
error:
allOf:
- $ref: '#/components/schemas/ApiError'
- anyOf:
- type: object
properties:
code:
const: SERVICE_UNAVAILABLE
status:
const: 503
message:
type: string
default: Feedback could not be submitted. Continue the original task.
data: {}
required:
- code
- status
- message
- type: object
properties:
code:
type: string
status:
type: integer
message:
type: string
data: {}
required:
- code
- status
- message
required:
- error
FeedbackCreate401ErrorResponse:
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
FeedbackCreate400ErrorResponse:
type: object
properties:
error:
allOf:
- $ref: '#/components/schemas/ApiError'
- anyOf:
- type: object
properties:
code:
const: BAD_REQUEST
status:
const: 400
message:
type: string
default: Input validation failed
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
FeedbackCreate500ErrorResponse:
type: object
properties:
error:
allOf:
- $ref: '#/components/schemas/ApiError'
- anyOf:
- type: object
properties:
code:
const: INTERNAL_ERROR
status:
const: 500
message:
type: string
default: Feedback could not be submitted. Continue the original task.
data: {}
required:
- code
- status
- message
- type: object
properties:
code:
type: string
status:
type: integer
message:
type: string
data: {}
required:
- code
- status
- message
required:
- error
FeedbackCreate403ErrorResponse:
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
FeedbackCreate429ErrorResponse:
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
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.