Ir al contenido

Precios exclusivos de la app en Shopify por API

Esta página describe cómo un equipo de desarrollo, ya sea del comerciante, de su ERP o de un tercero, puede gestionar por su cuenta los precios exclusivos de la app en una tienda Shopify. Sirve, por ejemplo, para sincronizar precios desde un ERP o un PIM sin pasar por el editor de Reskyt.

Aplica solo a Shopify. La única API pública documentada de Reskyt es la de notificaciones push.

El precio exclusivo de una variante se guarda en un metafield estándar de Shopify sobre esa variante. Dos piezas lo leen:

PiezaQué hace con el metafield
Shopify Function de ReskytAplica el precio en el checkout
Bloque de tema de ReskytMuestra el precio en la ficha de producto y en las colecciones, en temas Liquid

No interviene ninguna base de datos ni API propia de Reskyt. Quien tenga acceso de escritura al Admin API de la tienda puede escribir el metafield.

  1. Un descuento automático ya creado en la tienda. El metafield solo tiene efecto en el checkout si existe el descuento automático “Reskyt — Precio Catálogo App”, al que está ligada la Function. Se crea la primera vez que alguien guarda una regla de tipo Precio de catálogo desde el editor de la app Reskyt en Shopify (Promociones → Nueva regla). Basta con hacerlo una vez por tienda. Si nunca se ha usado el editor, escribir el metafield no tendrá efecto.
  2. Una app propia, privada o personalizada con el scope write_products en esa tienda, para usar el Admin GraphQL API.
  3. El app embed de Reskyt activo en el tema, necesario para que los pedidos de la app se identifiquen como tales. Ver Shopify.
CampoValor
Recurso (ownerType)PRODUCTVARIANT. Se escribe por variante, no por producto
Namespacereskyt
Keycatalog_price
Tipojson
{
"price": 19.99,
"ruleId": "mi-integracion",
"customerTag": "mayorista",
"from": "2026-01-01T00:00:00Z",
"until": "2026-01-31T23:59:59Z"
}
CampoObligatorioDescripción
priceSíPrecio fijo, no un porcentaje, que verá y pagará el usuario de la app por esa variante, en la moneda de la tienda
ruleIdNoIdentificador libre para tu propio control. Reskyt no lo usa
customerTagNoEtiqueta de cliente de Shopify, no el Segmento nativo. Si se indica, el precio solo se aplica a clientes con sesión iniciada que tengan esa etiqueta exacta. Si se omite, se aplica a cualquier usuario de la app
from, untilNoSolo informativos. La Function no los lee: mientras el metafield exista, el precio está activo

El precio se aplica en el checkout cuando se cumplen todas estas condiciones:

  1. El pedido procede de la app, es decir, el carrito tiene el atributo __reskyt_app_origin con el valor true.
  2. El price del metafield es inferior al precio unitario que la línea tiene en ese momento en el carrito. Si es igual o superior, no se aplica ningún descuento.
  3. Si el valor incluye customerTag, el cliente tiene sesión iniciada y esa etiqueta.

from y until no se hacen cumplir. Si el precio debe tener una fecha de inicio y de fin, la integración debe escribir el metafield al empezar y borrarlo al terminar, por ejemplo con un proceso programado propio.

1. Obtener el identificador de la variante a partir de su SKU

query FindVariantBySku($query: String!) {
productVariants(first: 1, query: $query) {
nodes { id }
}
}

Variables:

{ "query": "sku:TU-SKU" }

2. Escribir el metafield

mutation SetCatalogPrice($metafields: [MetafieldsSetInput!]!) {
metafieldsSet(metafields: $metafields) {
metafields { id }
userErrors { field message }
}
}

Variables:

{
"metafields": [
{
"ownerId": "gid://shopify/ProductVariant/1234567890",
"namespace": "reskyt",
"key": "catalog_price",
"type": "json",
"value": "{\"price\":19.99,\"customerTag\":\"mayorista\"}"
}
]
}

El campo value es una cadena que contiene el JSON. Los límites de peticiones y de metafields por operación son los del Admin API de Shopify.

Para que una variante deje de tener precio exclusivo hay que eliminar el metafield. Dejarlo en 0 o en null no lo desactiva.

mutation DeleteCatalogPrice($metafields: [MetafieldIdentifierInput!]!) {
metafieldsDelete(metafields: $metafields) {
deletedMetafields { key namespace ownerId }
userErrors { field message }
}
}

Variables:

{
"metafields": [
{
"ownerId": "gid://shopify/ProductVariant/1234567890",
"namespace": "reskyt",
"key": "catalog_price"
}
]
}

Escribir el metafield hace que se cobre el precio en el checkout. Que el comprador lo vea en la tienda es una cuestión aparte, y no afecta al cobro.

EscaparateQué hay que hacer
Tema LiquidEl bloque de tema de Reskyt muestra el precio. También hay un fragmento de código equivalente para temas personalizados
Headless, como Hydrogen u OxygenEl frontend lee el metafield desde la Storefront API y lo muestra donde corresponda

En un tema Liquid, la extensión de tema de Reskyt añade al carrito el atributo __reskyt_app_origin cuando detecta la app. En un escaparate headless esa extensión no se ejecuta. El equipo que construye el frontend debe añadir el mismo atributo cuando detecte que el visitante viene de la app, con la mutación cartAttributesUpdate de la Storefront API:

{ "key": "__reskyt_app_origin", "value": "true" }

Sin ese atributo, el checkout no aplica el precio exclusivo.

  1. Confirma que se ha creado una vez una regla de Precio de catálogo desde el editor de Reskyt en la tienda.
  2. Crea una app propia con el scope write_products y obtén su token.
  3. Por cada variante, busca su identificador por SKU y escribe reskyt.catalog_price como JSON.
  4. Si el precio tiene fecha de fin, borra el metafield desde tu propio proceso.
  5. Si usas una customerTag, comprueba que esa etiqueta ya se usa en una regla del editor.
  6. Si el escaparate es headless, añade el atributo de carrito __reskyt_app_origin y muestra el precio desde tu frontend.