/auctions y /events de Topsort o las APIs, clasificados por código de estado HTTP:
4xx: Problema en la solicitud5xx: Problema del servicio de Topsort
Ambos errores devuelven arrays JSON que contienen objetos de error con los campos: errCode, docUrl y un mensaje opcional.
| Campo | Tipo | Descripción |
|---|---|---|
| errCode | string | Una cadena corta que identifica únicamente el problema. |
| docUrl | string | Un enlace a esta documentación que proporciona más información sobre el error. |
| message | string | Opcional. 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ódigo | Descripción | Detalles | ||
|---|---|---|---|---|
| 400 | Bad Request | Solicitud inaceptable, es decir, formato incorrecto | ||
| 403 | Forbidden/Unauthorized | Problema con la API key o tokens faltantes | ||
| 404 | Not Found | El 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) | ||
| 422 | Unprocessable Entity | Desajuste 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 | ||
| 429 | Rate Limit Exceeded | Se 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 Error | Descripción |
|---|---|
| bad_request | No se pudo analizar la solicitud; verifique la especificación OpenAPI para el esquema correcto. |
| empty_request | La solicitud está vacía; verifique la especificación OpenAPI para el esquema correcto. |
| internal_server_error | Problema inesperado del servidor; nuestro equipo generalmente soluciona estos problemas rápidamente. |
| invalid_api_key | API key faltante, inválida o expirada; consulte authentication para más detalles. |
| invalid_auction_id | El ID de subasta no corresponde a una subasta; asegúrese de pasar un ID de subasta válido en la solicitud. |
| invalid_event_type | El tipo de evento debe ser “Impression”, “Click” o “Purchase”. |
| invalid_promotion_type | Tipos de promoción inválidos en el campo slots. |
| invalid_session | El objeto session debe contener un sessionId no vacío. |
| missing_aspect_ratio | Falta la relación de aspecto requerida para anuncios de banner. |
| missing_auctions | Debe especificarse al menos una subasta. |
| missing_context | Falta el contexto requerido; especifique una categoría, lista de productos o consulta de búsqueda. |
| missing_placement | Falta el campo de placement o placement.page requerido. |
| missing_product_id | Falta productId. |
| missing_promotion_type | Una subasta debe solicitar slots para al menos un tipo de promoción. |
| missing_purchased_at | Falta el campo purchasedAt requerido. |
| missing_session | Falta el campo session requerido. |
| missing_slots | Falta el campo slots requerido. |
| no_products | Debe especificarse al menos un producto. |
| no_purchase_items | Debe comprarse al menos un artículo. |
| purchase_item_quantity_less_or_equal_than_zero | Un artículo de compra tiene una cantidad menor o igual a cero. |
| resolved_bid_id_not_found | El ID de oferta resuelto proporcionado no coincide con un registro interno. |
| too_few_impressions | Debe incluirse al menos una impresión. |
| too_few_slots | Debe especificarse al menos un slot en una subasta. |
| too_many_auctions | Se 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.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 tiempoX-RateLimit-Remaining: solicitudes restantes durante el período de tiempoX-RateLimit-Reset: cuándo puede hacer otra solicitud
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.