Encuentra el single de Magic the Gathering que buscas, entre las principales tiendas de Chile
Prueba una carta desde aquí o revisa la guía técnica.
Guía pública de integración

Jumpseller privilegiado para Scry

Esta guía está escrita para responder la pregunta literal: dónde empiezo, qué abro, qué escribo y cómo sé si quedó funcionando. La meta es crear una URL privada que entregue JSON para Scry.

Lee esto primero

Con solo el admin normal de Jumpseller no vas a terminar toda esta integración. Necesitas un lugar donde se pueda crear una URL que devuelva JSON: una app, un backend, una función serverless o un servicio mantenido por tu desarrollador o agencia.

Qué vas a tener al final

Una URL privada, por ejemplo GET /scry/offers, que recibe el nombre de una carta y devuelve variantes con precio, stock y URL pública en formato JSON.

Caso A

Solo tengo acceso al admin de Jumpseller

  1. Entra al admin de tu tienda.
  2. Abre el menú Apps.
  3. Revisa si ya existe una app propia, una integración privada o un responsable técnico que mantenga algo conectado a la tienda.
  4. Si no existe nada de eso, detente aquí: no empieces por el theme ni por custom code.
  5. Envía esta guía a tu desarrollador o agencia y pídeles que creen una URL privada para Scry.

El admin de Jumpseller sirve para identificar tu punto de apoyo técnico. No suele ser el lugar donde se programa esta integración completa.

Caso B

Tengo desarrollador, agencia o backend

  1. Empieza en ese proyecto técnico, no en el admin de Jumpseller.
  2. Abre el proyecto en un editor de código, por ejemplo VS Code.
  3. Abre una terminal dentro de ese proyecto.
  4. Crea una ruta HTTP privada, por ejemplo GET /scry/offers.
  5. Haz que esa ruta devuelva JSON.

Si ya tienes un sistema donde se puede programar, ahí es donde parte esto. La terminal se usa dentro de ese proyecto, no dentro de Jumpseller.

Recordatorio

No partas por FTP ni por el theme

  1. FTP por sí solo no crea una URL JSON.
  2. Subir archivos por FTP solo ayuda si ya tienes un servidor que ejecuta backend.
  3. El custom code del theme sirve mejor para frontend, snippets o scripts visuales.
  4. Esta integración necesita lógica de servidor, autenticación y respuesta JSON.
Texto útil

Texto corto para copiar y pegar

Necesitamos una URL privada para Scry.

Debe ser un GET /scry/offers
Debe recibir: name y limit
Debe protegerse con token por header
Debe devolver JSON con:
- variant_key
- offer_title
- price_clp
- stock
- product_url
- image_url (ideal)

Cuando esté lista, solo necesitamos:
- URL
- nombre del header
- token
Paso 2

Si tú mismo lo vas a programar, empieza así

  1. Abre VS Code o tu editor de código.
  2. Crea una carpeta nueva para esta integración, por ejemplo scry-jumpseller-feed.
  3. Abre esa carpeta en el editor.
  4. Abre una terminal dentro del editor.
  5. Ejecuta los comandos del siguiente bloque para crear un servidor mínimo.
Comandos de ejemplo con Node.js
mkdir scry-jumpseller-feed
cd scry-jumpseller-feed
npm init -y
npm install express

Si no usas Node.js, no pasa nada: este bloque es solo una forma concreta y fácil de partir. La lógica se puede hacer en cualquier stack.

Paso 3

Crea un archivo server.js y pega esto

const express = require("express");

const app = express();
const PORT = process.env.PORT || 3000;
const TOKEN = process.env.SCRY_TOKEN || "cambia-este-token";

const catalog = [
  {
    variant_key: "store-variant-001",
    offer_title: "Lightning Bolt | English | NM | Secret Lair",
    source_title: "Lightning Bolt | English | NM | Secret Lair",
    price_clp: 12990,
    stock: 1,
    product_url: "https://store.example.com/lightning-bolt-secret-lair",
    image_url: "https://cdn.example.com/products/lightning-bolt.jpg"
  }
];

function searchCatalog(name, limit) {
  const query = String(name || "").trim().toLowerCase();
  if (!query) return [];

  return catalog
    .filter((item) => item.offer_title.toLowerCase().includes(query))
    .slice(0, limit);
}

app.get("/scry/offers", (req, res) => {
  const token = req.get("X-Internal-Token");
  if (token !== TOKEN) {
    return res.status(401).json({ ok: false, error: "unauthorized" });
  }

  const name = String(req.query.name || "").trim();
  const limit = Math.min(Number(req.query.limit || 20), 50);

  if (!name) {
    return res.status(400).json({ ok: false, error: "missing_name" });
  }

  const offers = searchCatalog(name, limit);
  return res.json({ ok: true, offers });
});

app.listen(PORT, () => {
  console.log(`Listening on http://localhost:${PORT}`);
});

Este archivo crea una URL real que ya responde JSON. Después solo debes reemplazar catalog por tu fuente real de productos o variantes.

Paso 4

Cómo correr el ejemplo

SCRY_TOKEN="cambia-este-token" node server.js

Si ves Listening on http://localhost:3000, tu endpoint ya está corriendo en local.

Paso 5

Cómo probar si responde JSON

curl -H "X-Internal-Token: cambia-este-token" "http://localhost:3000/scry/offers?name=Lightning%20Bolt&limit=20"

Si el resultado es JSON y no HTML, ya tienes la base correcta.

Qué hace este ejemplo

Qué estás creando realmente

  1. Crea una URL técnica: /scry/offers.
  2. Protege esa URL con un token.
  3. Lee name y limit desde la request.
  4. Busca datos en una lista de ejemplo.
  5. Devuelve esos datos como JSON.
Paso 6

Lo único que debes reemplazar

  1. Reemplaza catalog por tu fuente real de productos.
  2. Haz que la búsqueda encuentre cartas reales desde tu tienda.
  3. Genera un variant_key estable por variante.
  4. Deja price_clp como entero en pesos chilenos.
  5. Publica el servicio en una URL accesible desde internet.
Ejemplo de salida

Respuesta aceptada

{
  "ok": true,
  "offers": [
    {
      "variant_key": "store-variant-001",
      "offer_title": "Lightning Bolt | English | NM | Secret Lair",
      "source_title": "Lightning Bolt | English | NM | Secret Lair",
      "price_clp": 12990,
      "stock": 1,
      "product_url": "https://store.example.com/lightning-bolt-secret-lair",
      "image_url": "https://cdn.example.com/products/lightning-bolt.jpg"
    }
  ]
}
Herramientas

Qué te va a ayudar

  1. VS Code o editor similar.
  2. Terminal integrada del editor.
  3. Node.js para este ejemplo concreto.
  4. curl, Postman o Insomnia para probar.
  5. ChatGPT para adaptar la búsqueda a tu catálogo real.
Campos

Mínimos y recomendados

CampoEstadoNotas
variant_keyObligatorioDebe ser estable en el tiempo por variante.
offer_titleObligatorioTítulo visible de la oferta.
price_clpObligatorioEntero en CLP, ya normalizado.
stockObligatorioEntero; para Scry basta disponible/no disponible.
product_urlObligatorioURL absoluta y pública.
image_urlRecomendadoURL absoluta de imagen.
source_titleRecomendadoTítulo original interno de la tienda.
language, condition, finishRecomendadoÚtiles para matching y preload fino.
set_code, collector_number, updated_atRecomendadoBuenos candidatos para etapas siguientes.
Activación

Qué necesita Scry de tu lado

JUMPSELLER_PRIVILEGED_{STORE}_URL
JUMPSELLER_PRIVILEGED_{STORE}_TOKEN
JUMPSELLER_PRIVILEGED_{STORE}_HEADER

En la práctica, tú no configuras esto dentro de Scry. Tú solo envías: URL final, token y nombre del header. Scry hace la activación.

Paso 7

Cuándo la integración ya está lista

  1. La URL responde JSON desde internet.
  2. El token funciona.
  3. La carta consultada devuelve variantes correctas.
  4. El precio y stock cambian cuando cambia tu catálogo real.
  5. Scry confirma que la integración quedó activada.
Resumen

La idea completa en una frase

Empiezas en un proyecto donde se pueda programar una URL, no en el frontend de la tienda; creas /scry/offers, haces que responda JSON y luego le envías a Scry la URL, el token y el header.

Buscando en tiendas…

0/18 tiendas listas En cola…