Roldesk
Iniciar sesión

Desarrolladores

Roldesk REST API

Lee y escribe los datos de servicio de campo de tu espacio de trabajo mediante una API REST limpia y versionada. Cada solicitud se autentica con un token de acceso personal y queda estrictamente limitada a tu organización.

Inicio rápido

Crea un token en Configuración → Desarrollador (propietario/administrador, plan Professional) y luego verifícalo:

curl https://www.roldesk.com/api/v1/me \
  -H "Authorization: Bearer rk_live_…"

Lista tus órdenes de trabajo:

curl "https://www.roldesk.com/api/v1/work-orders?limit=25" \
  -H "Authorization: Bearer rk_live_…"

Autenticación

Envía tu token como credencial Bearer en cada solicitud: Authorization: Bearer rk_live_…. Los tokens se muestran una sola vez al crearlos — guárdalos de forma segura. Un propietario o administrador puede crearlos y revocarlos en Configuración → Desarrollador, y están disponibles en el plan Professional. La API es de servidor a servidor (sin cookies ni credenciales CORS del navegador).

Alcances (scopes)

Cada token recibe un subconjunto de alcances. Un alcance tiene el formato {group}:{read|write}. Un token nunca puede exceder lo que permite tu plan.

GrupoCubre
work-ordersÓrdenes de trabajo y sus tareas, repuestos, mano de obra y cierre
crmClientes (cuentas), contactos, prospectos
salesPresupuestos y facturas
contractsContratos de servicio
assetsEquipos, repuestos, herramientas, vehículos, almacenes
projectsProyectos y sus vínculos
schedulingCitas / eventos de calendario
preventiveProgramaciones de mantenimiento preventivo
teamMiembros y roles (solo lectura)
webhooksRegistrar y administrar endpoints de webhooks

Paginación

Las listas se paginan por cursor. Pasa limit (1–100, por defecto 25) y starting_after (el next_cursor de la respuesta anterior).

{
  "data": [ { "object": "work_order", "id": "…", … } ],
  "has_more": true,
  "next_cursor": "eyJ…"
}

La mayoría de las listas también aceptan filtros permitidos como status, account_id y updated_since.

Escrituras, idempotencia y concurrencia

Las creaciones aceptan un encabezado Idempotency-Key — reintentar con la misma clave devuelve el resultado original en lugar de crear un duplicado. Las actualizaciones aceptan expected_updated_at para control de concurrencia optimista; un valor desactualizado devuelve 409.

curl -X POST https://www.roldesk.com/api/v1/customers \
  -H "Authorization: Bearer rk_live_…" \
  -H "Idempotency-Key: create-acme-2026-08" \
  -H "Content-Type: application/json" \
  -d '{"name": "Acme Corp", "email": "ops@acme.com"}'

Errores

Los errores usan una estructura consistente con el estado HTTP correcto:

{ "error": { "type": "…", "code": "…", "message": "…", "param": "…" } }
400 / 422Solicitud mal formada o error de validación
401Token ausente, inválido, revocado o expirado
403El token no tiene el alcance requerido, o el plan no incluye acceso a la API
404No existe ese recurso en tu espacio de trabajo
409Conflicto de concurrencia optimista (expected_updated_at desactualizado)
429Límite de solicitudes excedido

Webhooks

En lugar de consultar continuamente, suscríbete a eventos y los enviaremos por POST a tu servidor cuando ocurran. Agrega un endpoint en Configuración → Desarrollador (o mediante la API para integraciones tipo Zapier), elige los eventos que te interesan y guarda el secreto de firma que mostramos una sola vez.

Cada entrega es un POST JSON con estos encabezados:

Roldesk-Event:      contract.renewed
Roldesk-Delivery:   <delivery id>
Roldesk-Signature:  t=<unix_ts>,v1=<hex hmac-sha256>

El cuerpo es un evento ligero — obtén el objeto completo desde la API REST usando su id:

{ "id": "…", "type": "contract.renewed", "created": "2026-08-10T12:00:00Z",
  "data": { "object": "contract", "id": "…" } }

Verifica la firma antes de confiar en una entrega (Node):

import crypto from "crypto";

function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map(p => p.split("=")));
  const expected = crypto.createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(parts.v1), Buffer.from(expected));
}

Las entregas fallidas se reintentan con retroceso (hasta 6 intentos); un endpoint que sigue fallando se desactiva automáticamente. Eventos disponibles:

customer.createdcustomer.updatedcustomer.deletedcontact.createdcontact.updatedcontact.deletedwork_order.createdwork_order.updatedwork_order.deletedinvoice.createdinvoice.updatedinvoice.deletedquote.createdquote.updatedquote.deletedcontract.createdcontract.updatedcontract.deletedcontract.renewedcontract.expired

Zapier y no-code: usa el patrón REST Hook — tu Zap se suscribe con POST /api/v1/webhooks (un token con webhooks:write) y se da de baja con DELETE /api/v1/webhooks/{id}.

Referencia de endpoints

MétodosRutaAlcance
GET/work-orders · /work-orders/{id}work-orders:read
POST · PATCH · DELETE/work-orders · /work-orders/{id}work-orders:write
GET/customers · /customers/{id}crm:read
POST · PATCH · DELETE/customers · /customers/{id}crm:write
GET/contacts · /contacts/{id}crm:read
POST · PATCH · DELETE/contacts · /contacts/{id}crm:write
GET/leads · /leads/{id}crm:read
POST · PATCH · DELETE/leads · /leads/{id}crm:write
GET/invoices · /invoices/{id}sales:read
POST · PATCH · DELETE/invoices · /invoices/{id}sales:write
GET/quotes · /quotes/{id}sales:read
POST · PATCH · DELETE/quotes · /quotes/{id}sales:write
GET/contracts · /contracts/{id}contracts:read
POST · PATCH · DELETE/contracts · /contracts/{id}contracts:write
GET/projects · /projects/{id}projects:read
GET/appointments · /appointments/{id}scheduling:read
GET/preventive-schedules · …/{id}preventive:read
GET/assets/equipment · /assets/parts · /assets/tools · /assets/vehicles · /assets/warehousesassets:read
GET/members · /members/{id}team:read
GET/roles · /roles/{id}team:read
GET/webhooks · /webhooks/{id}webhooks:read
POST · DELETE/webhooks · /webhooks/{id}webhooks:write

La definición completa legible por máquina está en /api/v1/openapi.json (OpenAPI 3.1) — impórtala en Postman, Insomnia o tu herramienta de generación de código.

¿Eres nuevo? Hay guías paso a paso en el Centro de ayuda — primeros pasos, webhooks, Zapier y recetas comunes.