Gestión de una página de Keepp
Qué es Keepp
Keepp convierte el enlace de bio de un creador o pequeño negocio en una página: una colección compartible de "tarjetas" de producto más enlaces, diseñada para convertir seguidores en compradores y leads. Es utilizada por vendedores, afiliados, coaches, creadores de cursos y creadores de link-in-bio en Instagram, YouTube, TikTok, Pinterest y X.
Una página de Keepp está compuesta por:
- Perfil — avatar, nombre visible, biografía corta
- Iconos sociales — enlaces a las cuentas sociales del propietario
- Bloques de enlaces — botones a un sitio web, página de reservas, WhatsApp, etc. (más encabezados de sección)
- Tarjetas de catálogo — las tarjetas de producto comprables (foto, precio, código promocional, llamada a la acción)
- Modo —
solo enlaces,solo catálogooenlaces y catálogo
Qué controla esta API
Esta API gestiona dos cosas:
- Tarjetas de catálogo (posts) — crear, listar, actualizar y eliminar las tarjetas de producto en el catálogo del propietario.
- Configuración de la página — el modo de diseño de la página, el texto "Acerca de", el CTA del héroe, los valores predeterminados de las tarjetas de catálogo y el tema (ver "Configuración de la página" más abajo).
NO puedes cambiar a través de esta API: iconos sociales, bloques de enlaces y detalles del perfil (nombre visible, avatar, URL de la página). Estos los establece el propietario en el panel de Keepp; si un usuario los solicita, indícale que use el panel de Keepp.
Autenticación
Cada solicitud necesita la clave API del propietario como token bearer:
Authorization: Bearer keepp_live_…
URL base: https://api.keepp.link. Las claves se generan desde una cuenta Pro en la sección Agente de IA del panel. Si no tienes una, pídele al usuario que te la proporcione.
Endpoints
| Método | Ruta | Propósito |
|---|---|---|
| GET | /api/v1/posts?cursor= | Listar las tarjetas del catálogo (paginado). |
| POST | /api/v1/posts | Crear una tarjeta. |
| GET | /api/v1/posts/:postId | Obtener una tarjeta. |
| PATCH | /api/v1/posts/:postId | Actualizar una tarjeta. |
| DELETE | /api/v1/posts/:postId | Eliminar una tarjeta. |
El modelo de contenido de la tarjeta
Una tarjeta se crea/actualiza con tres campos de nivel superior: imageUrls, userContent y cardOverrides.
{
"imageUrls": ["https://…/foto.jpg"], // hasta 5; se obtienen y almacenan por ti. ≤10MB cada una, JPEG/PNG/WebP/GIF, URL pública directa
"userContent": {
"name": "Bufanda de seda", // título corto (opcional)
"description": "Seda de morera teñida a mano, 90×90cm.", // OBLIGATORIO
"price": "$72", // texto libre — "$72", "Desde $50", "₹1,499" (opcional)
"promoCode": "SAVE15", // código promocional / referido / descuento (opcional)
"category": "accesorios", // una de las categorías a continuación (opcional)
"links": ["https://…"], // enlaces adicionales mostrados en la tarjeta (opcional)
"contacts": [{ "type": "whatsapp", "value": "+15551234567" }] // opcional
},
"cardOverrides": { // cómo se comporta la tarjeta (opcional; omitir para heredar los valores predeterminados de la página)
"clickAction": "open_detail", // "open_detail" | "trigger_cta"
"ctaType": "link", // "message" | "link" | "lead_collection"
"ctaUrl": "https://shop…/bufanda", // OBLIGATORIO cuando ctaType = "link"
"ctaLabel": "Comprar ahora" // texto del botón
}
}
description es el único campo obligatorio. Todo lo demás es opcional; omitir cardOverrides hereda los valores predeterminados de toda la página del propietario.
Categorías: ropa, joyería, accesorios, decoración_hogar, belleza, comida_bebida, arte, papelería, plantas, fitness, viajes, bienes_raíces, servicios, mascotas, niños_bebé, libros_medios, artesanía, otros.
Tipos de contacto: teléfono, correo electrónico, whatsapp, telegram, otros.
Cómo se comporta una tarjeta — dos decisiones
1. clickAction — qué hace al tocar la tarjeta:
open_detail(predeterminado) — abre una vista de detalle completa (todas las fotos, descripción completa, precio, código promocional, botón de CTA). Úsalo cuando el comprador necesite contexto antes de actuar.trigger_cta— al tocar ejecuta el CTA inmediatamente, sin pantalla de detalle. Úsalo para artículos autoexplicativos donde quieras la menor fricción.
2. ctaType — qué hace el CTA:
message— abre un mensaje para el negocio. Un valor predeterminado seguro cuando no hay enlace de pago.link— abrectaUrl(una página de Shopify/Etsy, un enlace de afiliado, una página de reservas, un formulario de Google). RequierectaUrl. Úsalo cuando haya un destino dedicado.lead_collection— abre un formulario corto en la página que captura los datos de contacto del visitante y los guarda como lead. Úsalo para capturar personas que no están listas para comprar (listas de espera, listas de ventas, consultas de coaching). Los campos recopilados se configuran a nivel de página a través decatalogCard.leadCollectionen el endpoint de configuración de página (ver más abajo) — se aplican a todas las tarjetas, no por tarjeta.
Configura ctaLabel para que coincida con la acción: "Comprar ahora", "Pedir ahora", "Consigue el lookbook", "Reserva el tuyo", "Recibe notificaciones".
Configuración de la página
Lee y cambia la configuración general de la página.
| Método | Ruta | Propósito |
|---|---|---|
| GET | /api/v1/storefront | Obtener la configuración actual de la página. |
| PATCH | /api/v1/storefront | Cambiar la configuración. Envía solo los campos que deseas cambiar; se fusionan con la configuración actual. |
Campos editables:
{
"mode": "links_and_catalog", // "links_only" | "catalog_only" | "links_and_catalog"
"about": "Cerámica hecha a mano desde mi estudio en Lisboa.", // eslogan corto de la página (≤280 caracteres)
"mainCta": { // botón héroe en la parte superior de la página
"enabled": true,
"label": "Reservar una llamada",
"url": "https://cal.com/me" // obligatorio cuando está habilitado
},
"catalogCard": { // VALORES PREDETERMINADOS para toda la página para cada tarjeta
"showCardDetails": true,
"clickAction": "open_detail", // "open_detail" | "trigger_cta"
"ctaType": "message", // "message" | "link" | "lead_collection"
"ctaUrl": "https://…", // obligatorio cuando ctaType = "link"
"ctaLabel": "Pedir ahora",
"leadCollection": { "phone": true, "email": true, "instagram": false, "message": true }
},
"theme": {
"useCustomTheme": true, // DEBE ser true para que preset/brandColor tengan efecto
"preset": "professional", // "calm" | "professional" | "playful" | "dark"
"brandColor": "#d7494c" // hex de 6 dígitos
}
}
- Las actualizaciones parciales se fusionan.
PATCH {"theme":{"useCustomTheme":true,"brandColor":"#000000"}}cambia solo el tema; el modo, las tarjetas, etc. permanecen como estaban. - Protección del tema:
preset/brandColorse ignoran a menos queuseCustomThemeseatrue— envíalo en la misma solicitud. catalogCardes el valor predeterminado para todas las tarjetas. LoscardOverridespropios de una tarjeta (arriba) tienen prioridad sobre estos. Cambia estos para reestilizar todas las tarjetas a la vez.leadCollectionestablece qué campos recopila el formulario de leads a nivel de página (no hay elección de campo por tarjeta).- Las combinaciones no válidas son rechazadas con
400 INVALID_STOREFRONT_CONFIG(por ejemplo,ctaType:"link"sinctaUrl).
Recetas de casos de uso
Producto de afiliado/influencer con código promocional → enlace externo
{
"imageUrls": ["https://example.com/serum.jpg"],
"userContent": { "name": "Sérum de vitamina C", "description": "Mi sérum de brillo diario — 15% de descuento con mi código.", "price": "$28", "promoCode": "GLOW15", "category": "belleza" },
"cardOverrides": { "clickAction": "trigger_cta", "ctaType": "link", "ctaUrl": "https://brand.com/serum?ref=me", "ctaLabel": "Compra con mi código" }
}
Producto de boutique vendido a través de tu propia tienda
{
"imageUrls": ["https://example.com/bufanda.jpg"],
"userContent": { "name": "Bufanda de seda", "description": "Seda de morera teñida a mano, 90×90cm.", "price": "$72", "category": "accesorios" },
"cardOverrides": { "clickAction": "open_detail", "ctaType": "link", "ctaUrl": "https://mitienda.com/bufanda", "ctaLabel": "Comprar ahora" }
}
Coach / servicio — captura un lead en lugar de vender directamente
{
"imageUrls": ["https://example.com/programa.jpg"],
"userContent": { "name": "Coaching 1:1", "description": "Programa de 6 semanas para conseguir tus primeros 5 clientes.", "price": "Desde $400", "category": "servicios" },
"cardOverrides": { "clickAction": "trigger_cta", "ctaType": "lead_collection", "ctaLabel": "Solicitar ahora" }
}
Respuestas y errores
Éxito: { "ok": true, "data": { … } }. Error: { "ok": false, "error": { "code": "…", "message": "…" } }.
401 NO_API_TOKEN/INVALID_API_TOKEN— clave faltante o revocada. Pide al usuario una clave válida.403 PLAN_REQUIRED— la cuenta no es Pro.422 INVALID_IMAGE— no se pudo obtener una URL de imagen, era del tipo/tamaño incorrecto, redirigió o se resolvió a una dirección no pública. Usa una URL de imagenhttpsdirecta y pública.429 RATE_LIMITED— más de 60 solicitudes por minuto. Reduce la velocidad y reintenta.
Orientación
- Confirma con el usuario antes de eliminar tarjetas.
- Establece
priceypromoCodesiempre que los tengas; se renderizan en la tarjeta y en la vista de detalle y son esenciales para casos de afiliados y ventas. - Al crear en masa, mantente por debajo de 60 solicitudes por minuto.
- Las tarjetas se publican en la página inmediatamente.
- Puedes gestionar tarjetas y la configuración de la página (modo, acerca de, CTA héroe, valores predeterminados de tarjetas, tema). Para enlaces, iconos sociales y detalles del perfil (nombre, avatar, URL de la página), dile al usuario que use el panel de Keepp.
Más contexto
Las guías prácticas de Keepp explican una página de Keepp en profundidad:
- Cómo elegir el modo de diseño: https://keepp.link/blog/how-to/05-choosing-your-storefront-mode
- Cómo se ven y se comportan las tarjetas de producto: https://keepp.link/blog/how-to/06-configuring-how-product-cards-look-and-behave
- CTAs por publicación y enlaces personalizados: https://keepp.link/blog/how-to/07-setting-per-post-ctas-and-custom-links