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

# Get a pose design

> One of your pose designs. `status` is `queued`, `working` (`stage_label` says what it is
doing), `done` (with the new `pose`, in the library for everyone), `refused` (`message` says
why and `suggestion` gives a doable alternative) or `failed` (`message` says what happened).
Nothing is charged unless it is `done`.

**Free** — no credits. Ask every 20 to 30 seconds: a design takes about 3 to 6 minutes.




## OpenAPI

````yaml /openapi.yaml get /poses/designs/{id}
openapi: 3.1.0
info:
  contact:
    email: support@budgetpixel.com
    name: BudgetPixel Support
  description: >
    The BudgetPixel developer API for programmatic image, video, music and

    sound-effect generation.


    Generation is **asynchronous**: you create a job, then poll its status until
    it

    reaches a terminal state (`succeeded` / `failed`). You are charged in
    credits

    only on success — never for failures, timeouts, or content blocked before

    generation.


    **Authentication.** All requests require an API key sent as a bearer token:

        Authorization: Bearer bpx_live_xxx

    Create and manage keys from your BudgetPixel account dashboard. The
    developer

    API is available on **every paid plan**. On the **Free** plan, API keys can
    call

    the free library searches only: `GET /v1/stock/images`,

    `GET /v1/stock/sound-effects` and `GET /v1/stock/music`.


    **Pricing.** API usage is metered in credits at each model's published price

    (see `GET /v1/models`), and your plan's model discounts and active
    promotions

    apply to API charges exactly as they do on the web — `POST /v1/cost` quotes

    your discounted price. Pro and Ultra plans include a daily free-models

    allowance (a shared pool of free generations per day across qualified image

    models such as FLUX 2 Klein and Qwen-Image) that covers API

    requests too — the standard price applies once the day's pool is used.

    Other promotional free daily generations remain web/app-only. Failed

    generations are never charged.


    **Rate limits.** Requests are limited per minute: **600 requests/min per API

    key** and **1200 requests/min per source IP** (defaults; subject to tuning).

    Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and

    `X-RateLimit-Reset` (seconds until the window resets). Exceeding a limit

    returns HTTP `429` with a `Retry-After` header — wait that long before

    retrying. Rejected requests still count against the window, so a tight retry

    loop keeps you limited; back off instead. Generation jobs additionally have
    a

    per-plan concurrency cap (the same one as the web workshop), independent of

    these request limits. `POST /v1/uploads` also has a dedicated **60
    uploads/min

    per account** cap (it's free/unmetered) on top of these limits. Every `429`

    this API returns carries `Retry-After`, including a full concurrency queue

    (a suggested wait) and the monthly spend limit (seconds until the month

    resets).


    **Characters.** Write `@handle` in the prompt of an image or video
    generation to cast a

    character: one of the free BudgetPixel AI influencers (`@barry`, `@rosa`,
    ...) or a character

    of your own. Its picture and look go with the mention, so the same face
    appears in every

    post. `GET /v1/characters` lists the ones you can cast, `GET
    /v1/characters/{handle}` gives

    one in full with every picture, and `POST /v1/characters/recommend` picks
    influencers for a

    brief.


    **Wardrobe.** Dress a character by writing an outfit's `@handle` next to
    theirs:

    `@barry wearing @camel_belted_overcoat_outfit`. The outfit's picture goes
    with the mention and

    the character wears it in place of their own clothes. `GET /v1/wardrobe`
    lists the outfits you

    can use (your own, the ones you saved and the free library) and `GET
    /v1/wardrobe/{handle}`

    gives one in full.


    **Output retention.** Generated files are kept for 24 hours after the job is

    created. Job status responses give the exact time as `expires_at`; after it,

    `expired` is `true` and no download URLs are returned.
  title: BudgetPixel API
  version: '2026-06-20'
servers:
  - description: Production
    url: https://api.budgetpixel.com/v1
security:
  - ApiKeyAuth: []
tags:
  - description: Account and credit balance
    name: Account
  - description: Discover available models and pricing
    name: Models
  - description: Upload input media for image/video generation
    name: Uploads
  - description: Image job status
    name: Images
  - description: FLUX image models
    name: Black Forest Labs
  - description: SeeDream image models
    name: Bytedance
  - description: Video job status
    name: Videos
  - description: Kuaishou Kling video models
    name: Kling
  - description: SeeDance video models
    name: ByteDance (SeeDance)
  - description: Music and sound-effect job status
    name: Audios
  - description: Music generation models
    name: Music
  - description: Text-to-sound-effect models (priced per second)
    name: Sound Effects
  - description: >-
      Image-to-3D models — a picture in, a textured 3D model (GLB, plus
      FBX/USDZ/STL on Meshy) out
    name: 3D Models
  - description: Format conversion for images, video, and audio
    name: Conversions
  - description: Publish posts to your BudgetPixel feed and enter clan themes
    name: Social
  - description: Cast BudgetPixel AI influencers and your own characters with @mentions
    name: Characters
  - description: >-
      Outfits your characters can wear, called with an @mention next to the
      character
    name: Wardrobe
  - description: >-
      Body poses your characters can take, called with an @mention after the
      character
    name: Poses
  - description: Content moderation — NSFW rating and CSAM detection
    name: Moderation
  - description: Content classification — music genre detection
    name: Classification
  - description: >-
      Search the free stock image library — available on every plan, including
      Free
    name: Stock Images
  - description: >-
      Search the free sound effect library — available on every plan, including
      Free
    name: Stock Sound Effects
  - description: >-
      Search the free background music library — available on every plan,
      including Free
    name: Stock Music
  - description: >-
      Turn a video into a depth map video to guide other video models with its
      structure and motion
    name: Depth Maps
paths:
  /poses/designs/{id}:
    get:
      tags:
        - Poses
      summary: Get a pose design
      description: >
        One of your pose designs. `status` is `queued`, `working` (`stage_label`
        says what it is

        doing), `done` (with the new `pose`, in the library for everyone),
        `refused` (`message` says

        why and `suggestion` gives a doable alternative) or `failed` (`message`
        says what happened).

        Nothing is charged unless it is `done`.


        **Free** — no credits. Ask every 20 to 30 seconds: a design takes about
        3 to 6 minutes.
      operationId: getPoseDesign
      parameters:
        - description: The design's `id`, from `POST /v1/poses/designs`.
          in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  design:
                    $ref: '#/components/schemas/PoseDesign'
                type: object
          description: The design.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    PoseDesign:
      description: A pose being designed from your words, or as a change to a library pose.
      properties:
        created_at:
          format: date-time
          type: string
        credits_charged:
          description: >-
            `100` once the pose is made; `0` before that, and for a refused or
            failed design.
          type: integer
        id:
          format: uuid
          type: string
        message:
          description: What to tell the person; on a done design, the new pose's handle.
          type: string
        parent_pose_id:
          description: The library pose it started from, when there was one.
          type: string
        pose:
          $ref: '#/components/schemas/Pose'
        stage:
          enum:
            - spec
            - photos
            - checks
            - drawings
            - angles
            - save
          type: string
        stage_label:
          description: What the design is doing now.
          example: Checking a real body can do it
          type: string
        status:
          description: >-
            `done` carries the new `pose`; `refused` and `failed` say why in
            `message` and are not charged.
          enum:
            - queued
            - working
            - done
            - refused
            - failed
          type: string
        suggestion:
          description: On a refused design, a doable alternative to design instead.
          type: string
        words:
          description: The words you sent.
          type: string
      type: object
    Pose:
      description: >-
        A body position drawn on two faceless grey mannequins, a woman and a
        man. Call it by writing its `mention` after a character in a prompt.
      properties:
        cover:
          $ref: '#/components/schemas/PosePicture'
        created_at:
          format: date-time
          type: string
        creator:
          description: >-
            The member who designed the pose, or `null` for a pose made by
            BudgetPixel.
          properties:
            display_name:
              type: string
            username:
              type: string
          type:
            - object
            - 'null'
        description:
          description: >-
            The pose head to toe, word for word as it is added to the prompt
            with the mention.
          example: >-
            Sits on the floor leaning back, the weight on both palms placed flat
            behind the hips. One knee is bent up towards the chest, the other
            leg stretched out straight and relaxed. The torso angles slightly
            back and the head faces forward.
          type: string
        difficulty:
          description: >-
            `everyday`, or `athletic` for poses that take strength, balance or
            flexibility (splits, handstands, yoga).
          example: everyday
          type: string
        fit:
          description: >-
            Who the pose is made for. Every pose works for any character: the
            mannequin follows the character's gender.
          enum:
            - women
            - men
            - unisex
          type: string
        handle:
          example: sitting_knee_up_pose
          type: string
        holdable:
          description: >-
            `true` when a person can hold the pose still for a photo; `false`
            for a moment in motion, like a jump.
          type: boolean
        id:
          type: string
        mention:
          description: >-
            Write this after a character in an image or video prompt. Add a view
            for another angle: `@sitting_knee_up_pose.three_quarter` (each
            picture's `mention` names its view).
          example: '@sitting_knee_up_pose'
          type: string
        name:
          example: Sitting Knee Up
          type: string
        pictures:
          description: >-
            The mannequin pictures, by figure and place on the globe. A list
            carries the pose's own pictures; `GET /v1/poses/{handle}` adds every
            view members made.
          items:
            $ref: '#/components/schemas/PosePicture'
          type: array
        props:
          description: Things the pose uses, such as a chair, a wall or a step.
          example:
            - chair
          items:
            type: string
          type: array
        rating:
          description: >-
            The pictures' level on BudgetPixel's 0-3 NSFW scale (the scale of
            `POST /v1/moderations/nsfw`).
          example: 0
          type: integer
        shelf:
          enum:
            - standing
            - sitting
            - lying
            - kneeling_crouching
            - walking_running
            - jumping_action
            - dance
            - sports_fitness
            - glamour
            - gestures_upper_body
          example: sitting
          type: string
        shelf_label:
          example: Sitting
          type: string
        slug:
          example: sitting-knee-up-pose
          type: string
        source:
          description: >-
            `house` = made by BudgetPixel; `member` = designed by a member and
            shared with everyone.
          enum:
            - house
            - member
          type: string
        support:
          description: >-
            What holds the body up, e.g. `standing`, `sitting`, `kneeling`,
            `lying`, `leaning` or `mid_air`.
          example: sitting
          type: string
        tags:
          example:
            - floor
            - relaxed
          items:
            type: string
          type: array
        uses:
          description: How many times the pose has been used.
          type: integer
        view_count:
          description: How many views members made of the pose, both figures together.
          example: 3
          type: integer
      type: object
    Error:
      properties:
        error:
          properties:
            code:
              description: Stable machine-readable code.
              example: model_not_available
              type: string
            message:
              type: string
            type:
              description: Error category.
              example: invalid_request_error
              type: string
          required:
            - type
            - code
            - message
          type: object
      required:
        - error
      type: object
    QueueFull:
      description: |
        `429` body when your account already has as many jobs of this kind
        (image, video or audio) in flight as its concurrency cap allows. Submit
        the next job when one of your running jobs finishes.
      properties:
        active_jobs:
          description: Jobs of this kind in flight right now.
          type: integer
        code:
          enum:
            - queue_full
          type: string
        error:
          description: Human-readable message.
          type: string
        queue_full:
          enum:
            - true
          type: boolean
        queue_limit:
          description: Your concurrency cap for this kind of job.
          type: integer
        retry_after_seconds:
          description: Same value as the `Retry-After` header.
          type: integer
      required:
        - error
        - code
        - queue_full
        - queue_limit
        - active_jobs
        - retry_after_seconds
      type: object
    PosePicture:
      description: >-
        One mannequin picture of a pose, from one place on the Camera Angles
        globe.
      properties:
        angle:
          description: >-
            The picture's name: one of the house's angles (`front`,
            `three_quarter`, `side`, `back`, `high` from above, `low` from
            below) or, on a member's view, its place as a code (`az135_el30`).
            To use a picture in a prompt, write its `mention`.
          example: front
          type: string
        azimuth:
          description: >-
            Where the camera stands around the figure, in degrees: `0` front,
            `45` front right, `90` right side (the figure's left side shows),
            `135` back right, `180` back, `225` back left, `270` left side,
            `315` front left (the pose's three-quarter picture).
          example: 0
          type: integer
        elevation:
          description: >-
            How high the camera stands: `0` eye level, `30` from above, `60`
            from high above (`-30`, from below, on the house's `low` pictures).
          example: 0
          type: integer
        figure:
          description: >-
            The mannequin: a mention sends the one that matches the character's
            gender (the woman when it isn't known).
          enum:
            - woman
            - man
          type: string
        height:
          example: 1152
          type: integer
        id:
          type: string
        label:
          description: The place in words.
          example: Back left · from above
          type: string
        made_by:
          description: On a member's view, the username of the member who made it.
          type: string
        mention:
          description: >-
            In a pose's answers: write this after a character in a prompt to use
            this picture's view.
          example: '@seiza_pose.back'
          type: string
        thumbnail_url:
          description: A small version for a list or a grid.
          format: uri
          type: string
        url:
          description: The full-size picture.
          format: uri
          type: string
        view:
          description: >-
            `true` on a view a member made from the pose's front picture (`POST
            /v1/poses/{handle}/views`); `false` on the pose's own pictures.
          type: boolean
        width:
          example: 864
          type: integer
      type: object
  responses:
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: Missing or invalid API key.
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
      description: The requested job was not found.
    TooManyRequests:
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/Error'
              - $ref: '#/components/schemas/QueueFull'
      description: >
        A limit was reached. Every `429` carries `Retry-After` (seconds). The

        per-minute rate limit, the upload limit and the hourly API post cap
        answer

        with the `Error` envelope, code `rate_limited`. The monthly spend limit
        answers with

        code `monthly_spend_limit_reached`, and its `Retry-After` counts down to
        the

        start of next month (raising the limit in the console clears it sooner).

        A full concurrency queue answers with the flat `QueueFull` body (3D
        jobs:

        the `Error` envelope with code `queue_full`); its `Retry-After` is a

        suggested wait, because a slot frees as soon as one of your running jobs

        finishes.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            minimum: 1
            type: integer
  securitySchemes:
    ApiKeyAuth:
      bearerFormat: bpx_live_*
      description: 'API key as a bearer token: Authorization: Bearer bpx_live_xxx'
      scheme: bearer
      type: http

````

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