FAQ API
Endpoints del dashboard (JWT)
Ruta base: /api/v1/dashboard/faq. Para escribir y para GET /pending hace falta el rol owner o admin.
CRUD
GET /?entityType=product&entityId=123&locale=en&storeId=...— lista FAQs (limitpor defecto 200, máximo 1000;offset)POST /— crearPATCH /:id— actualizarDELETE /:id— borrar
En lote
POST /bulk— array de objetos FAQPOST /import/csv— cuerpo CSV (mira Editor de FAQ)GET /export/csv— exportar. Sin filtros → todas las FAQs de la organización. Con?entityType=…&entityId=…(y opcionalmentelocale,storeId) → filtradas.GET /template— formato JSON de ejemplo para importar.entityIdes el id que la propia plataforma da a la entidad (por ejemplo, el id de producto de BigCommerce112), no el id interno de Clione.
Generación y revisión
POST /generate— FAQs generadas por LLM para una entidad. Se crean aprobadas y visibles, y se descuentan de la cuota de enriquecimientoPOST /:id/approve— aprueba una pregunta pendiente enviada desde el storefront (cuerpo:answer,reviewedByopcional)POST /:id/reject— rechazarGET /pending— preguntas enviadas desde el storefront, pendientes de revisión
Resumen
GET /stats?storeId=…— contadores: preguntas activas y entidades a las que respondenGET /entities?storeId=…&entityType=…— entidades con al menos una FAQ
Biblioteca de FAQ
Ruta base: /api/v1/dashboard/faq-library. Una entrada de la biblioteca es una respuesta canónica, enlazada de forma explícita a las entidades que deben mostrarla.
GET /— lista las entradas de la bibliotecaPOST /— crear una entradaPATCH /:id— actualizarDELETE /:id— borrarGET /:id/links— entidades a las que está enlazada una entradaPOST /:id/links— enlaza la entrada a una entidad (entityType,entityId), o, conscope: "store", a todas las entidades de unentityTypeen una tienda (necesitaentityTypeystoreId)DELETE /:id/links— desenlazarGET /export.csv,POST /import/csv,GET /template.csv— ida y vuelta en CSV
Endpoints públicos (API key)
Ruta base: /api/v1/public/faq. Los usa el widget de FAQ. Cada llamada necesita una API key con el scope products:read; la organización sale de la key, nunca de una cabecera. Rate limit de 200 peticiones cada 5 minutos por key. La petición también tiene que pasar los allowedDomains y las comprobaciones de navegador de la key; mira Autenticación.
GET /api/v1/public/faq/render?entityType=product&entityId=123&pageUrl=https://shop.example.com/products/foo
X-API-Key: sk_live_...
Origin: https://shop.example.com
Parámetros de query: entityType, entityId (obligatorios), locale, pageUrl, heading, storeId (opcional; por defecto, la tienda de la key).
Respuesta:
{
"data": {
"entries": [{ "question": "...", "answer": "..." }],
"jsonLd": { "@context": "https://schema.org", "@type": "FAQPage", ... },
"scriptTag": "<script type=\"application/ld+json\">...</script>",
"htmlBlock": "<div class=\"clione-faq\">...</div>",
"entryCount": 5,
"specificCount": 3,
"libraryCount": 2,
"tenantPlatformId": "..."
}
}
entries junta las FAQs propias de la entidad con las entradas de la biblioteca enlazadas a ella, ordenadas por sortOrder. specificCount cuenta las propias y libraryCount las de la biblioteca. Si la entidad no tiene FAQs, la respuesta es { "data": null, "message": "No FAQ entries found for this entity" }.
Otros endpoints públicos:
POST /submit— un comprador envía una pregunta (entityType,entityId,question,submittedByopcional). Se guarda comopendingy aparece enGET /api/v1/dashboard/faq/pending. Devuelve201.GET /ping— confirma que la key es válida; devuelvetenantId,tenantPlatformId,scopesyserverTime.
Tipos de entidad
product, variant, category, collection, brand, page.
FAQ en los endpoints de señales
Las FAQs aprobadas y visibles forman parte de los endpoints .jsonld de todos los tipos de entidad. Cuando una entidad las tiene, el @graph incluye un nodo FAQPage junto al nodo de la propia entidad:
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "Product", "name": "...", ... },
{ "@type": "FAQPage", "mainEntity": [...] }
]
}
Aplica a:
GET /api/v1/{platform}/products/:id.jsonldGET /api/v1/shopify/collections/:id.jsonldGET /api/v1/{platform}/categories/:id.jsonld(BigCommerce, WooCommerce)GET /api/v1/{platform}/pages/:id.jsonld
En el storefront, el JSON-LD FAQPage viaja en el grafo server-side que Clione publica a través de la plataforma. El widget (embed.js) pinta el acordeón de FAQ visible, y no añade un segundo FAQPage cuando la página ya lleva uno.