From flexport-pack
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".
How this skill is triggered — by the user, by Claude, or both
Slash command
/flexport-pack:flexport-common-errorsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
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.
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": { "code": "UNAUTHORIZED", "message": "Invalid API key" } }
Causes: Missing Authorization header, expired JWT token, revoked API key.
Fix:
# 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
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.
{ "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:
curl -s -H "Authorization: Bearer $FLEXPORT_API_KEY" \
-H "Flexport-Version: 2" \
https://api.flexport.com/shipments?per=1 | jq '.data.records[0].id'
{ "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 |
{ "error": { "code": "RATE_LIMITED", "message": "Rate limit exceeded" } }
Fix: Check response headers and back off:
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;
}
Causes: Flexport internal issue, maintenance window, upstream provider failure.
Fix:
# 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.
#!/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'
X-Request-Id)For comprehensive debugging, see flexport-debug-bundle.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub flight505/skill-forge --plugin flexport-pack