API reference
GPU processing
Run watermarking and watermark detection on a GPU with accelerator=gpu on Business and Enterprise plans. GPU jobs cost 3x credits; CPU is the default.
On Business or Enterprise plans, you can ask any embedding or detection endpoint to run on a GPU (a graphics processor that can speed up the work). The output format, the watermark and the output check are the same as on CPU.
- Default
- CPU
- GPU cost
- 3× normal credits
- If GPU is not ready
- CPU at normal cost
Request GPU processing
Add accelerator=gpu to a sync or async request. Use accelerator=cpu to request CPU explicitly.
curl --fail-with-body "https://api.etchv.com/watermarks/videos/async?accelerator=gpu" \
-H "X-API-Key: $ETCHV_API_KEY" \
-H "Idempotency-Key: launch-video-partner-42" \
-F 'file=@launch.mp4' \
-F 'data={"asset":"launch-video","recipient":"partner-42"}'The dashboard, MCP and automation integrations offer the same choice. How much faster a GPU is depends on the file, because reading and writing the file still run on CPU. See performance benchmarks.
Credits and fallback
Etchv holds 3× the normal credits when the request starts. If the work runs on CPU instead, Etchv charges the normal amount and releases the rest. If the operation fails, all held credits are released.
GPU readiness
An active Business or Enterprise workspace keeps GPU capacity running and ready (“warm”). Extra capacity can take a few minutes to start. Requests run on CPU while it starts.
Check readiness
curl --fail-with-body "https://api.etchv.com/accelerators/gpu" \
-H "X-API-Key: $ETCHV_API_KEY"| Status | Meaning |
|---|---|
ready | A GPU is running |
starting | Starting; requests use CPU meanwhile |
idle | No GPU is running |
unavailable | GPU processing is unavailable |
ready- Meaning
- A GPU is running
starting- Meaning
- Starting; requests use CPU meanwhile
idle- Meaning
- No GPU is running
unavailable- Meaning
- GPU processing is unavailable
Checking does not start a GPU. Use a key with watermarks:embed or watermarks:detect.
Start the GPU
curl --fail-with-body -X POST "https://api.etchv.com/accelerators/gpu/wake" \
-H "X-API-Key: $ETCHV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"webhook_id":"wh_0123456789abcdef0123456789abcdef"}'Waking costs no credits and needs a Business or Enterprise plan. Once ready, the GPU stays warm for 15 minutes. GPU work in progress keeps it running longer. Waking it again extends the 15 minutes.
If you pass the optional webhook_id, that endpoint receives accelerator.ready. It is sent right away if the GPU is already ready. Without a webhook, poll the readiness endpoint. Both endpoints return accelerator, status, warm_until and ready_at.
See which accelerator ran
| Response | Field |
|---|---|
| Sync result or result download | X-Etchv-Accelerator: cpu or gpu |
| Receipt, job status or webhook | accelerator_requested and actual accelerator (null before processing) |
| Completed job | credits: actual charge |
- Sync result or result download
- Field
X-Etchv-Accelerator:cpuorgpu
- Receipt, job status or webhook
- Field
accelerator_requestedand actualaccelerator(nullbefore processing)
- Completed job
- Field
credits: actual charge
The Usage dashboard also shows the accelerator.
Errors
| Status | Reason |
|---|---|
403 | Plan does not include GPU |
404 | Webhook is missing or disabled |
503 | GPU service unavailable; retry later or request CPU |
409 | Same idempotency key used with a different accelerator |
422 | Accelerator must be cpu or gpu |
403- Reason
- Plan does not include GPU
404- Reason
- Webhook is missing or disabled
503- Reason
- GPU service unavailable; retry later or request CPU
409- Reason
- Same idempotency key used with a different accelerator
422- Reason
- Accelerator must be
cpuorgpu
GPU requests share your plan’s rate limits.