Rate Limits & Best Practices
Understanding and respecting API rate limits ensures reliable, high-performance integrations that scale with your prop firm’s growth.
Rate Limit Overview
To prevent things like DDoS attacks, Tradovate limits request rates and imposes time penalties when certain thresholds are triggered. There are request limits on the hour, minute, and second intervals. Generally, the limits are high enough not to hit them during normal operations.
Rate Limit Types
Standard Rate Limits
REST API Endpoints:
Rate Limit Response Format
When limits are exceeded, you may receive different types of responses depending on the endpoint type and severity:
Standard 429 Response
For general rate limit violations, when a limit is reached, the server stops handling requests for a period of time and responds to each new request with a 429 status code.
HTTP Response:
WebSocket Response:
Handling 429 Responses:
- Cannot be resolved programmatically from third-party applications
- Users must wait 1 hour before sending another request
- No p-ticket is provided with 429 responses (unlike penalty tickets)
- Inform users about the 1-hour wait requirement
Penalty Ticket Response
For “novel” operations (infrequently called endpoints like authentication, account signup, password changes), the system may return a penalty ticket in the response body of a successful HTTP response (200 OK). When you receive a penalty ticket, the request was not handled and the server has imposed a time penalty.
Important: Penalty tickets are returned in successful HTTP responses (200 OK), not as 429 errors. Always check the response body for p-ticket fields, even when the HTTP status indicates success.
Handling Penalty Tickets (P-Tickets)
Novel operations that are known to be called infrequently have further constraints placed upon them. These operations include requesting an access token, signing up for an account, changing a password, or changing contact information. These operations are not intended for frequent use.
If a client reaches one of these limits, a special time-penalty response will be issued. This response is a JSON object with the fields "p-ticket" and "p-time". If you receive this response, it means that the request was not handled and the server imposed a time penalty on that request.
Common endpoints that return penalty tickets:
/auth/accesstokenrequest- Authentication requests- Account signup endpoints
- Password change endpoints
- Contact information update endpoints
- Other infrequently used operations
Important: Penalty tickets are returned in successful HTTP responses (200 OK), not as error status codes. You must check the response body for penalty ticket fields, even when the HTTP status indicates success.
Penalty Ticket Response Format
When a penalty ticket is issued, the response body contains:
Response Fields:
p-ticket: Encrypted penalty token tied to your IP address - must be included as an additional parameter in the request body’s JSON when retryingp-time: Penalty duration in seconds - wait this long before retrying the callp-captcha: Whether reCAPTCHA verification is required (optional field) - whentrue, the operation cannot be tried again from a third party application and users should be alerted that they should try the operation again in an hour
Handling Penalty Tickets
When you receive a penalty ticket response:
- Check for
p-captcha: Iftrue, stop immediately and inform users to retry in 1 hour (cannot be resolved programmatically from third-party applications) - Wait
p-timeseconds: The client can retry the call inp-timeseconds - Retry with
p-ticket: Includep-ticketas an additional parameter in the request body’s JSON along with your original request data
Note: One scenario where p-captcha: true can occur is upon too many authentication requests with sent bad data (incorrect username or password).
Key Implementation Notes
Important Points:
- The request was not handled - When you receive a penalty ticket, the server did not process your request
- Penalty tickets are returned in successful HTTP responses (200 OK), not error responses
- Always check the response body for
p-ticketfields, even when the HTTP status is 200 - The client can retry the call in
p-timeseconds - Include
p-ticketas an additional parameter in the request body’s JSON when retrying - If
p-captchaistrue, the operation cannot be tried again from a third party application - users should be alerted to try again in an hour
reCAPTCHA Rate Limiting (p-captcha)
In addition to the p-ticket and p-time fields, there is a field called p-captcha. When this field is marked true, it means the operation that failed cannot be tried again from a third party application and users should be alerted that they should try the operation again in an hour.
reCAPTCHA Response Format
When reCAPTCHA is required, the penalty ticket response includes:
Important: When p-captcha is true, the operation cannot be tried again from a third party application. This typically occurs with “novel” endpoints like /auth/accesstokenrequest that are intended to be used infrequently or through the official Trader application.
Common Scenario: One time this can occur is upon too many authentication requests with sent bad data (incorrect username or password).
Handling reCAPTCHA Lockouts
Critical: When you receive a penalty ticket with p-captcha: true:
- Stop immediately: Do not attempt to retry the request programmatically
- Inform users: Notify users that they must wait 1 hour before retrying
- Do not retry: Cannot be resolved from third-party applications
- Wait full duration: Users should wait the full
p-timeperiod (typically 1 hour)
Best Practices for reCAPTCHA Lockouts
Critical Guidelines:
- Check
p-captchafirst: Always check this field before attempting retries - Immediate Cessation: Stop all retry attempts when
p-captchaistrue - User Communication: Clearly inform users about the 1-hour wait requirement
- Monitor Failed Attempts: Track authentication failures to prevent lockouts
- Valid Credentials Only: Only retry with confirmed correct credentials
Critical Warnings
reCAPTCHA Lockout: When p-captcha: true is present in a penalty ticket response, you MUST stop retry attempts immediately. This cannot be resolved programmatically from third-party applications. Users must wait the full duration (typically 1 hour) before retrying.
Penalty Tickets: When retrying after a penalty ticket, always include the p-ticket field in the request body along with your original request data. The p-ticket is only valid for retrying the same request that generated it.
Authentication Failures: Multiple failed login attempts will trigger increasingly severe rate limits, potentially leading to reCAPTCHA requirements that cannot be bypassed programmatically.
Best Practices Summary
Do’s ✅
- Check response bodies for penalty tickets - Even successful (200 OK) responses may contain
p-ticketfields - Wait the full
p-timeduration before retrying penalty ticket requests - Include
p-ticketin retry requests - Add it to the original request body when retrying - Check
p-captchafirst - Always verify this field before attempting retries - Cache responses appropriately to reduce API calls
- Use batch endpoints when available
- Prioritize critical requests (orders, risk management)
- Set up monitoring and alerting for rate limit usage
- Handle authentication failures gracefully - Track failed attempts to prevent lockouts
Don’ts ❌
- Don’t ignore penalty tickets - Always check response bodies for
p-ticketfields, even on successful responses - Don’t retry when
p-captcha: true- Stop immediately and inform users to wait 1 hour - Don’t retry before waiting
p-timeseconds - Respect the full penalty duration - Don’t forget to include
p-ticket- The retry request must include the penalty ticket - Don’t make unnecessary API calls - Cache when possible to avoid hitting limits
- Don’t exceed rate limits consistently - This may result in temporary blocks or reCAPTCHA requirements
- Don’t implement infinite retry loops - Set maximum retry attempts
- Don’t skip authentication rate limits - These are stricter and may trigger reCAPTCHA
Requesting Higher Limits
For high-volume integrations, you can request increased rate limits:
Eligibility Criteria
- Established partnership with proven integration
- Proper rate limit handling implemented
- Business justification for higher limits
- Technical review of integration architecture
Support
Need help with rate limiting?
- Partner Success Team - Rate limit increase requests
- Support Center - Troubleshooting guides */}

