API publica de Picverce AI v1.0.0
Usa Picverce AI desde tu propio servidor
Edita imagenes con las mismas herramientas del sitio web, o crea nuevas desde un prompt con 26 modelos. Los trabajos son asincronos, asi que un modelo lento nunca se convierte en un tiempo de espera agotado de tu lado.
Los trabajos de la API consumen el mismo saldo de creditos de tu cuenta. No hay nada aparte que comprar.
URL base: https://api.picverce.com. Crea una clave en tu cuenta y empieza a llamarla.
Dos formas de usarla
Ambas pasan por el mismo endpoint. Si ya tienes la imagen y quieres cambiarla, eso es una Herramienta. Si quieres una imagen que aun no existe, eso es un Modelo.
API de Herramientas
Ejecuta una herramienta de Picverce AI sobre una imagen que tu envias. Le das una imagen y te devuelve una nueva.
De 2 a 8 creditos. Envia type: "tool".
API de Modelos
Elige un modelo de generacion y un prompt, con imagen de referencia si quieres. Le das palabras y te devuelve una imagen.
De 3 a 14 creditos. Envia type: "generate".
Inicio rapido
1. Crea una clave
Ve a Cuenta, Claves de API y pulsa Crear clave. El secreto se muestra una sola vez y no se puede recuperar, asi que copialo antes de cerrar el dialogo.
Las claves son del tipo
pk_live_.... Una clavepk_test_funciona igual y es para desarrollo.El acceso a la API publica viene con un plan de pago o un paquete de creditos. Una suscripcion activa Basic, Standard o Premium lo incluye, y tambien cualquier paquete de creditos que hayas comprado. Ver planes
2. Consulta tu saldo
curl curl https://api.picverce.com/v1/me \ -H "Authorization: Bearer pk_live_..."3. Crea un trabajo
curl curl -X POST https://api.picverce.com/v1/jobs \ -H "Authorization: Bearer pk_live_..." \ -H "Content-Type: application/json" \ -d '{ "type": "tool", "tool": "background_remover", "input": { "image_url": "https://example.com/product.jpg" } }'Responde en milisegundos con
status: "queued"y un id de trabajo.4. Consulta hasta que termine
curl curl https://api.picverce.com/v1/jobs/JOB_ID \ -H "Authorization: Bearer pk_live_..."Consulta cada par de segundos hasta que
statusdigasucceededofailed. Los resultados llegan enoutput.images.
Lo mismo en JavaScript
Node 18 o superior. Ejecutalo en tu servidor, nunca en un navegador.
const KEY = process.env.PICVERCE_API_KEY;
const BASE = 'https://api.picverce.com';
async function api(path, options = {}) {
const response = await fetch(BASE + path, {
...options,
headers: {
Authorization: `Bearer ${KEY}`,
'Content-Type': 'application/json',
...options.headers,
},
});
const body = await response.json();
if (!response.ok) {
throw new Error(`${body.error.code}: ${body.error.message}`);
}
return body;
}
async function runJob(payload) {
const job = await api('/v1/jobs', { method: 'POST', body: JSON.stringify(payload) });
while (true) {
const current = await api(`/v1/jobs/${job.id}`);
if (current.status === 'succeeded') return current.output.images;
if (current.status === 'failed') throw new Error(current.error.message);
await new Promise((r) => setTimeout(r, 2000));
}
}
const images = await runJob({
type: 'generate',
model: 'flux-schnell',
input: { prompt: 'a red bicycle against a white wall' },
});Las claves viven en tu servidor
Esta API no envia cabeceras CORS, a proposito. Una clave pegada en JavaScript del navegador no funcionara desde una pagina web.
Trata una clave como una contrasena. Mantenla fuera de apps moviles y repositorios publicos. Si se filtra, revocala en tu cuenta y dejara de funcionar en la siguiente peticion.
Herramientas que ya puedes ejecutar
Las 18 herramientas del catalogo aceptan trabajos. Los precios y los esquemas de entrada completos, incluidas las listas de presets de las tres que las usan, se consultan con GET /v1/tools, asi que una interfaz de ajustes se construye desde el catalogo y no desde esta pagina.
| Herramienta | Creditos | Que hace |
|---|---|---|
| anime_enhance | 2 | Mejora ajustada a anime e ilustracion |
| background_remover | 2 | Recorta el sujeto y devuelve un PNG transparente |
| coloring_page | 3 | Redibuja una foto como pagina para colorear en blanco y negro, lista para imprimir |
| colorize | 3 | Da color a una fotografia en blanco y negro |
| enhance | 2 | Limpieza general, recupera detalle y reduce ruido |
| enhance_pro | 6 | Pasada de mas calidad para imagenes exigentes |
| face_restore | 2 | Reconstruye el detalle facial en retratos de baja resolucion |
| hairstyle | 4 | Cambia el peinado de un retrato y su color si quieres |
| object_remover | 2 | Borra un objeto y rellena lo que habia detras |
| outfit | 4 | Cambia la ropa de un retrato con un preset |
| photo_to_anime | 3 | Redibuja una foto como arte anime |
| photo_to_cartoon | 3 | Redibuja una foto en estilo caricatura |
| photo_to_sketch | 3 | Redibuja una foto como boceto a lapiz o tinta |
| restore | 4 | Repara aranazos, decoloracion y grano en fotos antiguas |
| sharpen | 2 | Recupera el enfoque en imagenes algo borrosas |
| text_clarity | 8 | Hace legible el texto pequeno o emborronado |
| upscale | 2, 3 o 6 | Aumenta la resolucion 2x, 4x u 8x |
| watermark_remover | 3 | Quita una marca de agua y reconstruye lo que habia debajo |
Los 26 modelos de generacion aceptan trabajos. Listalos con GET /v1/models y lee capabilities en vez de fijar proporciones y resoluciones en el codigo, porque cambian segun el modelo.
Opciones de las herramientas
Todas las herramientas reciben image_url y no requieren nada mas. Estos son los campos opcionales; cualquier herramienta que no aparezca aqui no acepta opciones. Un campo desconocido se rechaza por su nombre en lugar de ignorarse.
| Campo | Tipo | Por defecto | Herramientas |
|---|---|---|---|
| face_enhance | boolean | false | enhance, enhance_pro, anime_enhance |
| scale | 2 | 4 | 8 | 2 | upscale |
| upscale | 1 | 2 | 4 | 2 | face_restore |
| face_upsample | boolean | true | face_restore |
| background_enhance | boolean | true | face_restore |
| codeformer_fidelity | number, 0 to 1 | 0.5 | face_restore |
| style | string, see the tables below | per tool | photo_to_anime, photo_to_cartoon, photo_to_sketch, coloring_page |
| mask_url | https URL | none | object_remover |
| haircut | string, 96 presets | none | hairstyle |
| hair_color | string, 31 colours | No change | hairstyle |
| outfit | string, 38 presets | none | outfit |
| garment_scope | full | top | bottom | dress | outerwear | full | outfit |
| outfit_color | string, 17 colours | No change | outfit |
| outfit_color_2 | string, 17 colours | No change | outfit |
| outfit_color_3 | string, 17 colours | No change | outfit |
| outfit_color_count | 1, 2 or 3 | 1 | outfit |
| aspect_ratio | auto and seven ratios | auto | hairstyle, outfit |
scale en upscale es la unica opcion que cambia el precio: 2 creditos a 2x, 3 a 4x y 6 a 8x. Todo lo demas cuesta lo que dice la tabla de arriba, pases lo que pases.
Claves de estilo
Las cuatro herramientas de redibujado reciben una clave style. Estas son las listas completas. Las claves van en minusculas, y una clave que esta API no conoce se rechaza con un 422 que nombra las admitidas, en lugar de redibujar en el estilo por defecto sin avisar.
photo_to_anime9 claves, por defecto ghiblighiblishonencyberpunkchibirealisticmangashojoseinenwebtoonphoto_to_cartoon24 claves, por defecto disney-3ddisney-3dghiblichibi-3dkawaii-flatwatercolornekofantasy-gameshonen-comicwestern-comiccyborggothiccandyexpressive-3dimpressionistpop-artpencil-sketchink-mangafairytalefantasy-animeslice-of-lifepixel-artbotanicalgraphic-novelcyberpunkphoto_to_sketch18 claves, por defecto pencil-sketchpencil-sketchcharcoal-sketchink-sketchcolored-pencil-sketchwatercolor-sketchballpoint-pen-sketchpastel-sketchfine-detail-sketchda-vinci-manuscriptbold-sketchminimalist-line-sketchfigure-quick-sketchcartoon-sketchconcept-sketchmanga-sketchaesthetic-sketchgraffiti-sketchink-wash-sketchcoloring_page30 claves, por defecto classic-outlinetoddler-thickkids-simpleclassic-outlineadult-detailedfine-line-intricatehalloweenchristmaseastervalentinesbirthdaymothers-dayfathers-daysummer-holidayback-to-schoolthanksgivingdinosaursunicornspaceunderwaterfarm-animalsvehiclessweets-and-treatsfairy-talemandalabotanicalarchitecturalstained-glasspaper-cutwoodcutdoodle{ "type": "tool", "tool": "colorize",
"input": { "image_url": "https://example.com/photo.jpg" } }
{ "type": "tool", "tool": "photo_to_sketch",
"input": { "image_url": "https://example.com/photo.jpg",
"style": "charcoal-sketch" } }
{ "type": "tool", "tool": "face_restore",
"input": { "image_url": "https://example.com/portrait.jpg",
"upscale": 4, "codeformer_fidelity": 0.8,
"face_upsample": true, "background_enhance": false } }Las tres que reciben algo mas que una imagen
Los valores de preset son cadenas exactas, y las listas completas son enums en GET /v1/tools/{id}. Son nombres, no slugs: es Smart casual, nunca smart-casual. Un valor desconocido devuelve un 422 que nombra los admitidos.
object_remover| mask_url | https URL | required |
hairstyle| haircut | 96 presets | required |
| hair_color | 31 colours | No change |
| aspect_ratio | auto, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3 | auto |
outfit| outfit | 38 presets | required |
| garment_scope | full, top, bottom, dress, outerwear | full |
| outfit_color | 17 colours | No change |
| outfit_color_2 | 17 colours | No change |
| outfit_color_3 | 17 colours | No change |
| outfit_color_count | 1, 2 or 3 | 1 |
| aspect_ratio | auto, 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3 | auto |
object_remover recibe una segunda imagen en mask_url, del mismo tamano que la original: el blanco marca lo que se borra y el negro lo que se conserva. Las dos URLs se descargan y se comprueban igual, asi que una mascara en una direccion privada se rechaza como cualquier otra.
hairstyle recibe un preset por trabajo. El sitio web puede aplicar varios a la vez; la API no, y un valor separado por comas se rechaza en lugar de interpretarse. outfit admite hasta tres colores, y outfit_color_count decide cuantos se usan. Los alcances top y bottom solo tienen dos zonas, asi que ahi un 3 se comporta como 2.
{ "type": "tool", "tool": "object_remover",
"input": { "image_url": "https://example.com/room.jpg",
"mask_url": "https://example.com/room-mask.png" } }
{ "type": "tool", "tool": "hairstyle",
"input": { "image_url": "https://example.com/portrait.jpg",
"haircut": "Blunt Bangs", "hair_color": "Auburn" } }
{ "type": "tool", "tool": "outfit",
"input": { "image_url": "https://example.com/portrait.jpg",
"outfit": "Smart casual", "garment_scope": "full",
"outfit_color": "Navy", "outfit_color_2": "Cream",
"outfit_color_count": 2 } }Ajustes de generacion
Un trabajo de generacion recibe un id de modelo y estos seis campos. No se acepta nada mas, y un nombre de campo parecido pero incorrecto se rechaza en lugar de ignorarse: es ratio, no aspect_ratio, y variations, no n.
| Field | Type | Default |
|---|---|---|
| prompt | string, up to 2000 characters | required |
| ratio | string | 1:1 |
| resolution | string | first entry in capabilities.resolutions |
| variations | integer, 1 or more | 1 |
| reference_image_url | https URL | none |
| enhance_prompt | boolean | false |
Lo que admite cada modelo cambia, asi que consulta GET /v1/models en lugar de fijar una lista en tu codigo. Las notas de abajo cubren lo que no se deduce de la respuesta de un solo modelo.
Creditos, y por que mas imagenes no cuestan mas
Un trabajo de generacion cuesta lo mismo pidas las variations que pidas. El precio lo fija solo resolution, y por eso el catalogo da a cada modelo un precio por resolucion en lugar de un unico numero. Cuatro imagenes a 1K cuestan lo que una imagen a 1K.
Los tokens de resolucion son propios de cada modelo y no son un tamano en pixeles. Unos usan 1K through 4K, otros usan 1 MP, 2 MP y 4 MP, y unos pocos usan Low, Medium, High o Auto. Lee capabilities.resolutions y credits.values juntos.
Proporciones
Hay tres conjuntos en el catalogo. Una proporcion que un modelo no admite devuelve un 422 que nombra las que si admite.
Most models
1:116:99:164:33:4gpt-image-2, chatgpt-1-5
1:13:22:3stable-diffusion-3-5
16:91:121:92:33:24:55:49:169:21Hay un valor mas: match_input_image, que conserva la forma de tu imagen de referencia. Necesita a la vez un modelo cuyo capabilities.match_input_ratio sea true y un reference_image_url en la misma peticion. Hoy lo admiten 13 modelos.
Varias imagenes
No hay un endpoint de lote. Pedir mas de una imagen es variations en un trabajo normal, y el trabajo devuelve esa cantidad de URLs en output.images. La mayoria de los modelos se queda en 1. Hoy solo gpt-image-2 y chatgpt-1-5 llegan mas lejos, ambos a 4. Pasarse del limite de un modelo devuelve un 422 que lo nombra.
Imagenes de referencia y ayuda con el prompt
Obligatoria en qwen-edit-2511, qwen-layered. Un trabajo sin ella devuelve un 422.
No admitida en flux-schnell, imagen-4, imagen-4-ultra, recraft-v3. Enviarla devuelve un 422 en lugar de ignorarse en silencio.
Opcional en el resto. Se aplican las mismas reglas de URL que a image_url: https publica, 5 MB o menos.
enhance_prompt reescribe un prompt corto en uno mas largo antes de generar. Solo lo admiten seedream-4, flux-2-flex, ideogram-3, ideogram-3-turbo ; pedirlo en otro modelo devuelve un 422.
qwen-layered es el unico modelo que se ejecuta sin prompt alguno, si le das una imagen de referencia.
curl -s https://api.picverce.com/v1/models/nano-banana-2 \
-H "Authorization: Bearer $PICVERCE_API_KEY"
# capabilities.ratios proporciones aceptadas
# capabilities.resolutions tokens de resolucion aceptados
# capabilities.max_variations tope de variations
# capabilities.reference_image unsupported | optional | required
# credits.values precio por token de resolucion{ "type": "generate", "model": "flux-schnell",
"input": { "prompt": "a lighthouse in fog, 35mm" } }
{ "type": "generate", "model": "gpt-image-2",
"input": {
"prompt": "a lighthouse in fog, 35mm",
"ratio": "3:2",
"resolution": "High",
"variations": 4
} }
{ "type": "generate", "model": "nano-banana-2",
"input": {
"prompt": "the same room, repainted deep green",
"reference_image_url": "https://example.com/room.jpg",
"ratio": "match_input_image"
} }Creditos
Los creditos se reservan al crear el trabajo y solo se cobran cuando termina bien. Un trabajo fallido se reembolsa por completo e informa credits.charged: 0.
Como los creditos se retienen por adelantado, tu saldo baja en cuanto creas un trabajo. GET /v1/me informa reserved_open para que veas cuanto retiene el trabajo que sigue en curso.
Errores
Todos los fallos tienen la misma forma, asi que un solo manejador los cubre todos.
{
"error": {
"code": "insufficient_credits",
"message": "This job costs 6 credits and your balance is 2.",
"request_id": "req_4f2a9c1b7e3d5a8c0b6e1f92"
}
}| HTTP | Codigo | Significado |
|---|---|---|
| 401 | invalid_api_key | Clave ausente, mal formada, desconocida o revocada |
| 402 | insufficient_credits | Clave valida, saldo insuficiente |
| 403 | plan_upgrade_required | Tu cuenta no incluye acceso a la API publica |
| 404 | invalid_tool | No existe esa herramienta |
| 404 | invalid_model | No existe ese modelo |
| 404 | job_not_found | No hay ningun trabajo con ese id en tu cuenta |
| 409 | idempotency_conflict | Esa Idempotency-Key esta en uso para otra cosa |
| 422 | validation_error | La peticion se entendio y fue rechazada |
| 429 | rate_limited | Demasiadas peticiones en este minuto |
| 500 | internal_error | Algo fallo de nuestro lado |
La entrada invalida se rechaza, no se corrige
Si pides una proporcion o un numero de variaciones que el modelo no admite, recibes un 422 con los valores admitidos. El sitio web sustituye en silencio por algo valido en esa situacion, lo cual esta bien cuando hay una persona mirando. Para un cliente automatico significaria pagar por una imagen que no pediste, asi que la API la rechaza.
Limites de peticiones
60 peticiones por minuto movil, por clave. Cuenta cada endpoint autenticado. Cada respuesta incluye tu situacion:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1787644920Al pasarte recibes un 429 con Retry-After en segundos. Es una ventana movil, asi que 60 peticiones al inicio del minuto no te dan otras 60 un segundo despues.
Con honestidad sobre el tope: el contador funciona por instancia de borde, asi que el trafico repartido entre regiones puede superar algo las 60 en un minuto real. Disena para 60 en vez de apurarlo. Sera un limite global estricto en una version posterior.
Reintentos
Las lecturas se pueden repetir sin riesgo. Crear un trabajo no, salvo que lo indiques: dos creaciones son dos trabajos y dos cobros. Envia una cabecera Idempotency-Key y el reintento pasa a ser seguro.
curl -sS -X POST https://api.picverce.com/v1/jobs \
-H "Authorization: Bearer $PICVERCE_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 8f1c1b8e-2d1a-4f9b-9c3f-0a6d4b2e7c51" \
-d '{"type":"tool","tool":"enhance",
"input":{"image_url":"https://example.com/photo.jpg"}}'La segunda llamada devuelve el trabajo de la primera con Idempotent-Replay: true en las cabeceras y no cobra nada mas. Llega en el estado que haya alcanzado, asi que una repeticion un minuto despues puede venir ya como succeeded.
| Regla | Que significa |
|---|---|
| Opcional | Sin la cabecera, cada creacion hace un trabajo nuevo, como antes |
| Hasta 255 caracteres | ASCII imprimible. Un UUID por trabajo es lo mas simple que funciona |
| Se recuerda 24 horas | Despues, la misma clave empieza un trabajo nuevo |
| Ligada a una clave de API | Dos claves de una cuenta no comparten espacio de nombres |
| Solo POST /v1/jobs | Se ignora en cualquier otro endpoint |
Dos peticiones son el mismo trabajo cuando coincide la peticion validada: el type, el id de la herramienta o del modelo y la entrada validada. Cambiar el orden de los campos, u omitir un valor que acaba en el mismo predeterminado, no las hace distintas. Enviar un cuerpo realmente distinto con una clave ya usada devuelve 409 idempotency_conflict, porque devolverte un trabajo que no pediste seria peor que pedirte una clave nueva.
Reutilizar una clave mientras la primera peticion sigue en curso da el mismo 409, con un mensaje que lo explica. Espera unos segundos y reintenta.
Webhooks
En lugar de consultar en bucle, registra un endpoint y enviaremos un POST firmado cuando termine un trabajo. Anade uno en Cuenta, API, Webhooks. Hoy existen dos eventos: job.succeeded y job.failed.
POST https://api.tuempresa.com/picverce/webhook
Content-Type: application/json
User-Agent: Picverce-Webhooks/1.0
X-Picverce-Event: job.succeeded
X-Picverce-Delivery: 0f2b1d94-6a3c-4b1e-9d77-2c9e5a1b3d84
X-Picverce-Timestamp: 1756300000
X-Picverce-Signature: v1=8f3c1a...
{
"id": "evt_11111111222233334444555555555555s",
"object": "event",
"type": "job.succeeded",
"created_at": "2026-08-27T10:00:09.412Z",
"data": { "object": { ...el mismo trabajo que devuelve GET /v1/jobs/{id}... } }
}Verifica la firma antes de confiar en el cuerpo. La cadena firmada es la marca de tiempo, un punto y el cuerpo en crudo tal y como llego.
const crypto = require('crypto');
// rawBody tienen que ser los bytes en crudo, no un objeto vuelto a serializar.
function verify(rawBody, headers, secret) {
const timestamp = headers['x-picverce-timestamp'];
const received = headers['x-picverce-signature'];
if (!timestamp || !received) return false;
// La firma en si nunca caduca, asi que esto es lo que impide un replay.
if (Math.abs(Math.floor(Date.now() / 1000) - Number(timestamp)) > 300) return false;
const expected =
'v1=' +
crypto.createHmac('sha256', secret).update(timestamp + '.' + rawBody).digest('hex');
const a = Buffer.from(expected);
const b = Buffer.from(received);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}Analiza despues de verificar
Volver a codificar el JSON cambia el orden de las claves y los espacios, y la firma deja de coincidir.
Cuenta con duplicados
La entrega es al menos una vez. El id del evento es estable por trabajo y estado, asi que usalo como clave de idempotencia.
Responde rapido
Encola el trabajo y devuelve 200. Cortamos a los 10 segundos y reintentamos dos veces, sobre los 2 y los 8 segundos, y seguimos reintentando hasta 24 horas.
Los endpoints deben ser https y accesibles desde internet. Las direcciones privadas, de loopback y de metadatos de nube se rechazan al registrarlas y de nuevo antes de cada entrega. No seguimos redirecciones, asi que registra la URL final. Un 404 o un 410 desde tu endpoint detiene los reintentos.
Un endpoint que estuvo caido en los tres intentos rapidos no pierde el evento. Se encola y se reintenta unos 30 minutos despues, y luego a las 2, 6 y 12 horas, hasta 10 intentos o 24 horas. Un despliegue que deje tu endpoint caido una hora no te cuesta nada. Pausar un endpoint, o dejar de suscribirte a un evento, tambien detiene sus reintentos en cola.
Claude y MCP
La API REST en api.picverce.com es la plataforma. MCP en mcp.picverce.com es la capa de conector para Claude, Cursor y otros clientes MCP. El servidor MCP alojado llama a los mismos endpoints POST /v1/jobs con tu clave API, consulta trabajos cuando hace falta y devuelve URLs de imagen en los resultados. Creditos, limites de peticiones e idempotencia funcionan igual que en la API directa.
Configura el conector desde la pestana MCP de Cuenta. Crea una clave en la pestana Claves primero.
https://mcp.picverce.com/mcpEn Claude web, abre Ajustes, Conectores, anade un conector personalizado llamado Picverce AI, pega la URL de arriba y usa tu clave API pk_live_ como token Bearer. La clave no aparece en el chat; solo la guarda el conector.
claude mcp add --transport http --scope user picverce-ai https://mcp.picverce.com/mcpHerramientas MCP (v1)
Estas son las herramientas que ve Claude. Cada una corresponde a trabajos de la API publica o a endpoints del catalogo.
| Herramienta | Que hace |
|---|---|
| upload_image | Sube bytes de imagen del chat a Picverce AI y devuelve una URL publica (sin creditos). |
| generate_image | Texto a imagen con cualquier modelo del catalogo, ratio, resolucion y variaciones. |
| edit_image | Ejecuta una herramienta del catalogo sobre una URL de imagen (mejorar, escalar, quitar fondo, y mas). |
| get_job | Consulta el estado del trabajo y lee las URLs de salida si sigue en proceso. |
| list_tools | Lista herramientas disponibles y coste en creditos. |
| list_models | Lista modelos de generacion y rangos de creditos. |
El servidor MCP envia un Idempotency-Key en cada trabajo que crea para que los reintentos de Claude no cobren dos veces. Quien llama la API directa sigue controlando sus propias claves en POST /v1/jobs.
Shopify y otras plataformas
MCP es para asistentes de IA en un chat. Una tienda o un producto SaaS usa la API REST y los webhooks: tu backend guarda la clave de API de Picverce AI del comercio, crea trabajos para las imagenes de producto y escucha job.succeeded para dejar los resultados donde corresponde.
La app de Picverce AI para Shopify esta hecha asi. El comercio la instala, pega su propia clave de API, elige una herramienta y unos productos, y cada imagen terminada se anade al producto como una foto mas. Los originales nunca se reemplazan. Los trabajos gastan los creditos del propio comercio, asi que no hay nada aparte que comprar.
| Paso | Que ocurre |
|---|---|
| Instalar | El comercio instala la app y pega su propia clave de API de Picverce AI |
| Elegir | Una herramienta y unos productos, una coleccion, o todo el catalogo |
| Ejecutar | Un POST /v1/jobs por foto de producto, con Idempotency-Key para que un reintento no cueste nada |
| Terminar | Llega un webhook job.succeeded firmado y la imagen se anade al producto |
| Desinstalar | Shopify envia app/uninstalled y se borra toda credencial guardada de esa tienda |
La app esta en tiendas de desarrollo mientras se termina, asi que todavia no hay ficha en la App Store. Si quieres construir lo mismo dentro de tu propio software, todo lo que usa esta en esta pagina: POST /v1/jobs con una Idempotency-Key por imagen, y un webhook firmado cuando cada uno termina.
Consulta la pagina MCP para una guia breve, o la documentacion MCP de Anthropic para detalles del conector.
Referencia completa
La descripcion completa en OpenAPI 3.0 cubre cada endpoint, campo y error. Apunta un generador de clientes hacia ella en vez de escribir los tipos a mano.
Usar la API, el conector MCP o las apps para Shopify y WordPress se rige por los mismos Términos de Servicio y la misma Política de Privacidad que el sitio web, que describen qué envía un trabajo y cuánto tiempo lo guardamos.