{
  "openapi": "3.1.0",
  "info": {
    "title": "withoutbg API",
    "description": "\n<a class=\"navbar-brand\" href=\"https://withoutbg.com/\">\n    <img src=\"https://withoutbg.com/images/logo.png\" height=\"36\" alt=\"logo\">\n</a>\n\nCloud-hosted background removal and alpha matte extraction at\n`https://api.withoutbg.com`. Billed per successful image. Auth via `X-API-Key`.\n\n**Machine-readable spec (recommended LLM context):** [/openapi.json](/openapi.json) ·\n[/llms.txt](/llms.txt)\n\n## Shared rules\n\n| Rule | Value |\n|------|-------|\n| Base URL | `https://api.withoutbg.com` |\n| Auth header | `X-API-Key: YOUR_API_KEY` |\n| Rate limit (product) | 30 requests/minute per API key (gateway may return `429`) |\n| Max input size | 20.0 MB: binary: HTTP `413`; base64: HTTP `422` |\n| Unsupported format | Binary: HTTP `415`; base64: HTTP `422` |\n| Prep downscale | Longest side > 5000 px or > 25 MP → auto-downscale (not rejected) |\n| Paid call cost | 1 credit on HTTP 200 (credits endpoint is free) |\n| Inference size | Max ~1024 px on the longer side; matte/cutout mapped back to full-res RGB. Edge detail is capped at inference resolution. |\n\n**Binary vs Base64:** Binary (`multipart/form-data`) fits servers, CLIs, and file I/O.\nBase64 JSON fits browsers, serverless, and JSON-only pipelines. Send raw Base64\n(no `data:` URI prefix).\n\n**Cutout vs Alpha matte:** Cutout returns a ready RGBA PNG. Alpha matte returns a grayscale\nmask so you can keep a full-res original local, apply the matte yourself, and reuse one mask\nfor multiple composites.\n\n**Cars:** Prefer `/v1.0/car-*` for vehicle photos. Every car route crops to the\nbiggest detected vehicle before segmentation, then maps the result back to the\nfull frame. Cutout routes (`/v1.0/car-image-without-background` and `-base64`)\nrun window reconstruction and bake a cast shadow by default\n(`reconstruct_windows=true`, `shadow_type=ai`); they do not return `view`.\n`/v1.0/car-layers-base64` returns uncomposited cutout + shadow layers plus\n`view` (azimuth/elevation). `shadow_type` selects the renderer: `ai` (default,\nlearned model) or `none`. Light direction is inferred from the photo, so no\nshadow type takes light parameters.\n`view.azimuth_deg` is orbit around the car (`[0, 360)`; `0` = front, increasing\ncounterclockwise from above); `elevation_deg` is the look angle above the\nhorizon (`0` = level / mid-body; positive = camera above the car).\nNo image-type sidecar on car endpoints.\n\n**Supported formats:** JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF\n\n**Human docs:** [Pro Model API](https://withoutbg.com/docs/pro-model)\n",
    "contact": {
      "name": "withoutbg - contact",
      "url": "https://withoutbg.com/contact"
    },
    "version": "1.5.0"
  },
  "servers": [
    {
      "url": "/",
      "description": "Current host"
    },
    {
      "url": "https://api.withoutbg.com",
      "description": "Production"
    }
  ],
  "paths": {
    "/v1.0/alpha-channel": {
      "post": {
        "tags": [
          "Alpha Matte"
        ],
        "summary": "Get alpha matte (PNG)",
        "description": "Return a grayscale alpha matte as a PNG.\n\n**Cost:** 1 credit on HTTP 200.\n\nPrefer this over the cutout endpoint when you need a full-resolution master: keep the original locally, optionally send a ~1024 px proxy, then apply the matte yourself. Edge detail is capped at model inference resolution (~1024 long side).\n\nBinary sibling of `/v1.0/alpha-channel-base64`. Response metadata is returned in `X-Input-Dimensions`, `X-Processed-Dimensions`, `X-Was-Downscaled`, and optional `X-Image-Type-*` headers.",
        "operationId": "alpha_channel_v1_0_alpha_channel_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/AlphaChannelRequest",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Image file (JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF). Maximum size: 20.0 MB."
                  },
                  "include_image_type": {
                    "type": "boolean",
                    "description": "When true (default), include photo vs graphic probabilities in X-Image-Type-* headers.",
                    "default": true
                  }
                },
                "type": "object",
                "required": [
                  "file"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success: PNG image body",
            "headers": {
              "X-Input-Dimensions": {
                "description": "Decoded input size as `width,height` (pixels).",
                "schema": {
                  "type": "string",
                  "example": "5568,3712"
                }
              },
              "X-Processed-Dimensions": {
                "description": "Size after server prep downscale (longest side / megapixel caps) as `width,height`. Not the model inference resolution (~1024 long side).",
                "schema": {
                  "type": "string",
                  "example": "5000,3333"
                }
              },
              "X-Was-Downscaled": {
                "description": "Whether the input was downscaled during server prep (`true`/`false`).",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "example": "true"
                }
              },
              "X-Image-Type-Photo": {
                "description": "Optional photo-class probability from image-type classifier.",
                "schema": {
                  "type": "string",
                  "example": "0.87"
                }
              },
              "X-Image-Type-Graphic": {
                "description": "Optional graphic-class probability from image-type classifier.",
                "schema": {
                  "type": "string",
                  "example": "0.13"
                }
              }
            },
            "content": {
              "image/png": {}
            }
          },
          "401": {
            "description": "Invalid API Key",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid API Key"
                }
              }
            }
          },
          "402": {
            "description": "Insufficient credit. Please top up API credits.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Insufficient credit. Please top up API credits."
                }
              }
            }
          },
          "403": {
            "description": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated."
                }
              }
            }
          },
          "413": {
            "description": "File size too large. Maximum file size is 20.0 MB.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "File size too large. Maximum file size is 20.0 MB"
                }
              }
            }
          },
          "415": {
            "description": "Unsupported Media Type. Supported formats are: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Unsupported Media Type. Supported formats are: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF."
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (product policy: 30 requests/minute per API key). May be returned by the API gateway. Retry with exponential backoff.",
            "content": {
              "application/json": {
                "example": {
                  "error": "Too Many Requests",
                  "status": 429,
                  "message": "Rate limit exceeded. Please try again later"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Internal Server Error. Please contact support: contact@withoutbg.com"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1.0/image-without-background": {
      "post": {
        "tags": [
          "Background Removal"
        ],
        "summary": "Remove background (PNG)",
        "description": "Remove the background and return an RGBA PNG cutout.\n\n**Cost:** 1 credit on HTTP 200.\n\nBest for servers, CLIs, and batch pipelines that want raw PNG bytes (no JSON/base64 overhead). For a full-resolution compositing workflow, prefer the alpha-matte endpoints.\n\nBinary sibling of `/v1.0/image-without-background-base64`. Response metadata is returned in `X-Input-Dimensions`, `X-Processed-Dimensions`, `X-Was-Downscaled`, and optional `X-Image-Type-*` headers.",
        "operationId": "with_transparent_background_v1_0_image_without_background_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/ImageWithoutBackgroundRequest",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary",
                    "description": "Image file (JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF). Maximum size: 20.0 MB."
                  },
                  "include_image_type": {
                    "type": "boolean",
                    "description": "When true (default), include photo vs graphic probabilities in X-Image-Type-* headers.",
                    "default": true
                  }
                },
                "type": "object",
                "required": [
                  "file"
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success: PNG image body",
            "headers": {
              "X-Input-Dimensions": {
                "description": "Decoded input size as `width,height` (pixels).",
                "schema": {
                  "type": "string",
                  "example": "5568,3712"
                }
              },
              "X-Processed-Dimensions": {
                "description": "Size after server prep downscale (longest side / megapixel caps) as `width,height`. Not the model inference resolution (~1024 long side).",
                "schema": {
                  "type": "string",
                  "example": "5000,3333"
                }
              },
              "X-Was-Downscaled": {
                "description": "Whether the input was downscaled during server prep (`true`/`false`).",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "example": "true"
                }
              },
              "X-Image-Type-Photo": {
                "description": "Optional photo-class probability from image-type classifier.",
                "schema": {
                  "type": "string",
                  "example": "0.87"
                }
              },
              "X-Image-Type-Graphic": {
                "description": "Optional graphic-class probability from image-type classifier.",
                "schema": {
                  "type": "string",
                  "example": "0.13"
                }
              }
            },
            "content": {
              "image/png": {}
            }
          },
          "401": {
            "description": "Invalid API Key",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid API Key"
                }
              }
            }
          },
          "402": {
            "description": "Insufficient credit. Please top up API credits.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Insufficient credit. Please top up API credits."
                }
              }
            }
          },
          "403": {
            "description": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated."
                }
              }
            }
          },
          "413": {
            "description": "File size too large. Maximum file size is 20.0 MB.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "File size too large. Maximum file size is 20.0 MB"
                }
              }
            }
          },
          "415": {
            "description": "Unsupported Media Type. Supported formats are: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Unsupported Media Type. Supported formats are: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF."
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (product policy: 30 requests/minute per API key). May be returned by the API gateway. Retry with exponential backoff.",
            "content": {
              "application/json": {
                "example": {
                  "error": "Too Many Requests",
                  "status": 429,
                  "message": "Rate limit exceeded. Please try again later"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Internal Server Error. Please contact support: contact@withoutbg.com"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1.0/image-without-background-base64": {
      "post": {
        "tags": [
          "Background Removal"
        ],
        "summary": "Remove background (Base64 JSON)",
        "description": "Remove the background and return a Base64 RGBA PNG in JSON.\n\n**Cost:** 1 credit on HTTP 200.\n\nBest for browsers, serverless, and JSON-only pipelines. Send a raw Base64 string (no `data:` URI prefix). Binary sibling: `/v1.0/image-without-background`.\n\nFor full-resolution compositing, prefer the alpha-matte endpoints.",
        "operationId": "image_without_background_base64_v1_0_image_without_background_base64_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImageBase64Request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImageWithoutBackgroundResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid API Key",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid API Key"
                }
              }
            }
          },
          "402": {
            "description": "Insufficient credit. Please top up API credits.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Insufficient credit. Please top up API credits."
                }
              }
            }
          },
          "403": {
            "description": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated."
                }
              }
            }
          },
          "422": {
            "description": "Validation error. Includes invalid Base64, non-image payloads, unsupported formats, and decoded size over 20.0 MB.",
            "content": {
              "application/json": {
                "example": {
                  "detail": [
                    {
                      "loc": [
                        "body",
                        "image_base64"
                      ],
                      "msg": "Image size exceeds maximum allowed size of 20.0 MB",
                      "type": "value_error"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (product policy: 30 requests/minute per API key). May be returned by the API gateway. Retry with exponential backoff.",
            "content": {
              "application/json": {
                "example": {
                  "error": "Too Many Requests",
                  "status": 429,
                  "message": "Rate limit exceeded. Please try again later"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Internal Server Error. Please contact support: contact@withoutbg.com"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1.0/alpha-channel-base64": {
      "post": {
        "tags": [
          "Alpha Matte"
        ],
        "summary": "Get alpha matte (Base64 JSON)",
        "description": "Return a grayscale alpha matte as Base64 PNG in JSON.\n\n**Cost:** 1 credit on HTTP 200.\n\nRecommended when you keep a full-res original locally, send a ~1024 px proxy, then upscale/apply the matte yourself. Binary sibling: `/v1.0/alpha-channel`.",
        "operationId": "alpha_channel_base64_v1_0_alpha_channel_base64_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImageBase64Request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AlphaChannelResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid API Key",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid API Key"
                }
              }
            }
          },
          "402": {
            "description": "Insufficient credit. Please top up API credits.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Insufficient credit. Please top up API credits."
                }
              }
            }
          },
          "403": {
            "description": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated."
                }
              }
            }
          },
          "422": {
            "description": "Validation error. Includes invalid Base64, non-image payloads, unsupported formats, and decoded size over 20.0 MB.",
            "content": {
              "application/json": {
                "example": {
                  "detail": [
                    {
                      "loc": [
                        "body",
                        "image_base64"
                      ],
                      "msg": "Image size exceeds maximum allowed size of 20.0 MB",
                      "type": "value_error"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (product policy: 30 requests/minute per API key). May be returned by the API gateway. Retry with exponential backoff.",
            "content": {
              "application/json": {
                "example": {
                  "error": "Too Many Requests",
                  "status": 429,
                  "message": "Rate limit exceeded. Please try again later"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Internal Server Error. Please contact support: contact@withoutbg.com"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1.0/car-image-without-background": {
      "post": {
        "tags": [
          "Car Background Removal"
        ],
        "summary": "Remove car background (PNG)",
        "description": "Remove background from a car photo and return an RGBA PNG.\n\n**Cost:** 1 credit on HTTP 200.\n\nUses the dedicated car pipeline: the biggest vehicle is detected and cropped before segmentation, then results are mapped back to the full frame. Window reconstruction and a baked cast shadow run by default (`reconstruct_windows=true`, `shadow_type=ai`). Set `shadow_type=none` for a cutout with no baked shadow. No camera `view` sidecar (use `/v1.0/car-layers-base64` for compositing layers plus that sidecar). Image-type classification is not offered (car photos are treated as photographic).\n\nBinary sibling of `/v1.0/car-image-without-background-base64`. Response metadata is returned in `X-Input-Dimensions`, `X-Processed-Dimensions`, `X-Was-Downscaled`, and `X-Shadow-Type`.",
        "operationId": "car_image_without_background_v1_0_car_image_without_background_post",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/CarImageWithoutBackgroundRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success: PNG image body",
            "headers": {
              "X-Input-Dimensions": {
                "description": "Decoded input size as `width,height` (pixels).",
                "schema": {
                  "type": "string",
                  "example": "5568,3712"
                }
              },
              "X-Processed-Dimensions": {
                "description": "Size after server prep downscale (longest side / megapixel caps) as `width,height`. Not the model inference resolution (~1024 long side).",
                "schema": {
                  "type": "string",
                  "example": "5000,3333"
                }
              },
              "X-Was-Downscaled": {
                "description": "Whether the input was downscaled during server prep (`true`/`false`).",
                "schema": {
                  "type": "string",
                  "enum": [
                    "true",
                    "false"
                  ],
                  "example": "true"
                }
              },
              "X-Shadow-Type": {
                "description": "Shadow renderer that produced the baked cast shadow ('ai', or 'none' when no shadow was requested).",
                "schema": {
                  "type": "string",
                  "example": "ai"
                }
              }
            },
            "content": {
              "image/png": {}
            }
          },
          "401": {
            "description": "Invalid API Key",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid API Key"
                }
              }
            }
          },
          "402": {
            "description": "Insufficient credit. Please top up API credits.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Insufficient credit. Please top up API credits."
                }
              }
            }
          },
          "403": {
            "description": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated."
                }
              }
            }
          },
          "413": {
            "description": "File size too large. Maximum file size is 20.0 MB.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "File size too large. Maximum file size is 20.0 MB"
                }
              }
            }
          },
          "415": {
            "description": "Unsupported Media Type. Supported formats are: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Unsupported Media Type. Supported formats are: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF."
                }
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (product policy: 30 requests/minute per API key). May be returned by the API gateway. Retry with exponential backoff.",
            "content": {
              "application/json": {
                "example": {
                  "error": "Too Many Requests",
                  "status": 429,
                  "message": "Rate limit exceeded. Please try again later"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Internal Server Error. Please contact support: contact@withoutbg.com"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1.0/car-image-without-background-base64": {
      "post": {
        "tags": [
          "Car Background Removal"
        ],
        "summary": "Remove car background (Base64 JSON)",
        "description": "Remove background from a car photo; return Base64 RGBA PNG in JSON.\n\n**Cost:** 1 credit on HTTP 200.\n\nUses the dedicated car pipeline: the biggest vehicle is detected and cropped before segmentation, then results are mapped back to the full frame. Window reconstruction and a baked cast shadow run by default (`reconstruct_windows=true`, `shadow_type=ai`). Set `shadow_type=none` to skip the shadow. No camera `view` sidecar (use `/v1.0/car-layers-base64` for compositing layers plus that sidecar). No image-type sidecar (car photos are photographic). Binary sibling: `/v1.0/car-image-without-background`.",
        "operationId": "car_image_without_background_base64_v1_0_car_image_without_background_base64_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CarImageBase64Request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CarImageWithoutBackgroundResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid API Key",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid API Key"
                }
              }
            }
          },
          "402": {
            "description": "Insufficient credit. Please top up API credits.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Insufficient credit. Please top up API credits."
                }
              }
            }
          },
          "403": {
            "description": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated."
                }
              }
            }
          },
          "422": {
            "description": "Validation error. Includes invalid Base64, non-image payloads, unsupported formats, and decoded size over 20.0 MB.",
            "content": {
              "application/json": {
                "example": {
                  "detail": [
                    {
                      "loc": [
                        "body",
                        "image_base64"
                      ],
                      "msg": "Image size exceeds maximum allowed size of 20.0 MB",
                      "type": "value_error"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (product policy: 30 requests/minute per API key). May be returned by the API gateway. Retry with exponential backoff.",
            "content": {
              "application/json": {
                "example": {
                  "error": "Too Many Requests",
                  "status": 429,
                  "message": "Rate limit exceeded. Please try again later"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Internal Server Error. Please contact support: contact@withoutbg.com"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/v1.0/car-layers-base64": {
      "post": {
        "tags": [
          "Car Compositing"
        ],
        "summary": "Car compositing layers (Base64 JSON)",
        "description": "Remove background from a car photo and return the RGBA cutout and a soft cast-shadow mask as separate Base64 PNGs, plus a camera `view` sidecar.\n\n**Cost:** 1 credit on HTTP 200.\n\nThe cutout does **not** bake the shadow in; use `shadow_base64` to composite or edit on the client. Window reconstruction is on by default (`reconstruct_windows=true`); set it to `false` to skip. `shadow_type=none` omits `shadow_base64`. For a single RGBA with baked shadow, use `/v1.0/car-image-without-background-base64`. No binary sibling. No image-type sidecar.",
        "operationId": "car_layers_base64_v1_0_car_layers_base64_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CarLayersBase64Request"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CarLayersResponse"
                }
              }
            }
          },
          "401": {
            "description": "Invalid API Key",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid API Key"
                }
              }
            }
          },
          "402": {
            "description": "Insufficient credit. Please top up API credits.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Insufficient credit. Please top up API credits."
                }
              }
            }
          },
          "403": {
            "description": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated.",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Credits Expired. Please top up API credits. If you have existing credits, they will be reactivated."
                }
              }
            }
          },
          "422": {
            "description": "Validation error. Includes invalid Base64, non-image payloads, unsupported formats, and decoded size over 20.0 MB.",
            "content": {
              "application/json": {
                "example": {
                  "detail": [
                    {
                      "loc": [
                        "body",
                        "image_base64"
                      ],
                      "msg": "Image size exceeds maximum allowed size of 20.0 MB",
                      "type": "value_error"
                    }
                  ]
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (product policy: 30 requests/minute per API key). May be returned by the API gateway. Retry with exponential backoff.",
            "content": {
              "application/json": {
                "example": {
                  "error": "Too Many Requests",
                  "status": 429,
                  "message": "Rate limit exceeded. Please try again later"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Internal Server Error. Please contact support: contact@withoutbg.com"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    },
    "/available-credit": {
      "get": {
        "tags": [
          "API Credits"
        ],
        "summary": "Get available API credits",
        "description": "Return the current credit balance and expiration date for the API key.\n\n**Cost:** free (does not consume credits).\n\nUse for monitoring, dashboards, pre-flight checks, and recovering from 402 (insufficient credits) or 403 (expired credits) on paid endpoints.",
        "operationId": "get_your_available_credit_available_credit_get",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditInfo"
                }
              }
            }
          },
          "401": {
            "description": "Invalid API Key",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Invalid API Key"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (product policy: 30 requests/minute per API key). May be returned by the API gateway. Retry with exponential backoff.",
            "content": {
              "application/json": {
                "example": {
                  "error": "Too Many Requests",
                  "status": 429,
                  "message": "Rate limit exceeded. Please try again later"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "example": {
                  "detail": "Internal Server Error. Please contact support: contact@withoutbg.com"
                }
              }
            }
          }
        },
        "security": [
          {
            "APIKeyHeader": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AlphaChannelRequest": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          },
          "include_image_type": {
            "type": "boolean",
            "title": "Include Image Type",
            "description": "When true (default), include photo vs graphic probabilities in X-Image-Type-* headers. Set false to skip.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "AlphaChannelRequest"
      },
      "AlphaChannelResponse": {
        "properties": {
          "input_dimensions": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Input Dimensions",
            "description": "Decoded input size as `[width, height]` (pixels).",
            "examples": [
              [
                5568,
                3712
              ]
            ]
          },
          "processed_dimensions": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Processed Dimensions",
            "description": "Size after server prep downscale (longest-side / megapixel caps) as `[width, height]`. Distinct from model inference resolution (~1024 long side).",
            "examples": [
              [
                5000,
                3333
              ]
            ]
          },
          "was_downscaled": {
            "type": "boolean",
            "title": "Was Downscaled",
            "description": "True when the input was downscaled during server prep.",
            "examples": [
              true
            ]
          },
          "image_type": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "number"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Image Type",
            "description": "Photo vs graphic class probabilities. Present when `include_image_type` is true (default); omitted when false. Never returned by car endpoints.",
            "examples": [
              {
                "graphic": 0.13,
                "photo": 0.87
              }
            ]
          },
          "alpha_base64": {
            "type": "string",
            "title": "Alpha Base64",
            "description": "Grayscale alpha matte as Base64 PNG. Prepend `data:image/png;base64,` to display in a browser.",
            "examples": [
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
            ]
          }
        },
        "type": "object",
        "required": [
          "input_dimensions",
          "processed_dimensions",
          "was_downscaled",
          "alpha_base64"
        ],
        "title": "AlphaChannelResponse",
        "description": "Base64 alpha channel matte."
      },
      "CarImageBase64Request": {
        "properties": {
          "image_base64": {
            "type": "string",
            "title": "Image Base64",
            "description": "Input image as a raw Base64 string (no `data:` URI prefix). Supported formats: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF. Maximum decoded size: 20.0 MB. Invalid Base64, non-image data, unsupported formats, or oversize payloads fail with HTTP 422.",
            "examples": [
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
            ]
          },
          "shadow_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ShadowType"
              },
              {
                "type": "null"
              }
            ],
            "description": "Which renderer produces the cast shadow. Defaults to `ai`, the learned car-shadow model. `none` skips the shadow entirely. `geometric` (proxy fit) and `auto` (geometric, falling back to `ai`) are declared but not yet available and are rejected with 422; light direction is inferred from the photo, so no shadow type takes light parameters."
          },
          "include_shadow": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Include Shadow",
            "description": "Deprecated: use `shadow_type` instead (true maps to `ai`, false to `none`). When omitted, `shadow_type` decides. Setting both to contradictory values is rejected.",
            "deprecated": true
          },
          "reconstruct_windows": {
            "type": "boolean",
            "title": "Reconstruct Windows",
            "description": "When true (default), run car window reconstruction: opens glass interiors while keeping the car outline. Cutout RGB stays the original photo unless a shadow is baked in. Set false to skip and use the base silhouette alpha only.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "image_base64"
        ],
        "title": "CarImageBase64Request",
        "description": "Car remove-bg request (always photographic; no image-type sidecar)."
      },
      "CarImageWithoutBackgroundRequest": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File",
            "description": "Car image file (JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF). Maximum size: 20.0 MB."
          },
          "shadow_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ShadowType"
              },
              {
                "type": "null"
              }
            ],
            "description": "Which renderer produces the cast shadow. Defaults to `ai`, the learned car-shadow model. `none` skips the shadow entirely. `geometric` (proxy fit) and `auto` (geometric, falling back to `ai`) are declared but not yet available and are rejected with 422; light direction is inferred from the photo, so no shadow type takes light parameters."
          },
          "include_shadow": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Include Shadow",
            "description": "Deprecated: use `shadow_type` instead (true maps to `ai`, false to `none`). When omitted, `shadow_type` decides.",
            "deprecated": true
          },
          "reconstruct_windows": {
            "type": "boolean",
            "title": "Reconstruct Windows",
            "description": "When true (default), run car window reconstruction: opens glass interiors while keeping the car outline. Cutout RGB stays the original photo unless a shadow is baked in. Set false to skip and use the base silhouette alpha only.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "CarImageWithoutBackgroundRequest"
      },
      "CarImageWithoutBackgroundResponse": {
        "properties": {
          "input_dimensions": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Input Dimensions",
            "description": "Decoded input size as `[width, height]` (pixels).",
            "examples": [
              [
                5568,
                3712
              ]
            ]
          },
          "processed_dimensions": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Processed Dimensions",
            "description": "Size after server prep downscale (longest-side / megapixel caps) as `[width, height]`. Distinct from model inference resolution (~1024 long side).",
            "examples": [
              [
                5000,
                3333
              ]
            ]
          },
          "was_downscaled": {
            "type": "boolean",
            "title": "Was Downscaled",
            "description": "True when the input was downscaled during server prep.",
            "examples": [
              true
            ]
          },
          "shadow_type": {
            "$ref": "#/components/schemas/ShadowType",
            "description": "The shadow renderer that actually ran for this request.",
            "examples": [
              "ai"
            ]
          },
          "img_without_background_base64": {
            "type": "string",
            "title": "Img Without Background Base64",
            "description": "Car cutout as Base64 PNG (RGBA) with transparent background. Unless `shadow_type` was `none`, the soft cast shadow is already baked into this image. Prepend `data:image/png;base64,` to display in a browser.",
            "examples": [
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
            ]
          }
        },
        "type": "object",
        "required": [
          "input_dimensions",
          "processed_dimensions",
          "was_downscaled",
          "shadow_type",
          "img_without_background_base64"
        ],
        "title": "CarImageWithoutBackgroundResponse",
        "description": "Car Base64 cutout (no image-type or view sidecars)."
      },
      "CarLayersBase64Request": {
        "properties": {
          "image_base64": {
            "type": "string",
            "title": "Image Base64",
            "description": "Input image as a raw Base64 string (no `data:` URI prefix). Supported formats: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF. Maximum decoded size: 20.0 MB. Invalid Base64, non-image data, unsupported formats, or oversize payloads fail with HTTP 422.",
            "examples": [
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
            ]
          },
          "shadow_type": {
            "$ref": "#/components/schemas/ShadowType",
            "description": "Which renderer produces the cast shadow. Defaults to `ai`, the learned car-shadow model. `none` skips the shadow entirely. `geometric` (proxy fit) and `auto` (geometric, falling back to `ai`) are declared but not yet available and are rejected with 422; light direction is inferred from the photo, so no shadow type takes light parameters.",
            "default": "ai"
          },
          "reconstruct_windows": {
            "type": "boolean",
            "title": "Reconstruct Windows",
            "description": "When true (default), run car window reconstruction on the cutout: opens glass interiors while keeping the car outline. Shadow is predicted from the BiRefNet silhouette regardless. Set false to skip window reconstruction.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "image_base64"
        ],
        "title": "CarLayersBase64Request",
        "description": "Car compositing layers: uncomposited cutout + soft shadow."
      },
      "CarLayersResponse": {
        "properties": {
          "input_dimensions": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Input Dimensions",
            "description": "Decoded input size as `[width, height]` (pixels).",
            "examples": [
              [
                5568,
                3712
              ]
            ]
          },
          "processed_dimensions": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Processed Dimensions",
            "description": "Size after server prep downscale (longest-side / megapixel caps) as `[width, height]`. Distinct from model inference resolution (~1024 long side).",
            "examples": [
              [
                5000,
                3333
              ]
            ]
          },
          "was_downscaled": {
            "type": "boolean",
            "title": "Was Downscaled",
            "description": "True when the input was downscaled during server prep.",
            "examples": [
              true
            ]
          },
          "view": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CarViewMetadata"
              },
              {
                "type": "null"
              }
            ],
            "description": "Estimated camera orbit around the car. Omitted if the orientation head is not loaded. Azimuth 0° = front of the car, increasing counterclockwise from above. Elevation 0° = level look-at (mid-body height); positive = camera above the car."
          },
          "shadow_type": {
            "$ref": "#/components/schemas/ShadowType",
            "description": "The shadow renderer that actually ran for this request.",
            "examples": [
              "ai"
            ]
          },
          "img_without_background_base64": {
            "type": "string",
            "title": "Img Without Background Base64",
            "description": "Car cutout as Base64 PNG (RGBA) with transparent background. Shadow is not baked in; use `shadow_base64` to composite yourself. Prepend `data:image/png;base64,` to display in a browser.",
            "examples": [
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
            ]
          },
          "shadow_base64": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Shadow Base64",
            "description": "Soft cast-shadow mask as Base64 grayscale PNG (0 = no shadow, 255 = full shadow). Not composited into the cutout; for client-side editing/compositing. Null when `shadow_type` was `none`. Prepend `data:image/png;base64,` to display in a browser.",
            "examples": [
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
            ]
          }
        },
        "type": "object",
        "required": [
          "input_dimensions",
          "processed_dimensions",
          "was_downscaled",
          "shadow_type",
          "img_without_background_base64"
        ],
        "title": "CarLayersResponse",
        "description": "Base64 car RGBA cutout plus separate soft cast-shadow mask."
      },
      "CarViewMetadata": {
        "properties": {
          "azimuth_deg": {
            "type": "number",
            "title": "Azimuth Deg",
            "description": "Camera orbit around the car, in degrees, range [0, 360). 0 looks at the front of the car. Increases counterclockwise from above (90 = camera on the car's left; nose points right in the photo).",
            "examples": [
              184.06
            ]
          },
          "elevation_deg": {
            "type": "number",
            "title": "Elevation Deg",
            "description": "Angle of the camera-to-car look direction above the horizon, in degrees. 0 is a level view (camera at look-at height, roughly mid-body, not ground). Positive means the camera is above the car.",
            "examples": [
              1.06
            ]
          }
        },
        "type": "object",
        "required": [
          "azimuth_deg",
          "elevation_deg"
        ],
        "title": "CarViewMetadata",
        "description": "Estimated camera orbit around the car (not a full extrinsic / focal length).\n\nAzimuth is degrees in ``[0, 360)``: ``0`` looks at the **front** of the car\nand increases **counterclockwise from above** (``90`` = camera on the car's\nleft; the nose points right in the photo).\n\nElevation is the camera-to-car look angle above the horizon, in degrees:\n``0`` is a level view (camera at look-at height, roughly mid-body, not\nground). Positive means the camera is **above** the car."
      },
      "CreditInfo": {
        "properties": {
          "credit": {
            "type": "integer",
            "title": "Credit",
            "description": "Credits available to spend right now.",
            "examples": [
              138
            ]
          },
          "expiration_date": {
            "type": "string",
            "title": "Expiration Date",
            "description": "When credits expire, as `YYYY-MM-DD HH:MM:SS`.",
            "examples": [
              "2026-12-31 23:59:59"
            ]
          }
        },
        "type": "object",
        "required": [
          "credit",
          "expiration_date"
        ],
        "title": "CreditInfo"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "ImageBase64Request": {
        "properties": {
          "image_base64": {
            "type": "string",
            "title": "Image Base64",
            "description": "Input image as a raw Base64 string (no `data:` URI prefix). Supported formats: JPEG, PNG, WebP, AVIF, HEIC, TIFF, BMP, GIF. Maximum decoded size: 20.0 MB. Invalid Base64, non-image data, unsupported formats, or oversize payloads fail with HTTP 422.",
            "examples": [
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
            ]
          },
          "include_image_type": {
            "type": "boolean",
            "title": "Include Image Type",
            "description": "When true (default), include photo vs graphic probabilities in the response (`image_type` / `X-Image-Type-*`). Set false to skip.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "image_base64"
        ],
        "title": "ImageBase64Request",
        "description": "Base64 image model with optional image-type sidecar."
      },
      "ImageWithoutBackgroundRequest": {
        "properties": {
          "file": {
            "type": "string",
            "format": "binary",
            "title": "File"
          },
          "include_image_type": {
            "type": "boolean",
            "title": "Include Image Type",
            "description": "When true (default), include photo vs graphic probabilities in X-Image-Type-* headers. Set false to skip.",
            "default": true
          }
        },
        "type": "object",
        "required": [
          "file"
        ],
        "title": "ImageWithoutBackgroundRequest"
      },
      "ImageWithoutBackgroundResponse": {
        "properties": {
          "input_dimensions": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Input Dimensions",
            "description": "Decoded input size as `[width, height]` (pixels).",
            "examples": [
              [
                5568,
                3712
              ]
            ]
          },
          "processed_dimensions": {
            "items": {
              "type": "integer"
            },
            "type": "array",
            "title": "Processed Dimensions",
            "description": "Size after server prep downscale (longest-side / megapixel caps) as `[width, height]`. Distinct from model inference resolution (~1024 long side).",
            "examples": [
              [
                5000,
                3333
              ]
            ]
          },
          "was_downscaled": {
            "type": "boolean",
            "title": "Was Downscaled",
            "description": "True when the input was downscaled during server prep.",
            "examples": [
              true
            ]
          },
          "image_type": {
            "anyOf": [
              {
                "additionalProperties": {
                  "type": "number"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Image Type",
            "description": "Photo vs graphic class probabilities. Present when `include_image_type` is true (default); omitted when false. Never returned by car endpoints.",
            "examples": [
              {
                "graphic": 0.13,
                "photo": 0.87
              }
            ]
          },
          "img_without_background_base64": {
            "type": "string",
            "title": "Img Without Background Base64",
            "description": "Result image as Base64 PNG (RGBA) with transparent background. Prepend `data:image/png;base64,` to display in a browser.",
            "examples": [
              "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
            ]
          }
        },
        "type": "object",
        "required": [
          "input_dimensions",
          "processed_dimensions",
          "was_downscaled",
          "img_without_background_base64"
        ],
        "title": "ImageWithoutBackgroundResponse",
        "description": "Base64 image with transparent background."
      },
      "ShadowType": {
        "type": "string",
        "enum": [
          "none",
          "ai",
          "geometric",
          "auto"
        ],
        "title": "ShadowType",
        "description": "Which renderer produces the cast shadow."
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      }
    },
    "securitySchemes": {
      "APIKeyHeader": {
        "type": "apiKey",
        "description": "API key for authentication. Pass as `X-API-Key` on every request.",
        "in": "header",
        "name": "X-API-Key"
      }
    }
  },
  "tags": [
    {
      "name": "Background Removal",
      "description": "Remove image background and return an RGBA PNG cutout (transparent background).",
      "externalDocs": {
        "description": "Detailed Documentation",
        "url": "https://withoutbg.com/docs/pro-model/background-removal-binary"
      }
    },
    {
      "name": "Car Background Removal",
      "description": "Car-photo background removal (dedicated vehicle pipeline: YOLO vehicle crop, then BiRefNet). Window reconstruction and a baked cast shadow are on by default; set reconstruct_windows=false or shadow_type=none to skip. No image-type or view sidecars. For uncomposited cutout + shadow layers plus view, use POST /v1.0/car-layers-base64 (Car Compositing).",
      "externalDocs": {
        "description": "Detailed Documentation",
        "url": "https://withoutbg.com/docs/pro-model/car-background-removal-binary"
      }
    },
    {
      "name": "Car Compositing",
      "description": "Car compositing layers: RGBA cutout and a separate soft shadow mask (not baked), plus view (camera azimuth/elevation). Window reconstruction is on by default. azimuth 0° = front of the car, increasing counterclockwise from above; elevation 0° = level look-at, positive = camera above the car.",
      "externalDocs": {
        "description": "Detailed Documentation",
        "url": "https://withoutbg.com/docs/pro-model/car-layers-base64"
      }
    },
    {
      "name": "Alpha Matte",
      "description": "Generate a grayscale alpha matte (opacity mask) for compositing onto your own full-resolution RGB.",
      "externalDocs": {
        "description": "Detailed Documentation",
        "url": "https://withoutbg.com/docs/pro-model/alpha-matte-binary"
      }
    },
    {
      "name": "API Credits",
      "description": "Returns your available credits and the expiration date.",
      "externalDocs": {
        "description": "Detailed Documentation",
        "url": "https://withoutbg.com/docs/pro-model/credits"
      }
    }
  ]
}