This article documents the internal/technical error codes the Tryon API can return. These errors are different from the user-facing errors 1001–1008: they indicate problems at the integration or infrastructure level and are most useful for developers and store administrators troubleshooting an integration.
End customers will not normally see these messages — the widget catches them and shows a generic "Something went wrong" message. To diagnose, inspect the browser's network tab and look at the API response body to find the code field.
Looking for the user-facing errors?
For errors 1001–1008 (the numbered errors customers see), check the Tryon error code list.
Complete reference
| HTTP | Code | What it means | How to resolve |
|---|---|---|---|
401 | missing_license_key | The API request did not include a license key in the headers. | Verify the widget integration includes the license key in every request. If using the official Tryon widget, ensure your store PIN is correctly configured in the embed snippet. |
404 | license_not_found | The provided license key does not match any active store. | Confirm the PIN/license key in your embed code matches the one shown in your dashboard. If the store was recently deleted or the subscription cancelled, the key will stop working. |
400 | missing_customer_uuid | The request did not include a customer UUID identifying the visitor. | Make sure your widget integration generates and sends a unique customer UUID for every session. The official widget handles this automatically. |
400 | missing_customer_type | The customer type (guest, registered, buyer) was not provided in the request. | Check the widget configuration. The customer type must be one of: guest, registered, or buyer. Contact support if you cannot determine the correct value. |
400 | invalid_customer_type | The customer type sent in the request is not one of the accepted values. | Accepted values are exactly: guest, registered, or buyer. Any other string (or different casing) will be rejected. |
400 | missing_recaptcha_token | The reCAPTCHA token is required but was not included in the request. | If your widget has reCAPTCHA enabled, make sure the recaptcha_site_key is configured and the token is being generated client-side before the request is made. |
400 | missing_required_parameters | One or more required parameters are missing from the request body. | Inspect the network request to identify which field is missing. Common culprits: product_id, customer_uuid, customer_type, or photo data. Contact support with the request payload if you cannot identify the issue. |
400 | invalid_json | The request body could not be parsed as valid JSON. | Usually a bug in custom integrations that build the request manually. Validate the JSON payload with a linter, or use the official widget which handles serialization automatically. |
400 | invalid_feedback | The submitted feedback payload contains invalid values (e.g. rating out of range). | Feedback ratings must be valid values (typically 1 or -1 / positive or negative). Review your integration code that builds the feedback request. |
404 | settings_not_found | The store's settings could not be loaded. | Open your dashboard and verify that the store exists and your subscription is active. If the issue persists, contact support — it may indicate a backend data issue. |
404 | product_not_found | The product_id sent in the request does not exist in this store. | Verify the product exists in Dashboard → Products and is set to ACTIVE. If you imported products from an e-commerce platform, confirm the import finished successfully. |
404 | job_not_found | The generation job ID referenced in the request does not exist or has expired. | Jobs are short-lived. If you are polling a job result, ensure you start a fresh generation rather than reusing an old job ID. Most often this means a stale browser tab — refreshing the widget should fix it. |
404 | image_not_found | The requested image (e.g. a previously generated photo) could not be located in storage. | If the image was generated long ago, it may have been deleted from storage according to your retention policy. Generate a new photo to replace it. |
409 | feedback_already_submitted | The customer has already submitted feedback for this generated photo. | Each photo accepts only one feedback rating per customer. If the customer wants to change their rating, this is not currently supported — only the first submission is recorded. |
403 | cors_origin_not_allowed | The request originated from a domain that is not on the store's allowed origins list. | In Dashboard → E-commerce, add the domain where the widget is embedded to the allowed origins list. Subdomains and protocol must match exactly (https://shop.example.com is different from https://www.shop.example.com). |
429 | rate_limited | Too many requests were sent in a short period of time from this client/IP. | Wait a few seconds and try again. If you're integrating programmatically, add exponential backoff between retries. Persistent rate limiting from real user traffic may indicate abuse — contact support. |
500 | internal_server_error | An unexpected error occurred on Tryon's backend infrastructure. | This is rarely caused by your integration. Retry the request after a few seconds. If the error persists, contact [email protected] with your store PIN and the approximate time of the error. |
How to find the error code in a real request
- Open your browser's Developer Tools (F12 or Ctrl+Shift+I / Cmd+Opt+I).
- Go to the Network tab and reproduce the action that triggered the error.
- Click the failed request (red status) and open the Response tab.
- Look for a JSON field named
code— that's the value matching the table above.
Need more help?
If none of the resolutions above fix the issue, contact [email protected] with: the error code, your store PIN, the time of the error, and (ideally) a screenshot of the network request response.