Documentación de la API

Integra sistemas externos con Requester.pro usando la API REST Pública y webhooks.

URL Base: https://requester.pro/api/v1

Autenticación

Todas las solicitudes a la API deben incluir una clave de API válida en el encabezado Authorization usando el esquema Bearer. Las claves de API están vinculadas a un único espacio y están disponibles en el plan Business.

Authorization: Bearer rqp_a1b2c3d4e5f6...

Cómo obtener una clave de API

  1. Navega a la configuración de tu espacio
  2. Abre la pestaña "Claves de API"
  3. Haz clic en "Crear Clave de API" y dale un nombre descriptivo
  4. Copia la clave inmediatamente — no se mostrará de nuevo
Mantén tu clave de API en secreto. No la expongas en código del lado del cliente o repositorios públicos. Si está comprometida, revócala inmediatamente desde la configuración del espacio.

Crear Solicitud

POST/api/v1/requests

Crea una nueva solicitud en el espacio asociado a la clave de API.

Cuerpo de la Solicitud

{
  "templateId": "tpl_abc123",
  "fields": [
    { "fieldId": "field_1", "value": "Server is down" },
    { "fieldId": "field_2", "value": "high" }
  ],
  "priority": "high",
  "assignedToId": "user_xyz"
}
CampoTipoRequerido
templateIdstring
fieldsarray<{ fieldId, value }>
prioritystringNo
assignedToIdstringNo

Respuesta 201

{
  "data": {
    "id": "req_def456",
    "status": "todo",
    "createdAt": "2024-01-15T10:30:00.000Z"
  }
}

Respuestas de Error

  • 401Clave de API inválida o ausente
  • 403La plantilla no pertenece a este espacio
  • 422Campos requeridos de la plantilla ausentes o datos inválidos
  • 429Límite de solicitudes excedido

Listar Solicitudes

GET/api/v1/requests

Recupera una lista paginada de solicitudes en el espacio. Soporta filtrado por estado, plantilla, asignado y rango de fechas.

Parámetros de Consulta

ParámetroTipoDescripción
statusstringFiltrar por estado (todo, in_progress, done, closed)
templateIdstringFiltrar por ID de plantilla
assignedToIdstringFiltrar por ID del usuario asignado
createdAfterISO 8601Solo solicitudes creadas después de esta fecha
createdBeforeISO 8601Solo solicitudes creadas antes de esta fecha
pagenumberNúmero de página (predeterminado: 1)
pageSizenumberElementos por página (predeterminado: 20, máx: 50)

Respuesta 200

{
  "data": [
    {
      "id": "req_def456",
      "templateId": "tpl_abc123",
      "status": "in_progress",
      "priority": "high",
      "assignedToId": "user_xyz",
      "createdAt": "2024-01-15T10:30:00.000Z",
      "updatedAt": "2024-01-15T11:00:00.000Z"
    }
  ],
  "meta": {
    "total": 42,
    "page": 1,
    "pageSize": 20,
    "hasMore": true
  }
}

Obtener Solicitud

GET/api/v1/requests/:id

Recupera los detalles completos de una única solicitud, incluyendo todos los valores de campos.

Respuesta 200

{
  "data": {
    "id": "req_def456",
    "templateId": "tpl_abc123",
    "status": "in_progress",
    "priority": "high",
    "assignedToId": "user_xyz",
    "createdAt": "2024-01-15T10:30:00.000Z",
    "updatedAt": "2024-01-15T11:00:00.000Z",
    "fieldValues": [
      { "fieldId": "field_1", "name": "Description", "value": "Server is down" },
      { "fieldId": "field_2", "name": "Category", "value": "high" }
    ]
  }
}

Respuestas de Error

  • 401Clave de API inválida o ausente
  • 404Solicitud no encontrada o pertenece a otro espacio
  • 429Límite de solicitudes excedido

Actualizar Estado de Solicitud

PATCH/api/v1/requests/:id/status

Actualiza el estado de una solicitud existente. Solo se aceptan transiciones de estado válidas.

Cuerpo de la Solicitud

{
  "status": "in_progress"
}

Transiciones de Estado Válidas

DeA
todoin_progress
in_progressdone
doneclosed
Cualquier estadotodo

Respuesta 200

{
  "data": {
    "id": "req_def456",
    "status": "in_progress",
    "previousStatus": "todo",
    "updatedAt": "2024-01-15T11:00:00.000Z"
  }
}

Respuestas de Error

  • 401Clave de API inválida o ausente
  • 404Solicitud no encontrada o pertenece a otro espacio
  • 422Transición de estado inválida (la respuesta incluye transiciones permitidas)
  • 429Límite de solicitudes excedido

Webhooks

Los webhooks te permiten recibir notificaciones HTTP POST en tiempo real cuando ocurren eventos en tu espacio. Configura endpoints de webhook en la configuración del espacio (requiere plan Business).

Tipos de Evento

  • request_createdSe creó una nueva solicitud
  • request_status_changedSe actualizó el estado de una solicitud
  • request_assignedSe asignó o reasignó una solicitud
  • request_closedSe cerró una solicitud

Formato del Payload

{
  "id": "del_abc123",
  "type": "request_status_changed",
  "timestamp": "2024-01-15T10:30:00.000Z",
  "space": {
    "id": "space_xyz",
    "slug": "engineering"
  },
  "data": {
    "requestId": "req_def456",
    "templateId": "tpl_abc123",
    "status": "in_progress",
    "previousStatus": "todo",
    "assignedToId": "user_xyz",
    "updatedAt": "2024-01-15T10:30:00.000Z"
  }
}

Verificación de Firma

Si configuraste un secreto para tu endpoint de webhook, cada entrega incluye un encabezado X-Requester-Signature-256. Verifícalo usando HMAC-SHA256:

import crypto from 'crypto';

function verifySignature(payload: string, secret: string, signature: string): boolean {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(payload, 'utf8')
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

// Usage in your webhook handler:
const signature = req.headers['x-requester-signature-256'];
const isValid = verifySignature(rawBody, yourSecret, signature);

Comportamiento de Reintento

Las entregas fallidas (respuesta no-2xx o timeout después de 10s) se reintentan con backoff exponencial:

IntentoRetraso
11 segundo
24 segundos
316 segundos
464 segundos
5256 segundos

Después de 5 intentos fallidos, la entrega se marca como fallida. Revisa el log de entregas en la configuración del espacio para solucionar problemas.

Límite de Solicitudes

La API Pública impone límites de solicitudes para garantizar un uso justo y la estabilidad del sistema.

  • 60 solicitudes por minuto por clave de API
  • Las respuestas 429 incluyen un encabezado Retry-After indicando los segundos hasta que se permita la siguiente solicitud

Ejemplo de Respuesta 429

{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Too many requests. Please retry after the specified duration."
  }
}

Implementa backoff exponencial en tu cliente al recibir respuestas 429. Cada clave de API tiene un límite independiente.

Documentación de la API | Requester.pro