Skip to content

Autenticación — API de Zelta Forms

La API de Zelta Forms utiliza autenticación basada en tokens Bearer (OAuth 2.0) para proteger el acceso a los recursos.

Obtener un token de acceso

Paso 1: Crear una aplicación API

  1. Ve a Ajustes > API > Aplicaciones.
  2. Haz clic en + Nueva aplicación.
  3. Completa los datos:
    • Nombre de la aplicación
    • URL de redirección (para flujo OAuth)
    • Scopes requeridos
  4. Guarda y copia tu client_id y client_secret.

Seguridad

El client_secret solo se muestra una vez al momento de crearlo. Guárdalo en un lugar seguro. Si lo pierdes, deberás generar uno nuevo.

Paso 2: Solicitar un token

Realiza una petición POST al endpoint de autenticación:

bash
curl -X POST https://api.zelta.dev/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "grant_type": "client_credentials",
    "client_id": "tu_client_id",
    "client_secret": "tu_client_secret",
    "scope": "forms:read forms:write"
  }'

Respuesta exitosa

json
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "forms:read forms:write"
}

Paso 3: Usar el token

Incluye el token en el header Authorization de cada petición:

bash
curl -X GET https://api.zelta.dev/v1/forms \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."

Scopes disponibles

ScopeDescripciónPermisos
forms:readLectura de formularios y respuestasConsultar formularios, campos y respuestas.
forms:writeEscritura de formulariosCrear y actualizar formularios y campos.
forms:adminAdministración completaEliminar formularios, gestionar configuraciones y exportar datos.

Principio de mínimo privilegio

Solicita únicamente los scopes que tu aplicación necesita. Si solo necesitas leer respuestas, usa forms:read.

Renovación de tokens

Los tokens tienen una vigencia de 1 hora (3600 segundos). Para renovar:

bash
curl -X POST https://api.zelta.dev/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "grant_type": "refresh_token",
    "refresh_token": "tu_refresh_token",
    "client_id": "tu_client_id"
  }'

Errores de autenticación

Código HTTPErrorDescripción
401unauthorizedToken ausente, expirado o inválido.
403forbiddenEl token no tiene los scopes necesarios.
429rate_limitedSe excedió el límite de peticiones.

Ejemplo de error

json
{
  "error": "unauthorized",
  "message": "El token de acceso ha expirado.",
  "hint": "Solicita un nuevo token usando tu refresh_token."
}

Límites de tasa (Rate Limiting)

PlanLímite
Starter60 peticiones/minuto
Business300 peticiones/minuto
Enterprise1,000 peticiones/minuto

Los headers de respuesta incluyen información sobre tu consumo:

X-RateLimit-Limit: 300
X-RateLimit-Remaining: 285
X-RateLimit-Reset: 1709145600

Consejo

Implementa un mecanismo de reintento exponencial (exponential backoff) para manejar errores 429 de manera elegante.

Documentación oficial de Zelta