Saltar al contenido principal
Esta página describe los errores encontrados al usar los endpoints /auctions y /events de Topsort o las APIs, clasificados por código de estado HTTP: 4xx: Problema en la solicitud
5xx: Problema del servicio de Topsort
Ambos errores devuelven arrays JSON que contienen objetos de error con los campos: errCode, docUrl y un mensaje opcional.
CampoTipoDescripción
errCodestringUna cadena corta que identifica únicamente el problema.
docUrlstringUn enlace a esta documentación que proporciona más información sobre el error.
messagestringOpcional. Si está presente, es una explicación legible por humanos o detalles sobre el error. La cadena para un error dado puede cambiar con el tiempo; el código no debe analizar o despachar basándose en valores particulares de este campo.
Códigos de Error y Significados:
CódigoDescripciónDetalles
400Bad RequestSolicitud inaceptable, es decir, formato incorrecto
403Forbidden/UnauthorizedProblema con la API key o tokens faltantes
404Not FoundEl servidor no puede encontrar el recurso solicitado. O bien la URL de la solicitud no está en nuestras rutas, o el recurso no está disponible (es decir, la campaña solicitada no existe)
422Unprocessable EntityDesajuste entre el cuerpo de la solicitud y el modelo, es decir, falta una propiedad, o la API espera una fecha pero recibió un número
429Rate Limit ExceededSe alcanzó el límite de tasa basado en IP. Este error viene con los siguientes encabezados:
- X-RateLimit-Limit: número total de solicitudes permitidas para el período de tiempo
- X-RateLimit-Remaining: número restante de solicitudes para el período de tiempo
- X-RateLimit-Reset: cuándo puede hacer otra solicitud

Códigos de Error

Código de ErrorDescripción
bad_requestNo se pudo analizar la solicitud; verifique la especificación OpenAPI para el esquema correcto.
empty_requestLa solicitud está vacía; verifique la especificación OpenAPI para el esquema correcto.
internal_server_errorProblema inesperado del servidor; nuestro equipo generalmente soluciona estos problemas rápidamente.
invalid_api_keyAPI key faltante, inválida o expirada; consulte authentication para más detalles.
invalid_auction_idEl ID de subasta no corresponde a una subasta; asegúrese de pasar un ID de subasta válido en la solicitud.
invalid_event_typeEl tipo de evento debe ser “Impression”, “Click” o “Purchase”.
invalid_promotion_typeTipos de promoción inválidos en el campo slots.
invalid_sessionEl objeto session debe contener un sessionId no vacío.
missing_aspect_ratioFalta la relación de aspecto requerida para anuncios de banner.
missing_auctionsDebe especificarse al menos una subasta.
missing_contextFalta el contexto requerido; especifique una categoría, lista de productos o consulta de búsqueda.
missing_placementFalta el campo de placement o placement.page requerido.
missing_product_idFalta productId.
missing_promotion_typeUna subasta debe solicitar slots para al menos un tipo de promoción.
missing_purchased_atFalta el campo purchasedAt requerido.
missing_sessionFalta el campo session requerido.
missing_slotsFalta el campo slots requerido.
no_productsDebe especificarse al menos un producto.
no_purchase_itemsDebe comprarse al menos un artículo.
purchase_item_quantity_less_or_equal_than_zeroUn artículo de compra tiene una cantidad menor o igual a cero.
resolved_bid_id_not_foundEl ID de oferta resuelto proporcionado no coincide con un registro interno.
too_few_impressionsDebe incluirse al menos una impresión.
too_few_slotsDebe especificarse al menos un slot en una subasta.
too_many_auctionsSe pueden ejecutar un máximo de 5 subastas en paralelo; contacte a su KAM para aumentar este límite.

Manejo de límites de tasa

Nuestros endpoints - excepto al hacer llamadas a /auctions o /events - tienen límites de tasa para prevenir el abuso. Si excede el límite de tasa, recibirá una respuesta de error 429. Hay dos formas recomendadas de manejar estos límites

Reintentar con retroceso exponencial

El reintento con retroceso exponencial es una técnica utilizada en programación para reintentar una operación con intervalos crecientes entre reintentos, lo que ayuda a mitigar problemas como latencia de red, fallas temporales o restricciones de recursos. A continuación se muestra un ejemplo de código en Python sobre cómo se puede implementar la técnica.
def exponential_backoff_retry(url, max_retries=5, base_delay=1, max_delay=64, retry_on_status=429):
    retries = 0
    delay = base_delay
    while retries < max_retries:
        try:
            response = requests.get(url)
            if response.status_code == retry_on_status:
                print(f"Received status code {retry_on_status}, retrying...")
                retries += 1
                if retries < max_retries:
                    print(f"Retrying in {delay} seconds...")
                    time.sleep(delay)
                    delay = min(delay * 2, max_delay)
                else:
                    raise Exception(f"All retries exhausted for status code {retry_on_status}")
            else:
                response.raise_for_status()  # Raise an exception for HTTP errors other than the specified one
                return response.json()  # Assuming the response is JSON, adjust as needed
        except Exception as e:
            print(f"Attempt {retries + 1}/{max_retries} failed: {e}")
            retries += 1
            if retries < max_retries:
                print(f"Retrying in {delay} seconds...")
                time.sleep(delay)
                delay = min(delay * 2, max_delay)
            else:
                raise

Usar Retry-After

Use los valores en los encabezados para determinar cuándo puede hacer otra solicitud:
  • X-RateLimit-Limit: cuántas solicitudes ha hecho durante el período de tiempo
  • X-RateLimit-Remaining: solicitudes restantes durante el período de tiempo
  • X-RateLimit-Reset: cuándo puede hacer otra solicitud
Tenga en cuenta que si tiene servicios distribuidos accediendo al recurso, aún puede obtener 429, incluso si esperó la cantidad de tiempo especificada en X-RateLimit-Reset. Si está enfrentando este problema, es posible que desee reemplazar esta técnica con el Retroceso exponencial o usarlos juntos, es decir, primero esperar la cantidad de tiempo dada por X-RateLimit-Reset y luego recurrir a reintentos con retroceso exponencial.