Ir al contenido

Referencia

Errores

Cuando una llamada falla, la respuesta dice qué salió mal y qué hacer. Aquí está cada código de error y cómo manejarlo.

Cómo se ve un error

Una llamada que falla responde con un código de estado HTTP y un objeto error en lugar de data. Este viene de empezar una recopilación cuando ya se acabaron los créditos de hoy:

HTTP/2 429
retry-after: 3600
x-request-id: 7c1e0b54-9a2f-4d3e-8f61-2b5a9c0d4e17
{
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "You reached your daily limit of 250 credits. Retry after midnight UTC. Buying credits does not raise this limit.",
    "messageKey": "serverErrors.quotaDay",
    "params": { "limit": 250 },
    "details": {
      "scope": "day",
      "limit": 250,
      "resetAt": "2026-09-25T00:00:00.000Z",
      "retryAfterSecs": 3600
    }
  }
}
  • code: qué salió mal, como uno de los códigos de abajo. Los códigos no cambian, pero los mensajes sí pueden cambiar, así que en tu programa revisa code, no message.
  • message: el problema y qué hacer, en inglés. Guárdalo en tus logs o muéstraselo a una persona.
  • messageKey y params: una clave fija y los valores que la completan, para que una app pueda mostrar el mensaje en su propio idioma. La mayoría de los errores los traen.
  • details: más sobre este error, cuando hay algo más que decir. En una solicitud incorrecta, lista los campos que fallaron. En un límite, dice cuál y cuándo se reinicia.

El SDK lanza los mismos campos como un GmapsError, con status, requestId y retryAfter de más. Por MCP, una llamada a una herramienta que falla vuelve con isError: true y este objeto como texto.

Todos los códigos de error

Cada código viene siempre con el mismo estado HTTP. La columna Origen dice dónde está el problema: en tu solicitud, en los límites de tu plan, de nuestro lado o en Google Maps.

CódigoEstadoOrigenQué pasóQué hacer
VALIDATION_ERROR400TúFalta algo en la solicitud o algo está mal. Cuando es un campo, details lista cada uno con su ruta.Corrige la solicitud. Si la envías igual, vuelve a fallar.
UNAUTHORIZED401TúLa llamada llegó sin una clave de API, o no con el formato Authorization: Bearer.Envía tu clave como Authorization: Bearer gm_…. Consulta Autenticación.
INVALID_TOKEN401TúLa clave es incorrecta, está revocada o venció, o es un token de inicio de sesión de la consola y no una clave de API.Usa una clave activa o crea una nueva en Claves de API.
PLAN_GATE402Tu planTu plan no incluye esta función. details.gate dice cuál es, y details.upgradeTo dice qué plan la incluye.Cambia de plan en Plan y vuelve a intentarlo. Esperar no ayuda.
AUP_REQUIRED403TúPara usar correos electrónicos debes aceptar la versión actual de la política de uso aceptable, y tu cuenta todavía no la ha aceptado. details.version es la versión que falta aceptar.Lee la política, acéptala en la consola, en Cuenta, y vuelve a intentarlo.
FORBIDDEN403TúTu cuenta no puede hacer esto: está suspendida o pediste eliminarla.El mensaje dice cuál es el caso. Para detener una eliminación, inicia sesión en la consola y cancélala. En los demás casos, escribe a soporte.
NOT_FOUND404TúNo existe esa ruta o ese id, o pertenece a otra cuenta.Revisa el método, la URL y el id.
PLACE_NOT_FOUND404TúTodavía no guardamos este lugar, o lo eliminamos después de una solicitud de eliminación.Busca en su zona para recopilarlo y vuelve a consultarlo. Un lugar eliminado no vuelve. Consulta Lugares.
COLLECTION_NOT_FOUND404TúTu cuenta no tiene ninguna recopilación con este id.Revisa el id. GET /v1/collections lista las tuyas.
EXPORT_NOT_FOUND404TúEl enlace de la exportación tiene más de 24 horas, se borraron los lugares de su recopilación, o el enlace es incorrecto.Crea otra exportación. Si la recopilación tiene más de 30 días, vuelve a ejecutarla antes.
CONFLICT409TúLa llamada choca con la situación actual, como cancelar una recopilación que ya terminó o crear una clave por encima del límite de tu plan.El mensaje dice qué lo impide. Resuélvelo y vuelve a intentarlo.
PAYLOAD_TOO_LARGE413TúEl cuerpo de la solicitud es más grande de lo que aceptamos. params.limit es el máximo, en bytes.Envía un cuerpo más pequeño.
GEO_UNRESOLVED422TúNo pudimos encontrar la ciudad que indicaste, o hay más de una ciudad con ese nombre. Por nombre, solo funcionan las ciudades de Brasil.Agrega el estado, como Curitiba, PR, o elige una de details.candidates. Fuera de Brasil, envía lat, lng y radiusM, o un bbox.
UPSTREAM_BLOCKED422Google MapsTodavía no enviamos este código. Está reservado para cuando Google Maps rechace nuestras búsquedas. Hoy, una recopilación cuyas búsquedas fallan termina con ENGINE_UNAVAILABLE.Nada, por ahora. Si de todos modos lo manejas, vuelve a intentarlo más tarde con una zona más pequeña.
RATE_LIMIT_EXCEEDED429Tu planTu cuenta hizo más llamadas en este minuto de las que permite tu plan.Espera los segundos indicados en retry-after y vuelve a intentarlo. details.limit es cuántas llamadas permite el límite, y details.window es en cuánto tiempo las cuenta: minute, o hour para el formulario de eliminación.
QUOTA_EXCEEDED429Tu planTe quedaste sin créditos por hoy o por este mes, o ya tienes en marcha todas las recopilaciones que permite tu plan. details.scope dice cuál es el caso.Depende de details.scope. Mira la sección siguiente.
INTERNAL_ERROR500NosotrosAlgo falló de nuestro lado.Vuelve a intentarlo. Si sigue fallando, escribe a soporte con el x-request-id.
ENGINE_UNAVAILABLE503NosotrosNo pudimos ejecutar las búsquedas de una recopilación, así que no encontró nada y no cobró nada. Lo ves en el error de la recopilación, no como una llamada fallida.Empieza la recopilación de nuevo en unos minutos. Las búsquedas siguen respondiendo con los lugares que ya guardamos.
SERVICE_UNAVAILABLE503NosotrosUn servicio del que dependemos, como nuestra base de datos, no respondió.Vuelve a intentarlo en unos segundos. Si sigue fallando, escribe a soporte.
BILLING_UNAVAILABLE503NosotrosNo pudimos comunicarnos con nuestro proveedor de pagos, o los pagos todavía no están configurados. Solo la página Plan de la consola se topa con esto, nunca la API.Inténtalo de nuevo más tarde. No se cobró nada.

Funciones del plan y límites

Solo PLAN_GATE responde 402. Significa que tu plan no incluye la función, así que esperar no cambia la respuesta. details.upgradeTo dice cuál es el plan más barato que la incluye. Cambia en Plan y vuelve a intentarlo.

Agotar un límite responde 429, y esperar lo resuelve. RATE_LIMIT_EXCEEDED significa demasiadas llamadas en este minuto. QUOTA_EXCEEDED trata de créditos o recopilaciones, y details.scope dice cuál:

  • month: los créditos de este mes se acabaron, incluidos los de paquetes. details.resetAt es el día 1 del mes siguiente a medianoche UTC. Con un paquete de créditos puedes seguir de inmediato.
  • day: llegaste al límite de hoy. details.resetAt es la próxima medianoche UTC. Un paquete no lo aumenta.
  • concurrency: ya tienes en marcha todas las recopilaciones que permite tu plan. Vuelve a intentarlo cuando termine una. Aquí no hay resetAt.

En Límites están todos los números de cada plan.

Cuándo volver a intentarlo

  • Cuando la respuesta trae un encabezado retry-after, espera esa cantidad de segundos y envía la misma llamada otra vez. RATE_LIMIT_EXCEEDED siempre lo trae, y QUOTA_EXCEEDED también cuando es day o month. El mismo número está en details.retryAfterSecs.
  • Cualquier otro 4xx: corrige primero lo que señala el mensaje. Si la llamada se envía igual, casi siempre recibe la misma respuesta.
  • Un 5xx es de nuestro lado. Vuelve a intentarlo después de unos segundos y espera un poco más tras cada falla. El SDK no reintenta por ti.

Cómo pedirnos ayuda

Cada respuesta, con error o sin él, trae un encabezado x-request-id. Señala esa llamada en nuestros logs. Cuando escribas a soporte, envíalo junto con lo que enviaste y cuándo.

También puedes enviar tu propio x-request-id, como el id que ya usan tus logs, para que un solo id siga la llamada desde tus logs hasta los nuestros. Usa hasta 64 letras, dígitos, puntos, guiones y guiones bajos, y nada más. Si no, generamos uno nuevo.

Nunca nos envíes tu clave de API. No la necesitamos para encontrar la llamada.