Diil Docs
  1. Documentación
  2. Referencia de la API

GET /v1/sections/:marker — una sección

Actualizado:

Una sección es una franja horizontal de la página (el hero, la tabla de precios, las FAQ) junto con todos sus bloques. Normalmente las secciones te llegan gratis dentro de /v1/pages/:marker. Este endpoint es para cuando quieres solo una porción y no la tarta entera.

Cuándo una sección gana a la página entera

Pedir la página completa sigue siendo lo normal y, para la mayoría de páginas, lo correcto: una petición y todo dentro. Una sección suelta gana en unos pocos casos concretos:

  • Carga diferida por debajo del pliegue. La página es larga, el carrusel de opiniones vive por el cuarto scroll y la mayoría de visitantes nunca llega ahí. Pide la página con ?empty para el título y las meta etiquetas, trae por marcador las secciones de la primera pantalla y carga las pesadas solo cuando el visitante se acerque a ellas.
  • Secciones compartidas. El footer, una franja de newsletter, un bloque de contacto “¿Te quedan dudas?” que aparece en todas las páginas. Guárdalo una vez en el CRM y pídelo por marcador donde lo necesites.
  • Refrescar una sola parte. Un widget de cliente al que solo le importa una sección (por ejemplo, una zona promocional que revisas con un temporizador) no necesita descargarse la página entera cada vez.

Obtener una sección

GET/v1/sections/:marker

https://back.sitecog.com/content/v1/sections/:marker

Una sección con sus bloques en content. La forma es exactamente la misma que la de una sección dentro de la respuesta de una página, así que el mismo código de renderizado sirve para las dos.

Parámetros

markerpathstringobligatorio
El marcador de la sección en el CRM, p. ej. hero o reviews. Las mismas reglas que para los marcadores de página: letras latinas, dígitos y guiones bajos, de 2 a 40 caracteres, distingue mayúsculas. La sección se busca solo por su marcador (no hay parámetro de página), así que a las secciones que pidas así dales marcadores que no se repitan en otras páginas.
langquerystringopcionalPor defecto: todos los idiomas activos
Limita las traducciones de los bloques a estos idiomas: ?lang=en, ?lang=en,de o ?lang=en&lang=de. Cada código tiene que ser un idioma activo del sitio; si no, recibes 400 unknown_lang. Mira Idiomas y fallbacks.
emptyqueryflagopcionalPor defecto: desactivado
Devuelve la sección sin su content: solo id, marker, name, index y show. Presente = activado: ?empty, ?empty=1, ?empty=true; se desactiva con 0 o false. Útil para una comprobación barata de “¿esta sección está activada?” antes de cargar nada pesado.
x-crm-keyheaderstringobligatorio
La clave de tu sitio. También se puede pasar como ?key= si no puedes usar cabeceras. Mira Claves del sitio.

Ejemplo de petición

curl "https://back.sitecog.com/content/v1/sections/reviews?lang=en" \
  -H "x-crm-key: pk_3f9c2a7e1b4d4c0e8a6f5b2d9c1e7a40"

Ejemplo de respuesta

200 OKjson
{
  "id": 47,
  "marker": "reviews",
  "name": "Customer reviews",
  "index": 4,
  "show": true,
  "content": {
    "reviews_title": {
      "id": 120,
      "marker": "reviews_title",
      "name": "Title",
      "type": "text",
      "multilang": true,
      "updatedAt": "2026-09-21T11:02:15.000Z",
      "content": { "en": "What people say" }
    },
    "reviews_list": {
      "id": 121,
      "marker": "reviews_list",
      "name": "Reviews",
      "type": "array",
      "multilang": false,
      "updatedAt": "2026-09-25T08:40:03.000Z",
      "content": [
        {
          "author": { "en": "Maria, Berlin" },
          "text": { "en": "Finally I can hear my podcast on the U-Bahn." },
          "rating": 5
        }
      ]
    }
  }
}

Con ?empty la misma petición devuelve solo la parte de arriba: muy práctico cuando lo único que quieres saber es si la sección está activada:

200 OK — ?emptyjson
{
  "id": 47,
  "marker": "reviews",
  "name": "Customer reviews",
  "index": 4,
  "show": true
}

Campos de la respuesta

idnumber
Id interno de la sección. Es estable, pero en tu código mejor usa el marcador: los ids cambian de un entorno a otro.
markerstring
El marcador de la sección, el mismo que pones en la URL.
namestring
Nombre legible del CRM (“Customer reviews”). Es para los editores: no lo muestres en la página.
indexnumber
Posición de la sección en su página, empezando por 0. Útil si cargas varias secciones en diferido y necesitas mantener su orden.
showboolean
Si el editor quiere que esta sección se vea. Mira el flag show más abajo: una sección oculta se devuelve igualmente.
content{ [blockMarker]: Block }
Los bloques de la sección, indexados por marcador. No aparece si pasas ?empty.
content →
idnumber
Id del bloque.
markerstring
Marcador del bloque, p. ej. reviews_title.
namestring
Nombre para los editores.
typestring
Uno de text, html, image, video, link, number, color, date, date_range, boolean, object, array. Determina la forma de content.
multilangboolean
Para imágenes y vídeos: true si cada idioma tiene su propio archivo.
updatedAtstring (ISO 8601)
Cuándo se editó el bloque por última vez.
contentdepends on type
El valor en sí: un mapa de idiomas para el texto, { file } para una sola imagen, un array de elementos para array, etc. Todas las formas están en la página Tipos de bloque.

El flag show: oculto no es borrado

Los editores pueden desactivar una sección en el CRM sin borrarla: una promo de temporada, unas FAQ a medio escribir o un bloque que espera el visto bueno de legal. La API sigue devolviendo esa sección con "show": false y todo su contenido. Decidir no renderizarla es trabajo de tu plantilla:

const reviews = await getSection('reviews');

return (
  <>
    <Hero />
    {reviews.show && <Reviews section={reviews} />}
  </>
);

Errores

EstadoCuerpoQué ha pasado
400{"message":"invalid_marker"}El marcador tiene caracteres fuera de A–Z a–z 0–9 _ o una longitud incorrecta.
400{"message":"invalid_lang", …}Un código de lang está mal formado (piensa en english en vez de en).
400{"message":"unknown_lang", …}Un idioma de lang no está activo en el sitio. El cuerpo incluye los disponibles.
401{"message":"invalid_key"}Falta la clave, está mal formada o se ha revocado.
404{"message":"section_not_found"}No hay ninguna sección con este marcador en este sitio. ¿Una errata? ¿Otra clave de sitio?
429{"message":"rate_limit_exceeded"}Demasiadas peticiones en este minuto. Mira Límites de peticiones.

La lista completa, con soluciones, está en la página de Errores.

Consejos desde la trinchera