API de Kargo
API REST y servidor MCP para integrar sistemas externos y agentes de IA con el taller: clientes, equipos, solicitudes de servicio, órdenes de trabajo, agenda, inspecciones, cotizaciones, mantenimiento preventivo y búsqueda de refacciones.
- URL base:
https://api.kargo.mx/v1 - MCP (agentes de IA):
https://api.kargo.mx/mcp - OpenAPI 3.1:
https://api.kargo.mx/v1/openapi.json(impórtalo en Postman, Insomnia o un generador de clientes) - Versión:
v1. Agregar campos u operaciones es compatible y no cambia la versión; renombrar o quitar algo es/v2.
Empezar en tres pasos
- Crea una credencial. En la app: Configuración → Integraciones → Nueva integración. Elige un nombre y los alcances. La llave (
kgo_live_…) se muestra una sola vez: guárdala en el gestor de secretos de tu sistema. - Comprueba que funciona.
curl https://api.kargo.mx/v1/me \
-H "Authorization: Bearer $KARGO_API_KEY"
- Haz tu primera consulta.
curl "https://api.kargo.mx/v1/equipment?q=hyster&limit=10" \
-H "Authorization: Bearer $KARGO_API_KEY"
Autenticación
Manda la llave en Authorization: Bearer kgo_live_…. Para clientes que no pueden poner esa cabecera, X-API-Key hace lo mismo. Nunca la mandes en la URL: terminaría en los registros de cada servidor por el que pase.
Cada llave pertenece a un taller y sólo ve sus datos. Revocarla en la app surte efecto en la siguiente petición. Para rotarla sin cortar el servicio: crea una llave nueva, actualiza tu sistema y revoca la anterior.
Existen dos tipos de credencial:
integration— la usa otro sistema (ERP, CRM, un script). Puede ejecutar todo lo que sus alcances permitan.agent— la opera un agente de IA. Las operaciones marcadas como sensibles (las que comprometen al taller con el cliente: abrir y programar órdenes, posponer un aviso de servicio) están bloqueadas y responden403 human_confirmation_required. Una persona las hace desde la app.
Alcances
| Alcance | Qué permite | Escribe |
|---|---|---|
customers:read | Clientes, sus datos de contacto fiscal y sus ubicaciones. | no |
customers:write | Dar de alta clientes nuevos (entran como borrador para completar después). | sí |
equipment:read | Flotilla de clientes y del taller, y el historial del horómetro. | no |
fleet:read | Qué equipos propios están disponibles, rentados, en reparación o en tránsito. Sin precios. | no |
requests:read | Solicitudes de servicio registradas por clientes. | no |
requests:write | Registrar lo que pide un cliente. Es el primer paso de todo servicio. | sí |
orders:read | Órdenes, técnicos y su disponibilidad por día. | no |
orders:write | Abrir órdenes de trabajo y moverlas en la agenda. Compromete al taller con el cliente. | sí |
inspections:read | Revisiones, checklist y los hallazgos con su severidad. | no |
quotes:read | Cotizaciones y totales. Incluye importes: no se la des a quien no deba verlos. | no |
preventive:read | Pronóstico por equipo y avisos de servicio. | no |
preventive:write | Posponer un aviso de servicio con motivo y fecha. | sí |
parts:read | Catálogo de refacciones de la tienda: por número de pieza, equivalencia o nombre. Sin precios. | no |
No existe ningún alcance de administración: una integración no crea llaves, no cambia roles ni mueve precios.
Respuestas y errores
Toda respuesta correcta es un objeto con data y, en las listas, meta:
{ "data": { "id": "…", "number": "OT-20261107-0001" } }
Todo error tiene la misma forma. Programa contra error.code, que es estable; el mensaje es para una persona y puede mejorarse sin aviso:
{ "error": { "code": "order_closed", "message": "La orden ya está cerrada o cancelada.", "request_id": "req_8f3a…" } }
Cada respuesta trae X-Request-Id. Cítalo si reportas un problema: con él se encuentra la petición en la bitácora.
| Estado | Códigos frecuentes | Qué hacer |
|---|---|---|
| 400 | invalid_json | El cuerpo no es JSON. |
| 401 | unauthorized, invalid_api_key | Falta la llave, es inválida, venció o fue revocada. |
| 403 | insufficient_scope, forbidden, human_confirmation_required | La credencial no puede hacerlo. details.required_scope dice qué alcance falta. |
| 404 | *_not_found, route_not_found | No existe, o pertenece a otro taller. |
| 409 | order_closed, order_changed_elsewhere, request_in_progress | El estado cambió. Vuelve a leer y decide. |
| 413 / 415 | payload_too_large, unsupported_media_type | El cuerpo pasa de 256 KB o no es application/json. |
| 422 | validation_failed, unknown_parameter, invalid_cursor y las reglas del taller | details.issues lista cada campo inválido. |
| 429 | rate_limited | Espera Retry-After segundos. |
| 5xx | internal_error, upstream_unavailable, catalog_unavailable | Reintenta con espera creciente; sigue fallando → reporta el request_id. |
Un parámetro desconocido es un error, no se ignora: ?statuss=open (con la errata) responde 422 en vez de devolver todo sin filtrar.
Paginación y sincronización
Las listas devuelven hasta limit registros (1–200, por omisión 50) y meta.next_cursor. Pásalo tal cual como cursor para la página siguiente; null significa que no hay más. El cursor es opaco: no intentes construirlo.
Para sincronizar cambios no repases todo: guarda el mayor updated_at que viste y pídelo con updated_since. Con ese filtro el orden es por modificación ascendente, justo el que necesita quien procesa en el orden en que ocurrieron las cosas. Más allá de 10,000 registros con cursor se rechaza; updated_since no tiene ese tope.
Idempotencia
Toda operación que escribe acepta la cabecera Idempotency-Key con cualquier cadena única por operación (un UUID sirve). Si tu petición se cae a medias y la repites con la misma clave, recibes la respuesta original (Idempotent-Replayed: true) en vez de abrir una segunda orden. Usar la misma clave con una petición distinta responde 422 idempotency_key_reused. Las claves se recuerdan 48 horas.
Límites
Cada credencial tiene un tope de peticiones por minuto (se ve en GET /me; 120 por omisión) y algunas operaciones que consultan servicios de terceros tienen uno propio más bajo. Al pasarte, la respuesta es 429 con Retry-After.
Servidor MCP
El mismo conjunto de operaciones está disponible como herramientas MCP para agentes de IA (Claude, ChatGPT, Cursor y cualquier cliente compatible), con la misma credencial, los mismos alcances y las mismas reglas: lo que la API REST niega, el agente tampoco puede hacerlo.
- Transporte: HTTP transmitible (Streamable HTTP), sin estado. URL:
https://api.kargo.mx/mcp - Autenticación: la misma llave,
Authorization: Bearer kgo_live_….
Claude Code:
claude mcp add --transport http kargo https://api.kargo.mx/mcp \
--header "Authorization: Bearer $KARGO_API_KEY"
Cualquier cliente con archivo de configuración:
{
"mcpServers": {
"kargo": {
"type": "http",
"url": "https://api.kargo.mx/mcp",
"headers": { "Authorization": "Bearer kgo_live_…" }
}
}
}
Para un agente, crea la credencial como tipo agent: así no puede ejecutar las operaciones sensibles sin una persona. Las herramientas de escritura aceptan además idempotency_key.
| Herramienta | Operación REST | Alcance |
|---|---|---|
whoami | GET /me | cualquiera |
list_customers | GET /customers | customers:read |
get_customer | GET /customers/{id} | customers:read |
create_customer | POST /customers | customers:write |
list_customer_locations | GET /customers/{id}/locations | customers:read |
list_equipment | GET /equipment | equipment:read |
get_equipment | GET /equipment/{id} | equipment:read |
list_hour_meter_readings | GET /equipment/{id}/hour-meter-readings | equipment:read |
list_service_requests | GET /service-requests | requests:read |
get_service_request | GET /service-requests/{id} | requests:read |
create_service_request | POST /service-requests | requests:write |
list_service_orders | GET /service-orders | orders:read |
get_service_order | GET /service-orders/{id} | orders:read |
open_service_order | POST /service-orders | orders:write · sensible |
schedule_service_order | POST /service-orders/{id}/schedule | orders:write · sensible |
list_technicians | GET /technicians | orders:read |
technician_availability | GET /availability/technicians | orders:read |
fleet_availability | GET /availability/fleet | fleet:read |
list_inspections | GET /inspections | inspections:read |
get_inspection | GET /inspections/{id} | inspections:read |
list_quotes | GET /quotes | quotes:read |
get_quote | GET /quotes/{id} | quotes:read |
list_preventive_forecasts | GET /preventive/forecasts | preventive:read |
postpone_preventive_alert | POST /preventive/alerts/{id}/postpone | preventive:write · sensible |
search_parts | GET /parts/search | parts:read |
Referencia de operaciones
Servicio
GET /health
Estado del servicio · sin credencial · health.get
No pide credencial: es para monitoreo (UptimeRobot, el balanceador, un check de tu integración). Responde 200 con status: ok, o 503 con status: degraded si la base de datos no contesta.
Ejemplo
curl "https://api.kargo.mx/v1/health"
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
status | ok | degraded | |
version | texto | |
database | ok | unavailable | |
time | texto |
GET /me
Quién es esta credencial · cualquier credencial · MCP whoami · me.get
Integración, taller, alcances y límite de peticiones. Sirve para comprobar que la llave funciona y qué puede hacer antes de usarla.
Ejemplo
curl "https://api.kargo.mx/v1/me" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
integration | objeto | |
tenant_id | uuid | |
scopes | lista de texto | |
rate_limit_per_minute | número |
Clientes
GET /customers
Listar clientes · alcance customers:read · MCP list_customers · customers.list
Clientes del taller, del más reciente al más antiguo. q busca en razón social, nombre corto, RFC y clave externa.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
updated_since | consulta | fecha y hora (ISO 8601) | no | Sólo registros modificados desde esa fecha (ISO 8601). Con este filtro el orden es por modificación ascendente: es la forma de sincronizar cambios sin repasar todo. |
q | consulta | texto | no | Texto a buscar en razón social, nombre corto, RFC o clave externa. |
status | consulta | active | inactive | archived | no | |
kind | consulta | customer | prospect | supplier | other | no | prospect = en borrador, sin expediente fiscal completo. |
Ejemplo
curl "https://api.kargo.mx/v1/customers?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
legal_name | texto | Razón social o nombre completo. |
display_name | texto | null | Nombre corto con el que se le conoce en el taller. |
kind | customer | prospect | supplier | other | prospect = dado de alta en borrador, falta completar su expediente fiscal. |
status | active | inactive | archived | |
rfc | texto | null | |
external_customer_code | texto | null | Clave del cliente en otro sistema (ERP, CRM), si la integración la guarda. |
source | texto | De dónde llegó el cliente: manual, registro_import, odoo_import, api_import. |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
GET /customers/{id}
Consultar un cliente · alcance customers:read · MCP get_customer · customers.get
Consultar un cliente
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí | Identificador del cliente. |
Ejemplo
curl "https://api.kargo.mx/v1/customers/<id>" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
legal_name | texto | Razón social o nombre completo. |
display_name | texto | null | Nombre corto con el que se le conoce en el taller. |
kind | customer | prospect | supplier | other | prospect = dado de alta en borrador, falta completar su expediente fiscal. |
status | active | inactive | archived | |
rfc | texto | null | |
external_customer_code | texto | null | Clave del cliente en otro sistema (ERP, CRM), si la integración la guarda. |
source | texto | De dónde llegó el cliente: manual, registro_import, odoo_import, api_import. |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
POST /customers
Registrar un cliente · alcance customers:write · MCP create_customer · customers.create
Da de alta un cliente como prospecto en borrador: el taller completa después su expediente fiscal. Si mandas external_customer_code y ya existe un cliente con esa clave, devuelve ése (200) en vez de duplicarlo: es la forma de sincronizar desde otro sistema sin crear repetidos.
Cuerpo (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
legal_name | texto | sí | Razón social o nombre completo. |
display_name | texto | no | Nombre corto. Por omisión, la razón social. |
rfc | texto | no | RFC de 12 o 13 caracteres. |
external_customer_code | texto | no | Clave del cliente en tu sistema. Evita duplicados al sincronizar. |
Ejemplo
curl -X POST "https://api.kargo.mx/v1/customers" \
-H "Authorization: Bearer $KARGO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "legal_name": "Molinos del Pacífico SA de CV" }'
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
legal_name | texto | Razón social o nombre completo. |
display_name | texto | null | Nombre corto con el que se le conoce en el taller. |
kind | customer | prospect | supplier | other | prospect = dado de alta en borrador, falta completar su expediente fiscal. |
status | active | inactive | archived | |
rfc | texto | null | |
external_customer_code | texto | null | Clave del cliente en otro sistema (ERP, CRM), si la integración la guarda. |
source | texto | De dónde llegó el cliente: manual, registro_import, odoo_import, api_import. |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
GET /customers/{id}/locations
Ubicaciones de un cliente · alcance customers:read · MCP list_customer_locations · customers.locations
Sucursales y plantas del cliente, con dirección, coordenadas y cómo entrar. serviceable=false marca domicilios fiscales u oficinas a donde no se manda técnico.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí | Identificador del cliente. |
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
Ejemplo
curl "https://api.kargo.mx/v1/customers/<id>/locations?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
name | texto | Nombre de la ubicación: «Planta Industrial», «Sur Culiacán». |
location_type | texto | null | |
formatted_address | texto | null | |
street | texto | null | |
neighborhood | texto | null | |
city | texto | null | |
state | texto | null | |
postal_code | texto | null | |
latitude | número | null | |
longitude | número | null | |
contact_name | texto | null | |
contact_phone | texto | null | Formato E.164: +526671234567. |
access_notes | texto | null | Cómo entrar: caseta, horario, a quién preguntar. |
access_hours | texto | null | |
is_primary | booleano | |
serviceable | booleano | false = domicilio fiscal u oficina: el taller no manda técnicos ahí. |
status | texto |
Equipos
GET /equipment
Listar equipos · alcance equipment:read · MCP list_equipment · equipment.list
Equipos de clientes y del taller. q busca por número económico, serie, marca o modelo.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
updated_since | consulta | fecha y hora (ISO 8601) | no | Sólo registros modificados desde esa fecha (ISO 8601). Con este filtro el orden es por modificación ascendente: es la forma de sincronizar cambios sin repasar todo. |
q | consulta | texto | no | Número económico, serie, marca o modelo. |
customer_id | consulta | uuid | no | Sólo los equipos de ese cliente. |
status | consulta | active | inactive | archived | no | |
owner_type | consulta | tenant | customer | no | tenant = flotilla propia del taller. |
Ejemplo
curl "https://api.kargo.mx/v1/equipment?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
internal_number | texto | Número económico. Único por cliente y ubicación, no por taller. |
customer_id | uuid | null | null = equipo propio del taller. |
owner_type | tenant | customer | |
manufacturer | texto | null | |
model | texto | null | |
serial_number | texto | null | |
equipment_type | texto | null | forklift, reach_truck, pallet_stacker... |
power_source | texto | null | lpg, diesel, gasoline, electric, dual, other. |
model_year | número | null | |
capacity_lb | número | null | |
meter_type | texto | null | |
status | active | inactive | archived | |
location_id | uuid | null | |
location | texto | null | Dónde está DENTRO de su ubicación: nave, andén, bodega. |
next_service_hours | número | null | Horómetro en el que toca el siguiente servicio preventivo. |
last_service_hours | número | null | |
last_service_at | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
GET /equipment/{id}
Consultar un equipo · alcance equipment:read · MCP get_equipment · equipment.get
Ficha del equipo con su cliente y la última lectura del horómetro.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí | Identificador del equipo. |
Ejemplo
curl "https://api.kargo.mx/v1/equipment/<id>" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
internal_number | texto | Número económico. Único por cliente y ubicación, no por taller. |
customer_id | uuid | null | null = equipo propio del taller. |
owner_type | tenant | customer | |
manufacturer | texto | null | |
model | texto | null | |
serial_number | texto | null | |
equipment_type | texto | null | forklift, reach_truck, pallet_stacker... |
power_source | texto | null | lpg, diesel, gasoline, electric, dual, other. |
model_year | número | null | |
capacity_lb | número | null | |
meter_type | texto | null | |
status | active | inactive | archived | |
location_id | uuid | null | |
location | texto | null | Dónde está DENTRO de su ubicación: nave, andén, bodega. |
next_service_hours | número | null | Horómetro en el que toca el siguiente servicio preventivo. |
last_service_hours | número | null | |
last_service_at | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
customer | objeto | null | |
latest_hour_meter | objeto | null |
GET /equipment/{id}/hour-meter-readings
Historial del horómetro · alcance equipment:read · MCP list_hour_meter_readings · equipment.hour_meter_readings
Lecturas del horómetro, la más reciente primero. No incluye las anuladas.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí | Identificador del equipo. |
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
Ejemplo
curl "https://api.kargo.mx/v1/equipment/<id>/hour-meter-readings?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
equipment_id | uuid | |
reading_hours | número | Horas que marcaba el horómetro. |
previous_reading_hours | número | null | |
hours_delta | número | null | Horas trabajadas desde la lectura anterior. |
captured_at | texto | Momento de la captura (ISO 8601). |
source | texto | null | |
is_anomaly | booleano | true = la lectura retrocede o salta de forma inexplicable. |
Solicitudes
GET /service-requests
Listar solicitudes de servicio · alcance requests:read · MCP list_service_requests · service_requests.list
Lo que han pedido los clientes, lo más reciente primero. Cada solicitud trae el cliente y el equipo en customer y equipment.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
updated_since | consulta | fecha y hora (ISO 8601) | no | Sólo registros modificados desde esa fecha (ISO 8601). Con este filtro el orden es por modificación ascendente: es la forma de sincronizar cambios sin repasar todo. |
status | consulta | new | triage | scheduled | quoted | converted | cancelled | no | |
customer_id | consulta | uuid | no | |
equipment_id | consulta | uuid | no |
Ejemplo
curl "https://api.kargo.mx/v1/service-requests?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio SOL-AAAAMMDD-NNNN. |
request_type | repair | preventive | inspection | visit | quote | other | |
status | new | triage | scheduled | quoted | converted | cancelled | Lo mueve la base, no el cliente de la API: converted aparece cuando se abre la orden. |
priority | low | normal | high | urgent | |
channel | texto | null | whatsapp, phone, email, portal, in_person, advisor, recurring, system. |
description | texto | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
location_id | uuid | null | |
contact_name | texto | null | |
contact_phone | texto | null | |
scheduled_at | texto | null | Fecha acordada con el cliente (compromiso comercial, no el plan interno del taller). |
requested_at | texto | Cuándo la pidió el cliente (ISO 8601). |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
GET /service-requests/{id}
Consultar una solicitud · alcance requests:read · MCP get_service_request · service_requests.get
Consultar una solicitud
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí |
Ejemplo
curl "https://api.kargo.mx/v1/service-requests/<id>" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio SOL-AAAAMMDD-NNNN. |
request_type | repair | preventive | inspection | visit | quote | other | |
status | new | triage | scheduled | quoted | converted | cancelled | Lo mueve la base, no el cliente de la API: converted aparece cuando se abre la orden. |
priority | low | normal | high | urgent | |
channel | texto | null | whatsapp, phone, email, portal, in_person, advisor, recurring, system. |
description | texto | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
location_id | uuid | null | |
contact_name | texto | null | |
contact_phone | texto | null | |
scheduled_at | texto | null | Fecha acordada con el cliente (compromiso comercial, no el plan interno del taller). |
requested_at | texto | Cuándo la pidió el cliente (ISO 8601). |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
POST /service-requests
Registrar una solicitud de servicio · alcance requests:write · MCP create_service_request · service_requests.create
Registra lo que pide un cliente. Todo servicio empieza aquí: de la solicitud se deriva después la visita, el preventivo o la orden. El folio SOL-… lo asigna la base. Con Idempotency-Key un reintento devuelve la misma solicitud en vez de crear otra. No hace falta conocer el equipo: puede registrarse sólo con la descripción y completarse después.
Cuerpo (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
description | texto | sí | Qué reporta el cliente, en sus palabras. |
request_type | repair | preventive | inspection | visit | quote | other | no | |
priority | low | normal | high | urgent | no | |
channel | whatsapp | phone | email | portal | in_person | system | no | Por dónde llegó la solicitud. |
customer_id | uuid | no | |
equipment_id | uuid | no | |
location_id | uuid | no | Ubicación del cliente donde está el equipo. |
contact_name | texto | no | Con quién hablar. |
contact_phone | texto | no | Teléfono en formato E.164. |
scheduled_at | fecha y hora (ISO 8601) | no | Fecha que el cliente y el taller acordaron, si la hay. |
Ejemplo
curl -X POST "https://api.kargo.mx/v1/service-requests" \
-H "Authorization: Bearer $KARGO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "description": "Falla en frenos, el montacargas no frena en pendiente" }'
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio SOL-AAAAMMDD-NNNN. |
request_type | repair | preventive | inspection | visit | quote | other | |
status | new | triage | scheduled | quoted | converted | cancelled | Lo mueve la base, no el cliente de la API: converted aparece cuando se abre la orden. |
priority | low | normal | high | urgent | |
channel | texto | null | whatsapp, phone, email, portal, in_person, advisor, recurring, system. |
description | texto | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
location_id | uuid | null | |
contact_name | texto | null | |
contact_phone | texto | null | |
scheduled_at | texto | null | Fecha acordada con el cliente (compromiso comercial, no el plan interno del taller). |
requested_at | texto | Cuándo la pidió el cliente (ISO 8601). |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
Órdenes de trabajo
GET /service-orders
Listar órdenes de trabajo · alcance orders:read · MCP list_service_orders · service_orders.list
Órdenes de trabajo, la más reciente primero. Cada una trae el cliente y el equipo en customer y equipment.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
updated_since | consulta | fecha y hora (ISO 8601) | no | Sólo registros modificados desde esa fecha (ISO 8601). Con este filtro el orden es por modificación ascendente: es la forma de sincronizar cambios sin repasar todo. |
status | consulta | open | assigned | in_progress | on_hold | testing | completed | cancelled | no | |
order_kind | consulta | diagnostic | repair | preventive | internal | warranty | no | |
customer_id | consulta | uuid | no | |
equipment_id | consulta | uuid | no | |
assigned_to | consulta | uuid | no | user_id del técnico. Ver GET /technicians. |
scheduled_from | consulta | fecha (AAAA-MM-DD) | no | Programadas desde ese día (AAAA-MM-DD), inclusive. |
scheduled_to | consulta | fecha (AAAA-MM-DD) | no | Programadas hasta ese día, inclusive. |
Ejemplo
curl "https://api.kargo.mx/v1/service-orders?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio OT-AAAAMMDD-NNNN. Hereda el de su solicitud cuando nace de una. |
status | open | assigned | in_progress | on_hold | testing | completed | cancelled | |
priority | low | normal | high | urgent | |
order_kind | diagnostic | repair | preventive | internal | warranty | diagnostic = visita a revisar; repair = trabajo ya autorizado. |
origin_kind | texto | Qué la originó: request, quote_authorized, contract, preventive_plan, warranty, internal, emergency. |
description | texto | null | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
request_id | uuid | null | |
assigned_to | uuid | null | user_id del técnico. Ver GET /technicians. |
scheduled_date | texto | null | Día planeado (AAAA-MM-DD). null = en el backlog sin programar. |
scheduled_block | morning | afternoon | all_day | null | |
estimated_hours | número | null | |
promised_date | texto | null | Fecha prometida al cliente. |
service_location | texto | null | |
location_id | uuid | null | |
site_address | texto | null | |
blocked_reason | texto | null | Si está on_hold: por qué (esperando refacción, al cliente, a un proveedor...). |
started_at | texto | null | |
completed_at | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
GET /service-orders/{id}
Consultar una orden de trabajo · alcance orders:read · MCP get_service_order · service_orders.get
Consultar una orden de trabajo
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí |
Ejemplo
curl "https://api.kargo.mx/v1/service-orders/<id>" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio OT-AAAAMMDD-NNNN. Hereda el de su solicitud cuando nace de una. |
status | open | assigned | in_progress | on_hold | testing | completed | cancelled | |
priority | low | normal | high | urgent | |
order_kind | diagnostic | repair | preventive | internal | warranty | diagnostic = visita a revisar; repair = trabajo ya autorizado. |
origin_kind | texto | Qué la originó: request, quote_authorized, contract, preventive_plan, warranty, internal, emergency. |
description | texto | null | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
request_id | uuid | null | |
assigned_to | uuid | null | user_id del técnico. Ver GET /technicians. |
scheduled_date | texto | null | Día planeado (AAAA-MM-DD). null = en el backlog sin programar. |
scheduled_block | morning | afternoon | all_day | null | |
estimated_hours | número | null | |
promised_date | texto | null | Fecha prometida al cliente. |
service_location | texto | null | |
location_id | uuid | null | |
site_address | texto | null | |
blocked_reason | texto | null | Si está on_hold: por qué (esperando refacción, al cliente, a un proveedor...). |
started_at | texto | null | |
completed_at | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
POST /service-orders
Abrir una orden de trabajo · alcance orders:write · sensible: bloqueada para credenciales agent · MCP open_service_order · service_orders.create
Abre una orden para un equipo. Por omisión es una visita de diagnóstico: la orden de reparación nace después, cuando el cliente autoriza una cotización. El folio OT-… lo asigna la base. Compromete al taller con el cliente, por eso una credencial de tipo agent no puede ejecutarla.
Cuerpo (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
equipment_id | uuid | sí | Equipo al que se le abre la orden. Tiene que pertenecer al taller y estar activo. |
description | texto | sí | Qué se va a hacer o qué se reportó. |
priority | low | normal | high | urgent | no | |
order_kind | diagnostic | repair | preventive | internal | warranty | no | |
origin_kind | request | internal | emergency | no | emergency exige authorization_note. |
authorization_note | texto | no | Quién autorizó una emergencia y por qué. |
location_id | uuid | no | Ubicación donde se hará el trabajo. Tiene que ser atendible. |
Ejemplo
curl -X POST "https://api.kargo.mx/v1/service-orders" \
-H "Authorization: Bearer $KARGO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "equipment_id": "<uuid>", "description": "Falla en frenos, el montacargas no frena en pendiente" }'
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio OT-AAAAMMDD-NNNN. Hereda el de su solicitud cuando nace de una. |
status | open | assigned | in_progress | on_hold | testing | completed | cancelled | |
priority | low | normal | high | urgent | |
order_kind | diagnostic | repair | preventive | internal | warranty | diagnostic = visita a revisar; repair = trabajo ya autorizado. |
origin_kind | texto | Qué la originó: request, quote_authorized, contract, preventive_plan, warranty, internal, emergency. |
description | texto | null | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
request_id | uuid | null | |
assigned_to | uuid | null | user_id del técnico. Ver GET /technicians. |
scheduled_date | texto | null | Día planeado (AAAA-MM-DD). null = en el backlog sin programar. |
scheduled_block | morning | afternoon | all_day | null | |
estimated_hours | número | null | |
promised_date | texto | null | Fecha prometida al cliente. |
service_location | texto | null | |
location_id | uuid | null | |
site_address | texto | null | |
blocked_reason | texto | null | Si está on_hold: por qué (esperando refacción, al cliente, a un proveedor...). |
started_at | texto | null | |
completed_at | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
POST /service-orders/{id}/schedule
Programar o reasignar una orden · alcance orders:write · sensible: bloqueada para credenciales agent · MCP schedule_service_order · service_orders.schedule
Mueve la orden en la agenda: día, turno y técnico, en una sola operación. scheduled_date es obligatorio: null la manda al backlog (sin programar). assigned_to ausente deja al técnico como está, null lo quita y un user_id lo asigna (el estado pasa solo de open a assigned). Manda expected_updated_at con el updated_at que leíste para no pisar un cambio de alguien más: si cambió, responde 409 order_changed_elsewhere. Una orden cerrada o cancelada no se reprograma.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí |
Cuerpo (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
scheduled_date | fecha (AAAA-MM-DD) | null | sí | Día (AAAA-MM-DD) o null para mandarla al backlog. |
scheduled_block | morning | afternoon | all_day | no | Turno. Si no lo mandas se conserva el actual. |
assigned_to | uuid | null | no | user_id del técnico, null para quitarlo, ausente para no tocarlo. |
expected_updated_at | fecha y hora (ISO 8601) | no | updated_at que leíste: si la orden cambió desde entonces, se rechaza. |
Ejemplo
curl -X POST "https://api.kargo.mx/v1/service-orders/<id>/schedule" \
-H "Authorization: Bearer $KARGO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "scheduled_date": "2026-11-10" }'
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio OT-AAAAMMDD-NNNN. Hereda el de su solicitud cuando nace de una. |
status | open | assigned | in_progress | on_hold | testing | completed | cancelled | |
priority | low | normal | high | urgent | |
order_kind | diagnostic | repair | preventive | internal | warranty | diagnostic = visita a revisar; repair = trabajo ya autorizado. |
origin_kind | texto | Qué la originó: request, quote_authorized, contract, preventive_plan, warranty, internal, emergency. |
description | texto | null | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
request_id | uuid | null | |
assigned_to | uuid | null | user_id del técnico. Ver GET /technicians. |
scheduled_date | texto | null | Día planeado (AAAA-MM-DD). null = en el backlog sin programar. |
scheduled_block | morning | afternoon | all_day | null | |
estimated_hours | número | null | |
promised_date | texto | null | Fecha prometida al cliente. |
service_location | texto | null | |
location_id | uuid | null | |
site_address | texto | null | |
blocked_reason | texto | null | Si está on_hold: por qué (esperando refacción, al cliente, a un proveedor...). |
started_at | texto | null | |
completed_at | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
Disponibilidad
GET /technicians
Listar técnicos asignables · alcance orders:read · MCP list_technicians · technicians.list
Mecánicos y jefes de taller a quienes se les puede asignar una orden. El id es el valor de assigned_to.
Ejemplo
curl "https://api.kargo.mx/v1/technicians" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | user_id: el valor que recibe assigned_to. |
name | texto | |
role | texto | mechanic, mechanic_trainee o workshop_manager. |
GET /availability/technicians
Carga de los técnicos en un día · alcance orders:read · MCP technician_availability · availability.technicians
Cuántas órdenes abiertas y cuántas horas estimadas tiene cada técnico ese día. Sirve para decidir a quién asignarle algo sin abrir la agenda. Una orden sin horas estimadas cuenta como 0 h, así que estimated_hours es un piso, no un total garantizado.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
date | consulta | fecha (AAAA-MM-DD) | no | Día a consultar (AAAA-MM-DD). Por omisión, hoy en Culiacán. |
Ejemplo
curl "https://api.kargo.mx/v1/availability/technicians" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | user_id: el valor que recibe assigned_to. |
name | texto | |
role | texto | mechanic, mechanic_trainee o workshop_manager. |
date | texto | |
orders_count | número | Órdenes programadas ese día y todavía abiertas. |
estimated_hours | número | Suma de horas estimadas de esas órdenes (las que no traen estimado cuentan 0). |
orders | lista de objeto |
GET /availability/fleet
Disponibilidad de la flotilla propia · alcance fleet:read · MCP fleet_availability · availability.fleet
Equipos propios del taller con su etapa: disponible, rentado, en revisión, en reparación, en tránsito, de baja o vendido. Sin precios ni datos del cliente. Si está rentado, contract_end dice cuándo regresa.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
stage | consulta | available | rented | in_review | repair | in_transit | retired | sold | no | |
for_rent | consulta | true | false | no | true = sólo los que se ofrecen en renta. |
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
Ejemplo
curl "https://api.kargo.mx/v1/availability/fleet?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
equipment_id | uuid | |
internal_number | texto | |
manufacturer | texto | null | |
model | texto | null | |
serial_number | texto | null | |
equipment_type | texto | null | |
power_source | texto | null | |
capacity_lb | número | null | |
stage | available | rented | in_review | repair | in_transit | retired | sold | |
for_rent | booleano | |
for_sale | booleano | |
reserved | booleano | true = apartado para un cliente aunque todavía esté en patio. |
contract_end | texto | null | Si está rentado: cuándo vence la renta. |
inbound_eta | texto | null | Si viene en camino: fecha estimada de llegada. |
Inspecciones
GET /inspections
Listar inspecciones · alcance inspections:read · MCP list_inspections · inspections.list
Revisiones de equipos, la más reciente primero. Cada una trae el cliente y el equipo.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
updated_since | consulta | fecha y hora (ISO 8601) | no | Sólo registros modificados desde esa fecha (ISO 8601). Con este filtro el orden es por modificación ascendente: es la forma de sincronizar cambios sin repasar todo. |
status | consulta | open | closed | cancelled | no | |
equipment_id | consulta | uuid | no | |
customer_id | consulta | uuid | no | |
service_order_id | consulta | uuid | no |
Ejemplo
curl "https://api.kargo.mx/v1/inspections?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | null | |
status | open | closed | cancelled | |
inspection_type | texto | null | |
operation_type | texto | null | |
location_kind | workshop | field | null | |
equipment_id | uuid | null | |
customer_id | uuid | null | |
service_order_id | uuid | null | |
request_id | uuid | null | |
reported_failure_note | texto | null | Lo que reportó el cliente. |
summary_note | texto | null | |
site_address | texto | null | |
started_at | texto | null | |
closed_at | texto | null | |
approved_at | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
GET /inspections/{id}
Consultar una inspección con sus hallazgos · alcance inspections:read · MCP get_inspection · inspections.get
La inspección y sus hallazgos, con severidad (urgent / recommended), qué se encontró, qué se recomienda y qué pasa si no se corrige.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí |
Ejemplo
curl "https://api.kargo.mx/v1/inspections/<id>" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | null | |
status | open | closed | cancelled | |
inspection_type | texto | null | |
operation_type | texto | null | |
location_kind | workshop | field | null | |
equipment_id | uuid | null | |
customer_id | uuid | null | |
service_order_id | uuid | null | |
request_id | uuid | null | |
reported_failure_note | texto | null | Lo que reportó el cliente. |
summary_note | texto | null | |
site_address | texto | null | |
started_at | texto | null | |
closed_at | texto | null | |
approved_at | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
findings | lista de objeto |
Cotizaciones
GET /quotes
Listar cotizaciones · alcance quotes:read · MCP list_quotes · quotes.list
Cotizaciones con los totales de su versión vigente en current. Incluye importes: sólo para credenciales que deban verlos.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
updated_since | consulta | fecha y hora (ISO 8601) | no | Sólo registros modificados desde esa fecha (ISO 8601). Con este filtro el orden es por modificación ascendente: es la forma de sincronizar cambios sin repasar todo. |
status | consulta | draft | shared | partially_authorized | authorized | declined | expired | cancelled | no | |
customer_id | consulta | uuid | no | |
service_order_id | consulta | uuid | no |
Ejemplo
curl "https://api.kargo.mx/v1/quotes?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio COT-AAAAMMDD-NNNN. |
kind | service | parts | mixed | |
status | draft | shared | partially_authorized | authorized | declined | expired | cancelled | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
service_order_id | uuid | null | |
inspection_id | uuid | null | |
current_version | número | |
currency_code | texto | |
notes | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
current | objeto | null |
GET /quotes/{id}
Consultar una cotización · alcance quotes:read · MCP get_quote · quotes.get
La cotización con los totales de su versión vigente y el historial de versiones.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí |
Ejemplo
curl "https://api.kargo.mx/v1/quotes/<id>" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
id | uuid | |
number | texto | Folio COT-AAAAMMDD-NNNN. |
kind | service | parts | mixed | |
status | draft | shared | partially_authorized | authorized | declined | expired | cancelled | |
customer_id | uuid | null | |
equipment_id | uuid | null | |
service_order_id | uuid | null | |
inspection_id | uuid | null | |
current_version | número | |
currency_code | texto | |
notes | texto | null | |
created_at | texto | Alta (ISO 8601). |
updated_at | texto | Última modificación (ISO 8601). |
current | objeto | null | |
versions | lista de objeto |
Mantenimiento preventivo
GET /preventive/forecasts
Pronóstico de mantenimiento preventivo · alcance preventive:read · MCP list_preventive_forecasts · preventive.list
Un renglón por equipo en seguimiento: cuándo le toca su siguiente servicio y qué se decidió con el aviso. El sistema detecta; una persona decide. Los más urgentes salen primero.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
limit | consulta | entero | no | Cuántos registros devolver (1–200). |
cursor | consulta | texto | no | Valor meta.next_cursor de la respuesta anterior para pedir la página siguiente. |
status | consulta | ok | soon | overdue | lost | no_data | no_baseline | no | Pronóstico del equipo. |
alert_status | consulta | pending | scheduled | postponed | done | dismissed | no | Qué se decidió con el aviso. |
customer_id | consulta | uuid | no | |
equipment_id | consulta | uuid | no |
Ejemplo
curl "https://api.kargo.mx/v1/preventive/forecasts?limit=50" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
equipment_id | uuid | |
internal_number | texto | |
manufacturer | texto | null | |
model | texto | null | |
customer_id | uuid | null | |
customer_name | texto | null | |
status | ok | soon | overdue | lost | no_data | no_baseline | Pronóstico: overdue = ya pasó la meta; soon = se acerca; lost = seguimiento perdido; no_data y no_baseline = faltan lecturas o meta. |
usage_pattern | continuous | seasonal | |
interval_hours | número | null | |
target_hours | número | null | |
last_reading_hours | número | null | |
last_reading_at | texto | null | |
rate_per_day | número | null | Horas de uso por día, según las últimas lecturas. |
remaining_hours | número | null | |
estimated_date | texto | null | |
days_since_reading | número | null | |
alert_id | uuid | null | Existe cuando el aviso ya se generó. Es el {id} de postpone. |
alert_kind | texto | null | |
alert_status | pending | scheduled | postponed | done | dismissed | null | |
postponed_until | texto | null | |
postpone_reason | texto | null | |
service_order_id | uuid | null | |
order_number | texto | null | |
covered_by_workshop | booleano | true = un contrato vigente incluye el preventivo: corre por cuenta del taller. |
computed_at | texto | null |
POST /preventive/alerts/{id}/postpone
Posponer un aviso de preventivo · alcance preventive:write · sensible: bloqueada para credenciales agent · MCP postpone_preventive_alert · preventive.postpone
Pospone el aviso con motivo y fecha: vuelve a la bandeja ese día. El {id} es el alert_id del pronóstico. Decide cuándo se le da servicio a un equipo, así que una credencial de tipo agent no puede ejecutarla.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
id | ruta | uuid | sí | alert_id del pronóstico. |
Cuerpo (JSON)
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
reason | texto | sí | Por qué se pospone. Queda en la bitácora. |
until | fecha (AAAA-MM-DD) | sí | Hasta cuándo (AAAA-MM-DD). Tiene que ser una fecha futura. |
Ejemplo
curl -X POST "https://api.kargo.mx/v1/preventive/alerts/<id>/postpone" \
-H "Authorization: Bearer $KARGO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "reason": "Esperando la refacción del cliente", "until": "2026-11-10" }'
Respuesta — data
| Campo | Tipo | Descripción |
|---|---|---|
equipment_id | uuid | |
internal_number | texto | |
manufacturer | texto | null | |
model | texto | null | |
customer_id | uuid | null | |
customer_name | texto | null | |
status | ok | soon | overdue | lost | no_data | no_baseline | Pronóstico: overdue = ya pasó la meta; soon = se acerca; lost = seguimiento perdido; no_data y no_baseline = faltan lecturas o meta. |
usage_pattern | continuous | seasonal | |
interval_hours | número | null | |
target_hours | número | null | |
last_reading_hours | número | null | |
last_reading_at | texto | null | |
rate_per_day | número | null | Horas de uso por día, según las últimas lecturas. |
remaining_hours | número | null | |
estimated_date | texto | null | |
days_since_reading | número | null | |
alert_id | uuid | null | Existe cuando el aviso ya se generó. Es el {id} de postpone. |
alert_kind | texto | null | |
alert_status | pending | scheduled | postponed | done | dismissed | null | |
postponed_until | texto | null | |
postpone_reason | texto | null | |
service_order_id | uuid | null | |
order_number | texto | null | |
covered_by_workshop | booleano | true = un contrato vigente incluye el preventivo: corre por cuenta del taller. |
computed_at | texto | null |
Refacciones
GET /parts/search
Buscar refacciones · alcance parts:read · MCP search_parts · parts.search
Busca en el catálogo de la tienda por número de parte, equivalencia o nombre. Encuentra por el número grabado en la pieza aunque sea de otra marca, y dice por cuál campo encontró. Deliberadamente sin precio: el precio depende del cliente y del momento, y se cotiza desde una orden.
Parámetros
| Nombre | Dónde | Tipo | Requerido | Descripción |
|---|---|---|---|---|
q | consulta | texto | sí | Número de parte, equivalencia o nombre de la pieza. |
mode | consulta | todo | parte | pieza | equipo | no | parte = número de parte; pieza = nombre; equipo = refacciones de un modelo; todo = cualquiera. |
limit | consulta | entero | no | Cuántos resultados (1–20). |
with_stock | consulta | true | false | no | true consulta si hay existencia de cada pieza. |
Ejemplo
curl "https://api.kargo.mx/v1/parts/search?q=montacargas&limit=10" \
-H "Authorization: Bearer $KARGO_API_KEY"
Respuesta — Cada elemento de data
| Campo | Tipo | Descripción |
|---|---|---|
product_id | texto | |
title | texto | |
sku | texto | null | Número de parte. |
brand | texto | null | |
thumbnail | texto | null | |
in_stock | booleano | null | null = no se pudo determinar. |
matched_by | cross_reference | sku | name | null | Por qué apareció. cross_reference = equivale al número que se buscó. |
matched_reference | objeto | null |