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
- Entrá a Registro o elegí un plan en Precios.
- Starter ($19/mes, 500 IDs), Growth ($49/mes, 5.000) o Scale ($99/mes, 25.000 + API). White Label es licencia única de $999.
- Nombre de la organización. El identificador de URL (parte de cada URL impresa) se genera ahí y no se puede cambiar después.
- Email y contraseña. El 2FA (Google Authenticator / Authy) es opcional — lo activás después en Ajustes.
- Completá el checkout de Paddle (hace falta tarjeta). Tenés 15 días de prueba. Si cancelás antes, no se cobra.
- Hasta que el billing esté en
trialingoactive, los QR públicos no redirigen.
---
2. Los primeros 15 minutos
- Entrá en
/login→ aterrizás en Inventario. - Abrí Generar rango y creá IDs
1a100(o lo que vayas a imprimir). - Abrí Asignar rango y poné un destino para
1–20, con una etiqueta tipolocal-frente. - Abrí el ID
#1y descargá el QR SVG. Ese QR apunta a la URL de ForeverLink, no a la web final. - Escanealo. Deberías caer en el destino. Si ves “no configurado”, ese ID no tiene destino
httpso está inactivo. - Cambiá el destino de
#1y 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.
- Dejá el número vacío para usar el siguiente libre, o escribí uno que todavía no exista.
- Opcional: destino (
https://…), etiqueta, notas, estado (activo / inactivo). - Guardá. Cuenta para el tope
max_linksdel 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–50al menú de este mes. - Relabelar el lote de un cliente que se fue.
- Apagar una campaña: estado
inactiveen ese rango.
El destino tiene que ser http:// o https:// con host, máximo 2048 caracteres.
---
7. Editar un link
Abrí el ID desde el inventario.
Podés cambiar:
| Campo | Qué es |
|---|---|
| Destino | A dónde va el escaneo. Vacío = la URL pública dice “no configurado”. |
| Etiqueta | Lote / cliente / local. Sirve para buscar y desactivar en masa. |
| Notas | Solo internas. Quien escanea no las ve. |
| Estado | active 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ú.
Para editar una placa ya impresa que no tiene el número a la vista, abrí Escanear placa (/app/scan) y activá el modo edición en el mismo navegador donde iniciaste sesión. Al escanear ese QR entrás al editor, no al destino. El resto de la gente sigue yendo al destino. En iPhone la cámara abre Safari: entrá a la cuenta ahí antes de escanear. También podés usar la cámara de esa pantalla o pegar la URL.
---
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:
| Rol | Puede |
|---|---|
| Owner | Todo, incluido billing, PIN y claves API |
| Admin | Ajustes, equipo, PIN, claves API, inventario |
| Operator | Asignar destinos, rangos, importar. Lotes opcionales: solo los IDs de sus lotes |
Agregá un miembro en Equipo con contraseña temporal (mín. 12). Entran y pueden activar 2FA.
Un operador puede tener varios lotes (por ejemplo 1-100 y 250-300). Al invitarlo son opcionales; después, en Equipo, sumás un lote con Desde el ID / Hasta el ID → Agregar lote, o quitás uno con ✕, sin tocar los demás. Sin lotes, puede editar todos los IDs. Owners y admins no tienen ese límite. Fuera de sus lotes no ve, no edita, no escanea, no importa, no exporta ni asigna esos IDs.
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_dueowhitelabel_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)
- Owner/admin configura el PIN en Ajustes.
- Escribile al bot de ForeverLink.
- Pasá tu identificador de URL (o el email de un miembro) y el PIN.
- 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.
---
## 18. AppSumo (deal de por vida)
¿Compraste ForeverLink en AppSumo? Canjeá tu licencia:
1. Entrá a tu cuenta de AppSumo → **Products** → tocá **Activate** junto a ForeverLink. Caés en nuestra página de activación.
2. Sin cuenta todavía: completá el formulario — tu plan de por vida se aplica al instante, sin tarjeta ni suscripción.
3. ¿Ya tenés cuenta de ForeverLink? Iniciá sesión primero y aplicale la licencia a tu organización. Solo el **dueño** puede aplicarla.
4. Activada, el plan se muestra como **AppSumo Tier 1 / 2 / 3** en Facturación y nunca pide suscripción.
Tiers: 1.000 links / 3 usuarios · 5.000 links / 10 usuarios + dominio propio · 20.000 links / 50 usuarios + dominio propio + API + panel sin marca.
Reembolsos y cambios de tier se gestionan en AppSumo (60 días de reembolso). Si una licencia deja de funcionar, iniciá sesión con la cuenta con la que la canjeaste o [escribinos](/contact) con tu email de AppSumo.
---
¿Necesitás una persona? [Contacto](/contact) o abrí un ticket en la app.