Developers
Errors And Limits
Error codes, status codes and rate limits.
Error Shape
{ "error": { "code": "validationFailed", "message": "Send the dayId to add this stop to.", "details": { "field": "dayId" } } }Branch on code, never on message.
| Code | Status | Meaning |
|---|---|---|
unauthenticated | 401 | Missing or expired token |
forbidden | 403 | Missing scope, or a Travelyfe-apps-only route |
subscriptionRequired | 403 | The traveller needs Travelyfe Pro |
aiConsentRequired | 403 | The traveller hasn't turned on AI imports |
notFound | 404 | Doesn't exist or isn't visible to this traveller |
itineraryModified | 409 | Out-of-date ETag |
duplicateItinerary | 409 | Same destination and date already exists |
conflict | 409 | Conflicts with the current state |
itineraryTooLarge | 413 | The itinerary document is too big |
validationFailed | 422 | Bad input; details.field names it |
idempotencyKeyReused | 422 | Same key, different body |
imageRejected | 422 | The image couldn't be used |
documentNotSealed | 422 | A document wasn't encrypted before upload |
bookingLimitReached | 422 | Too many bookings on the itinerary |
publishBlocked | 422 | Not ready to publish |
preconditionRequired | 428 | Send If-Match |
rateLimited | 429 | Slow down |
upstreamFailed | 502 | A service behind the API didn't answer |
Rate Limits
Limits are per token, per minute, by kind of request:
| Bucket | Requests per minute |
|---|---|
| Read | 120 |
| Search | 30 |
| Write | 60 |
| Image | 20 |
| Document | 10 |
Each response includes RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. When you get 429, wait until the reset time.