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

# Create a Brand Skill

> Create one Brand Skill from a website, a temporary PDF URL, or one of each. Bloom downloads the PDF before returning 202, then builds the Skill asynchronously. Poll GET /brand-skills/{id}; a completed Brand Skill includes a self-contained ZIP download.



## OpenAPI

````yaml /openapi/brand-skills.json post /brand-skills
openapi: 3.1.1
info:
  title: Bloom Brand Skills API
  version: 1.0.0
  description: Approved partner beta API for creating portable Brand Skills.
servers:
  - url: https://www.trybloom.ai/api/v1
security:
  - apiKey: []
  - bearer: []
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: >-
        Create one Brand Skill from a website, a temporary PDF URL, or one of
        each. Bloom downloads the PDF before returning 202, then builds the
        Skill asynchronously. Poll GET /brand-skills/{id}; a completed Brand
        Skill includes a self-contained ZIP download.
      operationId: brandSkills.create
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                sources:
                  type: array
                  minItems: 1
                  maxItems: 2
                  items:
                    anyOf:
                      - type: object
                        properties:
                          kind:
                            const: website
                          url:
                            type: string
                            format: uri
                            description: Public website URL to turn into a Brand Skill
                        required:
                          - kind
                          - url
                      - type: object
                        properties:
                          kind:
                            const: pdf
                          url:
                            type: string
                            format: uri
                            description: Temporary public URL for a PDF up to 25MB
                          filename:
                            type: string
                            minLength: 1
                            maxLength: 240
                            description: >-
                              Original PDF filename, including .pdf. Used for
                              naming only; defaults from the URL when possible.
                        required:
                          - kind
                          - url
                  description: >-
                    One website, one PDF, or a website and PDF to combine into
                    one Brand Skill
                brandName:
                  type: string
                  minLength: 1
                  maxLength: 120
                  description: >-
                    Brand name for the generated Skill. Defaults from the
                    source.
              required:
                - sources
      responses:
        '202':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                      status:
                        const: pending
                        description: The Brand Skill is queued
                    required:
                      - id
                      - status
                required:
                  - data
        '400':
          description: '400'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: INVALID_SOURCE
                      status:
                        const: 400
                      message:
                        type: string
                        default: Invalid brand source
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '401':
          description: '401'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: UNAUTHORIZED
                      status:
                        const: 401
                      message:
                        type: string
                        default: Invalid or missing API credentials
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '403':
          description: '403'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: ACCOUNT_BANNED
                      status:
                        const: 403
                      message:
                        type: string
                        default: This account has been suspended.
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: FORBIDDEN
                      status:
                        const: 403
                      message:
                        type: string
                        default: Plan upgrade required
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: BETA_ACCESS_REQUIRED
                      status:
                        const: 403
                      message:
                        type: string
                        default: >-
                          Brand Skills are currently available to beta testers
                          only
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '429':
          description: '429'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: TOO_MANY_REQUESTS
                      status:
                        const: 429
                      message:
                        type: string
                        default: Rate limit exceeded
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
        '500':
          description: '500'
          content:
            application/json:
              schema:
                oneOf:
                  - type: object
                    properties:
                      defined:
                        const: true
                      code:
                        const: INTERNAL_ERROR
                      status:
                        const: 500
                      message:
                        type: string
                        default: Failed to create Brand Skill
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
                  - type: object
                    properties:
                      defined:
                        const: false
                      code:
                        type: string
                      status:
                        type: number
                      message:
                        type: string
                      data: {}
                    required:
                      - defined
                      - code
                      - status
                      - message
components:
  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.

````