Conceptos básicos

Errores

Gemlead responde con un código de estado HTTP y un error en JSON cuyos type y code nunca cambian, para que tu código actúe en función de ellos.

El objeto error

Todos los errores tienen la misma forma. message está pensado para las personas y puede cambiar, type y code son para tu código. Cada respuesta, sea un error o no, lleva además su encabezado Request-Id.

Atributos

  • typestring
    La familia del error, una por código de estado HTTP.
  • codestring
    Qué falló exactamente. Consulta los códigos más abajo.
  • messagestring
    Una frase que explica el error.
  • paramstring o null
    El parámetro que falla, si lo hay.
  • request_idstring
    El ID de la solicitud, el mismo que su encabezado Request-Id. Envíanoslo cuando necesites ayuda.
  • doc_urlstring
    Esta página, en la entrada de ese código.
Respuesta400
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "message": "score_min must be an integer from 0 to 100.",
    "param": "score_min",
    "request_id": "req_7Hq2LmX9pT4vK1sN",
    "doc_url": "https://gemlead.ai/docs/errors#parameter_invalid"
  }
}

Códigos de estado HTTP

EstadoTipoSignificado
400invalid_request_errorA la solicitud le falta un parámetro, o tiene uno desconocido o no válido. Un método que la ruta no acepta también recibe este tipo, con un 405.
401authentication_errorSin clave, con una clave incorrecta o con una clave revocada.
403permission_errorLa clave es válida pero no puede hacer esto, como una clave read que escribe o una cuenta en el plan Free o Starter.
404not_found_errorEse objeto no existe en la cuenta de la clave, o esa ruta no existe.
409idempotency_errorSe reutilizó una Idempotency-Key para otra solicitud, o su primera solicitud sigue en curso.
429rate_limit_errorDemasiadas solicitudes. Espera Retry-After segundos.
500api_errorAlgo falló por nuestra parte, o 501 para un endpoint que aún no está disponible. Reintenta más tarde con la misma Idempotency-Key.

Códigos de error

CódigoEstadoSignificado
api_key_missing401La solicitud no tiene encabezado Authorization ni X-Api-Key.
api_key_invalid401Ninguna clave coincide. Comprueba que la copiaste entera, gl_live_ incluido.
api_key_revoked401La clave se revocó en la app. Crea una nueva.
token_expired401Caducó un token de acceso OAuth de un asistente de IA. El asistente lo renueva solo.
insufficient_scope403La clave tiene el scope read y la solicitud modifica datos. Usa una clave con write.
plan_required403El propietario de la cuenta tiene el plan Free o Starter. La API funciona en Business y Enterprise, prueba incluida, y la misma clave vuelve a funcionar en cuanto la cuenta pasa a uno de los dos.
forbidden403El usuario de la clave no puede hacer esto en la cuenta de X, como un miembro que modifica el equipo sin ser admin, o que comparte un buyer persona.
parameter_missing400Falta un parámetro obligatorio. param lo indica.
parameter_invalid400Un parámetro tiene un valor que la API no acepta, como una puntuación por encima de 100 o una fecha que no está en ISO 8601. param lo indica.
parameter_unknown400La consulta o el cuerpo tiene un parámetro que este endpoint no acepta. param lo indica.
body_invalid400El cuerpo no es un JSON válido, o no es un objeto JSON.
cursor_invalid400El cursor no es uno que haya dado la API, o se creó para otros filtros.
idempotency_key_invalid400La Idempotency-Key tiene más de 255 caracteres.
method_not_allowed405Esta ruta no acepta este método. El encabezado Allow lista los que acepta.
url_invalid400Una URL de webhook no es HTTPS, lleva credenciales, no se resuelve o apunta a una dirección privada.
webhook_endpoint_limit_reached400La cuenta ya tiene 10 endpoints de webhook. Elimina uno primero.
resource_already_exists400Ya existe, como una fuente que el buyer persona ya tiene con este método o una búsqueda por palabras clave que ya tiene.
limit_reached400Se alcanzó un límite, como 100 buyer personas en una cuenta, 500 búsquedas por palabras clave en un buyer persona o 50 columnas en el tablero.
seed_source_refused400Se rechaza una fuente inicial de un buyer persona nuevo, como un inversor, una aceleradora o un medio. No traen compradores.
x_profile_not_found400X no tiene ningún perfil legible con este nombre de usuario.
lead_without_x_id400El lead aún no tiene ID de cuenta de X, así que no se puede seguir.
lead_not_convertible400El lead no pertenece a ningún buyer persona, así que no puede convertirse en fuente.
campaign_archived400La campaña está archivada. Duplícala para volver a lanzarla.
campaign_not_started400La campaña es un borrador, así que no hay nada que pausar.
campaign_flow_empty400El flujo de la campaña aún no tiene pasos. Añade uno antes de lanzarla.
column_protected400Esta columna es del propio tablero, como Bandeja de entrada o una columna de buyer persona, y no se puede eliminar.
shared_account_has_campaigns400La cuenta de X que quitas de un buyer persona compartido aún tiene campañas con él. Elimínalas y vuelve a intentarlo.
owner_cannot_leave400El propietario de una cuenta de X no puede salir de su equipo. En su lugar, quita a los miembros.
translation_off400La traducción de la conversación está desactivada. Actívala o traduce los mensajes de uno en uno.
recipient_not_messageable400X rechazó el DM. El lead cerró sus DM o bloqueó la cuenta.
media_kind_unsupported400La conversación no admite este tipo de archivo. Una nota de voz necesita una conversación de X Chat.
x_session_expired409La sesión de la cuenta de X caducó. Vuelve a conectarla en la app e inténtalo de nuevo.
assistant_busy409Julien AI sigue respondiendo a un mensaje de este chat, o a 3 mensajes de esta cuenta de X. Espera esa respuesta y vuelve a enviar.
conversation_unavailable409La conversación aún no tiene un usuario de X al que escribir.
resource_missing404No hay ningún objeto con este ID en la cuenta de la clave. Un ID de otra cuenta da la misma respuesta.
route_not_found404No hay ningún endpoint en esta ruta.
idempotency_key_reused409Esta Idempotency-Key se usó en las últimas 24 horas con otro método, ruta o cuerpo.
idempotency_key_in_use409La primera solicitud con esta Idempotency-Key sigue en curso. Reintenta en un segundo.
rate_limit_exceeded429Más de 120 solicitudes en un minuto con esta clave. Espera Retry-After segundos.
export_rate_limit_exceeded429Más de 10 exportaciones en una hora en esta cuenta.
dm_paused429X limita por ahora los DM de la cuenta. Retry-After indica cuándo se reanudan.
dm_rate_limited429Más de 10 DM en un minuto desde esta cuenta.
dm_daily_limit429300 DM hoy, en UTC, desde esta cuenta, o la cuota diaria que X le asigna.
assistant_rate_limited429Más de 6 mensajes a Julien AI en un minuto desde esta cuenta de X, o 150 en una hora para su propietario, chat de la app incluido.
assistant_daily_limit429100 mensajes a Julien AI hoy, en UTC, desde esta cuenta de X.
passcode_rate_limited429Más de 5 intentos de código de X Chat en una hora en esta cuenta. X cuenta cada intento.
internal_error500Un error inesperado por nuestra parte. El request_id nos ayuda a encontrarlo.
request_timeout500La solicitud tardó demasiado. Reinténtala, con la misma Idempotency-Key si modifica datos.
not_implemented501Este endpoint aún no está disponible.
upstream_unavailable502X o un servicio de Gemlead no respondió. No ha cambiado nada, vuelve a intentarlo en un minuto.

Gestiona los errores

  • 400, 401, 403 y 404 vuelven a fallar si repites la solicitud tal cual. Corrígela antes de enviarla de nuevo.
  • 409 con idempotency_key_in_use se resuelve un segundo después. Reintenta con la misma Idempotency-Key.
  • 429 se resuelve al cabo de Retry-After segundos. Consulta Límites de uso.
  • 500 se puede reintentar tras una breve espera. Envía la misma Idempotency-Key en las solicitudes que modifican datos, así nada ocurre dos veces.
  • Registra el request_id de cada error, con él encontramos la solicitud en segundos.