Errors
All errors use this shape:
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits to add this lead.",
"details": {}
}
}
Branch on error.code, not only HTTP status.
HTTP status
| Status | When |
|---|---|
| 200 | Success |
| 400 | Validation |
| 401 | Missing / invalid key |
| 403 | Plan required, insufficient credits, Sales Nav required, account disconnected |
| 404 | Unknown campaign / lead |
| 409 | Conflict (e.g. wrong campaign state for start/pause) |
| 429 | Rate limit or LinkedIn daily quota |
| 502 / 503 | Temporary upstream failure |
Success bodies are top-level JSON (no { "data": ... } wrapper).
Error codes
| Code | Meaning |
|---|---|
unauthorized | Bad or missing API key |
plan_required | Plan not eligible for API |
validation_error | Bad body/query (unknown fields, bad URL, bad cursor) |
not_found | Unknown resource |
conflict | Wrong campaign state (start/pause not allowed for current status) |
insufficient_credits | Need credits to insert lead |
account_disconnected | LinkedIn account not usable |
sales_nav_required | Sales Nav search without SN account |
rate_limited | RPM / burst limit |
linkedin_daily_quota | Daily LinkedIn quota |
send_failed | Message send failed |
upstream_unavailable | Temporary failure |