Ir al contenido

Endpoints

Base de la API:

https://sectionfy.codefy-apps.com

Todas las rutas son GET, no llevan headers de autenticación y responden JSON.

RutaDevuelve
/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/allTodos 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.

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.

RutaValores 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 listados

Combinaciones 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)

Secciones de una página general, sin identificador de entidad.

Parámetros

NombreEnValores
tokenpathToken público (ndp_pub_…)
pagepathhome-page · category-page · product-page

Ejemplo

Ventana de terminal
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 page de la respuesta viene normalizado. Pides home-page y recibes "page": "home". El sufijo -page es vocabulario de la ruta, no del cuerpo. La equivalencia es home-page → home, category-page → category, product-page → product.
  • Como no hay entidad concreta, el segmento de targetId dentro de las claves de sections es el literal general.

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

NombreEnValores
tokenpathToken público (ndp_pub_…)
pagepathproduct · category
targetIdpathID del producto o de la categoría en Tiendanube

Ejemplo

Ventana de terminal
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:

Ventana de terminal
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

NombreEnValores
tokenpathToken público (ndp_pub_…)

Ejemplo

Ventana de terminal
curl https://sectionfy.codefy-apps.com/api/public/content/ndp_pub_a3f9k2mX7pLqR2wN/products/all

A 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": {}
}
]
}

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

NombreEnValores
tokenpathToken público (ndp_pub_…)

Ejemplo

Ventana de terminal
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.


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

NombreEnValores
tokenpathToken público (ndp_pub_…)
placementqueryhome, category o product (opcional; sin él devuelve todas las secciones de la tienda)
target_idqueryID 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

Ventana de terminal
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.


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

NombreEnValores
tokenpathToken público (ndp_pub_…)
placementqueryhome, category o product (opcional; sin él devuelve todas las secciones de la tienda)
target_idqueryID 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

Ventana de terminal
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.


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

NombreEnValores
tokenpathToken público (ndp_pub_…)
placementqueryhome, category, product, cart, search, register o contact (opcional; sin él devuelve las secciones de todos los placements de la tienda)
target_idqueryID 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

Ventana de terminal
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.


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

NombreEnValores
tokenpathToken público (ndp_pub_…)
placementqueryhome, category o product (opcional; sin él devuelve todas las secciones de la tienda)
target_idqueryID 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

Ventana de terminal
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.


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

NombreEnValores
tokenpathToken público (ndp_pub_…)
placementqueryhome, category o product (opcional; sin él devuelve todas las secciones de la tienda)
target_idqueryID 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

Ventana de terminal
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.


El contrato OpenAPI de estos endpoints está publicado en:

https://sectionfy.codefy-apps.com/api/public/content/openapi.json

Sirve para generar clientes tipados o para alimentar herramientas que consumen OpenAPI. Es la misma información que esta referencia, en formato máquina.