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ú.
---
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 |
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_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.
---
¿Necesitás una persona? [Contacto](/contact) o abrí un ticket en la app.