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.
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:
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:
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.