API de QuitarFondo
Quita el fondo de una imagen desde tu servidor y recibe un PNG transparente. Un endpoint, una imagen por solicitud y los mismos créditos de tu cuenta.
Esta documentación es pública: puedes leerla sin iniciar sesión. Para procesar imágenes necesitas una API Key de una cuenta verificada con créditos.
Inicio rápido
- Crea una clave en Configuración → API Keys (solo la gestión de claves requiere iniciar sesión).
- Guárdala como
QUITARFONDO_API_KEYen tu servidor. - Envía una foto y descarga el resultado de
image_url.
export QUITARFONDO_API_KEY="TU_API_KEY"
curl --fail-with-body "https://quitarfondo.studio/api/v1/remove-background" \
-H "Authorization: Bearer $QUITARFONDO_API_KEY" \
-F "image_file=@foto.jpg"¿Solo quieres comprobar que el servicio responde? GET /api/ping no requiere clave ni consume créditos.
Autenticación
Incluye la clave en cada petición. No se necesitan cookies ni una sesión del navegador. Crea, revoca o sustituye tus claves desde la configuración de tu cuenta.
Authorization: Bearer TU_API_KEYNo publiques la clave en el frontend, URLs, repositorios o capturas. Si se filtra, revócala y crea otra. Usa HTTPS y llama a la API desde tu backend.
Solicitud
/api/v1/remove-backgroundEnvía una sola imagen con una de estas dos opciones. No envíes ambos campos. No se admiten URLs remotas ni ajustes de modelo.
| Campo | Tipo de solicitud | Contenido |
|---|---|---|
| image_file | multipart/form-data | Archivo JPEG, PNG o WebP |
| image_base64 | application/json | Data URL con tipo y base64 |
{
"image_base64": "data:image/png;base64,BASE64_DE_TU_IMAGEN"
}Máximo 1,5 MB de imagen y 1536 px por lado. El cuerpo completo, incluido base64 o multipart, no puede superar 2,1 MB. Ajusta la imagen antes de enviarla.
Respuesta
Una solicitud correcta devuelve HTTP 200 y JSON. El resultado es una URL HTTPS temporal del PNG transparente; descárgalo y almacénalo en tu propio sistema.
{
"image_url": "https://…/resultado.png",
"credits_used": 1,
"credits_remaining": 5,
"request_id": "0c0fd8e6-…"
}credits_used: coste de esta operación.credits_remaining: saldo justo después del débito; otras peticiones concurrentes pueden cambiarlo.request_id: identificador que debes facilitar a soporte si hay un problema.
Lotes de imágenes
POST/api/v1/remove-background/batch
Envía de 1 a 10 imágenes en una sola solicitud: repite el campo image_files en multipart/form-data o usa images_base64 (lista de data URLs) en JSON. Cada imagen sigue los mismos límites que una solicitud individual. Si alguna es inválida, el lote completo se rechaza con HTTP 400 antes de cobrar nada.
curl --fail-with-body "https://quitarfondo.studio/api/v1/remove-background/batch" \
-H "Authorization: Bearer $QUITARFONDO_API_KEY" \
-F "image_files=@foto-1.jpg" \
-F "image_files=@foto-2.png"El lote cobra 1 crédito por imagen al empezar y devuelve en un solo reembolso los créditos de las imágenes que fallen. La respuesta indica el resultado de cada imagen en el mismo orden en que la enviaste.
{
"results": [
{
"index": 0,
"image_url": "https://…/resultado-1.png"
},
{
"index": 1,
"error": {
"code": "processing_failed",
"message": "Procesamiento fallido; crédito devuelto."
}
}
],
"images_processed": 1,
"images_failed": 1,
"credits_used": 1,
"credits_remaining": 9,
"request_id": "0c0fd8e6-…"
}Compatible con remove.bg
Si ya usas la API de remove.bg, cambia solo el host: los mismos endpoints, la cabecera X-API-Key y los parámetros image_file, image_file_b64 e image_url (multipart, JSON o x-www-form-urlencoded). La respuesta es el PNG en binario, o {"data":{"result_b64":…}} con Accept: application/json, e incluye X-Credits-Charged, X-Width, X-Height y X-Foreground-*. Los errores usan el formato {"errors":[{"title","code"}]}.
curl -H "X-API-Key: $QUITARFONDO_API_KEY" \
-F "image_file=@foto.jpg" -F "size=auto" \
-F "bg_color=ffffff" -F "crop=true" -F "crop_margin=5%" \
-o producto.jpg https://quitarfondo.studio/v1.0/removebgsize:preview(hasta 0,25 MP, cuesta 0,25 créditos),small/regular(0,25 MP),medium(1,5 MP),hd(4 MP) yfull/4k/auto(resolución original, hasta 10 MP). Todos menospreviewcuestan 1 crédito.format:auto(PNG si hay transparencia, JPG si el fondo es opaco),png,jpg,webpozip(color.jpg+alpha.png).channels=alphadevuelve solo la máscara.- Fondo:
bg_color(hex como81d4fa,81d4fa77con transparencia, o nombres comowhite),bg_image_urlobg_image_file;add_shadow=trueañade una sombra suave (shadow_opacity0–100). - Encuadre:
crop=truerecorta al sujeto,crop_margin(30px,10%, 1, 2 o 4 valores),scale(10%–100%),position(center,originalox% y%) yroi(x1 y1 x2 y2en px o %) para detectar solo dentro de una zona. GET /v1.0/accountdevuelve tu saldo de créditos con la misma estructura que remove.bg. Archivos de hasta 22 MB;typese detecta siempre automáticamente.
Créditos y límites
Cada imagen procesada cuesta 1 crédito. Se comprueba el saldo antes de llamar al procesador. Si falla el procesamiento, se devuelve el débito; si el reembolso no puede confirmarse, recibirás refund_pending para contactar con soporte.
Cada clave puede procesar hasta 500 imágenes por minuto, como remove.bg: cada imagen cuenta 1 por megapíxel iniciado (1600 × 1200 cuenta 2) y se suman las solicitudes individuales, los lotes y el endpoint compatible. Si un lote no cabe en lo que queda del minuto, se rechaza completo con HTTP 429 sin cobrar créditos. Las respuestas incluyen X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset; un 429 añade Retry-After en segundos.
Evita reintentar automáticamente una petición que haya agotado el tiempo: si ya se procesó, reenviarla crea otra operación y puede consumir más créditos.
Ver precios y créditosErrores
{
"error": {
"code": "invalid_api_key",
"message": "Clave inválida o caducada."
},
"request_id": "0c0fd8e6-…"
}| HTTP | Código | Descripción |
|---|---|---|
| 400 | invalid_image | Imagen, dimensiones o formato de solicitud inválidos. |
| 400 | too_many_images | Un lote admite entre 1 y 10 imágenes. |
| 401 | invalid_api_key | Falta la clave o está revocada, desactivada o caducada. |
| 402 | insufficient_credits | La cuenta no tiene suficientes créditos. |
| 403 | account_unavailable | La cuenta está bloqueada o no está verificada. |
| 405 | method_not_allowed | Este endpoint solo acepta POST. |
| 413 | payload_too_large | La imagen o el cuerpo supera el límite permitido. |
| 415 | unsupported_media_type | Usa JPEG, PNG o WebP; envía JSON o multipart. |
| 429 | rate_limited | Límite de imágenes por minuto alcanzado; respeta Retry-After. |
| 500 | internal_error | Error interno antes de completar la operación. |
| 500 | refund_pending | Falló el proceso y no se pudo confirmar el reembolso. |
| 502 | processing_failed | Falló el procesamiento; los créditos se devuelven. |
| 503 | service_unavailable | El servicio no está configurado o disponible. |