This guide helps you diagnose the most common integration failures across the TradeWatch REST and WebSocket APIs. Start with the error or symptom you see, then follow the recovery steps.Documentation Index
Fetch the complete documentation index at: https://tradewatch.io/docs/llms.txt
Use this file to discover all available pages before exploring further.
Quick checks
Before debugging a specific error, verify the basics:- Confirm you are using the correct base URL for the API you are calling.
- Confirm your API key is present and has not been revoked.
- Confirm the symbol and endpoint belong to the same asset class.
- Confirm your account plan includes the feature you are trying to use.
- Check the System Status page for active incidents.
Common HTTP errors
401 Unauthorized
What it usually means
Your request did not include a valid API key, or the key could not be accepted.
Common causes
- The
api-keyvalue is missing. - The API key is misspelled, truncated, or contains extra whitespace.
- The API key was revoked and replaced.
- Your application is reading the wrong environment variable.
- Generate or reveal the active key in the API keys dashboard.
- Verify the exact key value your application sends.
- Retry the request with a minimal test call.
- If the key is old or exposed, revoke it and create a new one.
403 Forbidden
What it usually means
The request is authenticated, but your account is not allowed to use that feature.
Common causes
- Your plan does not include the endpoint or data product.
- Your plan does not include WebSocket access.
- The requested feature is restricted to a higher tier.
- Confirm your plan and entitlements in the dashboard.
- Compare the feature you need with your subscription.
- If needed, upgrade the plan or contact support.
404 Not Found
What it usually means
The route or requested resource does not exist.
Common causes
- The path is incorrect.
- The asset class is wrong for the endpoint.
- The symbol is not supported.
- The request is using an outdated route from an old integration.
- Recheck the endpoint in the API reference.
- Confirm the symbol exists in the relevant Symbols catalog.
- Verify that the endpoint and symbol belong to the same product family.
- Retry with a known-good example from the docs.
429 Too Many Requests
What it usually means
Your application exceeded one or more platform rate or connection limits.
Common causes
- Request bursts without throttling.
- Aggressive polling for data better suited to WebSocket streaming.
- Multiple services sharing the same IP and quota.
- Automatic retries without backoff.
- Stop sending immediate retries.
- Add exponential backoff with jitter.
- Reduce polling frequency where possible.
- Move real-time workloads to WebSocket if you need continuous updates.
- Review the Limits page.
429 responses. If your workload is sustained rather than bursty, lower the steady-state request rate instead of only retrying more slowly.
Common WebSocket issues
Connection closes immediately
What it usually means The handshake succeeded or partially succeeded, but the session could not stay open. Common causes- Missing or invalid
api-keyheader. - Connecting to the wrong WebSocket URL.
- Your plan does not include streaming access.
- The service is unavailable during an incident or maintenance window.
- Verify the WebSocket URL is
wss://api.tradewatch.io/.... - Verify the
api-keyheader is present and valid. - Confirm WebSocket access is included in your plan.
- Check the System Status page.
Subscriptions succeed but no market data arrives
What it usually means Your connection is open, but the requested instruments are inactive or simply not producing updates at that moment. Common causes- Subscribing to the wrong channel for the instrument type.
- Expecting continuous ticks for instruments that are currently inactive.
- Confirm the channel matches the asset class you are subscribing to.
- Test with a small set of known, liquid symbols first.
- Keep the connection open long enough to observe updates.
Connection drops after running for a while
What it usually means The session was interrupted by network instability, client timeout handling, or platform-side protection. Common causes- Your client does not handle ping/pong correctly.
- The client reconnects too aggressively after transient failures.
- Make sure your client responds to ping frames with pong frames.
- Implement reconnect logic with exponential backoff.
- Re-send subscriptions after reconnecting.
- Log close codes and disconnect frequency so you can distinguish local network issues from server-side failures.
Invalid symbols
If an endpoint or subscription fails for only some instruments, invalid or unsupported symbols are the most likely cause. Common causes- Using
EUR/USDwhen the API expectsEURUSD - Mixing stock tickers with forex or crypto endpoints
- Using a symbol that is not in the supported catalog
- Using exchange-specific assumptions that do not match TradeWatch naming
- Look up the instrument in the Symbols pages.
- Copy the symbol format exactly as documented.
- Test one symbol at a time before sending large batches.
- If a symbol used to work and no longer does, check the Support page and contact support with the exact symbol and endpoint.
Troubleshooting workflow
When an issue is unclear, use this sequence:- Reproduce the issue with a minimal request or one-symbol WebSocket subscription.
- Confirm the API key, base URL, and endpoint path.
- Verify the symbol in the documentation.
- Check your plan entitlements.
- Check the System Status page.
- If the issue persists, contact support with the endpoint, symbol, timestamp, and full error response.
When to contact support
Contact support if:- A documented endpoint returns an unexpected
404 - A valid API key consistently returns
401 - You see repeated
429responses even after throttling - Valid symbols subscribe successfully but never produce data
- Disconnects continue after you implement ping/pong handling and reconnect backoff
- Endpoint or WebSocket channel
- Symbol or symbols involved
- Approximate timestamp of the failure
- HTTP status code or WebSocket close behavior
- Sanitized request example
- Any response body or error payload
