Endpoints
Base de la API:
https://sectionfy.codefy-apps.comTodas las rutas son GET, no llevan headers de autenticación y responden JSON.
Resumen
Sección titulada «Resumen»| Ruta | Devuelve |
|---|---|
/api/public/content/{token}/{page} | Secciones de una página general (home, plantilla de producto, plantilla de categoría). |
/api/public/content/{token}/{page}/{targetId} | Secciones de un producto o categoría concretos. |
/api/public/content/{token}/products/all | Todos los productos con secciones configuradas. |
/api/public/key-features-banner/{token} | Los banners de características de la tienda. |
/api/public/promo-modal/{token} | Los banners promocionales de una página de inicio, categoría o producto. |
/api/public/featured-benefits/{token} | Las secciones de beneficios destacados de una página de inicio, categoría o producto. |
/api/public/related-products/{token} | Las recomendaciones de productos de cualquier página (inicio, producto, categoría, …). |
/api/public/video-banner/{token} | Los video banners de una página de inicio, categoría o producto. |
/api/public/video-reviews/{token} | Los carruseles de testimonios en video de una página de inicio, categoría o producto. |
El vocabulario de {page}
Sección titulada «El vocabulario de {page}»Esta es la fuente número uno de errores 400. El conjunto de valores válidos
para {page} cambia según la ruta lleve {targetId} o no.
| Ruta | Valores aceptados de {page} |
|---|---|
/{token}/{page}/{targetId} | product · category |
/{token}/{page} | product-page · category-page · home-page |
La lógica detrás: los valores con -page son plantillas que aplican a todas
las páginas de ese tipo; los valores sin sufijo apuntan a una entidad concreta
y por eso exigen un targetId.
Combinaciones válidas:
/{token}/product/333333174 ← contenido de ese producto/{token}/category/45 ← contenido de esa categoría/{token}/home-page ← contenido de la home/{token}/product-page ← contenido común a todas las fichas de producto/{token}/category-page ← contenido común a todos los listadosCombinaciones que fallan, sin fallback:
/{token}/home → 400 page must be one of: home-page, category-page, product-page/{token}/product-page/33333174 → 400 page must be one of: category, product/{token}/product → 400 (falta el targetId)GET /api/public/content/{token}/{page}
Sección titulada «GET /api/public/content/{token}/{page}»Secciones de una página general, sin identificador de entidad.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
page | path | home-page · category-page · product-page |
Ejemplo
curl https://sectionfy.codefy-apps.com/api/public/content/ndp_pub_a3f9k2mX7pLqR2wN/home-page{ "page": "home", "sections": { "grid_promocional-home-general-cmr3k81ap0002fg7dq1x8pl4c": { "titulo": "Destacados de temporada", "items": [ { "imagen": { "url": "https://cdn.example.com/promo-1.jpg", "alt": "" }, "titulo": "Hasta 30% off", "subtitulo": "Solo esta semana", "texto_boton": "Ver ofertas", "url_boton": "https://mitienda.com/ofertas", "orden": 0 } ], "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } }}Dos cosas para notar:
- El campo
pagede la respuesta viene normalizado. Pideshome-pagey recibes"page": "home". El sufijo-pagees vocabulario de la ruta, no del cuerpo. La equivalencia eshome-page → home,category-page → category,product-page → product. - Como no hay entidad concreta, el segmento de
targetIddentro de las claves desectionses el literalgeneral.
GET /api/public/content/{token}/{page}/{targetId}
Sección titulada «GET /api/public/content/{token}/{page}/{targetId}»Secciones de un producto o una categoría concretos.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
page | path | product · category |
targetId | path | ID del producto o de la categoría en Tiendanube |
Ejemplo
curl https://sectionfy.codefy-apps.com/api/public/content/ndp_pub_a3f9k2mX7pLqR2wN/product/333333174{ "page": "product", "product_id": "333333174", "sections": { "faq-product-333333174-cmqic4kt5000ieq2bk3hbiat3": { "titulo": "Preguntas frecuentes", "items": [{ "pregunta": "¿Tiene garantía?", "respuesta": "12 meses.", "orden": 0 }], "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } }}El campo identificador de la respuesta depende de page: product_id para
product, category_id para category.
Para una categoría, la forma es la misma y el identificador cambia a
category_id. El segundo segmento de cada clave es category, así que el filtro
por -${bundle.page}- sigue funcionando sin cambios:
curl https://sectionfy.codefy-apps.com/api/public/content/ndp_pub_a3f9k2mX7pLqR2wN/category/40622990{ "page": "category", "category_id": "40622990", "sections": { "faq-category-40622990-cmtacpz3y0001srlqdor0qjoz": { "titulo": "Preguntas Frecuentes", "items": [ { "pregunta": "¿Hacen envíos a todo el país?", "respuesta": "Sí, sin cargo desde $50.000.", "orden": 0 }, { "pregunta": "¿Puedo cambiar un talle?", "respuesta": "Tenés 30 días para cambiarlo.", "orden": 1 } ], "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0, "tipo": "FAQ" } }}GET /api/public/content/{token}/products/all
Sección titulada «GET /api/public/content/{token}/products/all»Todos los productos de la tienda que tienen al menos una sección configurada. Sirve para precargar, para armar un índice, o para páginas de listado donde quieres mostrar contenido de varios productos sin una llamada por cada uno.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
Ejemplo
curl https://sectionfy.codefy-apps.com/api/public/content/ndp_pub_a3f9k2mX7pLqR2wN/products/allA diferencia de los otros endpoints, aquí products es un array:
{ "page": "product", "products": [ { "product_id": "333333174", "sections": { "faq-product-333333174-cmqic4kt5000ieq2bk3hbiat3": { "titulo": "Preguntas frecuentes", "items": [], "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } } }, { "product_id": "333333180", "sections": {} } ]}GET /api/public/key-features-banner/{token}
Sección titulada «GET /api/public/key-features-banner/{token}»Los banners de características de la tienda. Es un endpoint aparte porque el contenido no está atado a una página: aplica a nivel tienda.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
Ejemplo
curl https://sectionfy.codefy-apps.com/api/public/key-features-banner/ndp_pub_a3f9k2mX7pLqR2wN{ "sections": { "key_features_banner-home-general-cmr9p2xkd0004hs5bn3wq7t1e": { "titulo": "Por qué comprarnos", "nombre_personalizado": "Banner home", "texto": "Tres razones para elegirnos.", "imagen": null, "items": [ { "imagen": { "url": "https://cdn.example.com/envio.svg", "alt": "Envío" }, "titulo": "Envío gratis", "descripcion": "En compras superiores a $50.000", "orden": 0 } ], "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } }}La respuesta es solo { sections } — sin page ni identificador, porque no
corresponde a una página. Las secciones usan las mismas claves y el mismo
estado que el resto, así que la regla de render y el ordenamiento son
idénticos. El shape completo está en
key features banner.
El segmento de placement dentro de la clave refleja dónde ubicó el banner el
comerciante, así que puede variar entre respuestas (home, category,
product). Como esta respuesta no trae page, no puedes derivar el placement
de la respuesta: léelo de la clave.
GET /api/public/promo-modal/{token}
Sección titulada «GET /api/public/promo-modal/{token}»Los banners promocionales (imagen, título, descripción y un botón con enlace) de la página de inicio, de una categoría o de un producto. Es el mismo contenido que llega en el bundle, expuesto también como endpoint propio.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
placement | query | home, category o product (opcional; sin él devuelve todas las secciones de la tienda) |
target_id | query | ID de la categoría o del producto. Obligatorio con category/product (sin él 400); con home da 400 |
Las secciones generales (las que aplican a todas las categorías o a todos los productos)
no se piden por acá: llegan en el bundle de category-page y product-page.
Ejemplo
curl "https://sectionfy.codefy-apps.com/api/public/promo-modal/ndp_pub_a3f9k2mX7pLqR2wN?placement=product&target_id=123"{ "sections": { "promo_modal-product-123-cmr9p2xkd0004hs5bn3wq7t1e": { "titulo": "Envío gratis", "items": [], "campos": { "descripcion": "En compras desde $999.", "buttonText": "Ver más", "buttonUrl": "https://mi-tienda.com/promo", "imageUrl": "https://cdn.example.com/promo.webp", "imageMimeType": "image/webp" }, "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } }}nombre_personalizado aparece solo cuando el comerciante renombró la sección; si no, la
clave se omite (no llega como null). Como en los demás endpoints dedicados, la
respuesta es solo { sections } y el placement se lee del segundo segmento de la clave
(home, category o product). El shape completo está en
Banner Promocional.
GET /api/public/featured-benefits/{token}
Sección titulada «GET /api/public/featured-benefits/{token}»Las secciones de beneficios destacados (tarjetas con imagen y estadística) de la página de inicio, de una categoría o de un producto. Es el mismo contenido que llega en el bundle, expuesto también como endpoint propio.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
placement | query | home, category o product (opcional; sin él devuelve todas las secciones de la tienda) |
target_id | query | ID de la categoría o del producto. Obligatorio con category/product (sin él 400); con home da 400 |
Las secciones generales (las que aplican a todas las categorías o a todos los productos)
no se piden por acá: llegan en el bundle de category-page y product-page.
Ejemplo
curl "https://sectionfy.codefy-apps.com/api/public/featured-benefits/ndp_pub_a3f9k2mX7pLqR2wN?placement=product&target_id=344443275"{ "sections": { "featured_benefits-product-344443275-cmu7axqfa0001uhc8b8hdznmy": { "titulo": null, "items": [ { "orden": 0, "campos": { "imageUrl": "https://cdn.example.com/serum.jpg", "cardTitle": "Glow sin maquillaje", "statValue": "86%", "statDescription": "reportó un acabado más saludable desde la primera semana." } } ], "campos": { "heading": "Por qué este serum entra en la rutina" }, "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } }}Como en los demás endpoints dedicados, la respuesta es solo { sections } y el
placement se lee del segundo segmento de la clave (home, category o product). El shape completo,
los campos de cada tarjeta y las trampas de este tipo están en
Beneficios Destacados.
GET /api/public/related-products/{token}
Sección titulada «GET /api/public/related-products/{token}»Las recomendaciones de productos (hasta 12 por sección, con los datos de cada producto ya resueltos) de cualquier página: inicio, carrito, búsqueda, registro, contacto, una categoría o un producto concreto. Es el mismo contenido de cada sección que llega en el bundle, expuesto también como endpoint propio.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
placement | query | home, category, product, cart, search, register o contact (opcional; sin él devuelve las secciones de todos los placements de la tienda) |
target_id | query | ID de la categoría o del producto. Obligatorio con category y product (sin él 400); con una página de tienda da 400; si va solo, se asume product |
Las páginas aceptadas son las que el panel ofrece para este tipo (las siete); antes solo
home y product, y esas respuestas no cambian.
Ejemplo
curl "https://sectionfy.codefy-apps.com/api/public/related-products/ndp_pub_a3f9k2mX7pLqR2wN?placement=product&target_id=344443275"{ "sections": { "related_products-product-344443275-cmu7axqfa0001uhc8b8hdznmy": { "titulo": null, "items": [ { "orden": 0, "campos": {}, "producto": { "id": "111111", "variante_id": null, "nombre": "Serum vitamina C", "variante": null, "url": "https://mi-tienda.com/productos/serum-vitamina-c/", "imagen": "https://cdn.example.com/serum-480-0.webp", "precio": 15990, "precio_comparacion": 19990, "moneda": "ARS", "disponible": true, "envio_gratis": true, "marca": "Aurora" } } ], "campos": { "heading": "Combina bien con" }, "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } }}nombre_personalizado aparece solo cuando el comerciante renombró la sección; si no, la clave
se omite. A diferencia del bundle, este endpoint ya filtra a las secciones activas y
visibles. Las secciones generales —las que aplican a todos los productos— no se piden por acá:
llegan en el bundle de product-page. El shape completo y las reglas de cada producto están
en Productos Relacionados.
Como el resto de las rutas públicas, reenvía If-None-Match con el ETag para ahorrar
transferencia — ver Cache, ETag y límites.
GET /api/public/video-banner/{token}
Sección titulada «GET /api/public/video-banner/{token}»Los video banners (video de fondo con texto y botones superpuestos) de la página de inicio, de una categoría o de un producto. Es el mismo contenido que llega en el bundle, expuesto también como endpoint propio.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
placement | query | home, category o product (opcional; sin él devuelve todas las secciones de la tienda) |
target_id | query | ID de la categoría o del producto. Obligatorio con category/product (sin él 400); con home da 400 |
Las secciones generales (las que aplican a todas las categorías o a todos los productos)
no se piden por acá: llegan en el bundle de category-page y product-page.
Ejemplo
curl "https://sectionfy.codefy-apps.com/api/public/video-banner/ndp_pub_a3f9k2mX7pLqR2wN?placement=product&target_id=344443275"{ "sections": { "video_banner-product-344443275-cmu7axqfa0001uhc8b8hdznmy": { "titulo": "Nueva colección", "items": [ { "orden": 0, "campos": { "label": "Comprar ahora", "url": "https://mitienda.com/nueva-coleccion", "style": "PRIMARY" } } ], "campos": { "description": "Descubre lo nuevo de la temporada.", "textAlignment": "BOTTOM_RIGHT", "videoUrl": "https://cdn.example.com/hero.mp4", "videoMimeType": "video/mp4", "videoDurationSeconds": 20 }, "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } }}Como en los demás endpoints dedicados, la respuesta es solo { sections } y el
placement se lee del segundo segmento de la clave (home, category o product). El shape completo,
los campos de cada botón y las trampas de este tipo están en
Video Banner.
GET /api/public/video-reviews/{token}
Sección titulada «GET /api/public/video-reviews/{token}»Los carruseles de testimonios en video (imagen o video, nombre, texto y enlace al producto) de la página de inicio, de una categoría o de un producto. Es el mismo contenido que llega en el bundle, expuesto también como endpoint propio.
Parámetros
| Nombre | En | Valores |
|---|---|---|
token | path | Token público (ndp_pub_…) |
placement | query | home, category o product (opcional; sin él devuelve todas las secciones de la tienda) |
target_id | query | ID de la categoría o del producto. Obligatorio con category/product (sin él 400); con home da 400 |
Las secciones generales (las que aplican a todas las categorías o a todos los productos)
no se piden por acá: llegan en el bundle de category-page y product-page.
Ejemplo
curl "https://sectionfy.codefy-apps.com/api/public/video-reviews/ndp_pub_a3f9k2mX7pLqR2wN?placement=product&target_id=344443275"{ "sections": { "video_reviews-product-344443275-cmu7axqfa0001uhc8b8hdznmy": { "titulo": "Historias reales", "items": [ { "orden": 0, "campos": { "mediaUrl": "https://cdn.example.com/ann.mp4", "mediaMimeType": "video/mp4", "mediaDurationSeconds": 42, "heading": "Ann F.", "body": "Pine Stripe Roll Bed", "productLinkUrl": "https://example.com/products/pine-stripe", "productLinkLabel": "Ver producto →" } } ], "campos": { "descripcion": "Mira lo que dicen nuestros clientes" }, "estado": { "lifecycle": "active", "storefrontVisible": true }, "orden": 0 } }}Como en los demás endpoints dedicados, la respuesta es solo { sections } y el
placement se lee del segundo segmento de la clave (home, category o product). El shape completo,
los campos de cada testimonio y las trampas de este tipo están en
Carrusel de testimonios en video.
Contrato máquina
Sección titulada «Contrato máquina»El contrato OpenAPI de estos endpoints está publicado en:
https://sectionfy.codefy-apps.com/api/public/content/openapi.jsonSirve para generar clientes tipados o para alimentar herramientas que consumen OpenAPI. Es la misma información que esta referencia, en formato máquina.
