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

# Animated sticker exports

> Export validated Telegram, WhatsApp, WeChat and Discord stickers from an existing video and mask.

Create one export from a completed background-removal job:

```bash theme={"dark"}
curl -X POST https://api.videobgremover.com/v1/jobs/JOB_ID/exports \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"format":"sticker-telegram-v1","use_gpu":false}'
```

Each versioned sticker format determines its codec, dimensions, duration and adaptive compression. Omit `sizes` and `transform.max_width`. Crop and reverse remain supported. A frame-rate override must be 12–30 fps; the adaptive encoder may lower it to fit the byte budget.

| Export format | Codec | Dimensions | Maximum encoded bytes | Duration |
| - | - | - | - | - |
| `sticker-telegram-v1` | `webm_vp9` | 512 × 512 | 230,400 | 3 seconds |
| `sticker-whatsapp-v1` | `webp` | 512 × 512 | 450,000 | 10 seconds |
| `sticker-wechat-v1` | `gif` | 240 × 240 | 450,000 | 3 seconds |
| `sticker-discord-v1` | `apng` | 320 × 320 | 471,859 | 5 seconds |

Budgets reserve 10% headroom below the conservative platform limit. WeChat’s three-second cap is this profile’s product policy. Inputs up to 30 seconds are supported; longer loops are retimed to preserve their ending. All profiles remove audio, fit the source on a transparent square canvas and preserve at least 12 fps. WebM, WebP and APNG retain partial alpha; GIF uses binary transparency. Palette/quality and frame rate adapt in a bounded sequence. An animation that cannot fit within those quality floors fails with an error.

The response is a normal export receipt:

```json theme={"dark"}
{"export_id":"EXPORT_ID","job_id":"JOB_ID","format":"sticker-telegram-v1","sticker_profile":"telegram-v1","status":"queued","created_at":"..."}
```

Poll `GET /v1/exports/EXPORT_ID`. A completed export includes `output_url`, `poster_url` and `metadata` with `validated`, bytes, dimensions, duration, frame rate, loop/alpha properties and SHA-256. URLs are signed and expire after one hour. No file becomes ready without validation; failures return `status: "failed"` and `error`.

Export several profiles from the same original and mask:

```json theme={"dark"}
{
  "use_gpu": false,
  "exports": [
    {"format":"sticker-telegram-v1"},
    {"format":"sticker-whatsapp-v1"},
    {"format":"sticker-wechat-v1"},
    {"format":"sticker-discord-v1"}
  ]
}
```

Send this to `POST /v1/jobs/JOB_ID/batch-exports` and poll `GET /v1/batches/BATCH_ID`. CPU batches fan out through the existing Cloud Tasks route; background removal is reused. Set `use_gpu: true` to run the same profiles inside one GPU batch, which downloads the original and mask once. The encoders use CPU codecs in either worker. An optional `mask_version` pins an older completed refinement.

Profiles also work in the `exports` array on `/v1/jobs/JOB_ID/start`, or on `/v1/h3/image-to-video`. Those generation workers reuse their local original and mask/matte.

The Node SDK provides `createStickerExport(jobId, { format: 'sticker-telegram-v1' })` and `exportStatus(exportId)`. The Python SDK provides `create_sticker_export(job_id, StickerExportRequest(format='sticker-telegram-v1'))` and `export_status(export_id)`. Both sticker helpers default to CPU and accept an explicit GPU request.

The legacy `sticker_profile` input remains accepted for compatibility. New integrations should use `format`. Receipts expose the versioned sticker format; `metadata.format` identifies the encoded codec and `metadata.profile` identifies its validation policy. Ordinary `webm_vp9`, `hevc_alpha` and `stacked_video` exports keep their existing behavior.


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