Saltar al contenido
pcreative Commerce

Rutas de la API

Las rutas de /gestion exigen sesión del panel (y las de vendedor, además, que la sesión sea la de un vendedor).

Generado por scripts/generar-referencia.mjs. No editar a mano.

Las rutas de /gestion exigen sesión del panel (y las de vendedor, además, que la sesión sea la de un vendedor). Las de /tienda piden la clave publicable del canal de venta en la cabecera x-pcc-clave, y las de la cuenta del cliente, además, su sesión. Las demás tienen su propia política: avisos de pasarelas y proveedores, licencias, instalación, salud.

Panel de gestión (/gestion)

RutaMétodosAccesoQué hace
/gestion/aiGET, POSTsesión del panelGET: ajustes de IA, qué claves de proveedor hay puestas y el catálogo de modelos; POST: valida y guarda los ajustes de IA
/gestion/ai/contenidoPOSTsesión del panelRedacta con IA textos de un producto (tarea: ficha, alt o traducir) y los devuelve como propuesta; no guarda nada y anota el coste
/gestion/ai/copilotoPOSTsesión del panelResponde una pregunta sobre la tienda consultando sus datos; las acciones de escritura vuelven como propuestas y no se ejecutan
/gestion/ai/copiloto/aplicarPOSTsesión del panelAplica una propuesta del copiloto que una persona ha aprobado: cambiar el precio en EUR de una variante o moderar una reseña
/gestion/ai/indiceGET, POSTsesión del panelGET: estado del índice de búsqueda semántica; POST: reindexa todos los productos publicados y devuelve el coste (400 sin pgvector)
/gestion/ai/mcpGET, POSTsesión del panelGET: si la conexión para agentes de IA está encendida y qué falta para encenderla; POST: encenderla o apagarla (exige una clave de IA)
/gestion/ai/probarPOSTsesión del panelHace una llamada real de prueba al proveedor de chat configurado, con los ajustes guardados
/gestion/ai/usoGETsesión del panelGasto en IA de los últimos dias días (30 por defecto): totales, desglose por tarea y las 20 últimas llamadas
/gestion/autores/solicitudesGETsesión del panelLista las solicitudes para ser autor, con filtro opcional por estado
/gestion/autores/solicitudes/{id}POSTsesión del panelDecide sobre una solicitud de autor (aceptada, rechazada o revisando); aceptarla crea el vendedor y le envía el enlace para poner contraseña
/gestion/avisosGETsesión del panelLo que hay que mirar hoy, como lista de avisos; si viene vacía, es buena señal
/gestion/boletinGETsesión del panelLista los suscriptores del boletín que han confirmado su correo
/gestion/boletin-conectorGETsesión del panelGET: los servicios de correo con los que se puede sincronizar el boletín, cuál está conectado, cómo fue la última sincronización y cuántas direcciones no conoce todavía el servicio
/gestion/boletin-conector/{nombre}DELETE, POSTsesión del panelPOST: guarda las llaves de ese servicio y lo conecta o, con accion, prueba la conexión o fuerza un repaso ahora; DELETE: borra sus llaves (la lista de la tienda no se toca). Sólo Administrador: son llaves de un tercero
/gestion/boletin/{id}/bajaPOSTsesión del panelDa de baja a esa persona desde el panel, sin necesitar su enlace
/gestion/boletin/csvGETsesión del panelLa misma lista en un CSV, con la prueba del consentimiento dentro
/gestion/boletin/suscritosGETsesión del panelLa lista del boletín con la prueba del consentimiento de cada persona: el texto exacto que se enseñó, su versión, la IP, el navegador y la fecha de confirmación
/gestion/capabilitiesGETsesión del panelSecciones extra del panel en esta instalación (indicadores y entradas de menú), como el marketplace si está activado
/gestion/cart-recoveryGETsesión del panelCarritos abandonados de los últimos 30 días (con correo y 30 minutos parados) y estadísticas de recuperación
/gestion/cart-recovery/{id}/resendPOSTsesión del panelEnvía a mano el recordatorio de recuperación de un carrito y lo marca como enviado; 400 si no tiene correo o ya es un pedido
/gestion/categoriasGET, PATCH, POSTsesión del panelGET: la lista plana de categorías con su madre; POST: crea una; PATCH: las reordena, siendo la posición en la lista el orden
/gestion/categorias/{id}DELETE, POSTsesión del panelPOST: cambia el nombre, el handle, la descripción, el orden, la madre o la visibilidad de una categoría; DELETE: la da de baja, sus hijas suben y sus productos se sueltan
/gestion/clave-tiendaGETsesión del panelDevuelve la clave publicable del canal de venta que envían los escaparates
/gestion/clientesGETsesión del panelLista los clientes, con búsqueda por texto (q) y paginación
/gestion/clientes/{id}GET, PATCHsesión del panelGET: un cliente; PATCH: cambia sus datos con If-Match (412 si hay conflicto); el correo no se cambia aquí (422)
/gestion/cobros/pagos/{id}POSTsesión del panelCierra a mano un pago programado a un autor: lo confirma con una referencia o lo marca fallido con accion: fallido
/gestion/cobros/pagos/{id}/enviarPOSTsesión del panelEnvía un pago programado a un autor por el carril de pagos configurado; el id del pago es la referencia, así que reintentar es seguro
/gestion/cobros/por-pagarGETsesión del panelAutores a los que toca pagar en esta vuelta, para una moneda (moneda, eur por defecto)
/gestion/cobros/vendedores/{id}/bloquearPOSTsesión del panelBloquea los cobros de un autor con un motivo (se le avisa por correo) o los desbloquea con accion: desbloquear
/gestion/cobros/vendedores/{id}/pagarPOSTsesión del panelPrograma un pago a un autor para un periodo (todo lo disponible salvo que se indique importe); 400 si aún no se le puede pagar
/gestion/cobros/vendedores/{id}/pagosGETsesión del panelLos pagos programados de un autor, vistos desde la tienda; el destino es la pista guardada, nunca la cuenta
/gestion/codigos/lotes/{lote}/revocarPOSTsesión del panelRevoca un lote de claves digitales, con motivo obligatorio
/gestion/collectionsGET, POSTsesión del panelGET: las colecciones de la tienda con cuántos productos tiene cada una; POST: crea una
/gestion/collections/{id}DELETE, POSTsesión del panelPOST: renombra una colección o le cambia el handle; DELETE: la da de baja y suelta sus productos
/gestion/create-staffPOSTsesión del panelDa de alta una cuenta del equipo en el panel; 409 si el correo ya existe, 400 si la contraseña es floja
/gestion/customer-statsGETsesión del panelNúmero de pedidos, gasto en la moneda principal y fecha del último pedido de los clientes de ids (200 como máximo)
/gestion/desistimientosGETsesión del panelLista las solicitudes de desistimiento que han enviado los compradores
/gestion/desistimientos/{id}/atenderPOSTsesión del panelMarca una solicitud de desistimiento como atendida, con una nota opcional
/gestion/enviosGETsesión del panelLa configuración de envíos: zonas, tarifas, clases de envío y transportistas disponibles
/gestion/envios/clasesPOSTsesión del panelCrea una clase de envío; 422 si no es válida
/gestion/envios/clases/{id}DELETE, PATCHsesión del panelPATCH: cambia una clase de envío (422 si no es válida); DELETE: la borra (404 si no existe)
/gestion/envios/clases/{id}/productosGET, POSTsesión del panelGET: productos de esta clase de envío; POST: asigna la clase a los productos indicados
/gestion/envios/tarifasPOSTsesión del panelCrea una tarifa de envío en una zona, con sus condiciones; 422 si no es válida
/gestion/envios/tarifas/{id}DELETE, PATCHsesión del panelPATCH: cambia una tarifa de envío (422 si no es válida); DELETE: la borra (404 si no existe)
/gestion/envios/zonasPOSTsesión del panelCrea una zona de envío; 422 si no es válida
/gestion/envios/zonas/{id}DELETE, PATCHsesión del panelPATCH: cambia una zona de envío (422 si no es válida); DELETE: la borra (404 si no existe)
/gestion/facturas-manualesGET, POSTsesión del panelGET: lista las facturas manuales; POST: crea una factura manual en borrador (422 si no se puede crear)
/gestion/facturas-manuales/{id}DELETE, GET, PATCHsesión del panelGET: una factura manual; PATCH: edita el borrador o la marca pagada (pagada); DELETE: borra el borrador; 409 si ya no es editable
/gestion/facturas-manuales/{id}/emitirPOSTsesión del panelEmite una factura manual: le da número y la congela con el NIF de la tienda; 409 si no se puede emitir
/gestion/facturas-manuales/{id}/rectificarPOSTsesión del panelCrea una factura rectificativa de una factura manual emitida, con motivo; 409 si no se permite
/gestion/idiomasDELETE, GET, POSTsesión del panelGET: idiomas de la tienda y cuánto falta por traducir; POST: añade un idioma (codigo, p. ej. fr o pt-BR); DELETE: quita uno (?codigo=, no el base)
/gestion/idiomas/traducirPOSTsesión del panelTraduce con IA lo que falte de un tipo de entidad (tipo) a un idioma; rehacer vuelve a hacer las traducciones existentes
/gestion/impuestosGETsesión del panelRegiones y tipos de impuesto, qué monedas llevan el impuesto dentro del precio y cómo muestra los precios el escaparate
/gestion/impuestos/csvGET, POSTsesión del panelGET: exporta todos los tipos de impuesto en CSV; POST: importa tipos desde texto CSV (reemplazar los sustituye); 422 con errores por fila
/gestion/impuestos/ossGETsesión del panelInforme de IVA de la ventanilla única (OSS) entre desde y hasta (AAAA-MM-DD), en JSON o en CSV con formato=csv
/gestion/impuestos/precios-con-impuestoPOSTsesión del panelIndica si los precios de una moneda ya llevan el impuesto dentro (moneda, dentro)
/gestion/impuestos/precios-escaparatePOSTsesión del panelIndica si el escaparate enseña los precios con o sin impuestos (muestra)
/gestion/impuestos/referenciasGETsesión del panelTipos de producto y opciones de envío entre los que elegir al escribir reglas de impuestos
/gestion/impuestos/regiones/{id}DELETEsesión del panelBorra una región de impuestos
/gestion/impuestos/tasasPOSTsesión del panelCrea un tipo de impuesto; 422 si no es válido
/gestion/impuestos/tasas/{id}DELETE, PATCHsesión del panelPATCH: cambia un tipo de impuesto (422 si no es válido); DELETE: lo borra
/gestion/impuestos/ueGET, POSTsesión del panelGET: los ajustes de IVA de la UE de la tienda; POST: los guarda (422 si no son válidos)
/gestion/impuestos/ue/tiposPOSTsesión del panelCarga los tipos de IVA de los países de la UE; solo los que falten salvo reemplazar: true
/gestion/inventarioPOSTsesión del panelFija el stock de una variante en una ubicación (variant_id, location_id, stocked_quantity), anotando quién y por qué
/gestion/inventario/{id}/nivelesGET, POSTsesión del panelGET: existencias de un artículo de inventario en cada ubicación; POST: fija su nivel en una ubicación, creándolo si no existe
/gestion/legalGET, POSTsesión del panelGET: ajustes legales, países con perfil legal y qué se aplica; POST: guarda país, reglas de personalizados y de consentimiento digital
/gestion/marketplace/mi-cuentaGETsesión de vendedorLo que ve un vendedor de sí mismo: ficha, saldos, movimientos, subpedidos y productos; 403 si no es un vendedor activo
/gestion/marketplace/vendedoresGET, POSTsesión del panelGET: vendedores con sus saldos; POST: da de alta un vendedor y le envía el enlace para poner contraseña (409 si está repetido)
/gestion/marketplace/vendedores/{id}GET, POSTsesión del panelGET: ficha, saldos, movimientos y subpedidos de un vendedor; POST: cambia sus datos, estado o comisión (el slug no cambia)
/gestion/marketplace/vendedores/{id}/enviosGET, POSTsesión del panelGET: opciones de envío propias del vendedor y las de la tienda que hereda; POST: fija las suyas (option_ids)
/gestion/marketplace/vendedores/{id}/liquidarPOSTsesión del panelAnota una liquidación pagada a un vendedor (importe en céntimos, referencia obligatoria); no puede superar lo que se le debe
/gestion/mercado/cobrosGET, POSTsesión de vendedorGET: perfil de cobro del autor, saldo en espera y disponible, e historial de pagos; POST: guarda su perfil de cobro
/gestion/mercado/cobros/altaPOSTsesión de vendedorDa de alta al autor en el proveedor de pagos y devuelve el enlace de verificación de identidad (KYC)
/gestion/mercado/cobros/cancelarPOSTsesión de vendedorPOST: el autor cancela su propia retirada mientras no haya salido (pago). Solo la suya y solo mientras esté «previsto»
/gestion/mercado/cobros/informeGETsesión de vendedorExtracto del autor entre desde y hasta: cada apunte del libro el día en que se movió el dinero, así que un reembolso cae en el mes en que se devolvió. En CSV con formato=csv (para=excel para Excel)
/gestion/mercado/cobros/refrescarPOSTsesión de vendedorVuelve a preguntar al proveedor de pagos cómo va la verificación del autor
/gestion/mercado/cobros/retirarPOSTsesión de vendedorEl autor retira su saldo disponible (o importe); mismas comprobaciones que un pago programado, un doble clic no paga dos veces
/gestion/mercado/colaGETsesión del panelCola de revisión: piezas de autores esperando a que la tienda las revise
/gestion/mercado/licenciasGETsesión de vendedorLicencias vendidas de las piezas del autor, con búsqueda por busca
/gestion/mercado/licencias/soltarPOSTsesión de vendedorPOST: el autor libera una activación de una licencia de una pieza SUYA (clave, instancia), para que quien compró pueda mudarse de dominio. Con límite por licencia y por autor
/gestion/mercado/operador/licenciasGETsesión del panelTodas las licencias del mercado, para quien lo lleva; se filtra con autor y se busca con busca. El correo del comprador sale tapado: buscar por el correo entero sigue encontrándola
/gestion/mercado/operador/piezas/{id}GETsesión del panelUna pieza entera para quien lleva el mercado, sin ser su autor: datos, versiones, historial de revisiones y capturas. Del autor solo lo que ya es público (su nombre y su dirección en el mercado), nunca su correo ni sus datos de cobro
/gestion/mercado/perfilGET, POSTsesión de vendedorGET: ficha pública del autor y su reputación en soporte; POST: guarda la ficha
/gestion/mercado/piezasGET, POSTsesión de vendedorGET: las piezas del autor (temas y extensiones); POST: crea una pieza nueva
/gestion/mercado/piezas/{id}GET, POSTsesión de vendedorGET: una pieza del autor; POST: guarda cambios, o accion revisar para mandarla a revisión o retirar para retirarla
/gestion/mercado/piezas/{id}/capturasPOSTsesión de vendedorSube capturas de una pieza (multipart); los ficheros se comprueban por su contenido y se rechazan los SVG con scripts
/gestion/mercado/piezas/{id}/capturas/{captura}DELETEsesión de vendedorQuita una captura de una pieza
/gestion/mercado/piezas/{id}/capturas/ordenPOSTsesión de vendedorReordena las capturas de una pieza (ids en el orden nuevo)
/gestion/mercado/piezas/{id}/revisionPOSTsesión del panelLa decisión de la tienda sobre una pieza revisada: publicada, cambios o rechazada, con notas
/gestion/mercado/piezas/{id}/versionPOSTsesión de vendedorSube el paquete de una versión nueva de la pieza (multipart: el fichero, version y notas)
/gestion/mercado/resumenGETsesión de vendedorResumen del panel del autor: cifras de sus piezas, su saldo partido en disponible y en espera, y cuántos hilos de soporte esperan su respuesta
/gestion/mercado/soporteGETsesión de vendedorLa bandeja de soporte del autor, con filtro por estado
/gestion/mercado/soporte/{id}GET, POSTsesión de vendedorGET: una conversación de soporte del autor; POST: responde (texto) o la cierra (cerrar)
/gestion/mercado/ventasGETsesión de vendedorLas ventas del autor, una a una y por pieza, entre desde y hasta. Cada venta lleva lo que se devolvió de ella, sea cuando sea, y el país de facturación de quien compró (nada más de esa persona). En CSV con formato=csv (para=excel para Excel)
/gestion/migracion/analizarPOSTsesión del panelEnsayo de una importación CSV (productos o clientes, origen detectado): cuenta qué pasaría y no cambia nada
/gestion/migracion/importarPOSTsesión del panelImporta productos o clientes desde un CSV; 422 si el análisis encuentra errores, salvo con forzar
/gestion/migracion/redireccionesPOSTsesión del panelGenera las redirecciones de las URL antiguas a las nuevas desde un CSV, en nginx, apache, json o csv (?formato=)
/gestion/mudanzasGET, POSTsesión del panelGET: las 20 últimas mudanzas de tienda; POST: empieza una desde Shopify o WooCommerce por API, comprobando antes las credenciales (422)
/gestion/mudanzas/{id}GET, POSTsesión del panelGET: cómo va una mudanza por etapas y sus problemas; POST: accion pausar, seguir o deshacer
/gestion/order-originGETsesión del panelDe dónde salió cada uno de los pedidos que se piden (ids): el canal de venta del escaparate, el panel o la mudanza que lo trajo
/gestion/orders/{id}/notify-confirmedPOSTsesión del panelEnvía al cliente el correo de pedido confirmado, con la factura en PDF adjunta si la hay
/gestion/paginasGET, POSTsesión del panelGET: todas las páginas de contenido, borradores incluidos; POST: crea una (422 sin titulo)
/gestion/paginas/{id}DELETE, POSTsesión del panelPOST: cambia una página; DELETE: la borra de forma recuperable
/gestion/paginas/{id}/traduccionesDELETE, GET, PUTsesión del panelGET: lo escrito en cada idioma; PUT: guarda uno (idioma más titulo, extracto, contenido, seo; un campo en blanco cae al idioma base); DELETE ?idioma=: vuelve al idioma base
/gestion/pagos-ajustesGET, POSTsesión del panelGET: proveedores de pago, regiones con sus proveedores y textos de cada forma de pago; POST: fija los de una región y/o textos y recargos
/gestion/pasarelasGETsesión del panelPasarelas de pago configuradas desde el panel, su estado y sus URL de aviso; 404 si se gestionan fuera del panel
/gestion/pasarelas/{nombre}DELETE, POSTsesión del panelPOST: guarda las credenciales de una pasarela, la activa o desactiva o cambia el modo pruebas; DELETE: olvida su configuración; ambos devuelven la lista
/gestion/pedidosGET, POSTsesión del panelGET: lista los pedidos, con búsqueda por texto (q) y paginación; POST: da de alta a mano un pedido en borrador con su cliente, sus líneas (precios en céntimos) y sus totales
/gestion/pedidos/{id}GETsesión del panelUn pedido con todo lo que el panel enseña de él
/gestion/pedidos/{id}/cancelarPOSTsesión del panelCancela un pedido con un motivo; 409 si no se puede, p. ej. si ya está cobrado y no se envía permitir_con_cobro
/gestion/pedidos/{id}/cobrarPOSTsesión del panelCaptura los pagos autorizados del pedido y los marca como cobrados
/gestion/pedidos/{id}/completarPOSTsesión del panelMarca un pedido como completado; 409 si aún no está listo, salvo con forzar
/gestion/pedidos/{id}/envios/{envio}/entregadoPOSTsesión del panelMarca uno de los envíos del pedido como entregado; 409 si no se puede
/gestion/pedidos/{id}/envios/{envio}/enviadoPOSTsesión del panelMarca uno de los envíos del pedido como enviado y avisa al cliente por correo de que va en camino; los números de seguimiento van en seguimiento; repetirlo no manda nada
/gestion/pedidos/{id}/prepararPOSTsesión del panelPrepara el pedido sacando del almacén todo o los items indicados de una ubicación; 200 si ya estaba hecho, 201 si es nuevo
/gestion/pedidos/{id}/rectificarPOSTsesión del panelEmite una factura rectificativa de un pedido, con motivo; 409 si no se permite
/gestion/pedidos/{id}/reembolsosGET, POSTsesión del panelGET: qué se puede devolver aún y qué se ha devuelto; POST: reembolsa (importe, pago, reponer stock); enviar Idempotency-Key, 409 si no es válido
/gestion/pluginsGET, POSTsesión del panelGET: plugins instalados con su estado, permisos, rutas y último error; POST: recarga todos los plugins
/gestion/plugins/{id}GETsesión del panelLas 200 últimas líneas del registro de un plugin
/gestion/plugins/{id}/ajustesGET, PUTsesión del panelGET: campos y valores de ajustes de un plugin, sin enseñar secretos; PUT: los valida y guarda (422 si no valen; hay que recargar)
/gestion/postsGET, POSTsesión del panelGET: entradas del blog, borradores incluidos; POST: crea una entrada (el handle sale del título si no se indica)
/gestion/posts/{id}DELETE, GET, POSTsesión del panelGET: una entrada del blog; POST: la cambia; DELETE: la borra
/gestion/productosGET, POSTsesión del panelGET: productos con búsqueda, filtro por estado y paginación; POST: crea un producto (admite Idempotency-Key, 200 si se repite)
/gestion/productos/{id}DELETE, GET, POSTsesión del panelGET: la ficha completa; POST: la cambia con If-Match (412 si hay conflicto); DELETE: la borra
/gestion/productos/{id}/editor-variantesGETsesión del panelDatos para el editor de variantes: opciones, valores y variantes del producto
/gestion/productos/{id}/historialGETsesión del panelEl historial de cambios del producto: quién cambió qué y cuándo
/gestion/productos/{id}/historial-stockGETsesión del panelLos movimientos de stock de las variantes del producto: quién los cambió, cuándo, en qué almacén y de cuánto a cuánto
/gestion/productos/{id}/opcionesPOSTsesión del panelGuarda las opciones del producto y, salvo generar: false, crea las variantes que falten
/gestion/productos/{id}/opciones/vista-previaPOSTsesión del panelEnseña qué variantes crearían o quitarían las opciones indicadas, sin guardar nada
/gestion/productos/{id}/personalizacionGET, POSTsesión del panelGET: los campos de personalización que rellena el comprador; POST: los guarda (400 indicando el field que falla)
/gestion/productos/{id}/precios-por-cantidadDELETE, GET, POSTsesión del panelGET: la regla de precios por cantidad del producto; POST: la guarda; DELETE: la quita
/gestion/productos/{id}/variantesPOSTsesión del panelCrea una variante a partir de sus valores de opción
/gestion/productos/{id}/variantes-lotePOSTsesión del panelAplica los mismos cambios a varias variantes (ids)
/gestion/productos/{id}/variantes-ordenPOSTsesión del panelFija el orden en que se enseñan las variantes (ids)
/gestion/productos/{id}/variantes/{variante}POSTsesión del panelCambia una variante y su precio con If-Match (412 si hay conflicto)
/gestion/productos/{id}/variantes/{variante}/codigosGET, POSTsesión del panelGET: lotes de claves de la variante con libres y entregadas, y sus ajustes; POST: importa claves desde texto como un lote nuevo
/gestion/productos/{id}/variantes/{variante}/codigos/ajustesPOSTsesión del panelGuarda los ajustes de claves digitales de la variante y recalcula su stock con las claves libres
/gestion/productos/{id}/variantes/{variante}/detallePOSTsesión del panelCambia los datos de una variante desde el editor de variantes
/gestion/productos/{id}/variantes/{variante}/digitalGET, POSTsesión del panelGET: ficheros descargables de la variante y sus ajustes; POST: sube un fichero (multipart)
/gestion/productos/{id}/variantes/{variante}/digital/{fichero}DELETEsesión del panelBorra uno de los ficheros descargables de la variante
/gestion/productos/{id}/variantes/{variante}/digital/ajustesPOSTsesión del panelGuarda los ajustes de descarga de la variante y la marca como digital
/gestion/productos/{id}/variantes/{variante}/packDELETE, GET, POSTsesión del panelGET: de qué se compone la variante pack; POST: guarda su composición; DELETE: deja de ser pack
/gestion/products/visibilityPOSTsesión del panelVisibilidad en lote (action): show-all publica todo, hide-all pasa todo a borrador, limit publica solo los count primeros
/gestion/promocionesGET, POSTsesión del panelGET: las promociones y cupones de la tienda con sus reglas; POST: crea una
/gestion/promociones/{id}DELETE, GET, POSTsesión del panelGET: la promoción completa con sus condiciones, destinos y reglas de compra; POST: la reescribe entera; DELETE: la da de baja sin tocar los pedidos que ya la usaron
/gestion/proveedores-pagoGETsesión del panelLista los proveedores de pago
/gestion/puntosGETsesión del panelResumen del programa de puntos: ajustes, lo que se debe, rotura, movimientos de dias días y clientes por saldo
/gestion/puntos/ajustesGET, POSTsesión del panelGET: ajustes del programa de puntos y sus valores por defecto; POST: los cambia (solo claves conocidas; 400 si no hay nada)
/gestion/puntos/clientes/{id}GET, POSTsesión del panelGET: el libro de puntos de un cliente con sus lotes vivos; POST: ajuste a mano con nota obligatoria
/gestion/quien-soyGETsesión del panelEl usuario del panel con la sesión abierta; 403 si la sesión no es del panel
/gestion/regionesGETsesión del panelLista las regiones
/gestion/regiones/{id}PATCHsesión del panelCambia una región con If-Match (412 si hay conflicto); 409 si se cambia la moneda y hay pedidos que la usan
/gestion/reviewsGETsesión del panelReseñas por moderar, con filtro por status (200 como máximo)
/gestion/reviews/{id}DELETE, POSTsesión del panelPOST: cambia el estado de una reseña (pending, approved o rejected); DELETE: la borra
/gestion/saldoGETsesión del panelLo que se debe en saldo y la lista de saldos (tarjetas regalo y saldo de clientes), con filtro por tipo y paginada
/gestion/saldo/{id}DELETE, GETsesión del panelGET: un saldo con sus movimientos; DELETE: lo desactiva
/gestion/saldo/clientesPOSTsesión del panelAbona o retira saldo de tienda a un cliente (importe en unidades, nota obligatoria); 409 si quedaría en negativo
/gestion/saldo/tarjetasPOSTsesión del panelEmite una tarjeta regalo a mano; el código se devuelve una sola vez y se envía al destinatario si se indica
/gestion/scanGETsesión del panelBusca una variante por barcode exacto, o por SKU, código de barras o título (q), con su stock en location_id (el primer almacén si no se dice) y el total entre almacenes en stock_all_locations; 404 si ese almacén no existe
/gestion/scan/adjustPOSTsesión del panelSuma, resta o fija el stock de una variante en location_id (mode: add, sub o set); sin decirlo, el primer almacén. 404 si ese almacén no existe, 409 si no hay ninguno y 400 si la variante no gestiona inventario allí
/gestion/scan/bindPOSTsesión del panelAsigna un código de barras a una variante; 409 si ya lo tiene otra
/gestion/scan/count-applyPOSTsesión del panelAplica un recuento completo: fija cada variante de la lista a la cantidad contada e informa de las que se saltan
/gestion/send-invoicePOSTsesión del panelManda por correo el PDF de una factura, por la cola de avisos. Hay que decir de qué factura se trata (pedido o factura); el destinatario tiene que ser su cliente o una dirección de PCC_FACTURA_DESTINOS, y el envío queda frenado y anotado
/gestion/soporteGETsesión del panelLa bandeja de soporte de la tienda (100 como máximo), lo que más espera primero, con filtro por estado
/gestion/soporte/{id}DELETE, GET, POSTsesión del panelGET: la conversación entera; POST: cambia su estado (abierta, esperando o resuelta); DELETE: la borra con sus mensajes
/gestion/soporte/{id}/borradorPOSTsesión del panelRedacta con IA una respuesta a partir de la conversación y los pedidos del cliente; la guarda como borrador sin enviarla
/gestion/soporte/{id}/responderPOSTsesión del panelEnvía la respuesta al cliente por correo, descarta los borradores y deja la conversación esperando
/gestion/soporte/borrarGET, POSTsesión del panelGET: el plazo de conservación en meses; POST: borra ya lo que pasa del plazo o todo lo de un email
/gestion/tema-activoGET, POSTsesión del panelGET: el tema activo, los instalados y cuáles tienen ajustes; POST: pone otro tema (tema)
/gestion/temas-ajustesGET, POSTsesión del panelGET: los ajustes de diseño de un tema (?tema=); POST: los guarda, fusionando o sustituyendo con reemplazar
/gestion/temas-demoGET, POSTsesión del panelGET: qué trae el contenido de ejemplo de un tema, sin importarlo; POST: lo importa (409 si la tienda no está recién instalada)
/gestion/tiendaGET, PATCHsesión del panelGET: la tienda y sus ajustes, con ETag; PATCH: fusiona ajustes en metadata (y name) con If-Match (412)
/gestion/tokensGET, POSTsesión del panelGET: los tokens de servicio de la tienda y el catálogo de áreas que se les puede dar; POST: crea uno y lo devuelve la única vez que se enseña
/gestion/tokens/{id}DELETEsesión del panelRevoca un token de servicio; deja de valer en su siguiente petición y la fila se conserva para saber qué alcanzaba
/gestion/ubicacionesGETsesión del panelLista las ubicaciones de stock (almacenes)
/gestion/uploadsPOSTsesión del panelSube imágenes (multipart, 16 MB) y devuelve sus URL; los ficheros se comprueban por su contenido y se listan los rechazados
/gestion/usuariosGETsesión del panelLista el personal de la tienda, con búsqueda y paginación
/gestion/usuarios/{id}DELETE, GET, PATCHsesión del panelGET: un usuario del equipo; PATCH: lo cambia con If-Match (412); DELETE: lo borra y cierra sus sesiones (409 si es el último administrador)
/gestion/wishlistGETsesión del panelLos productos más deseados en las listas de deseos de los clientes, con totales

Tienda (/tienda)

RutaMétodosAccesoQué hace
/tienda/autores/{slug}GETpública, con clave publicableLa ficha pública de un autor con sus piezas a la venta en esta tienda, a precio de catálogo, y su reputación en soporte
/tienda/autores/solicitudesPOSTpública, con clave publicableEnvía una solicitud para ser autor en el mercado de la tienda
/tienda/boletinPOSTpública, con clave publicableAlta en el boletín guardando el consentimiento dado; envía un enlace de confirmación (doble confirmación)
/tienda/boletin/bajaPOSTpública, con clave publicableDa de baja del boletín con el token del correo
/tienda/boletin/confirmarPOSTpública, con clave publicableConfirma la suscripción al boletín con el token del correo (de un solo uso y con caducidad)
/tienda/buscarGETpública, con clave publicableBuscador de la tienda (q), semántico si está disponible; en caché 10 minutos y por palabras si se supera el límite
/tienda/carritosPOSTpública, con clave publicableCrea un carrito (moneda, región, idioma) y lo devuelve con 201
/tienda/carritos/{id}GETpública, con clave publicableUn carrito con sus líneas y totales
/tienda/carritos/{id}/completarPOSTpública, con clave publicableConvierte el carrito en pedido tras comprobar el pago; idempotente (201 nuevo, 200 ya hecho); 409 si el pago no está confirmado
/tienda/carritos/{id}/consentimiento-digitalPOSTpública, con clave publicableGuarda el consentimiento del comprador a la entrega digital inmediata, con el texto legal y la versión que vio
/tienda/carritos/{id}/cuponPOSTpública, con clave publicableAplica un código de descuento; devuelve si se ha aplicado y, si no, por qué
/tienda/carritos/{id}/cupon/{codigo}DELETEpública, con clave publicableQuita un código de descuento del carrito
/tienda/carritos/{id}/datosPOSTpública, con clave publicablePone el correo y las direcciones de envío y facturación del carrito
/tienda/carritos/{id}/enviosGET, POSTpública, con clave publicableGET: opciones de envío del carrito; POST: las elige, una por grupo en carritos del marketplace
/tienda/carritos/{id}/lineasPOSTpública, con clave publicableAñade una variante con cantidad, personalización y elección de pack; 400 con código si se salta una regla de cantidad
/tienda/carritos/{id}/lineas/{linea}DELETE, POSTpública, con clave publicablePOST: cambia la cantidad de una línea; DELETE: quita la línea
/tienda/carritos/{id}/nif-ivaPOSTpública, con clave publicablePone o quita el NIF-IVA intracomunitario del comprador para compras de empresa
/tienda/carritos/{id}/pagoPOSTpública, con clave publicableElige la forma de pago entre las disponibles para el carrito
/tienda/carritos/{id}/pagosGETpública, con clave publicableFormas de pago disponibles para el carrito
/tienda/carritos/{id}/puntosDELETE, POSTsesión de clientePOST: canjea puntos del cliente en su propio carrito; DELETE: quita los puntos canjeados
/tienda/carritos/{id}/saldoPOSTpública, con clave publicableAplica una tarjeta regalo por codigo, o el saldo del cliente con sesión si no se envía código
/tienda/carritos/{id}/saldo/{saldoId}DELETEpública, con clave publicableQuita del carrito una tarjeta regalo o saldo aplicado
/tienda/categoriasGETpública, con clave publicableLas categorías de navegación de la tienda, o una por handle
/tienda/contactPOSTpública, con clave publicableFormulario de contacto: envía el mensaje a la tienda por correo; limitado por IP, 503 si no hay destinatario configurado
/tienda/cuentaGET, POSTsesión de clienteGET: la ficha del cliente con sesión; POST: la cambia
/tienda/cuenta/confirmarPOSTsesión de clienteConfirma el correo del cliente con el token y le asigna los pedidos que hizo como invitado
/tienda/cuenta/entrarPOSTpública, con clave publicableEntrada del cliente que devuelve un token de sesión; limitada por cuenta e IP; vincula el carrito cart_id si se envía
/tienda/cuenta/licenciasGETsesión de clienteLas licencias del cliente identificado, cada una con los sitios donde está activa ahora mismo
/tienda/cuenta/licencias/soltarPOSTsesión de clienteDesactiva uno de los sitios del propio cliente para devolverle la plaza; con tope por licencia y por cliente
/tienda/cuenta/pedidosGETsesión de clienteLos pedidos del cliente con sesión, paginados
/tienda/cuenta/pedidos/{id}GETsesión de clienteUn pedido del cliente con sesión; 404 si no es suyo
/tienda/cuenta/registrarPOSTpública, con clave publicableRegistra una cuenta de cliente; limitada por IP; indica cuántos pedidos de invitado esperan a que confirme el correo
/tienda/cuenta/salirPOSTpúblicaCierra la sesión actual del cliente
/tienda/descargas/{id}GETpúblicaDescarga un fichero comprado con su enlace firmado (firma); 403 si el enlace caducó, 410 si ya no está disponible
/tienda/idiomasGETpúblicaLos idiomas de la tienda, el principal y el elegido a partir de locale o Accept-Language
/tienda/marketplace/enviosGET, POSTpública, con clave publicableGET: opciones de envío por paquete de vendedor para cart_id; POST: elige una opción para cada paquete
/tienda/mi-saldoGETsesión de clienteEl saldo de tienda del cliente con sesión y sus movimientos
/tienda/mis-puntosGETsesión de clienteLos puntos del cliente, las reglas del programa, la próxima caducidad y los 50 últimos movimientos
/tienda/paginasGETpública, con clave publicablePáginas de contenido publicadas (handle, título y orden), sin su contenido
/tienda/paginas/{handle}GETpública, con clave publicableUna página publicada con su contenido saneado y sus campos SEO
/tienda/pagos/recargoPOSTpública, con clave publicablePone en el carrito el recargo de la forma de pago elegida (cart_id, provider_id)
/tienda/pedidos/{id}GETpública, con clave publicableUn pedido tal como lo enseña el escaparate. Sin la prueba de acceso (cabecera x-pcc-pedido) sale sin el correo ni la dirección; con PCC_PEDIDO_ABIERTO=1 vuelve a salir entero
/tienda/pedidos/{id}/accesoPOSTpública, con clave publicableCambia el id del pedido más el correo del comprador (por POST, nunca en la URL) por una prueba de acceso firmada y con caducidad; con freno por pedido y por IP
/tienda/pedidos/{id}/codigosGETpública, con clave publicableLas claves digitales de un pedido con su estado, sin la clave en sí; hace falta la prueba de acceso de ese pedido
/tienda/pedidos/{id}/codigos/{codigo}/revelarPOSTpública, con clave publicableDestapa una clave entregada y lo anota como prueba de entrega; hace falta la prueba de acceso de ese pedido. 409 si no está entregada, está retirada o es de otro pedido
/tienda/pedidos/{id}/descargasGETpública, con clave publicableLos ficheros descargables de un pedido, con enlaces firmados; hace falta la prueba de acceso de ese pedido
/tienda/pedidos/{id}/desistimientoGET, POSTpública, con clave publicableGET: qué líneas del pedido admiten desistimiento y hasta cuándo; POST: solicita desistir de líneas, con motivo y correo
/tienda/pedidos/{id}/facturaGETpública, con clave publicableLa factura de un pedido del cliente con sesión, en PDF
/tienda/pedidos/{id}/licenciasGETpública, con clave publicableLas licencias emitidas para un pedido, con su clave entera; hace falta la prueba de acceso de ese pedido
/tienda/personalizacion/ficherosPOSTpública, con clave publicableSube el fichero que adjunta el comprador para personalizar un producto (multipart, un fichero)
/tienda/personalizacion/ficheros/{id}GETpúblicaDescarga un fichero de personalización con su enlace firmado; 403 si la firma no vale
/tienda/postsGETpública, con clave publicableEntradas publicadas del blog con el HTML saneado, o una por handle
/tienda/producto-extrasGETpública, con clave publicableExtras de IA para la ficha de un producto (product_id): productos parecidos y resumen de sus reseñas
/tienda/productosGETpública, con clave publicableListado del catálogo, traducido, con filtro por categoría, texto, tipo o ids, orden y paginación
/tienda/productos/{handle}GETpública, con clave publicableLa ficha de un producto por handle; las piezas del mercado traen además capturas, demo e historial de versiones
/tienda/products-by-priceGETpública, con clave publicableIds de producto ordenados por su precio base más bajo, con filtro por texto y categoría, paginados
/tienda/provinciasGETpública, con clave publicableProvincias o estados de un país (pais) para los formularios de dirección
/tienda/regionesGETpública, con clave publicableRegiones con su moneda e impuestos por país
/tienda/reviewsGET, POSTpública, con clave publicableGET: reseñas aprobadas de un producto con la nota media; POST: deja una reseña, pendiente de moderar
/tienda/soportePOSTpública, con clave publicableAbre una consulta de soporte con el autor de una pieza usando la clave de licencia; al autor le llega un correo
/tienda/soporte/{id}POSTpública, con clave publicableEl lado del comprador en una consulta al autor, identificado por el correo del hilo: leerla, responder (texto) o valorarla (resuelto)
/tienda/soporte/chatPOSTpública, con clave publicableAsistente de IA que responde solo con el catálogo; limitado, avisa cuando hace falta una persona y lo guarda en soporte si llega email
/tienda/stock-mapGETpública, con clave publicableStock disponible por variante con tope de 10 (9999 si no se controla o admite reservas); en caché un minuto
/tienda/tiendaGETpública, con clave publicableDatos públicos de la tienda: razón social, NIF, dirección, contacto, país, cómo se muestran los precios y avisos legales
/tienda/wishlistDELETE, GET, POSTpública, con clave publicableGET: la lista de deseos del cliente con sesión; POST: añade un producto o fusiona una lista; DELETE: quita un producto (?product_id=)

Otras

RutaMétodosAccesoQué hace
/auth-propia/entrarPOSTpúblicaEntrada al panel que devuelve un token de sesión; limitada por cuenta y por IP
/auth-propia/restablecer/confirmarPOSTpúblicaPone una contraseña nueva con el token de restablecimiento y cierra las sesiones abiertas del usuario
/auth-propia/restablecer/pedirPOSTpúblicaPide el correo para restablecer la contraseña; responde siempre lo mismo para no delatar cuentas; limitada
/auth-propia/salirPOSTpúblicaCierra la sesión actual del panel
/auth-propia/yoDELETE, GETsesión de vendedorGET: de quién es la sesión (su ficha y las sesiones que tiene abiertas); DELETE: cierra todas las sesiones de ese usuario
/carriles/{carril}/avisosGET, POSTpúblicaAviso del proveedor de pagos a autores (POST para Stripe, GET para Mangopay); se verifica antes de tocar el pago
/hooks/boletin/{servicio}GET, POSTpúblicaPOST: los avisos de baja, rebote duro y queja de spam del servicio de correo; la dirección lleva su propia clave y, donde el servicio firma, se comprueba la firma. GET: contesta para que el servicio acepte la dirección
/hooks/sendcloudPOSTpúblicaAviso de Sendcloud verificado por firma HMAC; de momento solo anota los cambios de estado del paquete
/licencias/activarPOSTpúblicaActiva una clave de licencia en un sitio, la llama el tema o extensión instalado; 409 si no se puede activar
/licencias/comprobarPOSTpúblicaComprueba si una clave de licencia (y, opcionalmente, una activación) es válida; 404 si no existe
/licencias/soltarPOSTpúblicaLibera una activación de una clave de licencia para usarla en otro sitio
/listoGETpúblicaComprobación de que puede atender: 503 durante el cierre o si algún plugin no ha cargado
/mcpGET, POSTpúblicaServidor MCP (JSON-RPC 2.0) para agentes de IA: buscar productos, detalle de producto e información de la tienda; GET: resumen y herramientas
/pagos/aviso/{proveedor}POSTpúblicaAviso de una pasarela de pago, verificado por cada proveedor; 401 si no vale, los repetidos se aceptan sin efecto (idempotente)
/payment-configGETpúblicaFormas de pago a enseñar en el checkout con sus textos y recargos, filtradas por los plugins (cart_id opcional)
/saludGETpúblicaComprobación de vida: el proceso responde
/setupGETpúblicaEstado de la instalación y las comprobaciones que enseña el asistente; 409 en cuanto la tienda está instalada o si se instala sola desde su configuración, 503 si no se puede comprobar
/setup/databaseGETpúblicaEstado de la conexión a la base de datos y de las migraciones; 409 en cuanto la tienda está instalada, 503 si no se puede comprobar
/setup/database/migratePOSTpúblicaEjecuta las migraciones y va enviando la salida como eventos (SSE); 409 si ya está instalada o ya en marcha
/setup/demoPOSTpúblicaImporta el contenido de ejemplo del tema activo, enviando el avance como eventos (SSE); 409 si ya está instalada o en marcha
/setup/finishPOSTpúblicaCrea el primer administrador, pone el nombre de la tienda y cierra la instalación; 409 si ya está instalada o hay administrador
/site-statusGETpúblicaSi la tienda está en mantenimiento y qué mensaje enseñar
/static/{fichero}GETpúblicaSirve un fichero de imagen estático con caché larga; los SVG llevan una política de seguridad de contenido restrictiva
/telegram/webhookPOSTpúblicaBot de Telegram: responde con IA, solo lectura, a las preguntas de chats autorizados sobre la tienda; siempre contesta 200