Códigos de error

Cada respuesta de error identifica su causa con un code estable. Esta página es el inventario completo: 830 códigos, de los cuales 722 los emite la API y el resto están registrados para traducción.

La forma del documento de error y la razón por la que se ramifica sobre code y no sobre detail están en el contrato de errores.

Códigos documentados

Admin (operación interna)

Autenticación y sesión

codeStatusCuándo se disparaQué debe hacer el cliente
account_deleted401La cuenta fue soft-deleted.Contactar soporte.
account_suspended401 / 403La cuenta del caller está suspendida.Contactar soporte.
api_key_decryption_failed401Falla criptográfica al descifrar la API key.Regenerar la key.
auth_header_empty401El header Authorization está vacío.Adjuntar Authorization: Bearer ....
auth_method_denied403El endpoint no acepta el método de autenticación con el que llegaste.Usar el método de auth correcto — ver Autenticación.
forbidden403Permiso denegado por RBAC.Pedir el permiso al admin de tu cuenta.
invalid_api_key401El prefijo o el formato de la API key es inválido.Regenerar la key desde /usage o POST /v1/users/me/api-key/regenerate.
invalid_credentials401Email o contraseña incorrectos.Mostrar mensaje genérico al usuario — no revelar cuál falló.
invalid_encrypted_api_key401La API key no descifra contra el secret server-side (rotación de claves o key falsificada).Regenerar la key.
registration_disabled403El flag global registration.enabled está OFF.Esperar a que se reactive.
unauthorized401Credenciales ausentes, inválidas o vencidas.Volver a autenticarse, o renovar la API key.
unrecognized_auth_format401El header Authorization no parsea como Bearer <token>.Usar Bearer veriko_..., con la API key.

Beneficiarios

codeStatusCuándo se disparaQué debe hacer el cliente
account_number_invalid_type—account_number llega con un tipo distinto de cadena de texto (número, arreglo, …).Enviar account_number como string.
account_number_required—Falta account_number en el cuerpo.Agregar el campo.
beneficiary_already_registered422La cuenta ya está en tus beneficiarios.Reutilizar el existente.
beneficiary_not_found_for_account404No hay beneficiario asociado a esa cuenta.Crearlo.
label_invalid_type—label llega con un tipo distinto de cadena de texto (número, arreglo, …).Enviar label como string.
query_param_account_required400Falta ?account= en la query.Agregar el parámetro.

Códigos terminales async de validaciones

codeStatusCuándo se disparaQué debe hacer el cliente
bank_code_unresolvable_for_phone422No.—
banxico_error502 / 503No.—
intra_bank_no_cep422No.—
ocr_error502No.—
preflight_failed422No.—

Finanzas

codeStatusCuándo se disparaQué debe hacer el cliente
csv_stream_failed500El stream CSV falló.Reintentar.
invalid_export_format400Formato pedido fuera de json/csv/xlsx/pdf.Elegir uno soportado.
invalid_month400Param month ausente o no YYYY-MM.Pasar YYYY-MM.
invalid_period400Param period no matchea convención.Corregir.
invalid_range400Range from/to incoherente.Corregir.
no_ceps404No hay CEPs disponibles en el rango.Ajustar rango.
pdf_render_failed500dompdf falló al renderizar.Reintentar; reportar si persiste.
range_required400Falta range o from/to.Pasar uno.
xlsx_render_failed500PhpSpreadsheet falló.Reintentar.

Idempotencia

codeStatusCuándo se disparaQué debe hacer el cliente
idempotency_key_in_progress409Hay otra request en vuelo con la misma key.Esperar Retry-After segundos y reintentar.
idempotency_key_reused422La misma clave se usó antes con un cuerpo distinto.Generar una clave nueva o reusar el cuerpo exacto.
invalid_idempotency_key400El header Idempotency-Key no cumple el formato [A-Za-z0-9_-]{1,255}.Generar key nueva con caracteres válidos.

Importes masivos (validations + beneficiaries)

codeStatusCuándo se disparaQué debe hacer el cliente
fecha_invalid—Fecha no parsea.Corregir.
field_too_long422Al corregir una fila, parsed_clave_rastreo o parsed_referencia_numerica exceden 64 caracteres (el ancho de la columna).Acortar el valor.
file_required422El upload no incluye archivo.Adjuntar el archivo.
job_not_editable422Querés editar una importación en estado terminal.La importación ya fue confirmada.
monto_invalid—Monto no parsea.Corregir.
multi_upload_not_allowed_for_text422Multi-select pero los archivos son texto plano.Subir uno por uno o usar imágenes/ZIP.
no_valid_fields422El cuerpo de la edición no trae campos válidos.Incluir al menos un campo.
no_valid_test_files422Ningún archivo del upload es procesable.Revisar el set.
row_persist_failed422Una fila de importación tiene un valor que no cupo en su columna ni fila por fila (red final); o, en el PATCH de una fila, una combinación de longitudes válidas por separado sigue sin caber.Volver a capturar cuenta, clave, monto y fecha de esa fila.
zip_pack_failed422Falló el repacking de un ZIP de imágenes.Reintentar con ZIP estándar.

OTP, 2FA y verificación

codeStatusCuándo se disparaQué debe hacer el cliente
confirmation_token_already_used409El token ya fue consumido (single-use).Re-solicitar uno nuevo.
confirmation_token_invalid422Token de confirmación malformado.Re-solicitar el token.
confirmation_token_malformed400Variante: el token no tiene la estructura esperada.Re-solicitar.
confirmation_token_mismatch422El token corresponde a otra acción distinta.Re-solicitar para la acción correcta.
confirmation_token_missing422Falta el confirmation_token en una operación de step-up.Agregar confirmation_token.
confirmation_token_slug_mismatch422El token fue emitido para otro plan/slug.Re-emitir para el slug correcto.
free_plan_already_claimed409El plan gratuito ya fue reclamado por esta cuenta.Continuar al flujo normal; no hay nada que reclamar.
invalid_intent422intent de POST /v1/users/me/phone/confirm-verify no es verify ni claim.Enviar uno de los dos valores, u omitir el campo (default verify).
invalid_otp_parameters422El cuerpo del OTP está incompleto.Revisar los campos requeridos.
invalid_reset_context400El contexto del reset (purpose, audience, expiry) no coincide.Reiniciar el flujo.
invalid_verification_token400El token de un flujo de verificación es inválido o malformado.Reiniciar el flujo de verificación.
missing_otp_id400Falta el otp_id en el cuerpo.Agregar otp_id.
otp_already_used400El OTP ya fue consumido.Solicitar otro.
otp_expired400El OTP venció antes de ser usado.Re-solicitar OTP.
otp_invalid_code400El código OTP enviado es incorrecto.Reingresarlo (máximo N intentos).
otp_max_attempts400Se agotaron los intentos para ese OTP.Re-solicitar un OTP nuevo.
otp_not_found404No hay OTP activo para esa combinación user+purpose.Re-solicitar OTP.
phone_already_verified422El teléfono ya está verificado — no hay nada que hacer.Continuar al flujo normal.
phone_not_verified—El teléfono no está verificado. Ya no lo lanza el login (v1.58.0): iniciar sesión no exige teléfono verificado.Verificar con POST /v1/users/me/phone/request-verify.
phone_verification_required409 / 422La acción exige un teléfono verificado y la cuenta no lo tiene. meta.masked_phone indica a qué número irá el código (null si aún no hay teléfono) y meta.needs_phone si hay que pedirlo primero.Abrir el flujo de verificación (POST /v1/users/me/phone/request-verify) y reintentar.
purpose_mismatch400El OTP fue generado para otro propósito (ej. login vs. password reset).Solicitar OTP con el purpose correcto.
twofa_action_mismatch400El challenge resuelto no corresponde a la acción solicitada.Re-iniciar el step-up.
twofa_already_disabled422Se pidió disable de 2FA pero ya está disabled.Ignorar — estado correcto.
twofa_already_enabled422Se pidió enable de 2FA pero ya está enabled.Ignorar — estado correcto.
twofa_invalid_challenge400El código del challenge 2FA es incorrecto.Reingresarlo.
twofa_invalid_context400El contexto 2FA (purpose / audience) no matchea.Reiniciar el flujo.
twofa_method_same422Se pidió cambiar a un método 2FA igual al actual.Elegir un método distinto.
twofa_method_unsupported422El método 2FA pedido no está soportado.Usar sms o email.
twofa_not_enabled422Intentaste verificar 2FA pero el usuario no lo tiene activo.Habilitar 2FA primero.
twofa_required401El usuario tiene 2FA activo — necesitas resolver el challenge.Disparar POST /v1/auth/2fa/verify-challenge.

Perfil

codeStatusCuándo se disparaQué debe hacer el cliente
language_invalid_type—language llega con un tipo distinto de cadena de texto.Enviar language como string.
name_empty—name queda vacío después de sanitizar (strip_tags + trim).Mandar un nombre no vacío.
name_invalid_type—name llega con un tipo distinto de cadena de texto.Enviar name como string.
name_too_long—name excede los 100 caracteres del límite de columna.Acortar el nombre.
timezone_invalid_type—timezone llega con un tipo distinto de cadena de texto.Enviar timezone como string.
timezone_unsupported—timezone no es un identificador IANA válido soportado.Enviar un identificador IANA soportado.

Plan y facturación

codeStatusCuándo se disparaQué debe hacer el cliente
activation_operation_mismatch422operation_id de POST /v1/users/me/phone/confirm-verify (intent=claim) pertenece a otra cuenta, o a una intención distinta.Generar un operation_id nuevo (UUID) para este intento.
activation_prompt_not_reached422POST /v1/users/me/activation/prompts con action=presented para un nivel que el servidor todavía no confirma como alcanzado.Consultar GET /v1/users/me/activation y usar su pending_prompt.
admin_grant_failed422Falló el grant de plan admin-side.Revisar el detalle.
billing_disabled503El módulo de billing está desactivado en este deploy.Esperar a que se active.
billing_invalid_interval422El interval no es month ni year.Usar uno permitido.
billing_invalid_kind422El kind del precio no es base ni metered.Usar uno permitido.
billing_plan_is_free422Intentas subscribir a un plan free vía Stripe checkout.El plan free se asigna sin Stripe.
billing_plan_not_found404Variante: el slug no resuelve a un plan activo.Revisar el slug.
billing_plan_not_self_service403Plan no asignable vía self-service.Contactar soporte.
billing_plan_slug_invalid422El slug no cumple ^[a-z0-9-]+$.Corregir.
billing_plan_slug_required422Falta plan_slug en el cuerpo.Agregar el campo.
billing_plan_slug_too_long422El slug supera el max.Acortar.
comp_amount_invalid422Monto de compensación inválido.Corregir.
comp_user_missing422Falta target user en comp.Agregar.
comp_user_not_found404El user de comp no existe.Verificar.
invalid_activation_prompt_action422action de POST /v1/users/me/activation/prompts no es presented, dismissed ni cta.Enviar uno de los tres valores.
invalid_activation_prompt_level422level de POST /v1/users/me/activation/prompts no es one_left, exhausted ni blocked.Enviar uno de los tres valores.
no_active_subscription404El usuario no tiene suscripción activa.Iniciar checkout.
overage_not_applicable422El plan actual no soporta overage.Upgradear plan.
overage_update_failed422Falló el toggle de overage.Reintentar.
plan_not_found404El plan referenciado no existe.Listar planes con GET /v1/plans/public.
price_already_in_catalog409El stripe_price_id ya está usado por otro precio.Reutilizar el existente.
price_combo_already_exists409 / 422Combinación (plan, interval, currency, kind) duplicada.Editar el existente.
price_local_id_required422Falta price_local_id.Agregar.
price_not_active422El precio está archived.Activar primero.
price_not_found404El precio local no existe.Verificar el ID.
price_plan_mismatch422El precio referenciado no pertenece a ese plan.Usar el plan correcto.
refund_amount_invalid422Monto de refund inválido (negativo o > invoice).Corregir.
refund_invoice_not_found404El invoice referenciado no existe en Stripe.Verificar el invoice_id.
source_price_id_required422Falta source_price_id en migrate.Agregar.
stripe_cancel_failed502Stripe rechazó el cancel.Reintentar.
stripe_checkout_failed502Stripe rechazó la creación de session.Reintentar.
stripe_invoice_malformed500El invoice de Stripe llegó incompleto en el webhook.(logged y resync).
stripe_meter_lookup_failed502Stripe meter lookup falló.Reintentar.
stripe_meter_missing422 / 500El meter esperado no existe en Stripe.Crear el meter o desactivar metered.
stripe_price_archive_failed502Stripe rechazó archivar el precio.Reintentar.
stripe_price_id_format_invalid422El stripe_price_id no matchea price_*.Corregir.
stripe_price_id_required422Falta stripe_price_id.Agregar.
stripe_price_not_found404El stripe_price_id no existe en Stripe.Verificar el ID.
stripe_product_create_failed502Falló creación de Product en Stripe.Reintentar.
stripe_subscription_malformed500El subscription de Stripe llegó incompleto.(logged y resync).
stripe_unreachable502Stripe API timeout/connection error.Reintentar.
subscription_not_found409La suscripción no existe.Verificar el user_id.
subscription_race_retry409Race condition mutando la subscripción — el cliente debe reintentar.Reintentar tras 1-2s.
unit_amount_required422Falta unit_amount.Agregar.

Rate limit

codeStatusCuándo se disparaQué debe hacer el cliente
rate_limit_exceeded429Variante para grupos internos (e.g. login).Esperar y reintentar.

Recursos genéricos

codeStatusCuándo se disparaQué debe hacer el cliente
cep_not_available404 / 409El CEP de la validación todavía no está disponible.Reintentar más tarde.
changelog_empty—No hay changelog publicado.Esperar publicación.
changelog_not_found—La versión solicitada no existe.Listar con GET /v1/public/changelog
dispatch_failed424 / 500 / 503La importación no pudo despacharse al trabajador.Reintentar.
image_not_available404La imagen original no está accesible.Re-uploadear (si aplica).
internal_error500Falla inesperada.Reintentar con backoff.
key_not_available404 / 409La API key del user no está disponible para mostrar.Regenerar.
method_not_allowed405Método HTTP no soportado para ese path.Usar uno de los permitidos.
not_found404El recurso pedido no existe o no es visible.Verificar el id.
spei_calendar_year_not_covered404El año no tiene calendario de días inhábiles SPEI.Usar uno de los años de meta.covered_years.
user_not_found401 / 404El user referenciado no existe.Verificar el id.

Registro y cuenta

codeStatusCuándo se disparaQué debe hacer el cliente
current_password_incorrect422El current_password no matchea.Reingresar correctamente.
current_password_required422Falta current_password en un cambio de contraseña.Agregar el campo.
email_already_registered422El email ya tiene cuenta verificada.Mostrar mensaje genérico anti-enum.
email_already_taken422Variante: el email no está libre.Pedir otro email.
email_already_verified422El email ya está verificado.Continuar al flujo normal.
email_delivery_failed—El proveedor de email rechazó el envío.Reintentar; si persiste, soporte.
email_same_as_current422El email nuevo coincide con el actual.Ingresar uno distinto.
invalid_email_change_context400El contexto del cambio de email no es válido (purpose mismatch).Reiniciar el flujo.
language_unsupported—Variante de unsupported_locale.Usar es o en.
new_password_too_short422Variante: en cambio de contraseña, la nueva es muy corta.Usar más caracteres.
password_mismatch422password y password_confirmation no coinciden.Reingresar coincidentes.
password_too_short—La contraseña no cumple el largo mínimo.Usar contraseña más larga.
password_too_weak422La contraseña no cumple las reglas de complejidad.Reforzar la contraseña.
phone_required_for_email_change422Necesitás teléfono verificado antes de cambiar email.Verificar phone primero.
phone_taken—El teléfono ya está en otra cuenta verificada.Pedir otro teléfono.
sms_delivery_failed—El proveedor SMS rechazó el envío del OTP.Reintentar; si persiste, soporte.
turnstile_failed422Con el captcha activo, falta turnstile_token o Cloudflare Turnstile no lo confirmó.Resolver de nuevo el captcha y reenviar con el token nuevo.
unsupported_locale422El idioma enviado no está en la lista de admitidos.Usar es o en.

Validación de transferencias SPEI

codeStatusCuándo se disparaQué debe hacer el cliente
bank_code_required_for_phone422Para account_type=phone se requiere bank_code explícito.Agregar bank_code.
clabe_prefix_not_recognized—Los primeros 3 dígitos de la CLABE no coinciden con ningún banco participante de SPEI.Verificar la CLABE — puede no ser SPEI.
clave_or_ref_required422Se requiere clave_rastreo o referencia_numerica.Incluir uno.
image_not_readable422Para validaciones desde imagen (OCR): OCR no pudo leer la imagen.Adjuntar imagen más clara.
image_not_readable_receipt422Para validaciones desde imagen (OCR): OCR leyó pero no parece un comprobante SPEI.Adjuntar el comprobante correcto.
image_not_retained410GET /v1/validations/{id}/image sobre una validación creada con retain_image=false: el archivo del comprobante se borra al terminar la validación y nunca se sirve.No reintentar: el archivo no existe por decisión del cliente. Guardar el comprobante en el sistema propio antes de enviarlo, o enviar retain_image=true (el valor por defecto) si se necesita recuperarlo.
image_not_spei_receipt422Para validaciones desde imagen (OCR): El recibo no es SPEI (otro tipo de transferencia).Adjuntar comprobante SPEI.
image_or_image_url_required422Para validaciones desde imagen (OCR): No se proporcionó ni image ni image_url.Enviar uno.
invalid_retain_image422POST /v1/validate-ocr con un retain_image que no es booleano. Se rechaza antes de consumir cuota.Enviar true o false (también se aceptan 0, 1 y las cadenas "true" y "false"). Un valor ambiguo nunca se lee como verdadero.
pdf_multiple_receipts422El PDF contiene más de un comprobante. Se cobra: el archivo ya se leyó.Enviar cada comprobante por separado.
purge_token_mismatch422POST /v1/validations/{id}/purge/execute con un token que no es de esta validación o que se emitió para otra cuenta.Volver a preparar el borrado con POST /v1/validations/{id}/purge/prepare para esta validación y usar el token que devuelve. El token equivocado no se gasta.
purge_validation_in_progress409Se pidió purgar una validación que sigue en curso (queued o processing); meta.status trae el estado.Esperar a que la validación llegue a un estado terminal (GET /v1/validations/{id}) y volver a preparar el borrado. Un ciclo de reintentos abierto no lo impide: el borrado lo cancela.
recheck_not_eligible422POST /v1/validations/{id}/recheck sobre una validación cuyo estado no es valid ni returned; meta.status trae el estado. Una returned no da este error: responde su estado actual con 200.No hay nada que volver a consultar: sólo un valid se revisa. Leer el estado actual con GET /v1/validations/{id}. No consume cuota.
recheck_rate_limited429La misma validación se consultó con POST /v1/validations/{id}/recheck hace menos de 10 minutos; Retry-After y meta.retry_after traen los segundos que faltan.Esperar Retry-After segundos. El resultado de la consulta anterior ya está en GET /v1/validations/{id}. No consume cuota.
recheck_unavailable503Banxico no entregó un estado de pago legible (captcha, tope de consultas, red o respuesta irreconocible), o la consulta de estado está apagada. No dice nada sobre la transferencia.Reintentar tras Retry-After segundos; el intervalo de la validación no se gastó. No consume cuota.
recheck_window_expired422POST /v1/validations/{id}/recheck sobre una validación valid con más horas que la ventana; meta.window_hours trae la ventana vigente (72 por defecto).Ya no se puede volver a consultar su estado de pago; si hace falta confirmar un pago antiguo, crear una validación nueva, que sí consume cuota. El rechazo no consume cuota.
validation_purged410Se pidió la imagen, el CEP, los reintentos, la revisión posterior o el borrado de una validación que ya se purgó. GET /v1/validations/{id} sí responde: devuelve la lápida con purged_at.No reintentar: lo que se purgó no existe. Para el veredicto, las fechas y el monto, leer la lápida con GET /v1/validations/{id}.

Validación general de campos

codeStatusCuándo se disparaQué debe hacer el cliente
cuenta_y_candidatas_excluyentes422La petición trae cuenta_beneficiaria y cuentas_candidatas a la vez.Enviar una sola de las dos: la cuenta, o la lista de candidatas. No consume cuota.
cuentas_candidatas_invalidas422cuentas_candidatas no es un arreglo de texto de 2 al máximo vigente de cuentas, o alguna no es una CLABE, tarjeta o celular válidos, o hay cuentas repetidas.Enviar de 2 al máximo indicado en meta.max cuentas válidas y distintas, como texto; field_errors señala la posición que falló. No consume cuota.
image_invalid_format422El comprobante no es JPEG, PNG, WebP ni PDF, o el PDF está desactivado.Convertir a JPEG/PNG o enviar el PDF original.
image_too_large422Imagen supera el tope de peso.Reducir tamaño.
invalid_account_format400El número de cuenta no es CLABE 18 / tarjeta 16 / celular E.164.Corregir según account_type.
invalid_account_length422Largo incorrecto para el tipo (18 CLABE / 16 tarjeta / 10 celular).Ajustar largo.
invalid_amount—Monto no es válido como decimal positivo.Corregir.
invalid_bank_code422El código de banco no existe en el catálogo.Usar GET /v1/public/banks.
invalid_card_luhn—El check Luhn de la tarjeta falla.Verificar el PAN.
invalid_clabe_checksum—El dígito verificador de la CLABE falla.Verificar la CLABE.
invalid_client_ref422client_ref no es un texto de 1 a 64 caracteres, o trae saltos de línea, caracteres de control o emoji.Enviar un texto de 1 a 64 caracteres sin saltos de línea ni emoji, o quitar el campo. No consume cuota.
invalid_email422El email no es válido.Corregir.
invalid_field_type422Un campo que debe ser texto llegó como arreglo u objeto (p. ej. emisor, receptor, referencia_numerica, o un campo de la corrección de una fila de importación).Enviar el campo como cadena de texto.
invalid_format422El campo no coincide con el formato esperado.Corregir el formato.
invalid_image—La imagen no es decodificable.Reenviar.
invalid_image_format—Formato fuera de JPEG/PNG/WEBP/PDF.Convertir a JPEG/PNG o enviar el PDF original.
invalid_receptor_participante422receptor_participante no es 0 ni 1.Enviar 0 (cuentahabiente) o 1 (pago a banco), u omitirlo para el valor por defecto.
invalid_request_body422El JSON no es válido.Enviar JSON válido.
invalid_url—La URL es malformada.Corregir.
invalid_url_scheme422Solo https aceptado.Usar https://.
invalid_uuid—No es un UUID v4.Pasar UUID válido.
invalid_value422El valor está fuera del set permitido.Usar un valor del enum.
max_length_exceeded—Supera el max length del campo.Acortar.
message_build_failed422El server no pudo armar el mensaje a responder.Reintentar.
missing_field422Variante de required para campos concretos.Incluir el campo.
pdf_active_content422El PDF trae contenido activo: JavaScript, acciones automáticas, archivos adjuntos, formularios XFA o anotaciones que no son enlaces.Enviar el comprobante original del banco, sin editar.
pdf_encrypted422El PDF está cifrado o protegido con contraseña.Enviar una copia sin contraseña.
pdf_hidden_content422El PDF trae contenido oculto: capas opcionales, formularios o texto fuera del área visible de la página.Enviar el comprobante original del banco, sin editar.
pdf_invalid_structure422El PDF no se puede leer: está dañado, trae datos después del final del documento o excede los topes de objetos o de anidamiento.Volver a descargar el comprobante y reenviarlo.
pdf_modified_after_issue422El PDF tiene más de una revisión: se modificó después de emitirse.Enviar el comprobante tal como lo emitió el banco.
pdf_text_layer_too_large422La capa de texto del PDF excede el tope de caracteres por página o por documento.Enviar sólo la página del comprobante.
pdf_too_many_pages422El PDF no tiene páginas o tiene más de 3.Enviar sólo las páginas del comprobante.
pdf_unsupported_image422El PDF trae una imagen JBIG2 o una imagen de más de 60 megapíxeles.Enviar el comprobante como imagen JPEG o PNG.
spei_calendar_year_invalid422El año de la ruta no tiene cuatro dígitos.Enviar el año con cuatro dígitos, por ejemplo 2026.
url_dns_failed400DNS no resolvió el host.Verificar el host.
url_ssrf_blocked400La URL apunta a una IP privada / DNS rebind.Usar host público.
validation_error422Error de validación genérico.Revisar source.pointer y meta.
validation_failed422Variante para fallas combinadas.Revisar el detalle.

Webhooks y notificaciones

codeStatusCuándo se disparaQué debe hacer el cliente
invalid_notification_id422El id no es UUID.Corregir.
notification_not_found404Notificación referenciada no existe.Verificar el id.
notifications_preferences_empty422El cuerpo no trae preferencias.Agregar al menos una.
push_fcm_token_invalid422El token FCM no tiene un formato válido.Re-obtener el token del SDK de Firebase.
push_fcm_token_required422Falta token (FCM) en el cuerpo.Agregar.
push_not_configured503El servidor no tiene ni VAPID ni FCM configurados.Soporte.
push_subscription_endpoint_not_https422Endpoint no es HTTPS.Verificar el provider.
push_subscription_endpoint_required422Falta endpoint.Agregar.
push_subscription_endpoint_too_long422Endpoint excede el max.(problema del provider).
push_subscription_invalid_shape422El objeto PushSubscription es inválido.Re-suscribir desde el SW.
push_subscription_none_active422No tienes suscripciones push activas.Suscribirse primero.
quiet_hours_invalid_timezone422El timezone no existe.Usar IANA TZ.
quiet_hours_minutes_out_of_range422Minutos fuera de [0, 1440].Corregir.
telegram_bot_not_configured503El bot de Telegram no está configurado server-side.Soporte.
webhook_description_invalid_type—description llega con un tipo distinto de cadena de texto.Enviar description como string.
webhook_description_too_long—description excede 255 caracteres. Antes se recortaba en silencio.Acortar la descripción.
webhook_event_invalid422Evento fuera del registry.Ver eventos en docs.
webhook_events_required—Falta el array events.Agregar al menos uno.
webhook_events_too_many—Más eventos que el max.Reducir.
webhook_limit_reached422Tope de webhooks del plan alcanzado.Upgradear plan o borrar uno.
webhook_status_invalid—status no es active/disabled.Corregir.
webhook_url_empty—url enviado pero vacío.Agregar URL real.
webhook_url_invalid_format—url no parsea.Corregir.
webhook_url_invalid_type—url llega con un tipo distinto de cadena de texto.Enviar url como string.
webhook_url_not_https—El scheme no es https.Usar HTTPS.
webhook_url_required422Falta url.Agregar.
webhook_url_too_long—url supera 2048 chars.Acortar.

Códigos sin glosar

La API puede emitir estos 445 códigos, y todavía no tienen descripción. Se listan con su estado HTTP para que una integración pueda al menos clasificarlos.

codeStatus
admin_self_delete_not_allowed403
admin_self_restore_not_allowed403
already_blocked409
already_canceling409
analytics_not_configured409
analytics_tabla_not_found404
analytics_upstream_error502
audience_required422
audience_too_many422
audience_value_too_long422
bank_conflicts_with_confirmed422
banxico_check_cooldown429
banxico_sync_failed502
beneficiary_already_exists409
billing_already_on_plan409
billing_already_subscribed409
billing_change_not_applicable422
billing_interval_invalid422
billing_invalid_currency422
billing_no_customer422
billing_orphan_customer500
billing_overage_price_missing500
billing_plan_change_failed502
billing_plan_unresolvable500
billing_price_not_found422
billing_schedule_malformed502
billing_use_cancel_for_free422
bin_invalid422
bin_not_found404
body_empty400
body_too_large413
bot_custom_command_too_many422
bot_custom_command_trigger_reserved409
bot_custom_command_trigger_taken409
bot_system_command_trigger_reserved409
broadcast_already_active409
broadcast_audience_empty422
broadcast_audience_too_large422
broadcast_invalid_user_ids422
broadcast_message_empty422
broadcast_message_too_long422
broadcast_not_cancelable409
broadcast_not_dispatchable409
broadcast_rate_limited429
bulk_too_many400
campaign_not_found404
campaign_test_owner_only403
cannot_cancel409
cannot_modify_role_permissions422
cannot_remove_critical_permission422
cannot_restore_self422
category_too_many422
category_value_too_long422
changelog_registry_error500
channels_required422
checkout_recovery_unavailable404
ci_key_invalid401
ci_webhook_not_stored503
ci_webhook_signature_invalid401
ci_webhook_unavailable503
cloudflare_not_configured409
comp_cap_not_configured500
comp_currency_invalid422
comp_daily_cap_exceeded429
comp_lock_contention503
comp_reason_invalid422
comp_user_no_customer422
compare_runs_must_differ422
confirm_required422
control_unavailable409
create_rate_limited429
date_range_too_large422
delivery_content_not_stored404
deploy_key_already_revoked409
deploy_key_input_invalid422
deploy_key_invalid401
deploy_key_issue_failed500
deploy_key_not_found404
deploy_key_not_revealable409
deploy_key_reveal_forbidden403
deploy_scope_denied403
device_credential_id_required422
device_credential_not_found404
device_credential_reauth_required422
docs_site_missing503
email_change_confirm_mismatch422
email_change_confirm_taken422
email_change_confirm_token_invalid422
email_change_confirm_token_required422
email_change_confirm_token_used422
email_change_no_pending422
email_taken422
email_verify_email_mismatch422
email_verify_token_invalid422
email_verify_token_required422
email_verify_token_used422
email_verify_unavailable_for_placeholder422
entry_ids_required422
event_not_broadcast_safe422
event_type_required422
event_type_too_long422
filter_invalid422
github_app_not_configured503
golden_case_not_found422
golden_not_available422
health_check_not_found404
hop_not_found404
identity_not_found404
image_decompression_bomb422
image_dimensions_too_large422
image_invalid422
image_mime_mismatch422
image_polyglot_detected422
image_strip_failed422
image_too_small422
import_failed500
invalid_account422
invalid_account_type422
invalid_audience400 / 422
invalid_audience_filter422
invalid_audience_kind422
invalid_audience_override422
invalid_audience_value422
invalid_block_reason422
invalid_bot_user_id422
invalid_broadcast_id422
invalid_broadcast_language422
invalid_broadcast_segment422
invalid_campaign_step422
invalid_campaign_toggle422
invalid_category400
invalid_category_value422
invalid_channel422
invalid_channel_value422
invalid_channels422
invalid_channels_override422
invalid_custom_command_id422
invalid_custom_command_response422
invalid_custom_command_trigger422
invalid_date_filter422
invalid_date_format422
invalid_date_range422
invalid_datetime422
invalid_device_credential401
invalid_enabled422
invalid_event_type422
invalid_except_value422
invalid_expected_banxico_status422
invalid_filter422
invalid_identity422
invalid_identity_value422
invalid_impact_level422
invalid_include400
invalid_json400
invalid_lang400
invalid_limit400
invalid_page_by400
invalid_path422
invalid_payload_value422
invalid_permission_action422
invalid_plan422
invalid_proxy_request422
invalid_remember422
invalid_reorder422
invalid_role422
invalid_session_id422
invalid_setting_value422
invalid_settings422
invalid_severity422
invalid_status400 / 422
invalid_system_command_description422
invalid_system_command_id422
invalid_system_command_trigger422
invalid_telegram_token422
invalid_timestamp400
invalid_user_id_filter422
invalid_webhook_url422
last_auth_method409
legal_consent_required422
lockout_unavailable503
malformed_payload400
migration_bootstrap_missing500
migration_drift_conflict409
migration_file_missing404
migration_filename_format422
migration_filename_required422
migration_filenames_must_be_array422
migration_lock_held409
migration_mark_bulk_limit422
migration_not_found404
migration_target_invalid_type422
migration_target_version_format422
missing_jti401
missing_param400
missing_required_payload_var422
missing_required_var422
no_active_grant409
no_api_key404
no_failed_files404
no_matching_entries422
not_blocked409
not_canceling409
not_linked409
not_stripe_subscription422
notifications_preferences_invalid422
oauth_missing_handoff400
oauth_no_pending_flow404
oauth_provider_unavailable404
ocr_not_configured502 / 503
ocr_settings_acknowledge_required422
ocr_settings_revision_not_found404
only_owner_can_assign_owner422
only_owner_can_create_owner422
only_owner_can_delete_owner422
only_owner_can_modify_owner422
only_owner_can_restore_owner422
only_owner_can_suspend_admin422
openapi_spec_parse_failed500
owner_only_action403
password_already_set409
password_not_set422
path_not_allowed403
permission_actions_must_be_array422
phone_required422
phone_unavailable409
plan_api_rate_per_min_invalid422
plan_beneficiaries_max_invalid422
plan_billing_model_change_blocked422
plan_billing_model_invalid422
plan_bulk_validations_max_negative422
plan_cap_exceeded422
plan_comparison_invalid_shape422
plan_create_post_commit_inconsistent500
plan_create_stripe_price_failed502
plan_create_stripe_product_failed502
plan_currency_invalid422
plan_delete_has_active_subs409
plan_duplicate_same_slug422
plan_feature_icon_invalid422
plan_feature_text_required422
plan_feature_text_too_long422
plan_features_invalid_shape422
plan_features_too_many422
plan_free_cannot_have_initial_prices422
plan_free_cannot_have_stripe_product422
plan_included_exceeds_limit422
plan_included_validations_negative422
plan_limit_negative422
plan_name_required422
plan_name_too_long422
plan_price_edit_noop422
plan_price_migrate_invalid_proration422
plan_price_migrate_source_format_invalid422
plan_price_migrate_source_not_archived422
plan_price_migrate_source_not_found404
plan_price_migrate_source_product_mismatch422
plan_price_migrate_source_retrieve_failed502
plan_price_migrate_source_same_as_target422
plan_price_not_active422
plan_price_not_found404
plan_price_out_of_range422
plan_price_slug_mismatch422
plan_retry_max_dispatched_out_of_range422
plan_retry_max_pending_out_of_range422
plan_retry_max_retries_out_of_range422
plan_slug_already_exists422
plan_slug_format_invalid422
plan_slug_invalid422
plan_slug_required422
plan_sms_2fa_monthly_cap_negative422
plan_sort_order_negative422
plan_stale_prepare422
plan_stripe_product_missing422
plan_tax_behavior_invalid422
plan_trial_days_out_of_range422
plan_update_post_commit_inconsistent500
plan_update_stripe_price_failed502
plan_update_stripe_product_failed502
plan_webhook_per_host_per_min_invalid422
platform_disabled404
png_missing404
preview_unavailable404
price_archive_has_active_subs409
price_create_race_unrecoverable500
processing_failed500
proxy_upstream_error502
push_subscription_endpoint_conflict409
queue_unavailable503
queues_batch_failed500
queues_batches_failed500
queues_cancel_failed500
queues_cancel_prepare_failed500
queues_config_failed500
queues_config_reset_failed500
queues_config_update_failed500
queues_discard_failed500
queues_discard_prepare_failed500
queues_dlq_entry_failed500
queues_dlq_failed500
queues_job_failed500
queues_jobs_failed500
queues_overview_failed500
queues_pause_failed500
queues_restart_failed500
queues_restart_prepare_failed500
queues_resume_failed500
queues_retry_failed500
queues_retry_prepare_failed500
queues_start_failed500
queues_states_failed500
queues_stats_failed500
queues_stop_failed500
queues_worker_failed500
queues_workers_failed500
rate_limited_billing_portal429
rate_limited_email_flow429
rate_limited_login429
rate_limited_oauth429
rate_limited_otp429
rate_limited_password_reset429
rate_limited_register429
rate_limited_twofa429
reactivation_cap_exceeded422
rebuild_request_failed503
refund_amount_exceeds_refundable422
refund_cap_not_configured500
refund_currency_mismatch422
refund_daily_cap_exceeded429
refund_invoice_not_paid422
refund_lock_contention503
refund_no_charge422
release_not_found404
restore_token_expired422
restore_token_invalid422
restore_token_required422
restore_token_used422
retry_age_exceeded422
retry_already_resolved422
retry_not_active422
retry_not_applicable422
retry_not_supported_for_bulk422
retry_pending_cap_exceeded422
role_has_no_permissions403
rollback_no_down400
rotate_rate_limited429
scheduled_for_required422
scheduled_task_create_failed500
scheduled_task_delete_failed500
scheduled_task_delete_prepare_failed500
scheduled_task_detail_failed500
scheduled_task_execution_detail_failed500
scheduled_task_executions_failed500
scheduled_task_run_now_failed500
scheduled_task_update_failed500
scheduled_too_far422
scheduled_too_soon422
search_too_long422
seeder_bulk_limit422
seeder_filename_format422
seeder_filename_required422
seeder_invalid500
seeder_not_found404
service_unavailable503
session_expired401
session_not_found_or_already_revoked404
session_revoked401
session_unknown401
simulation_failed500
stale_draft409
stripe_account_check_misconfigured500
stripe_comp_failed502
stripe_customer_create_failed502
stripe_customer_persist_failed500
stripe_customer_update_failed502
stripe_event_malformed400
stripe_foreign_account400
stripe_invalid_mode500
stripe_portal_failed502
stripe_price_archive_divergent502
stripe_price_create_failed502
stripe_price_orphaned_post_create500
stripe_price_orphaned_post_edit500
stripe_price_product_mismatch422
stripe_price_shape_incompatible422
stripe_refresh_failed502
stripe_refund_failed502
stripe_resume_failed502
stripe_secret_missing500
stripe_secret_placeholder500
stripe_secret_too_short500
stripe_signature_invalid401
stripe_signature_malformed401
stripe_signature_missing401
stripe_signature_no_secrets500
stripe_signature_timestamp_skew401
stripe_subs_list_failed502
stripe_subscription_fetch_failed502
stripe_unavailable503
stripe_upcoming_failed502
stripe_webhook_endpoint_ambiguous409
stripe_webhook_endpoint_not_found404
subject_override_invalid422
subject_override_too_long422
subscriber_limit_reached422
subscription_not_cancelable422
subscription_not_resumable422
subscription_sync_failed500
sync_too_many_prices422
telegram_bot_token_missing422
telegram_identity_update_failed502
telegram_not_linked409
telegram_test_send_failed502
telegram_token_persist_failed500
telegram_token_verification_failed422
telegram_user_not_linked422
telegram_webhook_secret_missing422
telegram_webhook_set_failed502
telegram_webhook_url_not_https422
telegram_webhook_url_unresolvable422
test_file_not_found404
test_filename_format422
test_files_limit422
test_files_must_be_array422
test_name_invalid422
test_source_case_required422
test_source_image_required422
test_source_validation_id_required422
test_source_validation_image_unreadable422
test_source_validation_no_image422
test_suite_empty404
test_suite_invalid422
tests_lock_held409
twofa_method_not_verified422
twofa_setup_required401
unknown_event_type422
unknown_permission_resource422
unknown_platform404
unknown_setting_key422
unknown_slug404 / 422
unknown_test_source422
unsupported_channel422
user_not_restorable404
var_too_long422
vars_must_be_object422
version_not_found400

Sin traducción

Estos 314 códigos se emiten sin entrada en el catálogo de traducción, de modo que su detail llega en el idioma en que se escribió, sin traducir.

Registrados sin emisión detectada

Estos 69 códigos están dados de alta en el catálogo de traducción, pero el análisis del código fuente no encuentra dónde se emiten. Puede tratarse de códigos retirados o de códigos que se arman en tiempo de ejecución. Se listan para que el inventario sea completo; una integración no debería contar con recibirlos.