openapi: 3.0.1 info: title: Bannerbear API description: >- The Bannerbear API auto-generates images and videos from reusable templates. A request applies an array of modifications (text, image, and color layer changes) to a template and renders the output. Most create operations are asynchronous, returning 202 Accepted; results are delivered via webhook callback or retrieved by polling the resource endpoint. Synchronous variants are available on the sync host for images, collections, and screenshots. termsOfService: https://www.bannerbear.com/terms/ contact: name: Bannerbear Support url: https://www.bannerbear.com/help/ version: '2.0' servers: - url: https://api.bannerbear.com/v2 description: Asynchronous API host - url: https://sync.api.bannerbear.com/v2 description: Synchronous API host (10-second timeout, 408 on timeout) security: - bearerAuth: [] tags: - name: Auth description: API key verification and account status. - name: Images description: Auto-generate images from templates. - name: Videos description: Render videos from video templates. - name: Collections description: Generate multiple images from a template set. - name: Screenshots description: Capture web page screenshots by URL. - name: Animated GIFs description: Build animated GIFs from template frames. - name: Templates description: Manage templates and template sets. - name: Fonts description: Reference fonts and effects. paths: /auth: get: operationId: verifyAuth tags: - Auth summary: Verify the API key responses: '200': description: API key is valid. /account: get: operationId: getAccount tags: - Auth summary: Retrieve account status, quota, and usage responses: '200': description: Account object. content: application/json: schema: $ref: '#/components/schemas/Account' /images: post: operationId: createImage tags: - Images summary: Create an image description: >- Creates an image by applying modifications to a template. Returns 202 Accepted on the async host; the image renders in the background and is delivered by webhook or retrieved by polling. On the sync host the completed Image object is returned with a 200. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateImageRequest' responses: '202': description: Accepted; image is rendering. content: application/json: schema: $ref: '#/components/schemas/Image' '200': description: Completed image (synchronous host). content: application/json: schema: $ref: '#/components/schemas/Image' get: operationId: listImages tags: - Images summary: List images parameters: - $ref: '#/components/parameters/Page' responses: '200': description: A page of Image objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Image' /images/{uid}: get: operationId: getImage tags: - Images summary: Retrieve an image parameters: - $ref: '#/components/parameters/Uid' responses: '200': description: An Image object. content: application/json: schema: $ref: '#/components/schemas/Image' /videos: post: operationId: createVideo tags: - Videos summary: Create a video requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateVideoRequest' responses: '202': description: Accepted; video is rendering. content: application/json: schema: $ref: '#/components/schemas/Video' get: operationId: listVideos tags: - Videos summary: List videos parameters: - $ref: '#/components/parameters/Page' responses: '200': description: A page of Video objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Video' patch: operationId: updateVideo tags: - Videos summary: Update a video's transcription or approval status requestBody: required: true content: application/json: schema: type: object properties: uid: type: string transcription: type: array items: type: string approved: type: boolean responses: '200': description: Updated Video object. content: application/json: schema: $ref: '#/components/schemas/Video' /videos/{uid}: get: operationId: getVideo tags: - Videos summary: Retrieve a video parameters: - $ref: '#/components/parameters/Uid' responses: '200': description: A Video object. content: application/json: schema: $ref: '#/components/schemas/Video' /collections: post: operationId: createCollection tags: - Collections summary: Create a collection description: >- Generates multiple images from a template set by applying a single set of modifications across every template in the set. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCollectionRequest' responses: '202': description: Accepted; collection is rendering. content: application/json: schema: $ref: '#/components/schemas/Collection' '200': description: Completed collection (synchronous host). content: application/json: schema: $ref: '#/components/schemas/Collection' get: operationId: listCollections tags: - Collections summary: List collections parameters: - $ref: '#/components/parameters/Page' responses: '200': description: A page of Collection objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Collection' /collections/{uid}: get: operationId: getCollection tags: - Collections summary: Retrieve a collection parameters: - $ref: '#/components/parameters/Uid' responses: '200': description: A Collection object. content: application/json: schema: $ref: '#/components/schemas/Collection' /screenshots: post: operationId: createScreenshot tags: - Screenshots summary: Create a screenshot requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateScreenshotRequest' responses: '202': description: Accepted; screenshot is rendering. content: application/json: schema: $ref: '#/components/schemas/Screenshot' '200': description: Completed screenshot (synchronous host). content: application/json: schema: $ref: '#/components/schemas/Screenshot' get: operationId: listScreenshots tags: - Screenshots summary: List screenshots parameters: - $ref: '#/components/parameters/Page' responses: '200': description: A page of Screenshot objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Screenshot' /screenshots/{uid}: get: operationId: getScreenshot tags: - Screenshots summary: Retrieve a screenshot parameters: - $ref: '#/components/parameters/Uid' responses: '200': description: A Screenshot object. content: application/json: schema: $ref: '#/components/schemas/Screenshot' /animated_gifs: post: operationId: createAnimatedGif tags: - Animated GIFs summary: Create an animated GIF requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateAnimatedGifRequest' responses: '202': description: Accepted; animated GIF is rendering. content: application/json: schema: $ref: '#/components/schemas/AnimatedGif' get: operationId: listAnimatedGifs tags: - Animated GIFs summary: List animated GIFs parameters: - $ref: '#/components/parameters/Page' responses: '200': description: A page of AnimatedGif objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/AnimatedGif' /animated_gifs/{uid}: get: operationId: getAnimatedGif tags: - Animated GIFs summary: Retrieve an animated GIF parameters: - $ref: '#/components/parameters/Uid' responses: '200': description: An AnimatedGif object. content: application/json: schema: $ref: '#/components/schemas/AnimatedGif' /templates: post: operationId: createTemplate tags: - Templates summary: Create or duplicate a template parameters: - name: source in: query description: UID of an existing template to duplicate. schema: type: string responses: '200': description: The created Template object. content: application/json: schema: $ref: '#/components/schemas/Template' get: operationId: listTemplates tags: - Templates summary: List templates parameters: - $ref: '#/components/parameters/Page' - name: tag in: query schema: type: string - name: name in: query schema: type: string - name: extended in: query schema: type: boolean - name: limit in: query schema: type: integer maximum: 100 responses: '200': description: A page of Template objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/Template' /templates/{uid}: get: operationId: getTemplate tags: - Templates summary: Retrieve a template parameters: - $ref: '#/components/parameters/Uid' responses: '200': description: A Template object. content: application/json: schema: $ref: '#/components/schemas/Template' patch: operationId: updateTemplate tags: - Templates summary: Update a template parameters: - $ref: '#/components/parameters/Uid' requestBody: required: true content: application/json: schema: type: object properties: name: type: string metadata: type: string tags: type: array items: type: string width: type: integer height: type: integer responses: '200': description: Updated Template object. content: application/json: schema: $ref: '#/components/schemas/Template' delete: operationId: deleteTemplate tags: - Templates summary: Delete a template parameters: - $ref: '#/components/parameters/Uid' responses: '200': description: Template deleted. /template_sets: post: operationId: createTemplateSet tags: - Templates summary: Create a template set requestBody: required: true content: application/json: schema: type: object properties: name: type: string templates: type: array items: type: string responses: '200': description: The created TemplateSet object. content: application/json: schema: $ref: '#/components/schemas/TemplateSet' get: operationId: listTemplateSets tags: - Templates summary: List template sets parameters: - $ref: '#/components/parameters/Page' responses: '200': description: A page of TemplateSet objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/TemplateSet' /template_sets/{uid}: get: operationId: getTemplateSet tags: - Templates summary: Retrieve a template set parameters: - $ref: '#/components/parameters/Uid' responses: '200': description: A TemplateSet object. content: application/json: schema: $ref: '#/components/schemas/TemplateSet' patch: operationId: updateTemplateSet tags: - Templates summary: Update a template set parameters: - $ref: '#/components/parameters/Uid' requestBody: required: true content: application/json: schema: type: object properties: templates: type: array items: type: string responses: '200': description: Updated TemplateSet object. content: application/json: schema: $ref: '#/components/schemas/TemplateSet' /fonts: get: operationId: listFonts tags: - Fonts summary: List available fonts responses: '200': description: An array of font names. content: application/json: schema: type: array items: type: string /effects: get: operationId: listEffects tags: - Fonts summary: List available image effects responses: '200': description: An array of effect names. content: application/json: schema: type: array items: type: string components: securitySchemes: bearerAuth: type: http scheme: bearer description: Project or master API key passed as a Bearer token. parameters: Uid: name: uid in: path required: true description: The unique identifier of the resource. schema: type: string Page: name: page in: query description: Page number for paginated lists (25 per page). schema: type: integer default: 1 schemas: Modification: type: object description: A single layer modification applied to a template. properties: name: type: string description: The name of the layer to modify. text: type: string color: type: string background: type: string image_url: type: string font_family: type: string Account: type: object properties: created_at: type: string format: date-time paid_plan_name: type: string image_api_quota: type: integer image_api_usage_this_month: type: integer CreateImageRequest: type: object required: - template - modifications properties: template: type: string description: UID of the template to render. modifications: type: array items: $ref: '#/components/schemas/Modification' webhook_url: type: string description: URL Bannerbear POSTs the completed Image object to. transparent: type: boolean description: Render a transparent PNG background. render_pdf: type: boolean description: Also render a PDF (consumes 3x quota). metadata: type: string Image: type: object properties: uid: type: string status: type: string enum: - pending - completed - failed self: type: string image_url: type: string image_url_png: type: string image_url_jpg: type: string template: type: string modifications: type: array items: $ref: '#/components/schemas/Modification' webhook_url: type: string webhook_response_code: type: integer metadata: type: string created_at: type: string format: date-time CreateVideoRequest: type: object required: - video_template properties: video_template: type: string input_media_url: type: string modifications: type: array items: $ref: '#/components/schemas/Modification' webhook_url: type: string zoom: type: boolean zoom_factor: type: number blur: type: integer minimum: 1 maximum: 10 trim_start_time: type: string description: HH:MM:SS trim_end_time: type: string description: HH:MM:SS frames: type: array items: type: array items: $ref: '#/components/schemas/Modification' create_gif_preview: type: boolean Video: type: object properties: uid: type: string status: type: string enum: - pending - completed - failed self: type: string video_url: type: string video_template: type: string input_media_url: type: string approval_required: type: boolean approved: type: boolean webhook_url: type: string created_at: type: string format: date-time CreateCollectionRequest: type: object required: - template_set - modifications properties: template_set: type: string modifications: type: array items: $ref: '#/components/schemas/Modification' webhook_url: type: string transparent: type: boolean metadata: type: string Collection: type: object properties: uid: type: string status: type: string enum: - pending - completed - failed self: type: string template_set: type: string image_urls: type: object additionalProperties: type: string images: type: array items: $ref: '#/components/schemas/Image' webhook_url: type: string created_at: type: string format: date-time CreateScreenshotRequest: type: object required: - url properties: url: type: string description: The web page URL to capture. webhook_url: type: string width: type: integer default: 1200 height: type: integer description: Omit for a full-page screenshot. mobile: type: boolean language: type: string description: ISO 639-1 two-letter language code. Screenshot: type: object properties: uid: type: string status: type: string enum: - pending - completed - failed self: type: string url: type: string screenshot_image_url: type: string webhook_url: type: string created_at: type: string format: date-time CreateAnimatedGifRequest: type: object required: - template - frames properties: template: type: string frames: type: array maxItems: 30 items: type: array items: $ref: '#/components/schemas/Modification' fps: type: number default: 1 frame_durations: type: array items: type: number loop: type: boolean input_media_url: type: string webhook_url: type: string AnimatedGif: type: object properties: uid: type: string status: type: string enum: - pending - completed - failed self: type: string image_url: type: string template: type: string frames: type: array items: type: array items: $ref: '#/components/schemas/Modification' fps: type: number loop: type: boolean webhook_url: type: string created_at: type: string format: date-time Template: type: object properties: uid: type: string name: type: string width: type: integer height: type: integer preview_url: type: string tags: type: array items: type: string available_modifications: type: array items: $ref: '#/components/schemas/Modification' metadata: type: string created_at: type: string format: date-time TemplateSet: type: object properties: uid: type: string name: type: string templates: type: array items: $ref: '#/components/schemas/Template' available_modifications: type: array items: $ref: '#/components/schemas/Modification' created_at: type: string format: date-time