--- name: flexport-common-errors description: 'Diagnose and fix common Flexport API errors including HTTP status codes, webhook failures, and data validation issues. Trigger: "flexport error", "fix flexport", "flexport not working", "debug flexport API". ' allowed-tools: Read, Grep, Bash(curl:*) version: 1.0.0 license: MIT author: Jeremy Longshore tags: - saas - logistics - flexport compatibility: Designed for Claude Code --- # Flexport Common Errors ## Overview Quick reference for the most common Flexport API v2 errors. The API returns standard HTTP codes with JSON error bodies containing `code`, `message`, and sometimes `details` fields. ## Error Reference ### 401 Unauthorized — Invalid or Missing API Key ```json { "error": { "code": "UNAUTHORIZED", "message": "Invalid API key" } } ``` **Causes:** Missing `Authorization` header, expired JWT token, revoked API key. **Fix:** ```bash # Verify key is set echo $FLEXPORT_API_KEY | head -c 10 # Test with cURL curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer $FLEXPORT_API_KEY" \ -H "Flexport-Version: 2" \ https://api.flexport.com/shipments?per=1 ``` ### 403 Forbidden — Insufficient Permissions **Causes:** API key lacks required scope, IP whitelist blocking, sandbox key used on production. **Fix:** Check key permissions in Flexport Portal > Settings > Developer. Ensure key scope includes the endpoint you are calling. ### 404 Not Found — Resource Does Not Exist ```json { "error": { "code": "NOT_FOUND", "message": "Shipment shp_xxx not found" } } ``` **Causes:** Wrong ID format, resource deleted, using test ID in production. **Fix:** List resources first to get valid IDs: ```bash curl -s -H "Authorization: Bearer $FLEXPORT_API_KEY" \ -H "Flexport-Version: 2" \ https://api.flexport.com/shipments?per=1 | jq '.data.records[0].id' ``` ### 422 Unprocessable Entity — Validation Failed ```json { "error": { "code": "VALIDATION_ERROR", "message": "Invalid port code", "details": [...] } } ``` **Common validation failures:** | Field | Issue | Fix | |-------|-------|-----| | `origin_port.code` | Not a valid UN/LOCODE | Use `CNSHA`, `USLAX`, `DEHAM` format | | `hs_code` | Wrong format | Use 6-10 digit codes like `8479.89` | | `cargo_ready_date` | In the past | Use future ISO date | | `freight_type` | Unsupported value | Use `ocean`, `air`, or `trucking` | | `incoterm` | Invalid | Use `FOB`, `CIF`, `EXW`, `DDP` | ### 429 Too Many Requests — Rate Limited ```json { "error": { "code": "RATE_LIMITED", "message": "Rate limit exceeded" } } ``` **Fix:** Check response headers and back off: ```typescript function handleRateLimit(res: Response): number { const retryAfter = res.headers.get('Retry-After'); const remaining = res.headers.get('X-RateLimit-Remaining'); console.log(`Rate limited. Remaining: ${remaining}. Retry after: ${retryAfter}s`); return parseInt(retryAfter || '60') * 1000; } ``` ### 500/502/503 — Server Errors **Causes:** Flexport internal issue, maintenance window, upstream provider failure. **Fix:** ```bash # Check Flexport status page curl -s https://status.flexport.com/api/v2/status.json | jq '.status' ``` Retry with exponential backoff for transient 5xx errors. See `flexport-rate-limits`. ## Diagnostic Script ```bash #!/bin/bash echo "=== Flexport Diagnostics ===" echo "API Key set: ${FLEXPORT_API_KEY:+YES}" echo "Key prefix: ${FLEXPORT_API_KEY:0:8}..." echo -n "API status: " curl -s -o /dev/null -w "%{http_code}" \ -H "Authorization: Bearer $FLEXPORT_API_KEY" \ -H "Flexport-Version: 2" \ https://api.flexport.com/shipments?per=1 echo "" echo -n "Status page: " curl -s https://status.flexport.com/api/v2/status.json | jq -r '.status.description' ``` ## Escalation Path 1. Run diagnostic script above 2. Collect request ID from response headers (`X-Request-Id`) 3. Check [Flexport Status](https://status.flexport.com) 4. Contact Flexport support with request ID and error details ## Resources - [Flexport API Reference](https://apidocs.flexport.com/) - [Flexport Status Page](https://status.flexport.com) - [Developer Portal](https://developers.flexport.com/) ## Next Steps For comprehensive debugging, see `flexport-debug-bundle`.