API

API reference

Iterar expone un endpoint HTTP público para enviar feedback. El SDK lo usa por debajo, pero podés llamarlo directamente si necesitás integrarlo con un backend.

POST /v1/widget/feedback

Crea un feedback crudo y lo encola para procesamiento por IA.

Headers requeridos

HeaderDescripción
X-Iterar-Project-KeyKey pública del proyecto (lpbk_pub_…).
X-Iterar-OriginDominio del sitio donde corre el widget.
Cf-Turnstile-TokenToken de Cloudflare Turnstile (excepto localhost).

Body

CampoTipoDescripción
contentstringTexto del feedback (máx 2.000 chars).
languagestring?ISO 639-1; si no se manda, se autodetecta.
category_hintstring?feature | bug | improvement | integration | question | other.
emailstring?Email opcional del usuario que envía.
metadataobject?JSON arbitrario (userId, plan, etc).
origin_urlstring?URL exacta donde se envió el feedback.

Ejemplo

request
http
POST https://api.iterar.io/v1/widget/feedback
Content-Type: application/json
X-Iterar-Project-Key: lpbk_pub_xxxxxxxxxx
X-Iterar-Origin: https://app.tu-saas.com
Cf-Turnstile-Token: 0.AbCDef...

{
  "content": "Estaría buenísimo poder exportar a PDF",
  "language": "es",
  "category_hint": "feature",
  "email": "user@example.com",
  "metadata": { "plan": "pro", "userId": "u_123" },
  "origin_url": "https://app.tu-saas.com/dashboard"
}

Respuesta

response
http
200 OK
{
  "ok": true,
  "feedback_id": "fb_01HBC...",
  "queued": true,
  "message": "Gracias, ya estamos viendo tu sugerencia."
}
Por qué queued: true
El feedback se acepta sincrónicamente pero el pipeline IA (embedding, dedup, clasificación) corre asíncrono. El widget muestra el thanks inmediato y la bandeja del founder se actualiza en segundos.

Códigos de error

CódigoSignificado
400Body inválido o content vacío.
401Project key inválida o revocada.
403Dominio no autorizado en allowed_origins.
422Turnstile token inválido o expirado.
429Rate limit excedido (10/IP/hora por proyecto).
500Error interno; reintentar con backoff.

Rate limiting

  • 10 submissions por IP, por hora y por proyecto.
  • Header de respuesta X-RateLimit-Remaining indica cuántas quedan.
  • Cuando se supera, devolvemos 429 con Retry-After.