Dokumentasi API
Endpoint
Pemrosesan gambar sisi server
Penggunaan
1 Credit per gambar yang berhasil
Ringkasan
RemoveZero menyediakan satu API sinkron sisi server untuk menghapus latar belakang. Kirim satu gambar JPG, PNG, atau WebP sebagai Base64 standar dan terima hasil PNG atau WebP langsung dalam respons JSON.
Sebelum memulai
- Masuk, buka Personal, lalu buat API Key.
- Salin kunci lengkap saat ditampilkan dan simpan di server Anda.
- Pastikan akun memiliki setidaknya 1 Credit yang tersedia.
- Encode satu gambar yang didukung sebagai Base64 standar tanpa awalan data-URL.
Mulai cepat
Permintaan pertama Anda hanya memerlukan input.image_base64. Abaikan input.output untuk mempertahankan keluaran transparan berukuran asli yang digunakan klien lama.
curl --request POST --url https://removezero.com/api/v1/remove-background --header "Authorization: Bearer ${REMOVEZERO_API_KEY}" --header "Content-Type: application/json" --header "Idempotency-Key: image-2026-08-28-0001" --data '{"input":{"image_base64":"BASE64_IMAGE_DATA"}}'Autentikasi dengan Bearer key
Buat API Key dari Personal, lalu kirimkan melalui header Authorization untuk setiap permintaan.
Authorization: Bearer rz_live_your_api_key- Simpan kunci dalam variabel lingkungan server atau pengelola rahasia.
- Jangan pernah menaruh kunci di kode browser, paket aplikasi seluler, ekstensi, URL, repositori publik, atau log.
- Gunakan kunci terpisah untuk layanan atau lingkungan berbeda bila memungkinkan.
- Segera cabut dan ganti kunci jika mungkin telah terekspos.
Panggil API dari server Anda
Gunakan jalur browser atau klien → server Anda → RemoveZero API. Bearer key dapat mengotorisasi pemrosesan berbayar, sehingga klien publik tidak dapat menjaganya tetap rahasia. Permintaan server berbayar harus menghilangkan header Origin.
Kirim permintaan penghapusan latar
Kirim satu permintaan JSON ketat dari server Anda. Header wajib divalidasi sebelum reservasi Credit atau pemrosesan gambar.
POST https://removezero.com/api/v1/remove-background
Authorization: Bearer rz_live_your_api_key
Content-Type: application/json
Idempotency-Key: order-2026-08-25-0001Header wajib
Authorization: Bearer API KeyContent-Type: application/jsonIdempotency-Key: unique retry key
Body JSON
{
"input": {
"image_base64": "BASE64_IMAGE_DATA"
}
}- Content-Type harus application/json; parameter charset diperbolehkan.
- Content-Encoding harus dihilangkan atau bernilai identity; body permintaan terkompresi ditolak.
- Jangan kirim header Origin.
- Idempotency-Key harus terdiri dari 1–128 karakter berupa huruf, angka, titik, garis bawah, titik dua, atau tanda hubung.
- image_base64 harus berisi byte gambar Base64 standar tanpa awalan data:image/....
Sesuaikan keluaran
Objek input.output bersifat opsional. Objek ini mengubah kanvas setelah satu inferensi penghapusan latar yang sama, sehingga penyesuaian tidak menggunakan Credit tambahan.
{
"input": {
"image_base64": "BASE64_IMAGE_DATA",
"output": {
"format": "webp",
"background": "#ffffff",
"width": 1600,
"height": 1600,
"padding_ratio": 0.08
}
}
}- format
- "png" atau "webp"; default-nya "png".
- background
- "transparent" atau warna #RRGGBB enam digit; default-nya "transparent".
- width + height
- Dimensi kanvas berpasangan yang opsional: 32–4.096 px per sisi dan tidak lebih dari 4.194.304 piksel.
- padding_ratio
- Padding subjek opsional dari 0 hingga 0,25 dari sisi kanvas yang lebih pendek; default-nya 0.
Perilaku contain + center yang tetap
Fit bukan field permintaan. RemoveZero selalu mempertahankan rasio aspek subjek dan memasukkannya ke dalam kanvas yang tersedia.
- Seluruh subjek tetap terlihat dan berada di tengah.
- Subjek tidak dipotong atau diregangkan.
- Sisa ruang kanvas menggunakan transparansi atau warna yang diminta.
- Cover, smart crop, posisi gravity, dan koordinat arbitrer tidak didukung.
Kompatibilitas mundur
Klien lama dapat menghilangkan input.output dan tetap hanya mengirim input.image_base64. Tambahkan output hanya jika memerlukan format, latar, kanvas, atau padding khusus.
Respons berhasil
Gambar yang berhasil mengembalikan HTTP 200 dan menggunakan 1 Credit. Keluaran mencakup content type dan dimensi kanvas yang tepat, serta data Base64 yang dapat didekode oleh server Anda.
HTTP/1.1 200 OK
Content-Type: application/json
{
"ok": true,
"id": "REQUEST_ID",
"status": "COMPLETED",
"output": {
"ok": true,
"content_type": "image/webp",
"width": 1600,
"height": 1600,
"output_base64": "BASE64_IMAGE_RESULT"
},
"usage": {
"units": 1,
"credits_used": 1
}
}Dekode hasil
- Konfirmasikan HTTP 200, ok: true, dan status: COMPLETED.
- Baca output.content_type dan hanya terima image/png atau image/webp.
- Dekode output.output_base64 satu kali dan simpan byte dengan ekstensi yang sesuai.
- Jika dimensi diminta, verifikasi output.width dan output.height.
Hasil dikembalikan secara langsung, bukan sebagai URL permanen. Simpan byte hasil dekode di aplikasi Anda jika perlu menyimpan atau mengirimkan gambar.
import { writeFile } from "node:fs/promises";
const payload = await response.json();
if (!response.ok || payload.ok !== true || payload.status !== "COMPLETED") {
throw new Error(payload.error?.code ?? "REMOVEZERO_REQUEST_FAILED");
}
const { content_type: type, output_base64: base64 } = payload.output ?? {};
const extension = type === "image/png" ? "png" : type === "image/webp" ? "webp" : null;
if (!extension || typeof base64 !== "string") {
throw new Error("REMOVEZERO_OUTPUT_INVALID");
}
await writeFile(`removezero-result.${extension}`, Buffer.from(base64, "base64"));Penagihan dan pengembalian Credit
Setiap permintaan memproses satu gambar. RemoveZero memvalidasi permintaan, mencadangkan 1 Credit secara atomik, dan menyelesaikannya hanya setelah penghapusan latar dan keluaran yang diminta berhasil. Penyesuaian keluaran tidak pernah menambah inferensi atau Credit.
Siklus Credit
| Validasi | Input tidak valid ditolak sebelum otorisasi. | Tidak ada Credit yang digunakan |
|---|---|---|
| Reservasi | Satu Credit dicadangkan secara atomik. | 1 Credit ditahan |
| Berhasil | Hasil dikembalikan dan penggunaan diselesaikan. | credits_used: 1 |
| Kegagalan terverifikasi | Permintaan gagal dan reservasi dikembalikan satu kali. | credits_used: 0; credits_returned: 1 |
| Pengembalian belum terselesaikan | Permintaan akhir atau pengembalian belum dapat diverifikasi. | REFUND_PENDING |
Jika permintaan atau pengembaliannya belum dapat diverifikasi, API mengembalikan REFUND_PENDING dengan request ID dan Retry-After: 30. Pertahankan Idempotency-Key yang sama dan jangan kirim gambar yang sama dengan kunci baru.
HTTP/1.1 503 Service Unavailable
Retry-After: 30
Content-Type: application/json
{
"ok": false,
"error": {
"code": "REFUND_PENDING"
},
"request_id": "REQUEST_ID"
}Idempotensi dan percobaan ulang
Idempotency-Key mengikat body JSON yang diserialisasi secara tepat, termasuk gambar dan setiap field output yang diberikan. Simpan byte permintaan asli bersama kuncinya.
- Kunci sama dan body benar-benar sama: aman dicoba ulang tanpa reservasi atau permintaan pemrosesan kedua.
- Kunci sama dan body berubah: 409 IDEMPOTENCY_CONFLICT.
- Kunci sama setelah permintaan terminal: 409 IDEMPOTENCY_REPLAY_UNAVAILABLE; hasil Base64 yang selesai tidak disimpan untuk replay.
- Kunci baru: permintaan baru yang dapat mencadangkan Credit lagi.
- Body JSON yang secara semantik sama tetap dapat berbeda jika spasi, urutan properti, atau default eksplisit berubah.
Panduan Retry-After
- 429 RATE_LIMITED
- Tunggu 60 detik, lalu coba ulang body yang sama dengan kunci yang sama.
- 503 REFUND_PENDING
- Tunggu 30 detik, lalu coba ulang body yang sama dengan kunci yang sama.
- 503 UPSTREAM_BUSY
- Tunggu 10 detik. Gunakan kunci baru hanya untuk percobaan baru yang disengaja.
- Timeout jaringan atau API_UNAVAILABLE
- Anggap hasilnya belum diketahui dan simpan body serta kunci asli hingga terselesaikan.
Contoh
Ganti placeholder di server Anda. API key tidak boleh terekspos dalam paket browser publik.
curl --request POST \
--url https://removezero.com/api/v1/remove-background \
--header 'Authorization: Bearer rz_live_your_api_key' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: order-2026-08-25-0001' \
--data '{"input":{"image_base64":"BASE64_IMAGE_DATA","output":{"format":"webp","background":"#ffffff","width":1600,"height":1600,"padding_ratio":0.08}}}'Titik awal keluaran umum
Resep ini adalah titik awal, bukan jaminan kepatuhan permanen untuk marketplace atau kategori. Nama platform hanyalah label, bukan nilai enum API.
PNG transparan 1:1
{"format":"png","background":"transparent","width":1600,"height":1600,"padding_ratio":0.08}PNG transparan 4:5
{"format":"png","background":"transparent","width":1600,"height":2000,"padding_ratio":0.08}PNG transparan 3:4
{"format":"png","background":"transparent","width":1500,"height":2000,"padding_ratio":0.08}WebP putih 16:9
{"format":"webp","background":"#ffffff","width":1920,"height":1080,"padding_ratio":0.08}Titik awal katalog Amazon
{"format":"webp","background":"#ffffff","width":2000,"height":2000,"padding_ratio":0.075}Titik awal katalog Shopify
{"format":"webp","background":"#ffffff","width":2048,"height":2048,"padding_ratio":0.08}Error dan pemecahan masalah
Error menggunakan status HTTP yang stabil dan kode singkat dalam respons JSON.
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"ok": false,
"error": {
"code": "ERROR_CODE"
}
}| HTTP | Kode | Arti |
|---|---|---|
| 400 | INVALID_REQUEST | Body JSON, struktur, data Base64, atau batas gambar hasil dekode tidak valid. |
| 400 | IDEMPOTENCY_KEY_REQUIRED | Idempotency-Key yang valid diperlukan sebelum penagihan. |
| 401 | AUTH_REQUIRED | API Key tidak ada, tidak valid, atau telah dicabut. |
| 402 | INSUFFICIENT_BALANCE | Akun tidak memiliki cukup Credit. |
| 403 | ORIGIN_DENIED | Permintaan server berbayar harus menghilangkan header Origin. |
| 409 | IDEMPOTENCY_CONFLICT | Kunci yang sama digunakan kembali dengan data berbeda. |
| 409 | IDEMPOTENCY_REPLAY_UNAVAILABLE | Kunci permintaan ini sudah diproses. Gunakan kunci baru untuk gambar baru. |
| 413 | INVALID_REQUEST_SIZE | Ukuran body permintaan JSON lebih dari 7.500.000 byte. |
| 415 | UNSUPPORTED_MEDIA_TYPE | Content-Type harus application/json. |
| 415 | UNSUPPORTED_ENCODING | Content-Encoding harus identity atau dihilangkan. |
| 423 | ACCOUNT_FROZEN | Akun tidak dapat mengirim pekerjaan berbayar selama dibekukan. |
| 429 | RATE_LIMITED | Kurangi laju dan coba lagi setelah Retry-After: 60. |
| 502 | UPSTREAM_ERROR | Layanan pemrosesan mengembalikan hasil yang tidak valid. |
| 502 | UPSTREAM_UNAVAILABLE | Layanan pemrosesan tidak dapat dijangkau. |
| 503 | UPSTREAM_BUSY | Pemrosesan sedang sibuk; coba lagi setelah Retry-After: 10. |
| 503 | API_UNAVAILABLE | API untuk sementara tidak tersedia. |
| 503 | REFUND_PENDING | Permintaan atau pengembalian Credit masih tertunda; pertahankan kunci yang sama dan tunggu. |
Pemecahan masalah yang aman
- Catat status HTTP, kode error, request_id jika ada, stempel waktu, dan Idempotency-Key Anda.
- Jangan pernah mencatat atau mengirim Bearer key, image_base64 lengkap, atau respons lengkap yang berisi data gambar.
- Perbaiki error 4xx terkait permintaan, kredensial, saldo, atau header sebelum mencoba lagi.
- Patuhi Retry-After dan pertahankan body serta kunci asli untuk permintaan yang belum terselesaikan.
- Hubungi dukungan dengan pengenal non-rahasia jika status belum terselesaikan terus berlanjut.
Batas permintaan
Kirim satu gambar JPG, PNG, atau WebP per permintaan sebagai Base64 standar. Input hasil dekode maksimal 5 MiB dan body JSON lengkap maksimal 7.500.000 byte. Keluaran khusus dibatasi hingga 4.096 px per sisi dan 4.194.304 piksel. Jika hasil persis yang diminta tidak muat dalam batas respons inline, pemrosesan gagal dan Credit yang dicadangkan dikembalikan; API tidak pernah diam-diam mengubah ukuran atau format yang diminta.
Input
- Satu gambar JPG, PNG, atau WebP per permintaan.
- Base64 standar tanpa awalan data-URL.
- Gambar hasil dekode hingga 5 MiB; body JSON lengkap hingga 7.500.000 byte.
- Dimensi input 32 hingga 12.000 px per sisi dan hingga 40 megapiksel.
Keluaran khusus
- PNG atau WebP; latar transparan atau #RRGGBB.
- Kanvas 32 hingga 4.096 px per sisi dan maksimal 4.194.304 piksel.
- padding_ratio dari 0 hingga 0,25.
- Respons Base64 inline terbatas; permintaan persis tidak pernah diam-diam diubah ukuran atau formatnya.