Ayuda y API

Cómo usar cada pantalla, el PIN de soporte y la API REST de Scale.

Cómo usar ForeverLink

ForeverLink es un inventario de links numerados que podés cambiar después de imprimir. Generás IDs (1…N), imprimís la URL pública de ForeverLink en un QR, NFC o sticker, y después cambiás el destino HTTPS desde el panel, CSV, la API (Scale) o el chat de soporte.

URL pública de cada ID:

https://foreverlink.app/r/{tu-org}/{número}

Ejemplo: https://foreverlink.app/r/acme/42

El identificador de URL no se cambia nunca (así las piezas impresas siguen funcionando). Solo cambia el destino.

---

1. Crear la cuenta

  1. Entrá a Registro o elegí un plan en Precios.
  2. Starter ($19/mes, 500 IDs), Growth ($49/mes, 5.000) o Scale ($99/mes, 25.000 + API). White Label es licencia única de $999.
  3. Nombre de la organización. El identificador de URL (parte de cada URL impresa) se genera ahí y no se puede cambiar después.
  4. Email y contraseña. El 2FA (Google Authenticator / Authy) es opcional — lo activás después en Ajustes.
  5. Completá el checkout de Paddle (hace falta tarjeta). Tenés 15 días de prueba. Si cancelás antes, no se cobra.
  6. Hasta que el billing esté en trialing o active, los QR públicos no redirigen.

---

2. Los primeros 15 minutos

  1. Entrá en /login → aterrizás en Inventario.
  2. Abrí Generar rango y creá IDs 1 a 100 (o lo que vayas a imprimir).
  3. Abrí Asignar rango y poné un destino para 1–20, con una etiqueta tipo local-frente.
  4. Abrí el ID #1 y descargá el QR SVG. Ese QR apunta a la URL de ForeverLink, no a la web final.
  5. Escanealo. Deberías caer en el destino. Si ves “no configurado”, ese ID no tiene destino https o está inactivo.
  6. Cambiá el destino de #1 y volvé a escanear: mismo QR, página nueva.

---

3. Inventario

El inventario es la lista de todos los IDs de la organización activa.

  • Buscá por número, etiqueta, destino o notas.
  • Filtros: todos / nunca clickeados / sin destino / activos / inactivos.
  • Orden: número o clicks.
  • Cada fila es una URL pública: /r/{org}/{número}.

Clickeá una fila para editar ese ID.

---

4. Nuevo ID

Nuevo ID crea un solo número de stock.

  1. Dejá el número vacío para usar el siguiente libre, o escribí uno que todavía no exista.
  2. Opcional: destino (https://…), etiqueta, notas, estado (activo / inactivo).
  3. Guardá. Cuenta para el tope max_links del plan.

Para un sticker suelto. Para una tirada, usá Generar rango.

---

5. Generar rango

Crea IDs vacíos en un rango inclusivo (ejemplo: 1 a 1000).

  • Los números que ya existen se saltean (se puede volver a correr).
  • Los nuevos salen activos y sin destino.
  • No puede pasarte del tope del plan.

Hacelo antes de mandar archivos a imprenta.

---

6. Asignar rango

Escribe el mismo destino, etiqueta y estado en un from–to que ya existe.

Usos típicos:

  • Apuntar 1–50 al menú de este mes.
  • Relabelar el lote de un cliente que se fue.
  • Apagar una campaña: estado inactive en ese rango.

El destino tiene que ser http:// o https:// con host, máximo 2048 caracteres.

---

Abrí el ID desde el inventario.

Podés cambiar:

CampoQué es
DestinoA dónde va el escaneo. Vacío = la URL pública dice “no configurado”.
EtiquetaLote / cliente / local. Sirve para buscar y desactivar en masa.
NotasSolo internas. Quien escanea no las ve.
Estadoactive redirige. inactive no.

También ves:

  • Clicks totales y último click
  • Últimos 14 días
  • Historial (quién, cuándo, antes → después)

Descargá acá el QR de producción (SVG). Imprimí siempre ese QR, nunca un QR de la URL final de Google / menú.

---

8. Importar y exportar CSV

Exportar baja el inventario actual (filtro opcional por etiqueta).

Importar actualiza filas. Columnas típicas: number, target_url, label, notes, status.

  • Las URLs inválidas se rechazan.
  • Cada cambio deja revisión (source = import).
  • Respetá max_links.

Usá Excel o el ERP de imprenta e importá.

---

9. Clicks e historial

Cada redirección pública exitosa suma click_count y un contador diario.

Alertas del inventario:

  • IDs activos sin destino (impresos pero muertos)
  • IDs que nunca se escanearon

El historial guarda cambios de destino, etiqueta, estado y notas, con origen: manual, import, rango, API o chat.

---

10. Equipo

Roles:

RolPuede
OwnerTodo, incluido billing, PIN y claves API
AdminAjustes, equipo, PIN, claves API, inventario
OperatorAsignar destinos, rangos, importar

Agregá un miembro en Equipo con contraseña temporal (mín. 12). Entran y pueden activar 2FA.

Si estás en más de una organización, cambiala en Ajustes.

---

11. Ajustes

  • Renombrar el nombre visible (no el identificador de URL).
  • Activar 2FA.
  • Configurar el PIN de soporte (6–8 dígitos). WhatsApp / Telegram / chat web piden el identificador de URL o el email + este PIN una vez; después solo ven esta org.
  • Rotar el PIN o “Desvincular todos los chats” para echar todos los teléfonos.
  • Claves API (solo Scale y White Label): crear, copiar una vez, revocar.

---

12. Facturación

Abrí Billing.

  • Prueba: 15 días, tarjeta cargada.
  • Estados: pending_payment, trialing, active, past_due, suspended, canceled, whitelabel_setup.
  • Los redirects públicos andan en trialing, active, past_due o whitelabel_setup.
  • Si está suspendida o impaga, no redirige.
  • El Customer Portal de Paddle está en Billing.
  • El bot de chat no puede cambiar la tarjeta.

---

13. Tickets de soporte

En la app: Soporte. Asunto + mensaje.

Desde el chat: después del PIN, pedile al bot que abra un ticket. El staff responde en el panel de plataforma.

---

14. Chat (WhatsApp, Telegram, web)

  1. Owner/admin configura el PIN en Ajustes.
  2. Escribile al bot de ForeverLink.
  3. Pasá tu identificador de URL (o el email de un miembro) y el PIN.
  4. Pedí cosas como “apuntá el #12 a https://ejemplo.com/menu” o “¿por qué no redirige el QR 4?”.

Nunca mandes la contraseña del panel ni códigos 2FA por chat.

---

15. API (Scale y White Label)

REST en {APP_URL}/api/v1. Creá una clave en Ajustes. Se muestra una sola vez.

Header:

Authorization: Bearer fl_live_…

o `X-API-Key: fl_live_…`

La clave ya está atada a **tu** organización. No hay `organization_id` para cambiar de cuenta.

### Permisos (scopes)

| Scope | Qué permite |
| --- | --- |
| `account:read` | `GET /me`, `GET /stats` |
| `links:read` | `GET /links`, `GET /links/{number}` |
| `links:write` | crear / actualizar / rangos |
| `tickets:write` | `GET/POST /tickets` |

### Endpoints

**`GET /api/v1/me`** — identificador de URL, plan, límites, facturación, uso.

**`GET /api/v1/links`** — query: `q`, `label`, `status`, `filter=never_clicked\|no_destination`, `page`, `per_page`, `sort=number\|clicks`.

**`GET /api/v1/links/{number}`** — detalle, clicks 14 días, revisiones.

**`POST /api/v1/links`**

{
  "number": 42,
  "target_url": "https://ejemplo.com",
  "label": "local",
  "notes": "",
  "status": "active"
}

`number` es opcional (siguiente ID libre).

**`PATCH /api/v1/links/{number}`** — cualquier subconjunto de `target_url`, `label`, `notes`, `status`.

**`POST /api/v1/links/assign-range`**

{ "from": 1, "to": 50, "label": "abril", "target_url": "https://ejemplo.com/promo", "status": "active" }

**`POST /api/v1/links/generate-range`**

{ "from": 1, "to": 500 }

**`GET /api/v1/stats`** — totales y top links.

**`GET /api/v1/tickets`** · **`POST /api/v1/tickets`**

{ "subject": "El QR 12 está muerto", "body": "Al escanear dice no configurado", "priority": "normal" }

### Errores

{ "error": { "code": "UNAUTHORIZED", "message": "Invalid or missing API key." } }

| HTTP | Significado |
| --- | --- |
| 401 | Clave faltante o inválida |
| 402 | Escritura con billing inactivo |
| 403 | Plan que no incluye API, org suspendida o scope faltante |
| 404 | Link o ruta inexistente |
| 429 | Rate limit (por defecto 60 req/min) |

Starter y Growth reciben `403`.

---

## 16. Por qué un QR no redirige

Revisá en este orden:

1. La URL impresa es `https://foreverlink.app/r/{tu-org}/{número}` — identificador y número coinciden con el inventario.
2. El ID existe.
3. El estado es `active`.
4. El destino es una URL `http(s)` válida.
5. El billing está en `trialing` / `active` / `past_due` (no `suspended` ni `pending_payment`).

---

## 17. White Label

Licencia de software de $999. Después del pago, completá el formulario de configuración (dominio + notas de self-host). Corrélo en tu servidor, o sumá SaaS alojado por +$50/mes. Incluye API, documentación y soporte de producto. No es un proyecto de instalación pago.

Más de 25.000 IDs en Scale se venden como **packs de 5.000 IDs** a $19/mes. Se suman en el checkout o en Facturación.

### Dominio propio (Scale y White Label)

Imprimí QR / NFC en **tu** host (`https://links.tumarca.com/r/42`) en vez de `foreverlink.app`.

1. En **Ajustes → Dominio propio** guardá un **subdominio** (`links.tumarca.com`). No uses el dominio pelado.
2. En el panel DNS creá **un CNAME**:
   - **Tipo:** CNAME
   - **Nombre / host:** `links` (la mayoría de paneles) o `links.tumarca.com` si piden el nombre completo
   - **Destino:** `foreverlink.app`
   - **Proxy Cloudflare:** Proxied (nube naranja) — así funciona el HTTPS
   - **TTL:** Auto
3. Esperá 1–15 minutos. Tocá **Verificar DNS**.
4. Volvé a bajar los QR. Ahora codifican `https://links.tumarca.com/r/{número}`.

**No** creés un registro A a una IP. **No** hagas CNAME del dominio raíz salvo que tu DNS tenga ALIAS/ANAME.

Si Verificar falla y usás Cloudflare, el CNAME puede estar oculto (flattening). Agregá el **TXT** de Ajustes (`_foreverlink.links.tumarca.com` = el token). Las URLs viejas `https://foreverlink.app/r/{org}/{número}` siguen funcionando.

---

¿Necesitás una persona? [Contacto](/contact) o abrí un ticket en la app.
Probar 15 días
gratis