Appearance
Errors & Rate Limits
Error Responses
All error responses follow a consistent format:
json
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable error message"
}
}401 Unauthorized
Missing or invalid API key.
json
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or expired API key"
}
}Troubleshooting:
- Verify the header name is exactly
x-partner-api-key - Check the complete API key hasn't been truncated
- Confirm the key hasn't been revoked or expired
- Ensure you're using the correct environment key — staging keys (
flyfru_pk_stag_) only work withhttps://dev-app.flyfruition.com, production keys (flyfru_pk_live_) only work withhttps://app.flyfruition.com - Keys must start with the
flyfru_pk_prefix and are ~45-50 characters long - Check for accidental whitespace in the key value
403 Access Denied
Partner doesn't have access to the requested airport or scope.
json
{
"success": false,
"error": {
"code": "ACCESS_DENIED",
"message": "Partner does not have access to LAX content"
}
}Troubleshooting:
- Verify which airports your partner account has access to
- Check that the "content" scope is enabled for that airport
- Make sure the airport code is correct (e.g.,
DENnotdenver) - Contact your FlyFruition administrator to request additional airport access
429 Rate Limited
Too many requests.
json
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests",
"retryAfter": 45
}
}Troubleshooting:
- Wait for the number of seconds indicated by
retryAfterbefore retrying - Implement exponential backoff in your client (see Best Practices)
- Cache responses to reduce API calls
- Contact FlyFruition to request higher rate limits if needed
500 Internal Error
Server-side error.
json
{
"success": false,
"error": {
"code": "INTERNAL_ERROR",
"message": "Failed to fetch content"
}
}Troubleshooting:
- Retry with exponential backoff
- Check the FlyFruition status page
- Contact support if the error persists
Rate Limits
| Limit | Default | Description |
|---|---|---|
| Per Minute | 100 | Maximum requests per minute per API key |
| Per Day | 10,000 | Maximum requests per day per API key |
Rate Limit Headers
Every response includes these headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per minute |
X-RateLimit-Remaining | Requests remaining in current window |
X-RateLimit-Reset | Unix timestamp when the limit resets |
X-Response-Time | Server response time (e.g., 45ms) |
Retry-After | Seconds to wait (only present on 429 responses) |
Common Issues
No Results Returned
If total is 0 or the results array is empty:
- Search query too specific — try broader terms or remove the
qparameter to see all content - Invalid content type filter — use valid types:
page,news,faq,shopping,dining,amenity,parking-transportation,event - Modified since date too recent — use an older date or remove the filter
- Wrong airport code — verify the code is correct (e.g.,
dennotdenver)
Slow Response Times
If requests are taking more than 3-5 seconds:
- Reduce the
sizeparameter - Use
includeBody=falsefor listing views - Simplify search terms or use content type filters to narrow results
- Check the status page for service issues
Content Issues
Content is outdated — Content syncs from WordPress periodically. Use modifiedSince to check for recent changes. For urgent updates, contact support.
Missing metadata fields — Not all content types have the same metadata schema. Always check if fields exist before using them:
javascript
const phone = item.metadata?.phone_number;
const hours = item.metadata?.hours_of_operation;HTML in content field — The content field contains HTML from WordPress. Strip tags if you need plain text:
javascript
function stripHtml(html) {
return html.replace(/<[^>]*>/g, '');
}CORS Issues (Browser Clients)
If you see Access-Control-Allow-Origin errors:
- Recommended: Call the API from your backend server, not directly from the browser
- Contact FlyFruition to add your domain to the CORS allowlist
- Use a proxy server
SSL/TLS Issues
If you encounter certificate errors:
- Update your SSL/TLS libraries
- Sync your server clock with NTP
- Check proxy/firewall settings
- Never disable SSL verification in production
Encoding Issues
If special characters appear garbled:
- Ensure your client handles UTF-8
- URL-encode query parameters properly:
javascript
const query = 'cafe & terminal';
const url = `/api/v1/partner/DEN/content?q=${encodeURIComponent(query)}`;Debugging Checklist
When encountering issues, verify:
- [ ] API key is complete and not truncated
- [ ] Using the correct environment (staging key for staging URL, production key for production URL)
- [ ] Header name is
x-partner-api-key - [ ] Airport code is valid
- [ ] Partner has access to the requested airport
- [ ] "content" scope is enabled for the airport
- [ ] Rate limits are not exceeded
- [ ] Query parameters are URL-encoded
- [ ] Network connectivity is working
- [ ] No proxy or firewall is blocking requests
Getting Help
If issues persist after troubleshooting:
- Collect information: timestamp of the request, full error message, your partner ID, and the airport code requested
- Contact support: api-support@flyfruition.com
- Check status: https://status.flyfruition.com