Saltar al contenido de la página
Documentación
Documentación de Make Agent Fast

Permisos y errores

Concede el mínimo privilegio y gestiona todos los códigos de error estables de la API pública.

De un vistazo

Concede el mínimo privilegio y gestiona todos los códigos de error estables de la API pública.

Ruta de solicitudes de la APIClave con alcance → recurso versionado → respuesta firmada
App / SDKClave Bearermaf_live_…/api/v1/…RecursoJSON
33 permisosCódigos establesID de solicitud

Cada operación de la API pública requiere un permiso (scope) explícito. Una credencial válida que no tenga ese permiso recibe 403 insufficient_scope; nunca se amplía de forma silenciosa a un acceso más amplio.

Referencia de permisos#

Permiso (scope)Permite
account:readLeer la cuenta autenticada, el plan, los derechos de uso y el resumen del monedero
tickets:readLeer los tickets de soporte y sus mensajes
tickets:writeActualizar tickets, asignar compañeros de equipo y añadir notas internas o respuestas a clientes
team:readLeer los miembros del equipo, las invitaciones pendientes y los eventos de auditoría permitidos
team:writeCrear o revocar invitaciones y gestionar los roles de los miembros del equipo que no son propietarios
integrations:readConsultar las instalaciones y los repositorios autorizados de GitHub App
integrations:writePreparar cambios de integración y crear pull requests en borrador
sites:readListar y obtener sitios
sites:writeCrear, actualizar, publicar, despublicar y eliminar sitios
agents:readLeer la configuración del agente
agents:writeActualizar el comportamiento, el idioma, la voz y la configuración de incrustación del agente
knowledge:readListar las fuentes de conocimiento y las preguntas frecuentes
knowledge:writeCrear, actualizar y eliminar fuentes de conocimiento y preguntas frecuentes
conversations:readListar conversaciones y obtener sus mensajes
conversations:writeTomar el control de una conversación: responder a un visitante en nombre del negocio, pausar el agente en ella y devolvérsela
leads:readListar los leads capturados
leads:writeCrear, actualizar, calificar y aceptar leads en el embudo de oportunidades
pipeline:readLeer etapas, cuentas, oportunidades, actividades, atribución y el estado de sincronización del CRM
pipeline:writeConfigurar etapas; crear o actualizar oportunidades y cuentas; importar o reintentar resultados del CRM
analytics:readLeer los eventos de analíticas del sitio
connectors:readListar el estado de los conectores sin devolver secretos
connectors:writeCrear, actualizar, activar, desactivar y eliminar conectores
domains:readEliminado. Se mantiene solo por compatibilidad; todas las rutas /domains devuelven 409 porque no se ofrecen dominios personalizados
domains:writeEliminado. Se mantiene solo por compatibilidad; todas las rutas /domains devuelven 409
broadcasts:readListar difusiones y el estado de entrega
broadcasts:writeCrear borradores y poner en cola el envío de una difusión
notifications:readListar las notificaciones del propietario
notifications:writeMarcar notificaciones como leídas o no leídas
monetization:readListar los productos de monetización
monetization:writeCrear, actualizar, activar, desactivar y eliminar productos
usage:readLeer los eventos de uso medido
webhooks:readListar los endpoints de webhook y el estado de entrega
webhooks:writeCrear y eliminar endpoints de webhook

Usa permisos de lectura para los trabajos de generación de informes. Añade un permiso de escritura solo cuando la integración realice esa modificación. Por ejemplo, una exportación de leads normalmente necesita sites:read y leads:read, no sites:write ni agents:write.

Fallos de permisos#

{
  "error": {
    "code": "insufficient_scope",
    "message": "The API key does not grant the required scope.",
    "details": { "required": ["sites:write"] },
    "request_id": "6c0b2f2e-..."
  }
}

Añade el permiso que falta a la clave en Ajustes → Desarrollador → Editar, o crea una clave de reemplazo y actualiza el secreto del servidor. Al editar se cambian en el mismo lugar el nombre y los permisos de la clave; su caducidad y su token no cambian. Las claves emitidas mediante OAuth no se pueden editar; vuelve a conectar la aplicación para cambiar lo que se le concedió.

Estructura del error#

Todos los errores de la API usan la misma estructura de nivel superior:

type ApiError = {
  error: {
    code: string;
    message: string;
    details?: unknown;
    request_id: string;
  };
};

Basa tu lógica en error.code, no en el message en inglés. Los mensajes pueden mejorar sin que cambie la versión. Registra error.request_id y el encabezado de respuesta x-request-id junto con el nombre de la operación, el estado y el número de reintento, pero nunca registres el encabezado de autorización ni los secretos de la solicitud.

Referencia de estados y códigos#

HTTPCódigo estableSignificadoRespuesta habitual
400invalid_requestLa validación falló o un campo no es compatibleCorrige los campos indicados en details; no reintentes con los mismos datos
400invalid_jsonEl cuerpo no es un objeto JSON o contiene JSON no válidoSerializa un único objeto JSON válido
401authentication_requiredFalta el encabezado BearerAdjunta una credencial desde el servidor
401invalid_api_keyLa clave no es válida, ha caducado, se ha revocado o su propietario ya no existeSustituye o rota la clave
403subscription_requiredEl propietario no tiene un plan de pago activoRestablece la suscripción antes de reintentar
403insufficient_scopeLa credencial no tiene el permiso de la operaciónCrea una credencial de reemplazo con el mínimo privilegio
403account_pausedEl acceso a la API está en pausa para la cuentaReanuda el acceso a la API o contacta con el propietario de la cuenta
404not_foundNo se encontró el endpoint o el recurso propioVerifica la ruta y el ID perteneciente al tenant
409conflictEl estado actual del recurso impide la acciónConsulta el estado actual antes de reintentar
413payload_too_largeEl cuerpo JSON supera el límite de 256 KB por solicitudEnvía un cuerpo más pequeño; divide los contenidos grandes en varias solicitudes
415invalid_requestEl cuerpo de la modificación no es application/jsonEnvía Content-Type: application/json
429rate_limit_exceededSe agotó el límite del plan de la clave para el período de un minutoEspera el tiempo indicado en Retry-After y aplica jitter
500internal_errorNo se pudo completar la solicitudReintenta una operación segura o idempotente e informa del ID de solicitud
503outcome_unknownEs posible que una modificación se haya completado, pero no se pudo registrar su resultado; details.retryable es falseNo reintentes. Consulta el recurso para ver si el cambio se realizó; la misma clave de idempotencia seguirá devolviendo este resultado

Los recursos que no pertenecen a la cuenta del propietario de la credencial pueden devolver 404 en lugar de revelar si existe el ID de otro tenant.

Detalles de validación#

La validación de campos devuelve rutas que puedes mostrar junto a tus propios controles de formulario:

{
  "error": {
    "code": "invalid_request",
    "message": "Request validation failed.",
    "details": [
      { "path": "content.headline", "message": "String must contain at least 1 character(s)" }
    ],
    "request_id": "6c0b2f2e-..."
  }
}

Los cuerpos de las modificaciones deben ser objetos JSON. Se rechazan las matrices, los cuerpos vacíos, los datos de formulario y el JSON enviado con un tipo de contenido de texto.

Decisiones de reintento#

  • Reintenta 429 después del número de segundos indicado en Retry-After.
  • Reintenta 500 solo en lecturas seguras o en escrituras protegidas por la misma Idempotency-Key.
  • Reintenta el 409 de idempotencia en curso después de su encabezado Retry-After: 2.
  • Nunca reintentes 503 outcome_unknown a ciegas. Comprueba primero el recurso; usa una nueva clave de idempotencia solo después de confirmar que el cambio no se realizó.
  • No reintentes 400, 401, 403, 404, 413 ni un conflicto de estado hasta que cambie la causa.

Consulta Límites de frecuencia para conocer el comportamiento del backoff y la Referencia de la API para ver el permiso requerido en cada operación.