KuikCodeDocs
APIGuías

Cambia a dónde apunta un código impreso

Busca un código por nombre, apúntalo a un lugar nuevo y confirma el cambio, sin tocar el diseño.

Esa es la razón de ser de un código dinámico: el póster se queda en la pared mientras cambia el destino que tiene detrás. Son tres llamadas.

1. Busca el código

Lista los códigos filtrados por nombre. q coincide con una parte del nombre; la respuesta incluye los ids que necesitas.

curl "https://api.kuikcode.com/v1/codes?q=front%20window" \
  -H "Authorization: Bearer kc_live_..."
{
  "data": [
    {
      "id": "K02bEPC2SmtopwPr6S-jt",
      "shortCode": "Ab3dE9xYz",
      "name": "Front window",
      "scanUrl": "https://kuikco.de/p/Ab3dE9xYz",
      "destination": { "type": "url", "url": "https://example.com/spring-menu", "pageId": null, "summary": "example.com/spring-menu" },
      "folderId": "f_9n2",
      "tags": ["signage"],
      "archived": false,
      "scans": 123
    }
  ],
  "next_cursor": null
}

Guarda el id. shortCode y scanUrl son lo que está impreso y nunca cambian.

2. Apúntalo a un lugar nuevo

PATCH /codes/{id} con un destination nuevo. Todo lo demás del código (diseño, etiquetas, configuración de seguimiento) se queda como está.

curl -X PATCH https://api.kuikcode.com/v1/codes/K02bEPC2SmtopwPr6S-jt \
  -H "Authorization: Bearer kc_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "destination": { "type": "url", "url": "https://example.com/summer-menu" } }'

Para llevar a una KuikPage, envía { "type": "page", "pageId": "..." } con un id de GET /pages.

La respuesta es el código actualizado. Las copias impresas se actualizan en menos de un minuto; el sistema que atiende los escaneos guarda en caché el destino de un código durante sesenta segundos como máximo.

3. Confirma

curl https://api.kuikcode.com/v1/codes/K02bEPC2SmtopwPr6S-jt \
  -H "Authorization: Bearer kc_live_..."

destination.url muestra la nueva dirección. A partir de ese momento, los escaneos aparecen con el nuevo destino en GET /codes/{id}/scans y en Destinos principales del panel.

Muchos códigos a la vez

Cuando termina una campaña, cambia el destino de todos sus códigos en una sola llamada con PATCH /codes/bulk, hasta cien ids:

curl -X PATCH https://api.kuikcode.com/v1/codes/bulk \
  -H "Authorization: Bearer kc_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "ids": ["K02bEPC2SmtopwPr6S-jt", "Zq9vX1mN4kLp8rTb2cWd0"],
    "destination": { "type": "url", "url": "https://example.com/closed-for-season" }
  }'

La respuesta lista los ids updated y los failed, si los hay, con un motivo. Los ids de otro espacio de trabajo se ignoran en lugar de reportarse.

Para tener en cuenta

  • Una clave de solo lectura no puede hacer el paso 2; responde 403 insufficient_scope.
  • Los códigos creados en el panel con otros tipos de destino (vCard, WiFi, Reglas inteligentes...) vuelven con su nombre interno en destination.type. Cambiarlos a url o page desde la API funciona; la edición de los tipos más completos se queda en el panel.
  • Los códigos archivados se listan con ?archived=true. Envía "archived": false en un PATCH para recuperar uno.

Reglas inteligentes desde la API

Un destino también puede ser un conjunto de reglas. PATCH /codes/{id} (o POST /codes) con destination.type = "smartRules" acepta un fallbackUrl y una lista ordenada de reglas; la primera regla cuyas condiciones se cumplen decide a dónde llega el escaneo.

{
  "destination": {
    "type": "smartRules",
    "fallbackUrl": "https://example.com",
    "rules": [
      { "name": "iPhone", "url": "https://apps.apple.com/app/id123", "conditions": [{ "type": "os", "value": "ios" }] },
      { "name": "Android", "url": "https://play.google.com/store/apps/details?id=x", "conditions": [{ "type": "os", "value": "android" }] },
      { "name": "Spain, weekdays", "url": "https://example.es", "conditions": [{ "type": "country", "value": "ES" }, { "type": "day", "days": [1, 2, 3, 4, 5] }], "joins": ["and"] }
    ]
  }
}

Tipos de condición: os (ios, android, windows, macos, linux, other), country (ISO 3166 alpha-2), language (ISO 639-1), time (before, after, between, HH:MM en la hora local de quien escanea; una ventana que pasa de la medianoche continúa al día siguiente), date (before, after, on, YYYY-MM-DD), day (días de la semana del 0 al 6, empezando por el domingo), totalScans y uniqueScans (gt, lt, eq), location (lat, lng, radiusMeters). Las condiciones de una regla se encadenan de izquierda a derecha con joins. Las reglas inteligentes están incluidas desde el plan PRO; GET /codes/{id} las devuelve en destination.rules, y si después envías un destino url, se eliminan.

En esta página