API de Chat Shares
Crea, lista y revoca share links públicos para sesiones de chat.
La API de Chat Shares permite compartir sesiones de AI chat como link público read-only — p. ej. para review de cliente o como evidencia de un análisis del Master Agent. El owner crea vía /v1/chat-shares, el destinatario lee vía /share/{token} (público, noindex). Documentación completa del módulo: Agentic Chat.
Todos los endpoints API autenticados con Sanctum, scope al team.
Endpoints
| Method | Endpoint | Descripción | Créditos |
|---|---|---|---|
| GET | /v1/chat-shares |
Shares propios (paginado 25/página) | 0 |
| POST | /v1/chat-shares |
Crear nuevo share link para una sesión propia | 0 |
| GET | /v1/chat-shares/{id} |
Detalle + stats | 0 |
| PATCH | /v1/chat-shares/{id} |
Update de settings (incluido freeze) |
0 |
| DELETE | /v1/chat-shares/{id} |
Revocar (soft-delete) | 0 |
| GET | /v1/chat-shares/{id}/views |
Log de views paginado (anonimizado por GDPR) | 0 |
| GET | /v1/agentic/sessions/{session}/shares |
Shares de una sesión concreta | 0 |
POST /v1/chat-shares
Body:
| Campo | Obligatorio | Default | Descripción |
|---|---|---|---|
session_id |
sí | — | ID de una AiChatSession que pertenezca al usuario |
title |
no | — | Título de la share page |
expires_at |
no | +7 días | ISO datetime, debe estar en el futuro |
password |
no | — | mín 4 caracteres — activa el password gate |
max_views |
no | — | Hard cap de views únicas (≥1) |
show_user_messages |
no | true |
Mostrar bubbles del usuario |
show_assistant_messages |
no | true |
Mostrar bubbles del assistant |
show_tool_results |
no | false |
On/off de las cards de tool call — si está off, el destinatario solo ve inputs+outputs |
show_reasoning_steps |
no | false |
Bloques de reasoning/thinking |
show_uploaded_files |
no | true |
Files subidos (capturas, PDFs) |
Al menos una opción show_* debe ser true, si no la API devuelve 422.
curl -X POST "$BASE/chat-shares" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"session_id": 42,
"title": "Backlinks-Analyse fuer Kunde X",
"expires_at": "2026-06-01T00:00:00Z",
"show_tool_results": true
}'
Response 201:
{
"data": {
"id": 1,
"token": "f3a9b2c4...",
"url": "https://rankion.ai/share/f3a9b2c4...",
"title": "Backlinks-Analyse fuer Kunde X",
"session_id": 42,
"expires_at": "2026-06-01T00:00:00Z",
"frozen_at": null,
"has_password": false,
"max_views": null,
"view_count": 0,
"unique_viewer_count": 0,
"last_viewed_at": null,
"revoked_at": null,
"status": "active",
"show_user_messages": true,
"show_assistant_messages": true,
"show_tool_results": true,
"created_at": "2026-05-01T09:14:01Z"
}
}
PATCH /v1/chat-shares/{id}
Acepta los mismos campos que POST más freeze: bool:
freeze: true— congela el snapshot de contenido. Los cambios posteriores en la sesión origen ya no se ven en el share.freeze: false— vuelve a live; el share refleja de nuevo la sesión actual.
DELETE /v1/chat-shares/{id}
Soft revoke. Asigna revoked_at — el public link entrega a partir de ese momento 410 Gone. La fila permanece 90 días en la BD (configurable vía CHAT_SHARES_RETENTION_DAYS), luego un job daily prune la borra definitivamente.
Public route (NO está en la API)
Estas rutas no viven bajo /api/v1/ — son HTML público:
| Method | Path | Descripción |
|---|---|---|
| GET | /share/{token} |
View HTML read-only, noindex vía meta + X-Robots-Tag + disallow en robots.txt |
| POST | /share/{token}/unlock |
Form de password (throttle 5/min) — setea cookie httpOnly path-scoped |
| GET | /share/{token}/print |
Variante print-CSS para export PDF |
Estadísticas y view log
GET /v1/chat-shares/{id}/views entrega el histórico de views anonimizado por GDPR — IP hash, user agent family, referrer domain, timestamp. Sin datos personales.
curl "$BASE/chat-shares/1/views?per_page=50" \
-H "Authorization: Bearer $TOKEN" | jq '.data[] | {viewed_at, ua_family, referrer_domain}'
Códigos de status
| Code | Significado |
|---|---|
| 201 | Share creado |
| 200 | List/Detail/Update/Views OK |
| 204 | DELETE exitoso |
| 403 | La sesión no pertenece al usuario |
| 404 | Share o sesión no encontrada |
| 410 | Share revocado (solo public route) |
| 422 | Ninguna opción show_* en true, expires_at inválido o password demasiado corto |
Pitfalls
show_tool_results=falsees default. Por defecto el destinatario no ve cards de tool call — solo la conversación. Actívalo cuando quieras compartir, p. ej., datos SERP o tablas de backlinks.freezeno es reversible sin PATCH. Una vez congelado, el snapshot queda fijo — aunque la sesión continúe.- El public link no se revoca por token. La revocación va solo vía
DELETE /v1/chat-shares/{id}con auth token del owner. - El throttle de password es duro. 6+ intentos fallidos / minuto → 429 durante 60 s; un segundo intento de bypass alarga el lockout.
Relacionado: Agentic Chat · API de Agentic Plans · API de Auth.