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

# Create a Brand Skill

> Build a Brand Skill asynchronously from website or non-PDF file sources. PDF files are not supported. Poll `GET /brand-skills/{id}` until the build completes or fails.



## OpenAPI

````yaml /openapi/brand-skills.json post /brand-skills
openapi: 3.1.1
info:
  title: Rainbrand Brand Skills API
  version: 1.0.0
  description: Approved partner beta API for creating portable Brand Skills.
servers:
  - url: https://www.rainbrand.com/api/v1
security:
  - apiKey: []
  - bearer: []
  - oauth: []
tags:
  - name: Brand Skills
    description: Create, retrieve, download, and delete Brand Skills.
paths:
  /brand-skills:
    post:
      tags:
        - Brand Skills
      summary: Create a Brand Skill
      description: >-
        Build a Brand Skill asynchronously from website or non-PDF file sources.
        PDF files are not supported. Poll `GET /brand-skills/{id}` until the
        build completes or fails.
      operationId: brandSkills.create
      parameters:
        - name: idempotency-key
          in: header
          schema:
            type: string
            minLength: 1
            maxLength: 255
            description: >-
              Optional key for safely retrying this create request. Reuse the
              same key only with the same body.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                sources:
                  type: array
                  minItems: 1
                  maxItems: 30
                  items:
                    anyOf:
                      - type: object
                        properties:
                          kind:
                            enum:
                              - website
                            type: string
                            description: Source type for a public website
                          url:
                            type: string
                            format: uri
                            description: Public website URL to turn into a Brand Skill
                        required:
                          - kind
                          - url
                        title: Website
                      - type: object
                        properties:
                          kind:
                            enum:
                              - file
                            type: string
                            description: Source type for an uploaded non-PDF file
                          url:
                            type: string
                            format: uri
                            description: >-
                              Temporary public HTTPS URL for a non-PDF file up
                              to 100 MiB
                          filename:
                            type: string
                            minLength: 1
                            maxLength: 240
                            description: >-
                              Original filename used for source labels. It
                              defaults from the URL when possible.
                        required:
                          - kind
                          - url
                        title: File
                  description: >-
                    Sources to combine into a Brand Skill. At most one website
                    can be included. Non-PDF files may be up to 100 MiB each and
                    256 MiB combined.
                brandName:
                  type: string
                  minLength: 1
                  maxLength: 120
                  description: >-
                    Brand name for the generated Skill. Defaults from the
                    source.
                instructions:
                  type: string
                  maxLength: 4000
                  description: >-
                    Optional instructions passed to the Brand Agent for this
                    run. The Agent applies them using its existing judgment.
              required:
                - sources
      responses:
        '202':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: >-
                          Brand Skill ID. Use this ID to poll or delete the
                          Brand Skill through /brand-skills/{id}.
                      brandId:
                        type: string
                        format: uuid
                        description: ID of the Brand associated with this Brand Skill.
                      status:
                        const: pending
                        description: The Brand Skill is queued
                    required:
                      - id
                      - brandId
                      - status
                required:
                  - data
        '400':
          description: '400'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandSkillsCreate400ErrorResponse'
        '401':
          description: '401'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandSkillsCreate401ErrorResponse'
        '403':
          description: '403'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandSkillsCreate403ErrorResponse'
        '409':
          description: '409'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandSkillsCreate409ErrorResponse'
        '429':
          description: '429'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BrandSkillsCreate429ErrorResponse'
          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/BrandSkillsCreate500ErrorResponse'
components:
  schemas:
    BrandSkillsCreate400ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - type: object
                  properties:
                    code:
                      const: INVALID_SOURCE
                    status:
                      const: 400
                    message:
                      type: string
                      default: Invalid brand source
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    BrandSkillsCreate401ErrorResponse:
      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
    BrandSkillsCreate403ErrorResponse:
      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:
                      const: BETA_ACCESS_REQUIRED
                    status:
                      const: 403
                    message:
                      type: string
                      default: >-
                        Brand Skills are currently available to beta testers
                        only
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    BrandSkillsCreate409ErrorResponse:
      type: object
      properties:
        error:
          allOf:
            - $ref: '#/components/schemas/ApiError'
            - anyOf:
                - 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
    BrandSkillsCreate429ErrorResponse:
      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_JOB_LIMIT_REACHED
                    status:
                      const: 429
                    message:
                      type: string
                      default: Too many Brand Skills are already active
                    data: {}
                  required:
                    - code
                    - status
                    - message
                - type: object
                  properties:
                    code:
                      type: string
                    status:
                      type: integer
                    message:
                      type: string
                    data: {}
                  required:
                    - code
                    - status
                    - message
      required:
        - error
    BrandSkillsCreate500ErrorResponse:
      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 Brand Skill
                    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: '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.

````

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