Errors
When working with Topsort’s APIs, you may encounter various error responses. This comprehensive guide helps you understand, diagnose, and resolve common issues.Quick Navigation
- HTTP Status Codes - Overview of 4xx and 5xx errors
- Specific Error Codes - Detailed list of Topsort error codes
- Debugging Tips - How to troubleshoot effectively
How Errors Work
Topsort APIs return errors as JSON arrays containing error objects with these fields:| Field | Type | Description |
|---|---|---|
errCode | string | A short string uniquely identifying the problem. |
docUrl | string | A link to this documentation providing more information about the error. |
message | string | Optional. If present, human-readable explanation of or details about the error. The string for a given error may change over time; code should not parse or dispatch based on particular values for this field. |
Error Codes and Meanings
The following table shows HTTP status codes you’ll encounter and what they mean:| Code | Description | Details |
|---|---|---|
400 | Bad Request | Unacceptable request, i.e. Incorrect formatting |
403 | Forbidden/Unauthorized | API key issue or missing tokens |
404 | Not Found | The server cannot find the requested resource. Either the request URL is not on our routes, or the resource is not available (ie. the requested campaign does not exist) |
422 | Unprocessable Entity | Mismatched request body and model, i.e, you are missing a property, or API is expecting a date but received a number |
429 | Rate Limit Exceeded | IP-based rate limit reached. This error comes with following headers: - X-RateLimit-Limit: total number of requests allowed for the time period - X-RateLimit-Remaining: remaining number of requests for the time period - X-RateLimit-Reset: when you can make another request |
Error Codes
| Error Code | Description |
|---|---|
bad_request | Request couldn’t be parsed; check the OpenAPI specification for the correct schema. |
empty_request | Request is empty; check the OpenAPI specification for the correct schema. |
internal_server_error | Unexpected server problem; our team typically fixes these issues quickly. |
invalid_api_key | Missing, invalid, or expired API key; see authentication for details. |
invalid_auction_id | Auction ID doesn’t correspond to an auction; ensure a valid auction ID is passed in the request. |
invalid_event_type | Event type must be “Impression”, “Click”, or “Purchase”. |
invalid_promotion_type | Invalid promotion types in slots field. |
invalid_session | session object must contain a non-empty sessionId. |
missing_auctions | At least one auction must be specified. |
missing_context | Required context missing; specify a category, product list, or search query. |
missing_placement | Required placement or placement.page field is missing. |
missing_product_id | productId missing. |
missing_promotion_type | An auction must request slots for at least one promotion type. |
missing_purchased_at | Required purchasedAt field missing. |
missing_session | Required session field missing. |
missing_slot_id | Required slotId field missing. |
missing_slots | Required slots field missing. |
no_products | At least one product must be specified. |
no_purchase_items | At least one item must be purchased. |
purchase_item_quantity_less_or_equal_than_zero | A purchase item has a quantity of less than or equal to zero. |
resolved_bid_id_not_found | Provided resolved bid ID doesn’t match an internal record. |
too_few_impressions | At least one impression must be included. |
too_few_slots | At least one slot must be specified in an auction. |
too_many_auctions | Maximum of 5 auctions can run in parallel; contact your KAM to increase this limit. |
Debugging Tips
Getting More Error Details
Some endpoints return detailed validation errors:Common Integration Issues
Events returning 200 but not appearing in dashboard:- Check
occurredAtis within last 30 days - Verify product exists in catalog
- Confirm event type is spelled correctly (
click, notClick)
- Verify active campaigns exist
- Check campaign has budget remaining (most common issue)
- Verify account balance is positive
- Confirm products are in stock and active
- Check bid amounts aren’t too low
- See our Attribution Troubleshooting Guide for detailed debugging steps
Using Developer Logs for Debugging
Check the Dev Tools tab in your Ad Platform for detailed API request/response logs. See our Developer Logs guide for help interpreting log entries and common error patterns.Handling rate limiting
Our endpoints - except making calls to/auctions or /events - are rate-limited to prevent abuse. If you exceed the rate limit, you will receive a 429 error response. There are two recommended ways to handle these limits
Retry with exponential back-off
Exponential backoff retry is a technique used in programming to retry an operation with increasing intervals between retries, which helps to mitigate issues such as network latency, temporary failures, or resource constraints. Below there is a code example in Python on how the technique can be implemented.Use Retry-After
Use the values in the headers to determine when you can make another request:
X-RateLimit-Limit: how many requests you have made during the time periodX-RateLimit-Remaining: remaining request during the time periodX-RateLimit-Reset: when you can make another request
If you have distributed services hitting the resource, you can still get
429, even if you waited the time amount specified in X-RateLimit-Reset. If you
are hitting this problem, you may want to either replace this technique with the
Exponential back-off or use them together, that is, first waiting the amount of
time given by X-RateLimit-Reset and then fall-back to exponential back-off retries.Connection and Network Issues
Connection Refused/Timeout Errors
Symptoms:Connection refusedorConnection timeouterrors- Requests hanging indefinitely
- Intermittent connectivity issues
Network Connectivity
- Check internet connection and DNS resolution
- Test with curl:
curl -I https://api.topsort.com - Verify API endpoint URLs are correct
Firewall/Proxy Issues
- Whitelist Topsort domains:
api.topsort.com*.topsort.com
- Allow outbound HTTPS (port 443) traffic
- Configure proxy settings if your network requires them
SSL/TLS Certificate Problems
- Update your HTTP client to support modern TLS versions
- Check certificate validation - ensure your system trusts standard CAs
- Test with OpenSSL:
openssl s_client -connect api.topsort.com:443
Request Timeout Issues
Solutions:- Increase timeout values in your HTTP client
- Implement retry logic with exponential backoff
- Check for large request payloads that might exceed limits
Regional Connectivity Issues
If you’re experiencing connectivity issues from specific regions:- Test from different locations to isolate regional problems
- Use a CDN or proxy service if needed for your region
- Contact support with your location details for assistance
Basic Connectivity Test
Test basic connectivity to Topsort’s API:Troubleshooting Checklist
When experiencing connection issues:- Test basic connectivity: Can you reach
api.topsort.com? - Check firewall rules: Are outbound HTTPS requests allowed?
- Verify API endpoint: Are you using the correct URL?
- Test with minimal request: Does a simple connectivity test work?
- Check our status page: topsort.statuspage.io
- Review proxy settings: Are corporate proxies interfering?
- Update TLS support: Is your client using modern TLS versions?
Need More Help?
If you’re still experiencing issues after consulting this guide:- Check our status page at topsort.statuspage.io for service updates
- Contact support with your error details and API request for faster resolution
- Review our API documentation for endpoint-specific requirements and examples
Last updated: